@chatcode/cco-better-sidebar 0.18.0-alpha.3 → 0.18.0-rc.2
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.md +3 -3
- package/README_EN.md +3 -3
- package/cordis.patch.yml +6 -5
- package/lib/client-editor.js +10678 -262
- package/lib/client-mermaid.js +10703 -290
- package/lib/client-registry.js +2292 -1654
- package/lib/client-terminal.js +261 -261
- package/lib/client.js +2296 -1658
- package/lib/index.js +61 -40
- package/lib/types/client/builtins/tabs.d.ts +9 -0
- package/lib/types/client/icons.d.ts +26 -8
- package/lib/types/client/service.d.ts +1 -1
- package/lib/types/config.d.ts +4 -3
- package/lib/types/context-types.d.ts +12 -14
- package/lib/types/prefs-shared.d.ts +1 -1
- package/lib/types/ui-tweaks/index.d.ts +2 -3
- package/package.json +3 -2
- package/src/client/BrowserView.tsx +1 -1
- package/src/client/DiffTab.tsx +1 -1
- package/src/client/EditorHost.tsx +1 -1
- package/src/client/FileTree.tsx +10 -5
- package/src/client/FreeWindow.tsx +2 -1
- package/src/client/GitView.tsx +7 -3
- package/src/client/SideCardSection.tsx +2 -8
- package/src/client/Sidebar.tsx +2 -2
- package/src/client/TabBar.tsx +2 -4
- package/src/client/TextEditor.tsx +2 -1
- package/src/client/TreePanel.tsx +1 -2
- package/src/client/UsageHeatmapSection.tsx +1 -1
- package/src/client/builtins/tabs.tsx +9 -2
- package/src/client/builtins/viewers.tsx +2 -1
- package/src/client/icons.tsx +57 -4
- package/src/client/intercept.tsx +1 -1
- package/src/client/md-toc.tsx +1 -1
- package/src/client/mermaid.tsx +2 -1
- package/src/client/open-with-settings.tsx +1 -1
- package/src/client/service.ts +1 -1
- package/src/client/ui-tweaks/branding.tsx +48 -3
- package/src/client/ui-tweaks/index.tsx +3 -3
- package/src/config.ts +22 -2
- package/src/context-types.ts +5 -15
- package/src/index.ts +22 -20
- package/src/prefs-shared.ts +1 -1
- package/src/ui-tweaks/config.ts +1 -1
- package/src/ui-tweaks/index.ts +7 -13
package/lib/client-registry.js
CHANGED
|
@@ -29,8 +29,8 @@ window.__ModuleLoader__.load({
|
|
|
29
29
|
let react = require("react");
|
|
30
30
|
react = __toESM(react, 1);
|
|
31
31
|
let react_dom_client = require("react-dom/client");
|
|
32
|
-
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
33
32
|
let react_jsx_runtime = require("react/jsx-runtime");
|
|
33
|
+
let _deepseek_ai_dsh_client_ui_primitives = require("@deepseek-ai/dsh-client-ui-primitives");
|
|
34
34
|
let react_dom = require("react-dom");
|
|
35
35
|
/** The title-bar / shell compatibility schemes (see {@link SidebarPrefs.titleBarScheme}). */
|
|
36
36
|
const TITLE_BAR_SCHEMES = [
|
|
@@ -1503,7 +1503,7 @@ window.__ModuleLoader__.load({
|
|
|
1503
1503
|
* The plugin version this service instance reports. Keep in lockstep with
|
|
1504
1504
|
* `package.json`'s version — `tests/service.spec.ts` asserts the pair.
|
|
1505
1505
|
*/
|
|
1506
|
-
const SIDEBAR_SERVICE_VERSION = "0.18.0-alpha.
|
|
1506
|
+
const SIDEBAR_SERVICE_VERSION = "0.18.0-alpha.4";
|
|
1507
1507
|
/**
|
|
1508
1508
|
* Monotonic capability list consumers use to gate new API usage (features
|
|
1509
1509
|
* are never removed). Each string names a v0.12.0+ capability:
|
|
@@ -10770,1528 +10770,906 @@ window.__ModuleLoader__.load({
|
|
|
10770
10770
|
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
10771
10771
|
}
|
|
10772
10772
|
//#endregion
|
|
10773
|
-
//#region
|
|
10774
|
-
|
|
10775
|
-
|
|
10776
|
-
|
|
10777
|
-
|
|
10778
|
-
|
|
10779
|
-
|
|
10780
|
-
|
|
10781
|
-
|
|
10782
|
-
|
|
10783
|
-
|
|
10784
|
-
|
|
10785
|
-
|
|
10786
|
-
|
|
10787
|
-
|
|
10788
|
-
|
|
10789
|
-
|
|
10790
|
-
|
|
10791
|
-
|
|
10792
|
-
|
|
10793
|
-
|
|
10794
|
-
|
|
10795
|
-
|
|
10796
|
-
return
|
|
10773
|
+
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/lib/iconContext.mjs
|
|
10774
|
+
var DefaultContext = {
|
|
10775
|
+
color: void 0,
|
|
10776
|
+
size: void 0,
|
|
10777
|
+
className: void 0,
|
|
10778
|
+
style: void 0,
|
|
10779
|
+
attr: void 0
|
|
10780
|
+
};
|
|
10781
|
+
var IconContext = react.default.createContext && /*#__PURE__*/ react.default.createContext(DefaultContext);
|
|
10782
|
+
//#endregion
|
|
10783
|
+
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/lib/iconBase.mjs
|
|
10784
|
+
var _excluded = [
|
|
10785
|
+
"attr",
|
|
10786
|
+
"size",
|
|
10787
|
+
"title"
|
|
10788
|
+
];
|
|
10789
|
+
function _objectWithoutProperties(e, t) {
|
|
10790
|
+
if (null == e) return {};
|
|
10791
|
+
var o, r, i = _objectWithoutPropertiesLoose(e, t);
|
|
10792
|
+
if (Object.getOwnPropertySymbols) {
|
|
10793
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
10794
|
+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
10795
|
+
}
|
|
10796
|
+
return i;
|
|
10797
10797
|
}
|
|
10798
|
-
|
|
10799
|
-
|
|
10800
|
-
|
|
10801
|
-
|
|
10802
|
-
|
|
10803
|
-
|
|
10804
|
-
|
|
10805
|
-
|
|
10806
|
-
* case-insensitive volumes) may arrive with different casing than the cwd
|
|
10807
|
-
* row, and the containment decision must not depend on it. The returned
|
|
10808
|
-
* relative text keeps the caller's own casing.
|
|
10809
|
-
*/
|
|
10810
|
-
function relativeTo(cwd, path) {
|
|
10811
|
-
const base = cwd.replace(/[\\/]+$/, "");
|
|
10812
|
-
const norm = (value) => value.replace(/\\/g, "/");
|
|
10813
|
-
const nBase = norm(base);
|
|
10814
|
-
const nPath = norm(path);
|
|
10815
|
-
if (nPath === nBase) return ".";
|
|
10816
|
-
if (nPath.toLowerCase().startsWith(`${nBase.toLowerCase()}/`)) return nPath.slice(nBase.length + 1);
|
|
10817
|
-
return path;
|
|
10798
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
10799
|
+
if (null == r) return {};
|
|
10800
|
+
var t = {};
|
|
10801
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
10802
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
10803
|
+
t[n] = r[n];
|
|
10804
|
+
}
|
|
10805
|
+
return t;
|
|
10818
10806
|
}
|
|
10819
|
-
|
|
10820
|
-
|
|
10821
|
-
|
|
10822
|
-
|
|
10823
|
-
|
|
10824
|
-
|
|
10825
|
-
|
|
10826
|
-
|
|
10827
|
-
const norm = (value) => value.replace(/[\\/]+/g, "/").replace(/\/$/, "");
|
|
10828
|
-
const b = norm(base);
|
|
10829
|
-
const t = norm(target);
|
|
10830
|
-
const lb = b.toLowerCase();
|
|
10831
|
-
const lt = t.toLowerCase();
|
|
10832
|
-
return lt === lb || lt.startsWith(`${lb}/`);
|
|
10807
|
+
function _extends() {
|
|
10808
|
+
return _extends = Object.assign ? Object.assign.bind() : function(n) {
|
|
10809
|
+
for (var e = 1; e < arguments.length; e++) {
|
|
10810
|
+
var t = arguments[e];
|
|
10811
|
+
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
10812
|
+
}
|
|
10813
|
+
return n;
|
|
10814
|
+
}, _extends.apply(null, arguments);
|
|
10833
10815
|
}
|
|
10834
|
-
|
|
10835
|
-
|
|
10836
|
-
|
|
10837
|
-
|
|
10838
|
-
|
|
10839
|
-
|
|
10840
|
-
|
|
10841
|
-
|
|
10842
|
-
|
|
10843
|
-
*/
|
|
10844
|
-
/** Paths a tool-result view reports as produced, by render intent. */
|
|
10845
|
-
function producedPaths(view) {
|
|
10846
|
-
if (view === null || typeof view !== "object") return [];
|
|
10847
|
-
const record = view;
|
|
10848
|
-
if (!(record.card === "diff" || record.card === "generic" && record.kind === "edit")) return [];
|
|
10849
|
-
if (!Array.isArray(record.locations)) return [];
|
|
10850
|
-
const paths = [];
|
|
10851
|
-
for (const location of record.locations) if (location !== null && typeof location === "object" && typeof location.path === "string") paths.push(location.path);
|
|
10852
|
-
return paths;
|
|
10816
|
+
function ownKeys(e, r) {
|
|
10817
|
+
var t = Object.keys(e);
|
|
10818
|
+
if (Object.getOwnPropertySymbols) {
|
|
10819
|
+
var o = Object.getOwnPropertySymbols(e);
|
|
10820
|
+
r && (o = o.filter(function(r) {
|
|
10821
|
+
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
10822
|
+
})), t.push.apply(t, o);
|
|
10823
|
+
}
|
|
10824
|
+
return t;
|
|
10853
10825
|
}
|
|
10854
|
-
|
|
10855
|
-
|
|
10856
|
-
|
|
10857
|
-
|
|
10858
|
-
|
|
10859
|
-
|
|
10860
|
-
|
|
10861
|
-
|
|
10862
|
-
function producedForClosing(nodes, seq) {
|
|
10863
|
-
let pending = [];
|
|
10864
|
-
let seen = /* @__PURE__ */ new Set();
|
|
10865
|
-
let turn;
|
|
10866
|
-
for (const node of nodes) {
|
|
10867
|
-
if (node === null || typeof node !== "object") continue;
|
|
10868
|
-
const record = node;
|
|
10869
|
-
if (record.kind === "tool-result") {
|
|
10870
|
-
if (record.isError === true) continue;
|
|
10871
|
-
for (const path of producedPaths(record.callView)) {
|
|
10872
|
-
if (seen.has(path)) continue;
|
|
10873
|
-
seen.add(path);
|
|
10874
|
-
pending.push(path);
|
|
10875
|
-
}
|
|
10876
|
-
continue;
|
|
10877
|
-
}
|
|
10878
|
-
if (record.kind === "user") {
|
|
10879
|
-
turn = void 0;
|
|
10880
|
-
pending = [];
|
|
10881
|
-
seen = /* @__PURE__ */ new Set();
|
|
10882
|
-
} else if (typeof record.turn === "number") {
|
|
10883
|
-
if (turn !== void 0 && record.turn !== turn) {
|
|
10884
|
-
pending = [];
|
|
10885
|
-
seen = /* @__PURE__ */ new Set();
|
|
10886
|
-
}
|
|
10887
|
-
turn = record.turn;
|
|
10888
|
-
}
|
|
10889
|
-
if (record.kind === "assistant" && record.seq === seq) return pending;
|
|
10826
|
+
function _objectSpread(e) {
|
|
10827
|
+
for (var r = 1; r < arguments.length; r++) {
|
|
10828
|
+
var t = null != arguments[r] ? arguments[r] : {};
|
|
10829
|
+
r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {
|
|
10830
|
+
_defineProperty(e, r, t[r]);
|
|
10831
|
+
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {
|
|
10832
|
+
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
10833
|
+
});
|
|
10890
10834
|
}
|
|
10891
|
-
return
|
|
10835
|
+
return e;
|
|
10892
10836
|
}
|
|
10893
|
-
|
|
10894
|
-
|
|
10895
|
-
|
|
10896
|
-
|
|
10897
|
-
|
|
10898
|
-
|
|
10899
|
-
|
|
10900
|
-
|
|
10901
|
-
|
|
10902
|
-
|
|
10903
|
-
|
|
10904
|
-
|
|
10905
|
-
|
|
10906
|
-
if (
|
|
10907
|
-
|
|
10908
|
-
|
|
10909
|
-
|
|
10910
|
-
|
|
10911
|
-
|
|
10912
|
-
for (const item of data.produced) {
|
|
10913
|
-
if (item === null || typeof item !== "object") continue;
|
|
10914
|
-
const produced = item;
|
|
10915
|
-
if (typeof produced.path !== "string" || produced.path === "") continue;
|
|
10916
|
-
if (typeof produced.seq === "number" && produced.seq > seq) continue;
|
|
10917
|
-
if (seen.has(produced.path)) continue;
|
|
10918
|
-
seen.add(produced.path);
|
|
10919
|
-
paths.push(produced.path);
|
|
10920
|
-
}
|
|
10921
|
-
return paths.length === 0 ? null : paths;
|
|
10837
|
+
function _defineProperty(e, r, t) {
|
|
10838
|
+
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
10839
|
+
value: t,
|
|
10840
|
+
enumerable: !0,
|
|
10841
|
+
configurable: !0,
|
|
10842
|
+
writable: !0
|
|
10843
|
+
}) : e[r] = t, e;
|
|
10844
|
+
}
|
|
10845
|
+
function _toPropertyKey(t) {
|
|
10846
|
+
var i = _toPrimitive(t, "string");
|
|
10847
|
+
return "symbol" == typeof i ? i : i + "";
|
|
10848
|
+
}
|
|
10849
|
+
function _toPrimitive(t, r) {
|
|
10850
|
+
if ("object" != typeof t || !t) return t;
|
|
10851
|
+
var e = t[Symbol.toPrimitive];
|
|
10852
|
+
if (void 0 !== e) {
|
|
10853
|
+
var i = e.call(t, r || "default");
|
|
10854
|
+
if ("object" != typeof i) return i;
|
|
10855
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
10922
10856
|
}
|
|
10923
|
-
|
|
10924
|
-
const paths = producedForClosing(record.nodes, seq);
|
|
10925
|
-
return paths.length === 0 ? null : paths;
|
|
10857
|
+
return ("string" === r ? String : Number)(t);
|
|
10926
10858
|
}
|
|
10927
|
-
|
|
10928
|
-
|
|
10929
|
-
* Absolute detection mirrors the host (see client/paths.isAbsolutePath):
|
|
10930
|
-
* POSIX roots, drive letters and UNC shares must not be joined onto the cwd.
|
|
10931
|
-
*/
|
|
10932
|
-
function resolveSidebarPath(cwd, path) {
|
|
10933
|
-
if (isAbsolutePath(path)) return path;
|
|
10934
|
-
const base = cwd ?? "";
|
|
10935
|
-
if (base === "") return path;
|
|
10936
|
-
const separator = base.includes("\\") ? "\\" : "/";
|
|
10937
|
-
return `${base.replace(/[\\/]+$/, "")}${separator}${path}`;
|
|
10859
|
+
function Tree2Element(tree) {
|
|
10860
|
+
return tree && tree.map((node, i) => /*#__PURE__*/ react.default.createElement(node.tag, _objectSpread({ key: i }, node.attr), Tree2Element(node.child)));
|
|
10938
10861
|
}
|
|
10939
|
-
|
|
10940
|
-
|
|
10941
|
-
/**
|
|
10942
|
-
* Whether a path is the "Show in folder" folder-reveal gesture. The stock
|
|
10943
|
-
* ui-deliverables row passes `'.'` (the session workspace root, resolved by
|
|
10944
|
-
* the chat view to `"<cwd>/."`); any path whose final segment is `.` is the
|
|
10945
|
-
* same gesture. A directory has no editor content, so these opens must reach
|
|
10946
|
-
* the explorer instead of an editor tab.
|
|
10947
|
-
*/
|
|
10948
|
-
function isFolderRevealPath(path) {
|
|
10949
|
-
if (path === "." || path === "./") return true;
|
|
10950
|
-
const trimmed = path.replace(/[\\/]+$/, "");
|
|
10951
|
-
return trimmed === "." || /[\\/]\.$/.test(trimmed);
|
|
10862
|
+
function GenIcon(data) {
|
|
10863
|
+
return (props) => /*#__PURE__*/ react.default.createElement(IconBase, _extends({ attr: _objectSpread({}, data.attr) }, props), Tree2Element(data.child));
|
|
10952
10864
|
}
|
|
10953
|
-
|
|
10954
|
-
|
|
10955
|
-
|
|
10956
|
-
|
|
10957
|
-
|
|
10958
|
-
|
|
10959
|
-
|
|
10960
|
-
|
|
10961
|
-
|
|
10962
|
-
|
|
10963
|
-
|
|
10964
|
-
|
|
10965
|
-
|
|
10966
|
-
|
|
10967
|
-
|
|
10968
|
-
|
|
10969
|
-
|
|
10970
|
-
|
|
10971
|
-
return Promise.resolve();
|
|
10972
|
-
}
|
|
10973
|
-
}
|
|
10974
|
-
return original.call(workspaces, path);
|
|
10975
|
-
};
|
|
10976
|
-
return () => {
|
|
10977
|
-
workspaces.openPath = original;
|
|
10865
|
+
function IconBase(props) {
|
|
10866
|
+
var elem = (conf) => {
|
|
10867
|
+
var attr = props.attr, size = props.size, title = props.title, svgProps = _objectWithoutProperties(props, _excluded);
|
|
10868
|
+
var computedSize = size || conf.size || "1em";
|
|
10869
|
+
var className;
|
|
10870
|
+
if (conf.className) className = conf.className;
|
|
10871
|
+
if (props.className) className = (className ? className + " " : "") + props.className;
|
|
10872
|
+
return /*#__PURE__*/ react.default.createElement("svg", _extends({
|
|
10873
|
+
stroke: "currentColor",
|
|
10874
|
+
fill: "currentColor",
|
|
10875
|
+
strokeWidth: "0"
|
|
10876
|
+
}, conf.attr, attr, svgProps, {
|
|
10877
|
+
className,
|
|
10878
|
+
style: _objectSpread(_objectSpread({ color: props.color || conf.color }, conf.style), props.style),
|
|
10879
|
+
height: computedSize,
|
|
10880
|
+
width: computedSize,
|
|
10881
|
+
xmlns: "http://www.w3.org/2000/svg"
|
|
10882
|
+
}), title && /*#__PURE__*/ react.default.createElement("title", null, title), props.children);
|
|
10978
10883
|
};
|
|
10884
|
+
return IconContext !== void 0 ? /*#__PURE__*/ react.default.createElement(IconContext.Consumer, null, (conf) => elem(conf)) : elem(DefaultContext);
|
|
10979
10885
|
}
|
|
10980
10886
|
//#endregion
|
|
10981
|
-
//#region
|
|
10982
|
-
|
|
10983
|
-
|
|
10984
|
-
|
|
10985
|
-
|
|
10986
|
-
|
|
10987
|
-
|
|
10988
|
-
|
|
10989
|
-
|
|
10990
|
-
|
|
10887
|
+
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/fi/index.mjs
|
|
10888
|
+
function FiX(props) {
|
|
10889
|
+
return GenIcon({
|
|
10890
|
+
"tag": "svg",
|
|
10891
|
+
"attr": {
|
|
10892
|
+
"viewBox": "0 0 24 24",
|
|
10893
|
+
"fill": "none",
|
|
10894
|
+
"stroke": "currentColor",
|
|
10895
|
+
"strokeWidth": "2",
|
|
10896
|
+
"strokeLinecap": "round",
|
|
10897
|
+
"strokeLinejoin": "round"
|
|
10898
|
+
},
|
|
10899
|
+
"child": [{
|
|
10900
|
+
"tag": "line",
|
|
10901
|
+
"attr": {
|
|
10902
|
+
"x1": "18",
|
|
10903
|
+
"y1": "6",
|
|
10904
|
+
"x2": "6",
|
|
10905
|
+
"y2": "18"
|
|
10906
|
+
},
|
|
10907
|
+
"child": []
|
|
10908
|
+
}, {
|
|
10909
|
+
"tag": "line",
|
|
10910
|
+
"attr": {
|
|
10911
|
+
"x1": "6",
|
|
10912
|
+
"y1": "6",
|
|
10913
|
+
"x2": "18",
|
|
10914
|
+
"y2": "18"
|
|
10915
|
+
},
|
|
10916
|
+
"child": []
|
|
10917
|
+
}]
|
|
10918
|
+
})(props);
|
|
10991
10919
|
}
|
|
10992
|
-
|
|
10993
|
-
|
|
10994
|
-
|
|
10995
|
-
|
|
10920
|
+
function FiTrash2(props) {
|
|
10921
|
+
return GenIcon({
|
|
10922
|
+
"tag": "svg",
|
|
10923
|
+
"attr": {
|
|
10924
|
+
"viewBox": "0 0 24 24",
|
|
10925
|
+
"fill": "none",
|
|
10926
|
+
"stroke": "currentColor",
|
|
10927
|
+
"strokeWidth": "2",
|
|
10928
|
+
"strokeLinecap": "round",
|
|
10929
|
+
"strokeLinejoin": "round"
|
|
10930
|
+
},
|
|
10931
|
+
"child": [
|
|
10932
|
+
{
|
|
10933
|
+
"tag": "polyline",
|
|
10934
|
+
"attr": { "points": "3 6 5 6 21 6" },
|
|
10935
|
+
"child": []
|
|
10936
|
+
},
|
|
10937
|
+
{
|
|
10938
|
+
"tag": "path",
|
|
10939
|
+
"attr": { "d": "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" },
|
|
10940
|
+
"child": []
|
|
10941
|
+
},
|
|
10942
|
+
{
|
|
10943
|
+
"tag": "line",
|
|
10944
|
+
"attr": {
|
|
10945
|
+
"x1": "10",
|
|
10946
|
+
"y1": "11",
|
|
10947
|
+
"x2": "10",
|
|
10948
|
+
"y2": "17"
|
|
10949
|
+
},
|
|
10950
|
+
"child": []
|
|
10951
|
+
},
|
|
10952
|
+
{
|
|
10953
|
+
"tag": "line",
|
|
10954
|
+
"attr": {
|
|
10955
|
+
"x1": "14",
|
|
10956
|
+
"y1": "11",
|
|
10957
|
+
"x2": "14",
|
|
10958
|
+
"y2": "17"
|
|
10959
|
+
},
|
|
10960
|
+
"child": []
|
|
10961
|
+
}
|
|
10962
|
+
]
|
|
10963
|
+
})(props);
|
|
10996
10964
|
}
|
|
10997
|
-
|
|
10998
|
-
|
|
10999
|
-
const css$5 = ".FV0QMq_releaseNotesOverlay{z-index:120;pointer-events:auto;background:color-mix(in srgb, var(--dsw-alias-bg-base) 72%, transparent);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.FV0QMq_releaseNotesDialog{width:min(720px,100%);max-height:min(760px,100vh - 48px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.FV0QMq_releaseNotesHeader,.FV0QMq_releaseNotesFooter{align-items:center;padding:16px 20px;display:flex}.FV0QMq_releaseNotesHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;gap:16px}.FV0QMq_releaseNotesHeader h2{font:var(--dsw-font-s-18);margin:0}.FV0QMq_releaseNotesContent{min-height:120px;font:var(--dsw-font-s-14);padding:20px;overflow:auto}.FV0QMq_releaseNotesFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end}.FV0QMq_releaseNotesIconButton,.FV0QMq_releaseNotesButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);cursor:pointer}.FV0QMq_releaseNotesIconButton:hover,.FV0QMq_releaseNotesButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_releaseNotesIconButton{width:32px;height:32px;font:var(--dsw-font-s-18);border-radius:50%;padding:0}.FV0QMq_releaseNotesButton{min-width:84px;min-height:36px;font:var(--dsw-font-s-14);border-radius:8px;padding:6px 16px}.FV0QMq_updateList{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.FV0QMq_updateList li{font:var(--dsw-font-s-14);justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateVersions{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-secondary)}.FV0QMq_updateOk{color:var(--dsw-alias-state-success-primary)}.FV0QMq_updateError,.FV0QMq_updateErrorText{color:var(--dsw-alias-state-error-primary)}.FV0QMq_updateErrorText{white-space:pre-wrap;font:var(--dsw-font-s-14);margin:12px 0 0}.FV0QMq_updateCommand{background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-code,var(--ds-font-family-code,monospace));white-space:pre-wrap;word-break:break-all;user-select:all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-size:12px;overflow-x:auto}.FV0QMq_updateSettingsRow{justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateSettingsText{flex-direction:column;gap:2px;min-width:0;display:flex}.FV0QMq_updateSettingsTitle{font:var(--dsw-font-s-14)}.FV0QMq_updateSettingsDesc{font:var(--dsw-font-s-13);color:var(--dsw-alias-label-secondary)}.FV0QMq_updateSettingsBlock{flex-direction:column;gap:12px;display:flex}.FV0QMq_updateBody{font:var(--dsw-font-s-14);margin:20px 0 0}.FV0QMq_updateFooter{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.FV0QMq_updateInline{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:16px}[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:clip}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}[data-dsh-pinned-sessions]{flex:none;min-width:0}.FV0QMq_pinnedSessions{border-bottom:1px solid var(--dsw-alias-border-l1);margin:0 0 6px;padding:4px 0 6px}.FV0QMq_pinnedSessionsHeading{height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);align-items:center;padding:0 4px;display:flex}.FV0QMq_pinnedSessionsList{gap:1px;display:grid}[data-slot=sidebar\\.workspaces] [class*=_sessionRow][data-dsh-session-pinned]{display:none}.FV0QMq_pinnedSessionRow{border-radius:8px;align-items:center;min-width:0;height:32px;display:flex;position:relative}.FV0QMq_pinnedSessionRow:hover,.FV0QMq_pinnedSessionRow:focus-within{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionOpen,.FV0QMq_pinnedSessionMore,.FV0QMq_pinnedSessionMenu button{font:inherit;cursor:pointer;border:0}.FV0QMq_pinnedSessionOpen{min-width:0;height:100%;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-s-14);background:0 0;flex:1;align-items:center;gap:8px;padding:0 6px 0 8px;display:flex}.FV0QMq_pinnedSessionOpen[aria-current=page]{color:var(--dsw-alias-brand-primary)}.FV0QMq_pinnedSessionDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_pinnedSessionDot[data-running]{background:var(--dsw-alias-state-success-primary)}.FV0QMq_pinnedSessionTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_pinnedSessionMore{width:28px;height:28px;color:var(--dsw-alias-label-secondary);letter-spacing:1px;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-right:2px;padding:0;display:inline-flex}.FV0QMq_pinnedSessionMore:hover,.FV0QMq_pinnedSessionMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedSessionMenu{z-index:1101;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);border-radius:10px;min-width:150px;padding:4px;position:absolute;top:calc(100% + 2px);right:0}.FV0QMq_pinnedSessionMenu button{width:100%;min-height:32px;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-xxs-12);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.FV0QMq_pinnedSessionMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px}.FV0QMq_accountMenu{z-index:3;box-sizing:border-box;width:var(--dsh-account-menu-width,280px);border-top:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);pointer-events:auto;position:absolute;bottom:0;left:0}.FV0QMq_accountTrigger,.FV0QMq_accountItem{color:var(--dsw-alias-fg-base);font:inherit;cursor:pointer;border:0}.FV0QMq_accountTrigger{box-sizing:border-box;width:100%;min-height:52px;padding:10px 14px max(10px, env(safe-area-inset-bottom));background:var(--dsw-alias-bg-layer-1);font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:0;align-items:center;gap:8px;display:flex}.FV0QMq_accountTrigger:hover,.FV0QMq_accountTrigger[aria-expanded=true]{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountTrigger:focus-visible,.FV0QMq_accountItem:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountAvatar{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);width:28px;height:28px;color:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;place-items:center;font-weight:600;display:grid;position:relative}.FV0QMq_accountName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_accountDropdown{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);z-index:1;border-radius:12px;width:min(252px,100% - 16px);padding:10px 8px 8px;display:grid;position:absolute;bottom:calc(100% + 8px);left:8px}.FV0QMq_accountDropdownHeader{min-height:36px;font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);align-items:center;gap:8px;padding:0 8px 8px;display:flex}.FV0QMq_accountMenuDivider{background:var(--dsw-alias-border-l2);height:1px;margin:0 4px 6px}.FV0QMq_accountItem{text-align:left;min-height:32px;font:var(--dsw-font-s-14);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:0 10px;display:flex}.FV0QMq_accountItem:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountPresence{box-sizing:content-box;border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:auto}.FV0QMq_accountTrigger .FV0QMq_accountPresence{border-color:var(--dsw-alias-bg-layer-1)}.FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-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}.FV0QMq_toggleClusterNative{z-index:auto;flex:none;align-items:center;position:static;inset:auto}button[data-dsh-better-sidebar-toggle]{display:none}body:not([data-dsh-native-sidebar-toggle]) .FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:var(--dsh-sidebar-toggle-reserve,188px)}.FV0QMq_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}.FV0QMq_manualButton{min-width:94px;height:28px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;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:6px;flex:none;justify-content:center;align-items:center;gap:6px;margin-right:4px;padding:0 10px;display:inline-flex}.FV0QMq_manualButton:hover,.FV0QMq_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_toggleButton:disabled,.FV0QMq_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.FV0QMq_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}.FV0QMq_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%)}.FV0QMq_panel[data-dragging]{transition:none}.FV0QMq_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.FV0QMq_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_panelBody{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.FV0QMq_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.FV0QMq_bottomPanel[data-dragging]{transition:none}.FV0QMq_panel,.FV0QMq_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .FV0QMq_panel,body[data-dsh-sidebar-dragging] .FV0QMq_bottomPanel{will-change:transform}.FV0QMq_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.FV0QMq_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_bottomClose{z-index:4;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;position:absolute;top:3px;right:6px}.FV0QMq_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_bottomPanel .FV0QMq_tabBar{padding-right:40px}.FV0QMq_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}.FV0QMq_floatWindowDragging{will-change:left, top, width, height}.FV0QMq_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}.FV0QMq_floatWindowDragging .FV0QMq_floatHeader{cursor:grabbing}.FV0QMq_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.FV0QMq_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.FV0QMq_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.FV0QMq_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}.FV0QMq_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}.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_manualButton,.FV0QMq_tabBar,.FV0QMq_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(var(--dsh-title-bar-strip,40px) + 3px))}body[data-dsh-title-bar-compat] .FV0QMq_panel{padding-top:var(--dsh-title-bar-strip,40px)}.FV0QMq_cornerHandle{left:-6px;bottom:calc(var(--dsh-sidebar-height,0px) + 6px);z-index:2;cursor:nwse-resize;touch-action:none;width:12px;height:12px;position:absolute}.FV0QMq_cornerHandle:hover,.FV0QMq_cornerHandle[data-dragging]{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_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}.FV0QMq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_iconButton:disabled{opacity:.4;cursor:default}.FV0QMq_workbench,.FV0QMq_split{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_splitRow{flex-direction:row}.FV0QMq_splitCol{flex-direction:column}.FV0QMq_splitChild{display:flex;position:relative;overflow:hidden}.FV0QMq_divider{z-index:3;touch-action:none;flex:none;position:relative}.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.FV0QMq_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.FV0QMq_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.FV0QMq_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.FV0QMq_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.FV0QMq_divider:hover:after,.FV0QMq_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.FV0QMq_dropLeft{width:25%;top:0;bottom:0;left:0}.FV0QMq_dropRight{width:25%;top:0;bottom:0;right:0}.FV0QMq_dropUp{height:25%;top:0;left:0;right:0}.FV0QMq_dropDown{height:25%;bottom:0;left:0;right:0}.FV0QMq_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.FV0QMq_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.FV0QMq_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_paneTabHidden{display:none}.FV0QMq_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}.FV0QMq_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}.FV0QMq_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.FV0QMq_paneCard:disabled{opacity:.45;cursor:default}.FV0QMq_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}.FV0QMq_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.FV0QMq_tabList::-webkit-scrollbar{display:none}.FV0QMq_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}.FV0QMq_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_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}.FV0QMq_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_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}.FV0QMq_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.FV0QMq_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.FV0QMq_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:FV0QMq_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}.FV0QMq_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.FV0QMq_explorerRowRevealed+.FV0QMq_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.FV0QMq_explorerRowRevealed:has(+.FV0QMq_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.FV0QMq_explorerDir{font:var(--dsw-font-s-strong-14)}.FV0QMq_explorerHidden{opacity:.45}.FV0QMq_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerBroken .FV0QMq_explorerName{color:var(--dsw-alias-state-error-primary)}.FV0QMq_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_explorerRow:hover .FV0QMq_explorerRef,.FV0QMq_explorerRow:focus-within .FV0QMq_explorerRef{display:inline-flex}.FV0QMq_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes FV0QMq_dsh-row-in{0%{opacity:0}}.FV0QMq_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_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:FV0QMq_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}.FV0QMq_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.FV0QMq_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}.FV0QMq_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadDropChatHint{z-index:1002;pointer-events:none;animation:FV0QMq_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}.FV0QMq_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}.FV0QMq_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.FV0QMq_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}.FV0QMq_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.FV0QMq_uploadOverlayTitle>svg{flex:none}.FV0QMq_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.FV0QMq_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.FV0QMq_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.FV0QMq_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}.FV0QMq_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}.FV0QMq_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.FV0QMq_editor{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_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}.FV0QMq_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}.FV0QMq_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_editorBody{flex:1;min-height:0;display:flex}.FV0QMq_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.FV0QMq_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.FV0QMq_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.FV0QMq_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_editorTreePanelFull{flex:1}.FV0QMq_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_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}.FV0QMq_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.FV0QMq_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}.FV0QMq_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorStatusError{color:var(--dsw-alias-state-error-primary)}.FV0QMq_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.FV0QMq_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}.FV0QMq_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.FV0QMq_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.FV0QMq_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_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}.FV0QMq_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.FV0QMq_fenceError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.FV0QMq_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}.FV0QMq_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.FV0QMq_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.FV0QMq_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)}.FV0QMq_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_sandboxStatusOff .FV0QMq_sandboxDot{background:var(--dsw-alias-state-error-primary)}.FV0QMq_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browser{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.FV0QMq_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}.FV0QMq_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_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}.FV0QMq_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_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}.FV0QMq_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}.FV0QMq_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.FV0QMq_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.FV0QMq_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.FV0QMq_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}.FV0QMq_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.FV0QMq_editorCmHidden{display:none}.FV0QMq_editorCm .cm-editor{height:100%}.FV0QMq_editorCm .cm-scroller{padding:12px 16px}.FV0QMq_editorCm .cm-editor.cm-focused{outline:none}.FV0QMq_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.FV0QMq_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.FV0QMq_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.FV0QMq_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.FV0QMq_editorImageWrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.FV0QMq_editorImage{object-fit:contain;max-width:100%;max-height:100%}.FV0QMq_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.FV0QMq_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.FV0QMq_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.FV0QMq_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.FV0QMq_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.FV0QMq_mermaidBody svg{max-width:100%;height:auto}.FV0QMq_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.FV0QMq_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.FV0QMq_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.FV0QMq_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.FV0QMq_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.FV0QMq_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.FV0QMq_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.FV0QMq_mermaidModalStage svg:active{cursor:grabbing}.FV0QMq_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.FV0QMq_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))}.FV0QMq_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.FV0QMq_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.FV0QMq_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_editorPdfFrameBlocked{pointer-events:none}.FV0QMq_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.FV0QMq_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .FV0QMq_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .FV0QMq_editorPdfDragShield{pointer-events:auto!important}.FV0QMq_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.FV0QMq_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.FV0QMq_terminal .xterm{height:100%}.FV0QMq_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}.FV0QMq_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.FV0QMq_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}.FV0QMq_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}.FV0QMq_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_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}.FV0QMq_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.FV0QMq_terminalDepsHint{opacity:.9}.FV0QMq_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.FV0QMq_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}.FV0QMq_terminalDepsNote{opacity:.85}.FV0QMq_terminalDepsActions{align-items:center;gap:8px;display:flex}.FV0QMq_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}.FV0QMq_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.FV0QMq_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.FV0QMq_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}.FV0QMq_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.FV0QMq_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}.FV0QMq_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.FV0QMq_gitLink:hover:not(:disabled){text-decoration:underline}.FV0QMq_gitLink:disabled{opacity:.4;cursor:default}.FV0QMq_gitRow{min-height:34px;animation:FV0QMq_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}.FV0QMq_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_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}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.FV0QMq_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.FV0QMq_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.FV0QMq_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_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}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitDiffFile:disabled{cursor:default}.FV0QMq_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.FV0QMq_gitDiffFileChevronExpanded{transform:rotate(90deg)}.FV0QMq_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.FV0QMq_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.FV0QMq_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_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}.FV0QMq_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.FV0QMq_gitDiffCode{flex:1;min-width:0;overflow:visible}.FV0QMq_gitDiffCtx{color:var(--dsw-alias-label-primary)}.FV0QMq_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.FV0QMq_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.FV0QMq_gitDiffMeta{padding-left:2px}.FV0QMq_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_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}.FV0QMq_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.FV0QMq_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.FV0QMq_gitCommitInput{flex:1;min-width:0}.FV0QMq_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}.FV0QMq_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.FV0QMq_gitCommitButton:disabled{opacity:.45;cursor:default}.FV0QMq_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.FV0QMq_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.FV0QMq_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_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}.FV0QMq_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_gitLogMore:disabled{opacity:.5;cursor:default}.FV0QMq_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.FV0QMq_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_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}.FV0QMq_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_toggleButton:focus-visible,.FV0QMq_manualButton:focus-visible,.FV0QMq_bottomClose:focus-visible,.FV0QMq_iconButton:focus-visible,.FV0QMq_tab:focus-visible,.FV0QMq_tabClose:focus-visible,.FV0QMq_tabBarPlus:focus-visible,.FV0QMq_paneCard:focus-visible,.FV0QMq_explorerRow:focus-visible,.FV0QMq_explorerRef:focus-visible,.FV0QMq_gitRowMain:focus-visible,.FV0QMq_gitLink:focus-visible,.FV0QMq_gitCommitButton:focus-visible,.FV0QMq_gitLogRow:focus-visible,.FV0QMq_gitLogMore:focus-visible,.FV0QMq_gitDiffFile:focus-visible,.FV0QMq_gitDiffExpand:focus-visible,.FV0QMq_terminalRetry:focus-visible,.FV0QMq_editorModeButton:focus-visible,.FV0QMq_editorDownloadLink:focus-visible,.FV0QMq_editorPptxButton:focus-visible,.FV0QMq_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.FV0QMq_panel,.FV0QMq_panelHidden,.FV0QMq_bottomPanel,.FV0QMq_bottomPanelHidden,.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_tab,.FV0QMq_tabBarPlus,.FV0QMq_paneCard,.FV0QMq_explorerRow,.FV0QMq_gitRow,.FV0QMq_divider,.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:148px}.FV0QMq_tab{min-width:48px;max-width:128px}}.FV0QMq_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.FV0QMq_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.FV0QMq_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_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}.FV0QMq_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.FV0QMq_editorHtmlBlock{margin:8px 0}.FV0QMq_editorHtmlBlock img,.FV0QMq_editorHtmlBlock video{max-width:100%}.FV0QMq_editorHtmlBlock details{margin:4px 0;padding:4px 0}.FV0QMq_editorHtmlBlock summary{cursor:pointer}.FV0QMq_tocBar{z-index:3;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.FV0QMq_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.FV0QMq_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.FV0QMq_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.FV0QMq_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocItem[data-level=\"2\"]{padding-left:18px}.FV0QMq_tocItem[data-level=\"3\"]{padding-left:28px}.FV0QMq_tocItem[data-level=\"4\"]{padding-left:38px}.FV0QMq_tocItem[data-level=\"5\"]{padding-left:48px}.FV0QMq_tocItem[data-level=\"6\"]{padding-left:58px}.FV0QMq_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes FV0QMq_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.FV0QMq_tocFlash{border-radius:4px;animation:1.2s ease-out FV0QMq_dsh-toc-flash}.FV0QMq_chatcodeGate{z-index:2147483000;isolation:isolate;background-color:var(--dsw-alias-tooltip-bg);background-image:linear-gradient(135deg, var(--dsw-alias-tooltip-bg) 0%, var(--dsw-alias-brand-primary) 48%, var(--dsw-alias-tooltip-bg) 100%);color:var(--dsw-alias-fg-base);pointer-events:auto;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.FV0QMq_chatcodeGateCard{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:linear-gradient(145deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));width:min(460px,100%);box-shadow:var(--dsw-shadow-lv3);text-align:center;border-radius:20px;padding:40px 36px;position:relative}.FV0QMq_chatcodeGateContent{position:relative}.FV0QMq_chatcodeGateCard h1{font:var(--dsw-font-heading-lg);letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(32px,5vw,46px);line-height:1.1}.FV0QMq_chatcodeGateCard p{max-width:29em;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-s-14);margin:0 auto;line-height:1.7}.FV0QMq_chatcodeGateError{border:1px solid color-mix(in srgb, var(--dsw-alias-fg-error) 36%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-fg-error) 8%, transparent);border-radius:10px;padding:9px 11px;position:relative;color:var(--dsw-alias-fg-error)!important;font:var(--dsw-font-xxs-12)!important;margin-top:16px!important;line-height:1.5!important}.FV0QMq_chatcodeGateActions{justify-content:center;gap:10px;margin:28px 0 14px;display:flex;position:relative}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:42px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), 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:10px;padding:9px 17px}.FV0QMq_chatcodeGateActions button:first-child{border-color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-state-error-primary);min-width:152px;min-height:46px;color:var(--dsw-alias-label-primary-inverted)}.FV0QMq_chatcodeGateActions button:first-child:hover:not(:disabled){box-shadow:var(--dsw-shadow-lv2);transform:translateY(-2px);border-color:var(--dsw-alias-state-error-primary)!important;background:var(--dsw-alias-state-error-primary)!important;color:var(--dsw-alias-label-primary-inverted)!important}.FV0QMq_chatcodeGateActions button:not(:first-child):hover:not(:disabled),.FV0QMq_chatcodeGateCard a:hover{border-color:var(--dsw-alias-button-primary-hover);background:var(--dsw-alias-button-primary-hover);color:var(--dsw-alias-label-primary-inverted);transform:translateY(-1px)}.FV0QMq_chatcodeGateActions button:disabled{cursor:default;opacity:.55}.FV0QMq_chatcodeGateCard a{align-items:center;text-decoration:none;display:inline-flex;position:relative}.FV0QMq_chatcodeGateActions button:focus-visible,.FV0QMq_chatcodeGateCard a:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:3px}@media (width<=480px){.FV0QMq_chatcodeGate{padding:16px}.FV0QMq_chatcodeGateCard{padding:32px 24px}.FV0QMq_chatcodeGateActions{flex-direction:column;align-items:stretch}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{justify-content:center}}";
|
|
11000
|
-
|
|
11001
|
-
|
|
11002
|
-
|
|
11003
|
-
|
|
11004
|
-
|
|
11005
|
-
|
|
11006
|
-
|
|
10965
|
+
function FiSidebar(props) {
|
|
10966
|
+
return GenIcon({
|
|
10967
|
+
"tag": "svg",
|
|
10968
|
+
"attr": {
|
|
10969
|
+
"viewBox": "0 0 24 24",
|
|
10970
|
+
"fill": "none",
|
|
10971
|
+
"stroke": "currentColor",
|
|
10972
|
+
"strokeWidth": "2",
|
|
10973
|
+
"strokeLinecap": "round",
|
|
10974
|
+
"strokeLinejoin": "round"
|
|
10975
|
+
},
|
|
10976
|
+
"child": [{
|
|
10977
|
+
"tag": "rect",
|
|
10978
|
+
"attr": {
|
|
10979
|
+
"x": "3",
|
|
10980
|
+
"y": "3",
|
|
10981
|
+
"width": "18",
|
|
10982
|
+
"height": "18",
|
|
10983
|
+
"rx": "2",
|
|
10984
|
+
"ry": "2"
|
|
10985
|
+
},
|
|
10986
|
+
"child": []
|
|
10987
|
+
}, {
|
|
10988
|
+
"tag": "line",
|
|
10989
|
+
"attr": {
|
|
10990
|
+
"x1": "9",
|
|
10991
|
+
"y1": "3",
|
|
10992
|
+
"x2": "9",
|
|
10993
|
+
"y2": "21"
|
|
10994
|
+
},
|
|
10995
|
+
"child": []
|
|
10996
|
+
}]
|
|
10997
|
+
})(props);
|
|
11007
10998
|
}
|
|
11008
|
-
|
|
11009
|
-
|
|
11010
|
-
|
|
11011
|
-
|
|
11012
|
-
|
|
11013
|
-
|
|
11014
|
-
|
|
11015
|
-
|
|
11016
|
-
|
|
11017
|
-
|
|
11018
|
-
|
|
11019
|
-
|
|
11020
|
-
|
|
11021
|
-
|
|
11022
|
-
|
|
11023
|
-
|
|
11024
|
-
|
|
11025
|
-
|
|
11026
|
-
|
|
11027
|
-
|
|
11028
|
-
|
|
11029
|
-
|
|
11030
|
-
|
|
11031
|
-
|
|
11032
|
-
|
|
11033
|
-
"tabBoundaryError": "FV0QMq_tabBoundaryError",
|
|
11034
|
-
"gitCommit": "FV0QMq_gitCommit",
|
|
11035
|
-
"editor": "FV0QMq_editor",
|
|
11036
|
-
"dsh-row-in": "FV0QMq_dsh-row-in",
|
|
11037
|
-
"browserBlockedButton": "FV0QMq_browserBlockedButton",
|
|
11038
|
-
"sandboxStatusText": "FV0QMq_sandboxStatusText",
|
|
11039
|
-
"tocItem": "FV0QMq_tocItem",
|
|
11040
|
-
"editorHeader": "FV0QMq_editorHeader",
|
|
11041
|
-
"pinnedTab": "FV0QMq_pinnedTab",
|
|
11042
|
-
"gitHeader": "FV0QMq_gitHeader",
|
|
11043
|
-
"openWithName": "FV0QMq_openWithName",
|
|
11044
|
-
"terminalRepairCommand": "FV0QMq_terminalRepairCommand",
|
|
11045
|
-
"accountDropdown": "FV0QMq_accountDropdown",
|
|
11046
|
-
"gitDiffCtx": "FV0QMq_gitDiffCtx",
|
|
11047
|
-
"gitEmpty": "FV0QMq_gitEmpty",
|
|
11048
|
-
"editorSearchInput": "FV0QMq_editorSearchInput",
|
|
11049
|
-
"gitLogRow": "FV0QMq_gitLogRow",
|
|
11050
|
-
"panelBody": "FV0QMq_panelBody",
|
|
11051
|
-
"updateOk": "FV0QMq_updateOk",
|
|
11052
|
-
"pinnedSessionTitle": "FV0QMq_pinnedSessionTitle",
|
|
11053
|
-
"dividerCol": "FV0QMq_dividerCol",
|
|
11054
|
-
"paneContent": "FV0QMq_paneContent",
|
|
11055
|
-
"explorerHidden": "FV0QMq_explorerHidden",
|
|
11056
|
-
"uploadDropZonePill": "FV0QMq_uploadDropZonePill",
|
|
11057
|
-
"editorTreeSearch": "FV0QMq_editorTreeSearch",
|
|
11058
|
-
"mermaidModalHint": "FV0QMq_mermaidModalHint",
|
|
11059
|
-
"uploadOverlayTitle": "FV0QMq_uploadOverlayTitle",
|
|
11060
|
-
"paneTab": "FV0QMq_paneTab",
|
|
11061
|
-
"editorHtmlBlock": "FV0QMq_editorHtmlBlock",
|
|
11062
|
-
"updateSettingsDesc": "FV0QMq_updateSettingsDesc",
|
|
11063
|
-
"editorCm": "FV0QMq_editorCm",
|
|
11064
|
-
"gitDiffExpand": "FV0QMq_gitDiffExpand",
|
|
11065
|
-
"editorMd": "FV0QMq_editorMd",
|
|
11066
|
-
"mermaidModalToolbar": "FV0QMq_mermaidModalToolbar",
|
|
11067
|
-
"editorPlaceholder": "FV0QMq_editorPlaceholder",
|
|
11068
|
-
"terminalDepsBanner": "FV0QMq_terminalDepsBanner",
|
|
11069
|
-
"gitDiffFilePath": "FV0QMq_gitDiffFilePath",
|
|
11070
|
-
"mermaidMarkdown": "FV0QMq_mermaidMarkdown",
|
|
11071
|
-
"gitRow": "FV0QMq_gitRow",
|
|
11072
|
-
"browser": "FV0QMq_browser",
|
|
11073
|
-
"floatContent": "FV0QMq_floatContent",
|
|
11074
|
-
"gitCommitButton": "FV0QMq_gitCommitButton",
|
|
11075
|
-
"releaseNotesContent": "FV0QMq_releaseNotesContent",
|
|
11076
|
-
"gitDiffMetaText": "FV0QMq_gitDiffMetaText",
|
|
11077
|
-
"gitLogLine2": "FV0QMq_gitLogLine2",
|
|
11078
|
-
"editorTreeResize": "FV0QMq_editorTreeResize",
|
|
11079
|
-
"dropLeft": "FV0QMq_dropLeft",
|
|
11080
|
-
"pinnedSessionOpen": "FV0QMq_pinnedSessionOpen",
|
|
11081
|
-
"browserMessage": "FV0QMq_browserMessage",
|
|
11082
|
-
"tocFlash": "FV0QMq_tocFlash",
|
|
11083
|
-
"explorer": "FV0QMq_explorer",
|
|
11084
|
-
"tabBar": "FV0QMq_tabBar",
|
|
11085
|
-
"floatDropHintLabel": "FV0QMq_floatDropHintLabel",
|
|
11086
|
-
"gitDiffTab": "FV0QMq_gitDiffTab",
|
|
11087
|
-
"explorerDir": "FV0QMq_explorerDir",
|
|
11088
|
-
"pinnedSessionMenu": "FV0QMq_pinnedSessionMenu",
|
|
11089
|
-
"floatWindowDragging": "FV0QMq_floatWindowDragging",
|
|
11090
|
-
"gitName": "FV0QMq_gitName",
|
|
11091
|
-
"paneDrop": "FV0QMq_paneDrop",
|
|
11092
|
-
"dividerRow": "FV0QMq_dividerRow",
|
|
11093
|
-
"editorTreePanelFull": "FV0QMq_editorTreePanelFull",
|
|
11094
|
-
"browserInput": "FV0QMq_browserInput",
|
|
11095
|
-
"gitError": "FV0QMq_gitError",
|
|
11096
|
-
"gitDiffDel": "FV0QMq_gitDiffDel",
|
|
11097
|
-
"paneEmptyCards": "FV0QMq_paneEmptyCards",
|
|
11098
|
-
"producedMore": "FV0QMq_producedMore",
|
|
11099
|
-
"toggleCluster": "FV0QMq_toggleCluster",
|
|
11100
|
-
"cornerHandle": "FV0QMq_cornerHandle",
|
|
11101
|
-
"gitDiffMeta": "FV0QMq_gitDiffMeta",
|
|
11102
|
-
"uploadDropZone": "FV0QMq_uploadDropZone",
|
|
11103
|
-
"releaseNotesFooter": "FV0QMq_releaseNotesFooter",
|
|
11104
|
-
"selectionPopup": "FV0QMq_selectionPopup",
|
|
11105
|
-
"uploadOverlayProgress": "FV0QMq_uploadOverlayProgress",
|
|
11106
|
-
"mermaidHeader": "FV0QMq_mermaidHeader",
|
|
11107
|
-
"terminal": "FV0QMq_terminal",
|
|
11108
|
-
"editorStatus": "FV0QMq_editorStatus",
|
|
11109
|
-
"gitBranchSelect": "FV0QMq_gitBranchSelect",
|
|
11110
|
-
"explorerCopied": "FV0QMq_explorerCopied",
|
|
11111
|
-
"chatcodeGateError": "FV0QMq_chatcodeGateError",
|
|
11112
|
-
"accountMenu": "FV0QMq_accountMenu",
|
|
11113
|
-
"editorPptxButton": "FV0QMq_editorPptxButton",
|
|
11114
|
-
"panelResize": "FV0QMq_panelResize",
|
|
11115
|
-
"floatResize": "FV0QMq_floatResize",
|
|
11116
|
-
"editorModeToggle": "FV0QMq_editorModeToggle",
|
|
11117
|
-
"updateSettingsRow": "FV0QMq_updateSettingsRow",
|
|
11118
|
-
"splitCol": "FV0QMq_splitCol",
|
|
11119
|
-
"gitDiffFileOld": "FV0QMq_gitDiffFileOld",
|
|
11120
|
-
"gitDiffHunk": "FV0QMq_gitDiffHunk",
|
|
11121
|
-
"updateInline": "FV0QMq_updateInline",
|
|
11122
|
-
"terminalWrap": "FV0QMq_terminalWrap",
|
|
11123
|
-
"pinnedSessionRow": "FV0QMq_pinnedSessionRow",
|
|
11124
|
-
"editorModeButton": "FV0QMq_editorModeButton",
|
|
11125
|
-
"editorPdfFrame": "FV0QMq_editorPdfFrame",
|
|
11126
|
-
"uploadOverlayCancel": "FV0QMq_uploadOverlayCancel",
|
|
11127
|
-
"gitLogLine1": "FV0QMq_gitLogLine1",
|
|
11128
|
-
"tabBarPlus": "FV0QMq_tabBarPlus",
|
|
11129
|
-
"gitDiffAdd": "FV0QMq_gitDiffAdd",
|
|
11130
|
-
"uploadDropHero": "FV0QMq_uploadDropHero",
|
|
11131
|
-
"gitDiffFileTag": "FV0QMq_gitDiffFileTag",
|
|
11132
|
-
"editorPdfDragShield": "FV0QMq_editorPdfDragShield",
|
|
11133
|
-
"editorModeActive": "FV0QMq_editorModeActive",
|
|
11134
|
-
"gitConfirmDesc": "FV0QMq_gitConfirmDesc",
|
|
11135
|
-
"uploadDropChatCard": "FV0QMq_uploadDropChatCard",
|
|
11136
|
-
"browserBlockedTitle": "FV0QMq_browserBlockedTitle",
|
|
11137
|
-
"editorPdf": "FV0QMq_editorPdf",
|
|
11138
|
-
"gitBadge": "FV0QMq_gitBadge",
|
|
11139
|
-
"uploadOverlayStatus": "FV0QMq_uploadOverlayStatus",
|
|
11140
|
-
"openWithPin": "FV0QMq_openWithPin",
|
|
11141
|
-
"releaseNotesOverlay": "FV0QMq_releaseNotesOverlay",
|
|
11142
|
-
"gitDiffFileChevronExpanded": "FV0QMq_gitDiffFileChevronExpanded",
|
|
11143
|
-
"producedChip": "FV0QMq_producedChip",
|
|
11144
|
-
"updateCommand": "FV0QMq_updateCommand",
|
|
11145
|
-
"chatcodeGateActions": "FV0QMq_chatcodeGateActions",
|
|
11146
|
-
"releaseNotesButton": "FV0QMq_releaseNotesButton",
|
|
11147
|
-
"terminalDepsHint": "FV0QMq_terminalDepsHint",
|
|
11148
|
-
"workbench": "FV0QMq_workbench",
|
|
11149
|
-
"mermaidError": "FV0QMq_mermaidError",
|
|
11150
|
-
"uploadOverlayCard": "FV0QMq_uploadOverlayCard",
|
|
11151
|
-
"terminalRetry": "FV0QMq_terminalRetry",
|
|
11152
|
-
"terminalBannerUrl": "FV0QMq_terminalBannerUrl",
|
|
11153
|
-
"editorBinary": "FV0QMq_editorBinary",
|
|
11154
|
-
"editorImageWrap": "FV0QMq_editorImageWrap",
|
|
11155
|
-
"pane": "FV0QMq_pane",
|
|
11156
|
-
"gitLink": "FV0QMq_gitLink",
|
|
11157
|
-
"pinnedSessionDot": "FV0QMq_pinnedSessionDot",
|
|
11158
|
-
"updateFooter": "FV0QMq_updateFooter",
|
|
11159
|
-
"git": "FV0QMq_git",
|
|
11160
|
-
"terminalBanner": "FV0QMq_terminalBanner",
|
|
11161
|
-
"sandboxStatusOff": "FV0QMq_sandboxStatusOff",
|
|
11162
|
-
"gitSectionHeader": "FV0QMq_gitSectionHeader",
|
|
11163
|
-
"gitWorktreeRow": "FV0QMq_gitWorktreeRow",
|
|
11164
|
-
"browserFrame": "FV0QMq_browserFrame",
|
|
11165
|
-
"bottomResizeActive": "FV0QMq_bottomResizeActive",
|
|
11166
|
-
"tocBar": "FV0QMq_tocBar",
|
|
11167
|
-
"tabBarDrop": "FV0QMq_tabBarDrop",
|
|
11168
|
-
"uploadOverlay": "FV0QMq_uploadOverlay",
|
|
11169
|
-
"editorPdfToolbar": "FV0QMq_editorPdfToolbar",
|
|
11170
|
-
"accountItem": "FV0QMq_accountItem",
|
|
11171
|
-
"chatcodeGateContent": "FV0QMq_chatcodeGateContent",
|
|
11172
|
-
"editorTreeDock": "FV0QMq_editorTreeDock",
|
|
11173
|
-
"floatTitle": "FV0QMq_floatTitle",
|
|
11174
|
-
"accountTrigger": "FV0QMq_accountTrigger",
|
|
11175
|
-
"editorTreeToggleActive": "FV0QMq_editorTreeToggleActive",
|
|
11176
|
-
"tocPanel": "FV0QMq_tocPanel",
|
|
11177
|
-
"updateError": "FV0QMq_updateError",
|
|
11178
|
-
"bottomPanel": "FV0QMq_bottomPanel",
|
|
11179
|
-
"dropOverlay": "FV0QMq_dropOverlay",
|
|
11180
|
-
"chatcodeGateCard": "FV0QMq_chatcodeGateCard",
|
|
11181
|
-
"bottomClose": "FV0QMq_bottomClose",
|
|
11182
|
-
"dropRight": "FV0QMq_dropRight",
|
|
11183
|
-
"editorDocxZoomRange": "FV0QMq_editorDocxZoomRange",
|
|
11184
|
-
"iconButton": "FV0QMq_iconButton",
|
|
11185
|
-
"dropDown": "FV0QMq_dropDown",
|
|
11186
|
-
"accountAvatar": "FV0QMq_accountAvatar",
|
|
11187
|
-
"gitLogHash": "FV0QMq_gitLogHash",
|
|
11188
|
-
"gitLogMeta": "FV0QMq_gitLogMeta",
|
|
11189
|
-
"dropCenter": "FV0QMq_dropCenter",
|
|
11190
|
-
"pinnedSessions": "FV0QMq_pinnedSessions",
|
|
11191
|
-
"pinnedSessionMore": "FV0QMq_pinnedSessionMore",
|
|
11192
|
-
"tabClose": "FV0QMq_tabClose",
|
|
11193
|
-
"tabBadge": "FV0QMq_tabBadge",
|
|
11194
|
-
"floatClose": "FV0QMq_floatClose",
|
|
11195
|
-
"explorerRef": "FV0QMq_explorerRef",
|
|
11196
|
-
"producedRow": "FV0QMq_producedRow",
|
|
11197
|
-
"editorHtml": "FV0QMq_editorHtml",
|
|
11198
|
-
"terminalDepsNote": "FV0QMq_terminalDepsNote",
|
|
11199
|
-
"gitDiff": "FV0QMq_gitDiff",
|
|
11200
|
-
"openWithPinActive": "FV0QMq_openWithPinActive",
|
|
11201
|
-
"gitWorktreeLabel": "FV0QMq_gitWorktreeLabel",
|
|
11202
|
-
"editorPathInput": "FV0QMq_editorPathInput",
|
|
11203
|
-
"accountPresence": "FV0QMq_accountPresence",
|
|
11204
|
-
"fenceError": "FV0QMq_fenceError",
|
|
11205
|
-
"gitDiffHunkHeader": "FV0QMq_gitDiffHunkHeader",
|
|
11206
|
-
"accountMenuDivider": "FV0QMq_accountMenuDivider",
|
|
11207
|
-
"tabTitle": "FV0QMq_tabTitle",
|
|
11208
|
-
"editorTreePanel": "FV0QMq_editorTreePanel",
|
|
11209
|
-
"gitLogSubject": "FV0QMq_gitLogSubject",
|
|
11210
|
-
"editorBody": "FV0QMq_editorBody",
|
|
11211
|
-
"explorerName": "FV0QMq_explorerName",
|
|
11212
|
-
"paneTabHidden": "FV0QMq_paneTabHidden",
|
|
11213
|
-
"dirtyDot": "FV0QMq_dirtyDot",
|
|
11214
|
-
"sandboxDot": "FV0QMq_sandboxDot",
|
|
11215
|
-
"gitDiffHunkSection": "FV0QMq_gitDiffHunkSection",
|
|
11216
|
-
"manualButton": "FV0QMq_manualButton",
|
|
11217
|
-
"explorerSymlink": "FV0QMq_explorerSymlink",
|
|
11218
|
-
"tocItemText": "FV0QMq_tocItemText",
|
|
11219
|
-
"accountDropdownHeader": "FV0QMq_accountDropdownHeader",
|
|
11220
|
-
"terminalDepsTitle": "FV0QMq_terminalDepsTitle",
|
|
11221
|
-
"gitLogRef": "FV0QMq_gitLogRef",
|
|
11222
|
-
"boundaryError": "FV0QMq_boundaryError",
|
|
11223
|
-
"explorerBody": "FV0QMq_explorerBody",
|
|
11224
|
-
"editorPdfFrameBlocked": "FV0QMq_editorPdfFrameBlocked",
|
|
11225
|
-
"accountName": "FV0QMq_accountName",
|
|
11226
|
-
"toggleButton": "FV0QMq_toggleButton",
|
|
11227
|
-
"tabList": "FV0QMq_tabList",
|
|
11228
|
-
"explorerError": "FV0QMq_explorerError",
|
|
11229
|
-
"editorPdfStage": "FV0QMq_editorPdfStage",
|
|
11230
|
-
"tocItemLevel": "FV0QMq_tocItemLevel",
|
|
11231
|
-
"editorBinaryNotice": "FV0QMq_editorBinaryNotice",
|
|
11232
|
-
"browserBlocked": "FV0QMq_browserBlocked",
|
|
11233
|
-
"gitDiffCode": "FV0QMq_gitDiffCode",
|
|
11234
|
-
"terminalDepsActions": "FV0QMq_terminalDepsActions",
|
|
11235
|
-
"browserStart": "FV0QMq_browserStart",
|
|
11236
|
-
"sandboxStatus": "FV0QMq_sandboxStatus",
|
|
11237
|
-
"tocButton": "FV0QMq_tocButton",
|
|
11238
|
-
"editorStatusError": "FV0QMq_editorStatusError",
|
|
11239
|
-
"editorDownloadLink": "FV0QMq_editorDownloadLink",
|
|
11240
|
-
"splitChild": "FV0QMq_splitChild",
|
|
11241
|
-
"updateVersions": "FV0QMq_updateVersions",
|
|
11242
|
-
"dividerActive": "FV0QMq_dividerActive",
|
|
11243
|
-
"uploadDropZoneText": "FV0QMq_uploadDropZoneText",
|
|
11244
|
-
"uploadOverlayProgressFill": "FV0QMq_uploadOverlayProgressFill",
|
|
11245
|
-
"editorError": "FV0QMq_editorError",
|
|
11246
|
-
"sandboxAction": "FV0QMq_sandboxAction",
|
|
11247
|
-
"gitDiffTabHeader": "FV0QMq_gitDiffTabHeader",
|
|
11248
|
-
"dsh-toc-flash": "FV0QMq_dsh-toc-flash",
|
|
11249
|
-
"explorerEmpty": "FV0QMq_explorerEmpty",
|
|
11250
|
-
"releaseNotesIconButton": "FV0QMq_releaseNotesIconButton",
|
|
11251
|
-
"tabActive": "FV0QMq_tabActive",
|
|
11252
|
-
"mermaidModal": "FV0QMq_mermaidModal",
|
|
11253
|
-
"gitDiffTabTitle": "FV0QMq_gitDiffTabTitle",
|
|
11254
|
-
"bottomResize": "FV0QMq_bottomResize",
|
|
11255
|
-
"editorSearchResult": "FV0QMq_editorSearchResult",
|
|
11256
|
-
"browserBlockedActions": "FV0QMq_browserBlockedActions",
|
|
11257
|
-
"releaseNotesHeader": "FV0QMq_releaseNotesHeader",
|
|
11258
|
-
"mermaidCopy": "FV0QMq_mermaidCopy",
|
|
11259
|
-
"updateSettingsText": "FV0QMq_updateSettingsText",
|
|
11260
|
-
"mermaidInfo": "FV0QMq_mermaidInfo",
|
|
11261
|
-
"paneCard": "FV0QMq_paneCard",
|
|
11262
|
-
"pinnedSessionsHeading": "FV0QMq_pinnedSessionsHeading",
|
|
11263
|
-
"gitSection": "FV0QMq_gitSection",
|
|
11264
|
-
"updateBody": "FV0QMq_updateBody",
|
|
11265
|
-
"splitRow": "FV0QMq_splitRow",
|
|
11266
|
-
"explorerRowDropTarget": "FV0QMq_explorerRowDropTarget",
|
|
11267
|
-
"gitDiffFile": "FV0QMq_gitDiffFile",
|
|
11268
|
-
"producedLabel": "FV0QMq_producedLabel",
|
|
11269
|
-
"editorTitle": "FV0QMq_editorTitle",
|
|
11270
|
-
"browserBar": "FV0QMq_browserBar",
|
|
11271
|
-
"openWithChevron": "FV0QMq_openWithChevron",
|
|
11272
|
-
"editorPdfDragShieldActive": "FV0QMq_editorPdfDragShieldActive",
|
|
11273
|
-
"floatHeader": "FV0QMq_floatHeader",
|
|
11274
|
-
"explorerRoot": "FV0QMq_explorerRoot",
|
|
11275
|
-
"explorerRowRevealed": "FV0QMq_explorerRowRevealed",
|
|
11276
|
-
"sandboxStatusOn": "FV0QMq_sandboxStatusOn",
|
|
11277
|
-
"updateErrorText": "FV0QMq_updateErrorText",
|
|
11278
|
-
"split": "FV0QMq_split",
|
|
11279
|
-
"editorBanner": "FV0QMq_editorBanner",
|
|
11280
|
-
"openWithLabel": "FV0QMq_openWithLabel",
|
|
11281
|
-
"explorerBroken": "FV0QMq_explorerBroken",
|
|
11282
|
-
"editorMain": "FV0QMq_editorMain",
|
|
11283
|
-
"gitDiffFileChevron": "FV0QMq_gitDiffFileChevron",
|
|
11284
|
-
"floatWindow": "FV0QMq_floatWindow",
|
|
11285
|
-
"mermaidBody": "FV0QMq_mermaidBody",
|
|
11286
|
-
"mermaidCode": "FV0QMq_mermaidCode",
|
|
11287
|
-
"editorImage": "FV0QMq_editorImage",
|
|
11288
|
-
"editorCmHidden": "FV0QMq_editorCmHidden",
|
|
11289
|
-
"pinnedSessionsList": "FV0QMq_pinnedSessionsList",
|
|
11290
|
-
"panel": "FV0QMq_panel",
|
|
11291
|
-
"mermaidModalButton": "FV0QMq_mermaidModalButton",
|
|
11292
|
-
"explorerRow": "FV0QMq_explorerRow",
|
|
11293
|
-
"bottomPanelHidden": "FV0QMq_bottomPanelHidden",
|
|
11294
|
-
"divider": "FV0QMq_divider",
|
|
11295
|
-
"gitDiffLine": "FV0QMq_gitDiffLine",
|
|
11296
|
-
"updateSettingsBlock": "FV0QMq_updateSettingsBlock",
|
|
11297
|
-
"dropUp": "FV0QMq_dropUp"
|
|
11298
|
-
};
|
|
11299
|
-
//#endregion
|
|
11300
|
-
//#region src/client/intercept.tsx
|
|
11301
|
-
/**
|
|
11302
|
-
* Contribution of the chat's produced-files row. Current Hosts expose the
|
|
11303
|
-
* turn-tail surface as a list; older Hosts exposed it as a chain. The
|
|
11304
|
-
* registration supplies both shapes' routing fields so one bundle remains
|
|
11305
|
-
* compatible across that transition. The chips open the file in the sidebar
|
|
11306
|
-
* instead of the host OS.
|
|
11307
|
-
*/
|
|
11308
|
-
/** Open a file in the sidebar's editor (used by the intercepted row and the explorer). */
|
|
11309
|
-
function openSidebarFile(ctx, store, sessionId, path) {
|
|
11310
|
-
const summary = ctx.sessions.list.getSnapshot().byId[sessionId];
|
|
11311
|
-
const absolute = resolveSidebarPath(summary?.cwd, path);
|
|
11312
|
-
const at = Math.max(absolute.lastIndexOf("/"), absolute.lastIndexOf("\\"));
|
|
11313
|
-
const title = at === -1 ? absolute : absolute.slice(at + 1);
|
|
11314
|
-
ctx.get("betterSidebar")?.openTab({
|
|
11315
|
-
type: "editor",
|
|
11316
|
-
title,
|
|
11317
|
-
path: absolute,
|
|
11318
|
-
id: `editor:${absolute}`
|
|
11319
|
-
});
|
|
11320
|
-
}
|
|
11321
|
-
/**
|
|
11322
|
-
* The produced files the turn-tail selector last matched for the visible
|
|
11323
|
-
* session. The "Show in folder" gesture carries no file path of its own
|
|
11324
|
-
* (`'.'`), so the reveal highlights exactly these rows when available.
|
|
11325
|
-
*/
|
|
11326
|
-
let lastProduced = [];
|
|
11327
|
-
/**
|
|
11328
|
-
* Reveal the produced files in the sidebar explorer: expand their parent
|
|
11329
|
-
* directories, highlight the rows, and focus the explorer tab (expanding the
|
|
11330
|
-
* hosting panel when it is collapsed). Unknown files fall back to revealing
|
|
11331
|
-
* the workspace root itself.
|
|
11332
|
-
*/
|
|
11333
|
-
function revealInExplorer(ctx, store, sessionId, files) {
|
|
11334
|
-
const cwd = ctx.sessions.list.getSnapshot().byId[sessionId]?.cwd;
|
|
11335
|
-
const targets = files.length > 0 ? files.map((path) => resolveSidebarPath(cwd, path)) : cwd === void 0 ? [] : [cwd];
|
|
11336
|
-
store.reduce((state) => revealPaths(state, cwd, targets));
|
|
11337
|
-
store.reduce((s) => s.panelOpen ? s : togglePanel(s));
|
|
11338
|
-
store.reduce((s) => ({
|
|
11339
|
-
...s,
|
|
11340
|
-
activePane: firstLeaf(s.splits).id
|
|
11341
|
-
}));
|
|
11342
|
-
ctx.get("betterSidebar")?.openTab({
|
|
11343
|
-
type: "editor",
|
|
11344
|
-
title: t("files")
|
|
11345
|
-
});
|
|
10999
|
+
function FiSettings(props) {
|
|
11000
|
+
return GenIcon({
|
|
11001
|
+
"tag": "svg",
|
|
11002
|
+
"attr": {
|
|
11003
|
+
"viewBox": "0 0 24 24",
|
|
11004
|
+
"fill": "none",
|
|
11005
|
+
"stroke": "currentColor",
|
|
11006
|
+
"strokeWidth": "2",
|
|
11007
|
+
"strokeLinecap": "round",
|
|
11008
|
+
"strokeLinejoin": "round"
|
|
11009
|
+
},
|
|
11010
|
+
"child": [{
|
|
11011
|
+
"tag": "circle",
|
|
11012
|
+
"attr": {
|
|
11013
|
+
"cx": "12",
|
|
11014
|
+
"cy": "12",
|
|
11015
|
+
"r": "3"
|
|
11016
|
+
},
|
|
11017
|
+
"child": []
|
|
11018
|
+
}, {
|
|
11019
|
+
"tag": "path",
|
|
11020
|
+
"attr": { "d": "M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z" },
|
|
11021
|
+
"child": []
|
|
11022
|
+
}]
|
|
11023
|
+
})(props);
|
|
11346
11024
|
}
|
|
11347
|
-
|
|
11348
|
-
|
|
11349
|
-
|
|
11350
|
-
|
|
11351
|
-
|
|
11352
|
-
|
|
11353
|
-
|
|
11354
|
-
|
|
11355
|
-
|
|
11356
|
-
|
|
11357
|
-
|
|
11358
|
-
|
|
11359
|
-
|
|
11360
|
-
|
|
11361
|
-
|
|
11362
|
-
|
|
11363
|
-
|
|
11364
|
-
|
|
11365
|
-
|
|
11366
|
-
|
|
11367
|
-
|
|
11368
|
-
|
|
11369
|
-
|
|
11370
|
-
|
|
11371
|
-
|
|
11372
|
-
|
|
11373
|
-
|
|
11374
|
-
children: ["+", hidden]
|
|
11375
|
-
}),
|
|
11376
|
-
hidden > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
11377
|
-
type: "button",
|
|
11378
|
-
className: sidebar_module_css_default.producedMore,
|
|
11379
|
-
style: {
|
|
11380
|
-
cursor: "pointer",
|
|
11381
|
-
textDecoration: "underline",
|
|
11382
|
-
textUnderlineOffset: 2
|
|
11383
|
-
},
|
|
11384
|
-
onClick: () => {
|
|
11385
|
-
onShowInFolder(matched);
|
|
11386
|
-
},
|
|
11387
|
-
children: t("showInFolder")
|
|
11388
|
-
})
|
|
11025
|
+
function FiRefreshCw(props) {
|
|
11026
|
+
return GenIcon({
|
|
11027
|
+
"tag": "svg",
|
|
11028
|
+
"attr": {
|
|
11029
|
+
"viewBox": "0 0 24 24",
|
|
11030
|
+
"fill": "none",
|
|
11031
|
+
"stroke": "currentColor",
|
|
11032
|
+
"strokeWidth": "2",
|
|
11033
|
+
"strokeLinecap": "round",
|
|
11034
|
+
"strokeLinejoin": "round"
|
|
11035
|
+
},
|
|
11036
|
+
"child": [
|
|
11037
|
+
{
|
|
11038
|
+
"tag": "polyline",
|
|
11039
|
+
"attr": { "points": "23 4 23 10 17 10" },
|
|
11040
|
+
"child": []
|
|
11041
|
+
},
|
|
11042
|
+
{
|
|
11043
|
+
"tag": "polyline",
|
|
11044
|
+
"attr": { "points": "1 20 1 14 7 14" },
|
|
11045
|
+
"child": []
|
|
11046
|
+
},
|
|
11047
|
+
{
|
|
11048
|
+
"tag": "path",
|
|
11049
|
+
"attr": { "d": "M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" },
|
|
11050
|
+
"child": []
|
|
11051
|
+
}
|
|
11389
11052
|
]
|
|
11390
|
-
});
|
|
11053
|
+
})(props);
|
|
11391
11054
|
}
|
|
11392
|
-
|
|
11393
|
-
|
|
11394
|
-
|
|
11395
|
-
|
|
11396
|
-
|
|
11397
|
-
|
|
11398
|
-
|
|
11399
|
-
|
|
11400
|
-
|
|
11401
|
-
|
|
11402
|
-
|
|
11055
|
+
function FiPlus(props) {
|
|
11056
|
+
return GenIcon({
|
|
11057
|
+
"tag": "svg",
|
|
11058
|
+
"attr": {
|
|
11059
|
+
"viewBox": "0 0 24 24",
|
|
11060
|
+
"fill": "none",
|
|
11061
|
+
"stroke": "currentColor",
|
|
11062
|
+
"strokeWidth": "2",
|
|
11063
|
+
"strokeLinecap": "round",
|
|
11064
|
+
"strokeLinejoin": "round"
|
|
11065
|
+
},
|
|
11066
|
+
"child": [{
|
|
11067
|
+
"tag": "line",
|
|
11068
|
+
"attr": {
|
|
11069
|
+
"x1": "12",
|
|
11070
|
+
"y1": "5",
|
|
11071
|
+
"x2": "12",
|
|
11072
|
+
"y2": "19"
|
|
11073
|
+
},
|
|
11074
|
+
"child": []
|
|
11075
|
+
}, {
|
|
11076
|
+
"tag": "line",
|
|
11077
|
+
"attr": {
|
|
11078
|
+
"x1": "5",
|
|
11079
|
+
"y1": "12",
|
|
11080
|
+
"x2": "19",
|
|
11081
|
+
"y2": "12"
|
|
11082
|
+
},
|
|
11083
|
+
"child": []
|
|
11084
|
+
}]
|
|
11085
|
+
})(props);
|
|
11403
11086
|
}
|
|
11404
|
-
|
|
11405
|
-
|
|
11406
|
-
|
|
11407
|
-
|
|
11408
|
-
|
|
11409
|
-
|
|
11410
|
-
|
|
11411
|
-
|
|
11412
|
-
|
|
11413
|
-
|
|
11414
|
-
* when the slot is already declared, otherwise it runs inside the declaring
|
|
11415
|
-
* register() call once the declaration commits; declaration collapse
|
|
11416
|
-
* disposes the entry and a later declaration re-registers it. This mirrors
|
|
11417
|
-
* @deepseek-ai/dsh-client-ui-deliverables' registration of the same slot.
|
|
11418
|
-
*/
|
|
11419
|
-
function registerTurnTailInterception(ctx, store) {
|
|
11420
|
-
return ctx.slots.inject("conversation.chat.turnTail", () => ctx.slots.register({
|
|
11421
|
-
name: "conversation.chat.turnTail",
|
|
11422
|
-
id: "dsh-better-sidebar:produced-files",
|
|
11423
|
-
select: (owner) => {
|
|
11424
|
-
if (store.getSuspended()) return null;
|
|
11425
|
-
if (store.getPrefs().tabsEnabled["editor"] === false) return null;
|
|
11426
|
-
const matched = selectProducedFiles(owner);
|
|
11427
|
-
if (matched !== null) lastProduced = matched;
|
|
11428
|
-
return matched;
|
|
11087
|
+
function FiLoader(props) {
|
|
11088
|
+
return GenIcon({
|
|
11089
|
+
"tag": "svg",
|
|
11090
|
+
"attr": {
|
|
11091
|
+
"viewBox": "0 0 24 24",
|
|
11092
|
+
"fill": "none",
|
|
11093
|
+
"stroke": "currentColor",
|
|
11094
|
+
"strokeWidth": "2",
|
|
11095
|
+
"strokeLinecap": "round",
|
|
11096
|
+
"strokeLinejoin": "round"
|
|
11429
11097
|
},
|
|
11430
|
-
|
|
11431
|
-
|
|
11432
|
-
|
|
11433
|
-
|
|
11434
|
-
|
|
11435
|
-
|
|
11098
|
+
"child": [
|
|
11099
|
+
{
|
|
11100
|
+
"tag": "line",
|
|
11101
|
+
"attr": {
|
|
11102
|
+
"x1": "12",
|
|
11103
|
+
"y1": "2",
|
|
11104
|
+
"x2": "12",
|
|
11105
|
+
"y2": "6"
|
|
11106
|
+
},
|
|
11107
|
+
"child": []
|
|
11436
11108
|
},
|
|
11437
|
-
|
|
11438
|
-
|
|
11109
|
+
{
|
|
11110
|
+
"tag": "line",
|
|
11111
|
+
"attr": {
|
|
11112
|
+
"x1": "12",
|
|
11113
|
+
"y1": "18",
|
|
11114
|
+
"x2": "12",
|
|
11115
|
+
"y2": "22"
|
|
11116
|
+
},
|
|
11117
|
+
"child": []
|
|
11118
|
+
},
|
|
11119
|
+
{
|
|
11120
|
+
"tag": "line",
|
|
11121
|
+
"attr": {
|
|
11122
|
+
"x1": "4.93",
|
|
11123
|
+
"y1": "4.93",
|
|
11124
|
+
"x2": "7.76",
|
|
11125
|
+
"y2": "7.76"
|
|
11126
|
+
},
|
|
11127
|
+
"child": []
|
|
11128
|
+
},
|
|
11129
|
+
{
|
|
11130
|
+
"tag": "line",
|
|
11131
|
+
"attr": {
|
|
11132
|
+
"x1": "16.24",
|
|
11133
|
+
"y1": "16.24",
|
|
11134
|
+
"x2": "19.07",
|
|
11135
|
+
"y2": "19.07"
|
|
11136
|
+
},
|
|
11137
|
+
"child": []
|
|
11138
|
+
},
|
|
11139
|
+
{
|
|
11140
|
+
"tag": "line",
|
|
11141
|
+
"attr": {
|
|
11142
|
+
"x1": "2",
|
|
11143
|
+
"y1": "12",
|
|
11144
|
+
"x2": "6",
|
|
11145
|
+
"y2": "12"
|
|
11146
|
+
},
|
|
11147
|
+
"child": []
|
|
11148
|
+
},
|
|
11149
|
+
{
|
|
11150
|
+
"tag": "line",
|
|
11151
|
+
"attr": {
|
|
11152
|
+
"x1": "18",
|
|
11153
|
+
"y1": "12",
|
|
11154
|
+
"x2": "22",
|
|
11155
|
+
"y2": "12"
|
|
11156
|
+
},
|
|
11157
|
+
"child": []
|
|
11158
|
+
},
|
|
11159
|
+
{
|
|
11160
|
+
"tag": "line",
|
|
11161
|
+
"attr": {
|
|
11162
|
+
"x1": "4.93",
|
|
11163
|
+
"y1": "19.07",
|
|
11164
|
+
"x2": "7.76",
|
|
11165
|
+
"y2": "16.24"
|
|
11166
|
+
},
|
|
11167
|
+
"child": []
|
|
11168
|
+
},
|
|
11169
|
+
{
|
|
11170
|
+
"tag": "line",
|
|
11171
|
+
"attr": {
|
|
11172
|
+
"x1": "16.24",
|
|
11173
|
+
"y1": "7.76",
|
|
11174
|
+
"x2": "19.07",
|
|
11175
|
+
"y2": "4.93"
|
|
11176
|
+
},
|
|
11177
|
+
"child": []
|
|
11439
11178
|
}
|
|
11440
|
-
|
|
11441
|
-
}
|
|
11179
|
+
]
|
|
11180
|
+
})(props);
|
|
11442
11181
|
}
|
|
11443
|
-
|
|
11444
|
-
|
|
11445
|
-
|
|
11446
|
-
|
|
11447
|
-
|
|
11448
|
-
|
|
11449
|
-
|
|
11450
|
-
|
|
11451
|
-
|
|
11452
|
-
|
|
11453
|
-
function registerOpenPathInterception(ctx, store) {
|
|
11454
|
-
return wrapOpenPath(ctx.workspaces, {
|
|
11455
|
-
takeoverEnabled: () => !store.getSuspended() && store.getPrefs().interceptOpenPath !== false && store.getPrefs().tabsEnabled["editor"] !== false,
|
|
11456
|
-
currentSessionId: () => currentSessionId(ctx),
|
|
11457
|
-
openInSidebar: (path, sessionId) => {
|
|
11458
|
-
openSidebarFile(ctx, store, sessionId, path);
|
|
11182
|
+
function FiLink(props) {
|
|
11183
|
+
return GenIcon({
|
|
11184
|
+
"tag": "svg",
|
|
11185
|
+
"attr": {
|
|
11186
|
+
"viewBox": "0 0 24 24",
|
|
11187
|
+
"fill": "none",
|
|
11188
|
+
"stroke": "currentColor",
|
|
11189
|
+
"strokeWidth": "2",
|
|
11190
|
+
"strokeLinecap": "round",
|
|
11191
|
+
"strokeLinejoin": "round"
|
|
11459
11192
|
},
|
|
11460
|
-
|
|
11461
|
-
|
|
11462
|
-
|
|
11463
|
-
|
|
11464
|
-
|
|
11465
|
-
|
|
11466
|
-
|
|
11467
|
-
|
|
11468
|
-
|
|
11469
|
-
|
|
11470
|
-
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
11471
|
-
var o = e.length;
|
|
11472
|
-
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
11473
|
-
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
11474
|
-
return n;
|
|
11193
|
+
"child": [{
|
|
11194
|
+
"tag": "path",
|
|
11195
|
+
"attr": { "d": "M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71" },
|
|
11196
|
+
"child": []
|
|
11197
|
+
}, {
|
|
11198
|
+
"tag": "path",
|
|
11199
|
+
"attr": { "d": "M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71" },
|
|
11200
|
+
"child": []
|
|
11201
|
+
}]
|
|
11202
|
+
})(props);
|
|
11475
11203
|
}
|
|
11476
|
-
function
|
|
11477
|
-
|
|
11478
|
-
|
|
11204
|
+
function FiGitBranch(props) {
|
|
11205
|
+
return GenIcon({
|
|
11206
|
+
"tag": "svg",
|
|
11207
|
+
"attr": {
|
|
11208
|
+
"viewBox": "0 0 24 24",
|
|
11209
|
+
"fill": "none",
|
|
11210
|
+
"stroke": "currentColor",
|
|
11211
|
+
"strokeWidth": "2",
|
|
11212
|
+
"strokeLinecap": "round",
|
|
11213
|
+
"strokeLinejoin": "round"
|
|
11214
|
+
},
|
|
11215
|
+
"child": [
|
|
11216
|
+
{
|
|
11217
|
+
"tag": "line",
|
|
11218
|
+
"attr": {
|
|
11219
|
+
"x1": "6",
|
|
11220
|
+
"y1": "3",
|
|
11221
|
+
"x2": "6",
|
|
11222
|
+
"y2": "15"
|
|
11223
|
+
},
|
|
11224
|
+
"child": []
|
|
11225
|
+
},
|
|
11226
|
+
{
|
|
11227
|
+
"tag": "circle",
|
|
11228
|
+
"attr": {
|
|
11229
|
+
"cx": "18",
|
|
11230
|
+
"cy": "6",
|
|
11231
|
+
"r": "3"
|
|
11232
|
+
},
|
|
11233
|
+
"child": []
|
|
11234
|
+
},
|
|
11235
|
+
{
|
|
11236
|
+
"tag": "circle",
|
|
11237
|
+
"attr": {
|
|
11238
|
+
"cx": "6",
|
|
11239
|
+
"cy": "18",
|
|
11240
|
+
"r": "3"
|
|
11241
|
+
},
|
|
11242
|
+
"child": []
|
|
11243
|
+
},
|
|
11244
|
+
{
|
|
11245
|
+
"tag": "path",
|
|
11246
|
+
"attr": { "d": "M18 9a9 9 0 0 1-9 9" },
|
|
11247
|
+
"child": []
|
|
11248
|
+
}
|
|
11249
|
+
]
|
|
11250
|
+
})(props);
|
|
11479
11251
|
}
|
|
11480
|
-
|
|
11481
|
-
|
|
11482
|
-
|
|
11483
|
-
|
|
11484
|
-
|
|
11485
|
-
|
|
11486
|
-
|
|
11487
|
-
|
|
11488
|
-
|
|
11489
|
-
|
|
11490
|
-
|
|
11491
|
-
|
|
11492
|
-
|
|
11252
|
+
function FiFolder(props) {
|
|
11253
|
+
return GenIcon({
|
|
11254
|
+
"tag": "svg",
|
|
11255
|
+
"attr": {
|
|
11256
|
+
"viewBox": "0 0 24 24",
|
|
11257
|
+
"fill": "none",
|
|
11258
|
+
"stroke": "currentColor",
|
|
11259
|
+
"strokeWidth": "2",
|
|
11260
|
+
"strokeLinecap": "round",
|
|
11261
|
+
"strokeLinejoin": "round"
|
|
11262
|
+
},
|
|
11263
|
+
"child": [{
|
|
11264
|
+
"tag": "path",
|
|
11265
|
+
"attr": { "d": "M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" },
|
|
11266
|
+
"child": []
|
|
11267
|
+
}]
|
|
11268
|
+
})(props);
|
|
11493
11269
|
}
|
|
11494
|
-
|
|
11495
|
-
|
|
11496
|
-
|
|
11497
|
-
|
|
11498
|
-
|
|
11499
|
-
|
|
11500
|
-
|
|
11501
|
-
|
|
11502
|
-
|
|
11503
|
-
|
|
11504
|
-
|
|
11505
|
-
|
|
11506
|
-
|
|
11507
|
-
|
|
11508
|
-
|
|
11270
|
+
function FiDownload(props) {
|
|
11271
|
+
return GenIcon({
|
|
11272
|
+
"tag": "svg",
|
|
11273
|
+
"attr": {
|
|
11274
|
+
"viewBox": "0 0 24 24",
|
|
11275
|
+
"fill": "none",
|
|
11276
|
+
"stroke": "currentColor",
|
|
11277
|
+
"strokeWidth": "2",
|
|
11278
|
+
"strokeLinecap": "round",
|
|
11279
|
+
"strokeLinejoin": "round"
|
|
11280
|
+
},
|
|
11281
|
+
"child": [
|
|
11282
|
+
{
|
|
11283
|
+
"tag": "path",
|
|
11284
|
+
"attr": { "d": "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" },
|
|
11285
|
+
"child": []
|
|
11286
|
+
},
|
|
11287
|
+
{
|
|
11288
|
+
"tag": "polyline",
|
|
11289
|
+
"attr": { "points": "7 10 12 15 17 10" },
|
|
11290
|
+
"child": []
|
|
11291
|
+
},
|
|
11292
|
+
{
|
|
11293
|
+
"tag": "line",
|
|
11294
|
+
"attr": {
|
|
11295
|
+
"x1": "12",
|
|
11296
|
+
"y1": "15",
|
|
11297
|
+
"x2": "12",
|
|
11298
|
+
"y2": "3"
|
|
11299
|
+
},
|
|
11300
|
+
"child": []
|
|
11301
|
+
}
|
|
11302
|
+
]
|
|
11303
|
+
})(props);
|
|
11509
11304
|
}
|
|
11510
|
-
|
|
11511
|
-
|
|
11512
|
-
|
|
11513
|
-
|
|
11514
|
-
|
|
11515
|
-
|
|
11516
|
-
|
|
11517
|
-
|
|
11518
|
-
|
|
11519
|
-
|
|
11520
|
-
|
|
11521
|
-
|
|
11522
|
-
|
|
11523
|
-
|
|
11524
|
-
|
|
11525
|
-
|
|
11526
|
-
|
|
11527
|
-
|
|
11528
|
-
|
|
11529
|
-
|
|
11530
|
-
|
|
11531
|
-
|
|
11532
|
-
|
|
11533
|
-
|
|
11534
|
-
|
|
11535
|
-
|
|
11536
|
-
|
|
11537
|
-
|
|
11538
|
-
return parsed.value;
|
|
11305
|
+
function FiCopy(props) {
|
|
11306
|
+
return GenIcon({
|
|
11307
|
+
"tag": "svg",
|
|
11308
|
+
"attr": {
|
|
11309
|
+
"viewBox": "0 0 24 24",
|
|
11310
|
+
"fill": "none",
|
|
11311
|
+
"stroke": "currentColor",
|
|
11312
|
+
"strokeWidth": "2",
|
|
11313
|
+
"strokeLinecap": "round",
|
|
11314
|
+
"strokeLinejoin": "round"
|
|
11315
|
+
},
|
|
11316
|
+
"child": [{
|
|
11317
|
+
"tag": "rect",
|
|
11318
|
+
"attr": {
|
|
11319
|
+
"x": "9",
|
|
11320
|
+
"y": "9",
|
|
11321
|
+
"width": "13",
|
|
11322
|
+
"height": "13",
|
|
11323
|
+
"rx": "2",
|
|
11324
|
+
"ry": "2"
|
|
11325
|
+
},
|
|
11326
|
+
"child": []
|
|
11327
|
+
}, {
|
|
11328
|
+
"tag": "path",
|
|
11329
|
+
"attr": { "d": "M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1" },
|
|
11330
|
+
"child": []
|
|
11331
|
+
}]
|
|
11332
|
+
})(props);
|
|
11539
11333
|
}
|
|
11540
|
-
|
|
11541
|
-
|
|
11542
|
-
|
|
11543
|
-
|
|
11544
|
-
|
|
11545
|
-
|
|
11546
|
-
|
|
11547
|
-
|
|
11334
|
+
function FiCode(props) {
|
|
11335
|
+
return GenIcon({
|
|
11336
|
+
"tag": "svg",
|
|
11337
|
+
"attr": {
|
|
11338
|
+
"viewBox": "0 0 24 24",
|
|
11339
|
+
"fill": "none",
|
|
11340
|
+
"stroke": "currentColor",
|
|
11341
|
+
"strokeWidth": "2",
|
|
11342
|
+
"strokeLinecap": "round",
|
|
11343
|
+
"strokeLinejoin": "round"
|
|
11344
|
+
},
|
|
11345
|
+
"child": [{
|
|
11346
|
+
"tag": "polyline",
|
|
11347
|
+
"attr": { "points": "16 18 22 12 16 6" },
|
|
11348
|
+
"child": []
|
|
11349
|
+
}, {
|
|
11350
|
+
"tag": "polyline",
|
|
11351
|
+
"attr": { "points": "8 6 2 12 8 18" },
|
|
11352
|
+
"child": []
|
|
11353
|
+
}]
|
|
11354
|
+
})(props);
|
|
11548
11355
|
}
|
|
11549
|
-
|
|
11550
|
-
|
|
11551
|
-
|
|
11552
|
-
|
|
11553
|
-
|
|
11554
|
-
|
|
11555
|
-
|
|
11356
|
+
function FiChevronRight(props) {
|
|
11357
|
+
return GenIcon({
|
|
11358
|
+
"tag": "svg",
|
|
11359
|
+
"attr": {
|
|
11360
|
+
"viewBox": "0 0 24 24",
|
|
11361
|
+
"fill": "none",
|
|
11362
|
+
"stroke": "currentColor",
|
|
11363
|
+
"strokeWidth": "2",
|
|
11364
|
+
"strokeLinecap": "round",
|
|
11365
|
+
"strokeLinejoin": "round"
|
|
11366
|
+
},
|
|
11367
|
+
"child": [{
|
|
11368
|
+
"tag": "polyline",
|
|
11369
|
+
"attr": { "points": "9 18 15 12 9 6" },
|
|
11370
|
+
"child": []
|
|
11371
|
+
}]
|
|
11372
|
+
})(props);
|
|
11556
11373
|
}
|
|
11557
|
-
|
|
11558
|
-
|
|
11559
|
-
|
|
11560
|
-
|
|
11561
|
-
|
|
11562
|
-
|
|
11563
|
-
|
|
11564
|
-
|
|
11565
|
-
|
|
11566
|
-
|
|
11567
|
-
|
|
11568
|
-
|
|
11569
|
-
|
|
11570
|
-
|
|
11571
|
-
|
|
11572
|
-
|
|
11573
|
-
|
|
11574
|
-
end
|
|
11575
|
-
}, signal),
|
|
11576
|
-
/** Personal commit records of one day range (AI-ratio view). */
|
|
11577
|
-
chatcodeGitCommitStats: (begin, end, signal) => call("chatcode.git-commit-stats", {
|
|
11578
|
-
begin,
|
|
11579
|
-
end
|
|
11580
|
-
}, signal),
|
|
11581
|
-
sessionCwd: (scope, signal) => call("session.cwd", scopePayload(scope, {}), signal),
|
|
11582
|
-
fsTree: (scope, path, signal) => call("fs.tree", scopePayload(scope, { path }), signal),
|
|
11583
|
-
/** Global recursive file-name search rooted at the session cwd (the editor
|
|
11584
|
-
* side panel's search box); matches are cwd-relative '/'-separated paths. */
|
|
11585
|
-
fsSearch: (scope, query, signal) => call("fs.search", scopePayload(scope, { query }), signal),
|
|
11586
|
-
fsRead: (scope, path, signal) => call("fs.read", scopePayload(scope, { path }), signal),
|
|
11587
|
-
fsWrite: (scope, path, content) => call("fs.write", scopePayload(scope, {
|
|
11588
|
-
path,
|
|
11589
|
-
content
|
|
11590
|
-
})),
|
|
11591
|
-
/** Upload one file's raw bytes into `dir` (keeps the folder tree via
|
|
11592
|
-
* `relativePath`); the host streams it under the session workspace. */
|
|
11593
|
-
uploadFile: (scope, dir, relativePath, body, signal) => fetchUpload(scope, dir, relativePath, body, signal),
|
|
11594
|
-
gitWorktrees: (scope, signal) => call("git.worktrees", scopePayload(scope, {}), signal),
|
|
11595
|
-
gitStatus: (scope, worktree, signal) => call("git.status", gitPayload(scope, worktree, {}), signal),
|
|
11596
|
-
gitDiff: (scope, path, staged, worktree, signal) => call("git.diff", gitPayload(scope, worktree, {
|
|
11597
|
-
...path !== void 0 ? { path } : {},
|
|
11598
|
-
staged
|
|
11599
|
-
}), signal),
|
|
11600
|
-
gitStage: (scope, path, worktree) => call("git.stage", gitPayload(scope, worktree, { ...path !== void 0 ? { path } : {} })),
|
|
11601
|
-
gitUnstage: (scope, path, worktree) => call("git.unstage", gitPayload(scope, worktree, { ...path !== void 0 ? { path } : {} })),
|
|
11602
|
-
gitCommit: (scope, message, worktree) => call("git.commit", gitPayload(scope, worktree, { message })),
|
|
11603
|
-
gitBranch: (scope, worktree, signal) => call("git.branch", gitPayload(scope, worktree, {}), signal),
|
|
11604
|
-
gitCheckout: (scope, branch, worktree) => call("git.checkout", gitPayload(scope, worktree, { branch })),
|
|
11605
|
-
/** Recent commit history, lazily pageable (skip/count; defaults 0/30). */
|
|
11606
|
-
gitLog: (scope, count, skip, worktree, signal) => call("git.log", gitPayload(scope, worktree, {
|
|
11607
|
-
...count !== void 0 ? { count } : {},
|
|
11608
|
-
...skip !== void 0 ? { skip } : {}
|
|
11609
|
-
}), signal),
|
|
11610
|
-
/** Full patch text of one commit (diff display for the history rows). */
|
|
11611
|
-
gitCommitDiff: (scope, hash, worktree, signal) => call("git.commit-diff", gitPayload(scope, worktree, { hash }), signal),
|
|
11612
|
-
/** Discard the worktree changes of one file (the index is untouched). */
|
|
11613
|
-
gitDiscard: (scope, path, worktree) => call("git.discard", gitPayload(scope, worktree, { path })),
|
|
11614
|
-
/** Revert one commit onto the current branch. */
|
|
11615
|
-
gitRevert: (scope, hash, worktree) => call("git.revert", gitPayload(scope, worktree, { hash })),
|
|
11616
|
-
/** Cherry-pick one commit onto the current branch. */
|
|
11617
|
-
gitCherryPick: (scope, hash, worktree) => call("git.cherry-pick", gitPayload(scope, worktree, { hash })),
|
|
11618
|
-
/** Release a terminal's process immediately (tab closed; the WS close frame
|
|
11619
|
-
* may be unreachable while the socket is down, so the host also accepts
|
|
11620
|
-
* this explicit route). */
|
|
11621
|
-
ptyClose: (scope, tab) => call("pty.close", scopePayload(scope, { tab })),
|
|
11622
|
-
/** Release an agent terminal by uuid (tab closed while WS was down). */
|
|
11623
|
-
agentPtyClose: (uuid) => call("agent-pty.close", { uuid }),
|
|
11624
|
-
/** Terminal dependency status (issue #140): after a WS close 1011 with
|
|
11625
|
-
* reason `pty-deps-missing` the view fetches the full repair details here
|
|
11626
|
-
* (the close reason itself is capped at 123 bytes). */
|
|
11627
|
-
terminalDeps: () => call("terminal.deps", {}),
|
|
11628
|
-
/** The effective terminal shell and its display name (plugin-global). */
|
|
11629
|
-
shellGet: () => call("shell.get", {}),
|
|
11630
|
-
/** The local display name used by the bottom-left account menu. */
|
|
11631
|
-
accountGet: () => call("account.get", {}),
|
|
11632
|
-
/** Read the host-cached CodingPlan model catalogue. */
|
|
11633
|
-
codingPlanModels: () => call("codingplan.models", {}),
|
|
11634
|
-
/** Refresh the host-cached CodingPlan catalogue. */
|
|
11635
|
-
codingPlanRefresh: () => call("codingplan.refresh", {}),
|
|
11636
|
-
/** Read the side card preferences (plugin-global, no session scope). */
|
|
11637
|
-
settingsGet: () => call("settings.get", {}),
|
|
11638
|
-
/** Merge a patch into the side card preferences (revision-guarded). */
|
|
11639
|
-
settingsUpdate: (patch, expectedRevision) => call("settings.update", {
|
|
11640
|
-
patch,
|
|
11641
|
-
...expectedRevision !== void 0 ? { expectedRevision } : {}
|
|
11642
|
-
}),
|
|
11643
|
-
/** Probe a URL's response headers (the sidebar browser's embeddability
|
|
11644
|
-
* check; see the host's browser.probe route). */
|
|
11645
|
-
browserProbe: (url, signal) => call("browser.probe", { url }, signal),
|
|
11646
|
-
/** External open for the file tree's "open with" menu: reveal a path in
|
|
11647
|
-
* the OS file manager, or hand a custom-scheme URL (vscode://, cursor://,
|
|
11648
|
-
* zed://, custom editors) to its registered handler. The host launches
|
|
11649
|
-
* the platform opener (argv, no shell). */
|
|
11650
|
-
openExternal: (payload) => call("open.external", payload)
|
|
11651
|
-
};
|
|
11652
|
-
/** Absolute URL of the media route for one path (images only). */
|
|
11653
|
-
function mediaUrl(scope, path) {
|
|
11654
|
-
return fileUrl(scope, path, false);
|
|
11374
|
+
function FiChevronLeft(props) {
|
|
11375
|
+
return GenIcon({
|
|
11376
|
+
"tag": "svg",
|
|
11377
|
+
"attr": {
|
|
11378
|
+
"viewBox": "0 0 24 24",
|
|
11379
|
+
"fill": "none",
|
|
11380
|
+
"stroke": "currentColor",
|
|
11381
|
+
"strokeWidth": "2",
|
|
11382
|
+
"strokeLinecap": "round",
|
|
11383
|
+
"strokeLinejoin": "round"
|
|
11384
|
+
},
|
|
11385
|
+
"child": [{
|
|
11386
|
+
"tag": "polyline",
|
|
11387
|
+
"attr": { "points": "15 18 9 12 15 6" },
|
|
11388
|
+
"child": []
|
|
11389
|
+
}]
|
|
11390
|
+
})(props);
|
|
11655
11391
|
}
|
|
11656
|
-
|
|
11657
|
-
|
|
11658
|
-
|
|
11659
|
-
|
|
11392
|
+
function FiChevronDown(props) {
|
|
11393
|
+
return GenIcon({
|
|
11394
|
+
"tag": "svg",
|
|
11395
|
+
"attr": {
|
|
11396
|
+
"viewBox": "0 0 24 24",
|
|
11397
|
+
"fill": "none",
|
|
11398
|
+
"stroke": "currentColor",
|
|
11399
|
+
"strokeWidth": "2",
|
|
11400
|
+
"strokeLinecap": "round",
|
|
11401
|
+
"strokeLinejoin": "round"
|
|
11402
|
+
},
|
|
11403
|
+
"child": [{
|
|
11404
|
+
"tag": "polyline",
|
|
11405
|
+
"attr": { "points": "6 9 12 15 18 9" },
|
|
11406
|
+
"child": []
|
|
11407
|
+
}]
|
|
11408
|
+
})(props);
|
|
11660
11409
|
}
|
|
11661
|
-
|
|
11662
|
-
|
|
11663
|
-
|
|
11664
|
-
|
|
11665
|
-
|
|
11666
|
-
|
|
11667
|
-
|
|
11668
|
-
|
|
11669
|
-
|
|
11410
|
+
function FiCheck(props) {
|
|
11411
|
+
return GenIcon({
|
|
11412
|
+
"tag": "svg",
|
|
11413
|
+
"attr": {
|
|
11414
|
+
"viewBox": "0 0 24 24",
|
|
11415
|
+
"fill": "none",
|
|
11416
|
+
"stroke": "currentColor",
|
|
11417
|
+
"strokeWidth": "2",
|
|
11418
|
+
"strokeLinecap": "round",
|
|
11419
|
+
"strokeLinejoin": "round"
|
|
11420
|
+
},
|
|
11421
|
+
"child": [{
|
|
11422
|
+
"tag": "polyline",
|
|
11423
|
+
"attr": { "points": "20 6 9 17 4 12" },
|
|
11424
|
+
"child": []
|
|
11425
|
+
}]
|
|
11426
|
+
})(props);
|
|
11670
11427
|
}
|
|
11671
|
-
|
|
11672
|
-
|
|
11673
|
-
|
|
11674
|
-
|
|
11675
|
-
|
|
11676
|
-
|
|
11677
|
-
|
|
11678
|
-
|
|
11679
|
-
|
|
11680
|
-
|
|
11681
|
-
|
|
11682
|
-
|
|
11683
|
-
|
|
11684
|
-
|
|
11685
|
-
|
|
11686
|
-
|
|
11428
|
+
function FiAlertTriangle(props) {
|
|
11429
|
+
return GenIcon({
|
|
11430
|
+
"tag": "svg",
|
|
11431
|
+
"attr": {
|
|
11432
|
+
"viewBox": "0 0 24 24",
|
|
11433
|
+
"fill": "none",
|
|
11434
|
+
"stroke": "currentColor",
|
|
11435
|
+
"strokeWidth": "2",
|
|
11436
|
+
"strokeLinecap": "round",
|
|
11437
|
+
"strokeLinejoin": "round"
|
|
11438
|
+
},
|
|
11439
|
+
"child": [
|
|
11440
|
+
{
|
|
11441
|
+
"tag": "path",
|
|
11442
|
+
"attr": { "d": "M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z" },
|
|
11443
|
+
"child": []
|
|
11444
|
+
},
|
|
11445
|
+
{
|
|
11446
|
+
"tag": "line",
|
|
11447
|
+
"attr": {
|
|
11448
|
+
"x1": "12",
|
|
11449
|
+
"y1": "9",
|
|
11450
|
+
"x2": "12",
|
|
11451
|
+
"y2": "13"
|
|
11452
|
+
},
|
|
11453
|
+
"child": []
|
|
11454
|
+
},
|
|
11455
|
+
{
|
|
11456
|
+
"tag": "line",
|
|
11457
|
+
"attr": {
|
|
11458
|
+
"x1": "12",
|
|
11459
|
+
"y1": "17",
|
|
11460
|
+
"x2": "12.01",
|
|
11461
|
+
"y2": "17"
|
|
11462
|
+
},
|
|
11463
|
+
"child": []
|
|
11464
|
+
}
|
|
11465
|
+
]
|
|
11466
|
+
})(props);
|
|
11687
11467
|
}
|
|
11688
11468
|
//#endregion
|
|
11689
|
-
//#region src/client/
|
|
11690
|
-
/** Validate one raw resolved value into {@link SidebarPrefs}. Used for the
|
|
11691
|
-
* settings.get payload AND the settings.update response (both carry the
|
|
11692
|
-
* layered resolved value); any malformed field falls back to its default.
|
|
11693
|
-
* @param value - the raw resolved section from the settings wire.
|
|
11694
|
-
* @returns validated prefs (always well-formed).
|
|
11695
|
-
*/
|
|
11696
|
-
function parsePrefs(value) {
|
|
11697
|
-
if (value === null || typeof value !== "object") return { ...SIDEBAR_PREFS_DEFAULTS };
|
|
11698
|
-
const record = value;
|
|
11699
|
-
return {
|
|
11700
|
-
openByDefault: typeof record.openByDefault === "boolean" ? record.openByDefault : SIDEBAR_PREFS_DEFAULTS.openByDefault,
|
|
11701
|
-
defaultWidthPercent: typeof record.defaultWidthPercent === "number" && Number.isFinite(record.defaultWidthPercent) ? clampWidthPercent(record.defaultWidthPercent) : SIDEBAR_PREFS_DEFAULTS.defaultWidthPercent,
|
|
11702
|
-
autoOpenSubagent: typeof record.autoOpenSubagent === "boolean" ? record.autoOpenSubagent : SIDEBAR_PREFS_DEFAULTS.autoOpenSubagent,
|
|
11703
|
-
autoOpenJobs: typeof record.autoOpenJobs === "boolean" ? record.autoOpenJobs : SIDEBAR_PREFS_DEFAULTS.autoOpenJobs,
|
|
11704
|
-
agentTerminalTools: typeof record.agentTerminalTools === "boolean" ? record.agentTerminalTools : SIDEBAR_PREFS_DEFAULTS.agentTerminalTools,
|
|
11705
|
-
agentOpenTools: typeof record.agentOpenTools === "boolean" ? record.agentOpenTools : SIDEBAR_PREFS_DEFAULTS.agentOpenTools,
|
|
11706
|
-
bottomPanelAutoTerminal: typeof record.bottomPanelAutoTerminal === "boolean" ? record.bottomPanelAutoTerminal : SIDEBAR_PREFS_DEFAULTS.bottomPanelAutoTerminal,
|
|
11707
|
-
terminalFontFamily: typeof record.terminalFontFamily === "string" ? record.terminalFontFamily : SIDEBAR_PREFS_DEFAULTS.terminalFontFamily,
|
|
11708
|
-
terminalShell: typeof record.terminalShell === "string" ? record.terminalShell : SIDEBAR_PREFS_DEFAULTS.terminalShell,
|
|
11709
|
-
terminalShellArgs: typeof record.terminalShellArgs === "string" ? record.terminalShellArgs : SIDEBAR_PREFS_DEFAULTS.terminalShellArgs,
|
|
11710
|
-
terminalFontSize: typeof record.terminalFontSize === "number" && Number.isFinite(record.terminalFontSize) ? clampTerminalFontSize(record.terminalFontSize) : SIDEBAR_PREFS_DEFAULTS.terminalFontSize,
|
|
11711
|
-
interceptOpenPath: typeof record.interceptOpenPath === "boolean" ? record.interceptOpenPath : SIDEBAR_PREFS_DEFAULTS.interceptOpenPath,
|
|
11712
|
-
editorExplorer: typeof record.editorExplorer === "boolean" ? record.editorExplorer : SIDEBAR_PREFS_DEFAULTS.editorExplorer,
|
|
11713
|
-
workspaceFence: typeof record.workspaceFence === "boolean" ? record.workspaceFence : SIDEBAR_PREFS_DEFAULTS.workspaceFence,
|
|
11714
|
-
titleBarScheme: isTitleBarScheme(record.titleBarScheme) ? record.titleBarScheme : record.titleBarCompat === true || hasLegacyStripValue(record.titleBarStripPx) ? "custom" : "auto",
|
|
11715
|
-
titleBarPresetId: typeof record.titleBarPresetId === "string" ? record.titleBarPresetId : SIDEBAR_PREFS_DEFAULTS.titleBarPresetId,
|
|
11716
|
-
customCss: typeof record.customCss === "string" ? record.customCss : SIDEBAR_PREFS_DEFAULTS.customCss,
|
|
11717
|
-
titleBarCompat: typeof record.titleBarCompat === "boolean" ? record.titleBarCompat : SIDEBAR_PREFS_DEFAULTS.titleBarCompat,
|
|
11718
|
-
titleBarStripPx: typeof record.titleBarStripPx === "number" && Number.isFinite(record.titleBarStripPx) ? clampTitleBarStrip(record.titleBarStripPx) : SIDEBAR_PREFS_DEFAULTS.titleBarStripPx,
|
|
11719
|
-
htmlViewerNoSandbox: typeof record.htmlViewerNoSandbox === "boolean" ? record.htmlViewerNoSandbox : SIDEBAR_PREFS_DEFAULTS.htmlViewerNoSandbox,
|
|
11720
|
-
htmlViewerDefaultUnsafe: typeof record.htmlViewerDefaultUnsafe === "boolean" ? record.htmlViewerDefaultUnsafe : SIDEBAR_PREFS_DEFAULTS.htmlViewerDefaultUnsafe,
|
|
11721
|
-
browserNoSandbox: typeof record.browserNoSandbox === "boolean" ? record.browserNoSandbox : SIDEBAR_PREFS_DEFAULTS.browserNoSandbox,
|
|
11722
|
-
browserInterceptLinks: typeof record.browserInterceptLinks === "boolean" ? record.browserInterceptLinks : SIDEBAR_PREFS_DEFAULTS.browserInterceptLinks,
|
|
11723
|
-
browserInterceptHttp: typeof record.browserInterceptHttp === "boolean" ? record.browserInterceptHttp : SIDEBAR_PREFS_DEFAULTS.browserInterceptHttp,
|
|
11724
|
-
browserInterceptHttps: typeof record.browserInterceptHttps === "boolean" ? record.browserInterceptHttps : SIDEBAR_PREFS_DEFAULTS.browserInterceptHttps,
|
|
11725
|
-
browserAllowedLoopback: typeof record.browserAllowedLoopback === "string" ? record.browserAllowedLoopback : SIDEBAR_PREFS_DEFAULTS.browserAllowedLoopback,
|
|
11726
|
-
tabsEnabled: booleanMapOf(record.tabsEnabled),
|
|
11727
|
-
viewersEnabled: booleanMapOf(record.viewersEnabled),
|
|
11728
|
-
pluginSettings: pluginSettingsMapOf(record.pluginSettings)
|
|
11729
|
-
};
|
|
11730
|
-
}
|
|
11469
|
+
//#region src/client/icons.tsx
|
|
11731
11470
|
/**
|
|
11732
|
-
*
|
|
11733
|
-
*
|
|
11734
|
-
*
|
|
11735
|
-
*
|
|
11471
|
+
* Icons owned by the sidebar. DSH 0.1.7 stopped exporting the old Icon*
|
|
11472
|
+
* components from dsh-client-ui-primitives, so keeping every glyph local
|
|
11473
|
+
* makes the browser bundle work against both the 0.1.2 and 0.1.7 hosts.
|
|
11474
|
+
* Per-tab icons live on the tab descriptors
|
|
11475
|
+
* (`descriptor.icon`), not in a type-keyed switch — the icon mapping was
|
|
11476
|
+
* registry-ized with the tab types.
|
|
11736
11477
|
*/
|
|
11737
|
-
|
|
11738
|
-
|
|
11739
|
-
|
|
11740
|
-
|
|
11741
|
-
|
|
11742
|
-
|
|
11478
|
+
const wrapIcon = (Icon, defaultSize) => ({ size = defaultSize, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, {
|
|
11479
|
+
size,
|
|
11480
|
+
className
|
|
11481
|
+
});
|
|
11482
|
+
const IconRefreshOutline16 = wrapIcon(FiRefreshCw, 16);
|
|
11483
|
+
const IconRefreshOutline14 = wrapIcon(FiRefreshCw, 14);
|
|
11484
|
+
const IconChevronRightOutline14 = wrapIcon(FiChevronRight, 14);
|
|
11485
|
+
const IconChevronLeftOutline14 = wrapIcon(FiChevronLeft, 14);
|
|
11486
|
+
const IconChevronDownOutline14 = wrapIcon(FiChevronDown, 14);
|
|
11487
|
+
const IconCodeOutline16 = wrapIcon(FiCode, 16);
|
|
11488
|
+
const IconCopyOutline16 = wrapIcon(FiCopy, 16);
|
|
11489
|
+
const IconDownloadOutline16 = wrapIcon(FiDownload, 16);
|
|
11490
|
+
const IconLinkOutline16 = wrapIcon(FiLink, 16);
|
|
11491
|
+
const IconLinkOutline14 = wrapIcon(FiLink, 14);
|
|
11492
|
+
const IconBranchOutline16 = wrapIcon(FiGitBranch, 16);
|
|
11493
|
+
const IconTrashOutline16 = wrapIcon(FiTrash2, 16);
|
|
11494
|
+
const IconWarningOutline16 = wrapIcon(FiAlertTriangle, 16);
|
|
11495
|
+
const IconCloseFill14 = wrapIcon(FiX, 14);
|
|
11496
|
+
const IconCloseOutline16 = wrapIcon(FiX, 16);
|
|
11497
|
+
const IconLoadingOutline16 = wrapIcon(FiLoader, 16);
|
|
11498
|
+
const IconPlusOutline16 = wrapIcon(FiPlus, 16);
|
|
11499
|
+
const IconSettingsOutline16 = wrapIcon(FiSettings, 16);
|
|
11500
|
+
const IconFolderOpen16 = wrapIcon(FiFolder, 16);
|
|
11501
|
+
const IconPanelLeftOutline16 = wrapIcon(FiSidebar, 16);
|
|
11502
|
+
const IconCheckOutline16 = wrapIcon(FiCheck, 16);
|
|
11503
|
+
/** User-manual glyph: an open book in the sidebar's 1.5px outline style. */
|
|
11504
|
+
const IconBookOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
11505
|
+
width: size,
|
|
11506
|
+
height: size,
|
|
11507
|
+
className,
|
|
11508
|
+
viewBox: "0 0 16 16",
|
|
11509
|
+
fill: "none",
|
|
11510
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11511
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11512
|
+
d: "M2.25 3.5A1.5 1.5 0 0 1 3.75 2H7.5v11H3.75a1.5 1.5 0 0 0-1.5 1.5zM13.75 3.5A1.5 1.5 0 0 0 12.25 2H8.5v11h3.75a1.5 1.5 0 0 1 1.5 1.5z",
|
|
11513
|
+
stroke: "currentColor",
|
|
11514
|
+
strokeWidth: "1.5",
|
|
11515
|
+
strokeLinejoin: "round"
|
|
11516
|
+
})
|
|
11517
|
+
});
|
|
11743
11518
|
/**
|
|
11744
|
-
*
|
|
11745
|
-
*
|
|
11746
|
-
*
|
|
11519
|
+
* Right-panel toggle glyph (the "侧拉" button): a frame with a filled strip
|
|
11520
|
+
* along its RIGHT edge, in the app's outline style (1.5px stroke,
|
|
11521
|
+
* currentColor).
|
|
11747
11522
|
*/
|
|
11748
|
-
|
|
11749
|
-
|
|
11750
|
-
|
|
11751
|
-
|
|
11752
|
-
|
|
11753
|
-
|
|
11754
|
-
|
|
11755
|
-
|
|
11756
|
-
|
|
11757
|
-
|
|
11758
|
-
|
|
11759
|
-
|
|
11760
|
-
|
|
11761
|
-
|
|
11762
|
-
|
|
11763
|
-
|
|
11764
|
-
|
|
11765
|
-
|
|
11766
|
-
|
|
11767
|
-
|
|
11768
|
-
|
|
11769
|
-
|
|
11770
|
-
|
|
11771
|
-
|
|
11772
|
-
|
|
11773
|
-
async function loadPrefs(settings) {
|
|
11774
|
-
try {
|
|
11775
|
-
return parsePrefs((await settings.settingsGet()).value);
|
|
11776
|
-
} catch {
|
|
11777
|
-
return { ...SIDEBAR_PREFS_DEFAULTS };
|
|
11778
|
-
}
|
|
11779
|
-
}
|
|
11523
|
+
const IconPanelRightOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
11524
|
+
width: size,
|
|
11525
|
+
height: size,
|
|
11526
|
+
className,
|
|
11527
|
+
viewBox: "0 0 16 16",
|
|
11528
|
+
fill: "none",
|
|
11529
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11530
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
11531
|
+
x: "1.5",
|
|
11532
|
+
y: "2",
|
|
11533
|
+
width: "13",
|
|
11534
|
+
height: "12",
|
|
11535
|
+
rx: "2.5",
|
|
11536
|
+
stroke: "currentColor",
|
|
11537
|
+
strokeWidth: "1.5"
|
|
11538
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
11539
|
+
x: "10.5",
|
|
11540
|
+
y: "3.25",
|
|
11541
|
+
width: "2.75",
|
|
11542
|
+
height: "9.5",
|
|
11543
|
+
rx: "1",
|
|
11544
|
+
fill: "currentColor",
|
|
11545
|
+
stroke: "none"
|
|
11546
|
+
})]
|
|
11547
|
+
});
|
|
11780
11548
|
/**
|
|
11781
|
-
*
|
|
11782
|
-
*
|
|
11783
|
-
* resolved `aionui-panel.rightPanel` to 'aionui-panel' — while true the
|
|
11784
|
-
* sidebar must not mount (the two right panels are mutually exclusive). Any
|
|
11785
|
-
* failure (route rejected, aionui absent, malformed response) reads false,
|
|
11786
|
-
* so a missing family never hides the sidebar.
|
|
11787
|
-
* @param settings - the settings wire face (the plugin api by default).
|
|
11788
|
-
* @returns the external-disable flag (false on any failure).
|
|
11549
|
+
* Bottom-panel toggle glyph (the "底栏" button): a frame with a filled strip
|
|
11550
|
+
* along its BOTTOM edge, in the app's outline style.
|
|
11789
11551
|
*/
|
|
11790
|
-
|
|
11791
|
-
|
|
11792
|
-
|
|
11793
|
-
|
|
11794
|
-
|
|
11795
|
-
|
|
11796
|
-
|
|
11797
|
-
|
|
11798
|
-
|
|
11552
|
+
const IconPanelBottomOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
11553
|
+
width: size,
|
|
11554
|
+
height: size,
|
|
11555
|
+
className,
|
|
11556
|
+
viewBox: "0 0 16 16",
|
|
11557
|
+
fill: "none",
|
|
11558
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11559
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
11560
|
+
x: "1.5",
|
|
11561
|
+
y: "2",
|
|
11562
|
+
width: "13",
|
|
11563
|
+
height: "12",
|
|
11564
|
+
rx: "2.5",
|
|
11565
|
+
stroke: "currentColor",
|
|
11566
|
+
strokeWidth: "1.5"
|
|
11567
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
11568
|
+
x: "3.25",
|
|
11569
|
+
y: "10",
|
|
11570
|
+
width: "9.5",
|
|
11571
|
+
height: "2.75",
|
|
11572
|
+
rx: "1",
|
|
11573
|
+
fill: "currentColor",
|
|
11574
|
+
stroke: "none"
|
|
11575
|
+
})]
|
|
11576
|
+
});
|
|
11799
11577
|
/**
|
|
11800
|
-
*
|
|
11801
|
-
*
|
|
11802
|
-
* slots render the localized reason plus a one-click global off — the click
|
|
11803
|
-
* flips the `workspaceFence` pref through the settings route, adopts the
|
|
11804
|
-
* returned document into the store (so every prefs reader — GitView's open
|
|
11805
|
-
* guard, the settings page — flips with it), and calls `onDisabled` so the
|
|
11806
|
-
* caller retries the failed operation immediately.
|
|
11578
|
+
* Terminal glyph in the app's outline style (1.5px stroke, currentColor):
|
|
11579
|
+
* a rounded frame with a prompt chevron and underscore cursor.
|
|
11807
11580
|
*/
|
|
11808
|
-
|
|
11809
|
-
|
|
11810
|
-
|
|
11811
|
-
|
|
11812
|
-
|
|
11813
|
-
|
|
11814
|
-
|
|
11815
|
-
|
|
11816
|
-
|
|
11817
|
-
|
|
11818
|
-
|
|
11819
|
-
|
|
11820
|
-
|
|
11821
|
-
|
|
11822
|
-
|
|
11823
|
-
|
|
11824
|
-
|
|
11825
|
-
|
|
11826
|
-
|
|
11827
|
-
|
|
11828
|
-
|
|
11829
|
-
|
|
11830
|
-
|
|
11831
|
-
|
|
11832
|
-
|
|
11833
|
-
|
|
11834
|
-
|
|
11835
|
-
|
|
11836
|
-
|
|
11837
|
-
|
|
11838
|
-
|
|
11839
|
-
|
|
11840
|
-
|
|
11581
|
+
const IconTerminalOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
11582
|
+
width: size,
|
|
11583
|
+
height: size,
|
|
11584
|
+
className,
|
|
11585
|
+
viewBox: "0 0 16 16",
|
|
11586
|
+
fill: "none",
|
|
11587
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11588
|
+
children: [
|
|
11589
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
11590
|
+
x: "1.5",
|
|
11591
|
+
y: "2.5",
|
|
11592
|
+
width: "13",
|
|
11593
|
+
height: "11",
|
|
11594
|
+
rx: "2",
|
|
11595
|
+
stroke: "currentColor",
|
|
11596
|
+
strokeWidth: "1.5"
|
|
11597
|
+
}),
|
|
11598
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11599
|
+
d: "M4.5 6.25 6.75 8 4.5 9.75",
|
|
11600
|
+
stroke: "currentColor",
|
|
11601
|
+
strokeWidth: "1.5",
|
|
11602
|
+
strokeLinecap: "round",
|
|
11603
|
+
strokeLinejoin: "round"
|
|
11604
|
+
}),
|
|
11605
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11606
|
+
d: "M8.5 10.4h3",
|
|
11607
|
+
stroke: "currentColor",
|
|
11608
|
+
strokeWidth: "1.5",
|
|
11609
|
+
strokeLinecap: "round"
|
|
11610
|
+
})
|
|
11611
|
+
]
|
|
11612
|
+
});
|
|
11613
|
+
/** Diff glyph in the app's outline style: a file frame with a plus and a minus row. */
|
|
11614
|
+
const IconDiffOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
11615
|
+
width: size,
|
|
11616
|
+
height: size,
|
|
11617
|
+
className,
|
|
11618
|
+
viewBox: "0 0 16 16",
|
|
11619
|
+
fill: "none",
|
|
11620
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11621
|
+
children: [
|
|
11622
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
11623
|
+
x: "1.5",
|
|
11624
|
+
y: "1.5",
|
|
11625
|
+
width: "13",
|
|
11626
|
+
height: "13",
|
|
11627
|
+
rx: "2.5",
|
|
11628
|
+
stroke: "currentColor",
|
|
11629
|
+
strokeWidth: "1.5"
|
|
11630
|
+
}),
|
|
11631
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11632
|
+
d: "M4 5h3M5.5 3.5v3",
|
|
11633
|
+
stroke: "currentColor",
|
|
11634
|
+
strokeWidth: "1.5",
|
|
11635
|
+
strokeLinecap: "round"
|
|
11636
|
+
}),
|
|
11637
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11638
|
+
d: "M9.5 12.5h2.5",
|
|
11639
|
+
stroke: "currentColor",
|
|
11640
|
+
strokeWidth: "1.5",
|
|
11641
|
+
strokeLinecap: "round"
|
|
11642
|
+
})
|
|
11643
|
+
]
|
|
11644
|
+
});
|
|
11645
|
+
/** Upload glyph in the app's outline style: an arrow rising into a tray
|
|
11646
|
+
* (the file-manager "upload into the workspace" action). */
|
|
11647
|
+
const IconUploadOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
11648
|
+
width: size,
|
|
11649
|
+
height: size,
|
|
11650
|
+
className,
|
|
11651
|
+
viewBox: "0 0 16 16",
|
|
11652
|
+
fill: "none",
|
|
11653
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
11654
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11655
|
+
d: "M8 10V2.75M4.75 5.5 8 2.25 11.25 5.5",
|
|
11656
|
+
stroke: "currentColor",
|
|
11657
|
+
strokeWidth: "1.5",
|
|
11658
|
+
strokeLinecap: "round",
|
|
11659
|
+
strokeLinejoin: "round"
|
|
11660
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
11661
|
+
d: "M2.75 10.5v2.25A1.25 1.25 0 0 0 4 14h8a1.25 1.25 0 0 0 1.25-1.25V10.5",
|
|
11662
|
+
stroke: "currentColor",
|
|
11663
|
+
strokeWidth: "1.5",
|
|
11664
|
+
strokeLinecap: "round"
|
|
11665
|
+
})]
|
|
11666
|
+
});
|
|
11841
11667
|
/**
|
|
11842
|
-
*
|
|
11843
|
-
*
|
|
11844
|
-
*
|
|
11845
|
-
* strategies (pure, but scope-bound — injected by the host).
|
|
11668
|
+
* Pin glyph in the app's outline style (1.5px stroke, currentColor): a pushpin
|
|
11669
|
+
* tilted to the lower-right. Used by the PinnedRail and the tab context menu's
|
|
11670
|
+
* pin entry (v0.17.0+).
|
|
11846
11671
|
*/
|
|
11847
|
-
|
|
11848
|
-
if (viewer === void 0 || viewer.fetchStrategy === "binary-download") return { kind: "binary" };
|
|
11849
|
-
switch (viewer.fetchStrategy) {
|
|
11850
|
-
case "mediaUrl":
|
|
11851
|
-
case "none": return {
|
|
11852
|
-
kind: "render",
|
|
11853
|
-
viewer,
|
|
11854
|
-
mediaUrl: mediaUrlOf()
|
|
11855
|
-
};
|
|
11856
|
-
case "custom": return {
|
|
11857
|
-
kind: "customLoad",
|
|
11858
|
-
viewer
|
|
11859
|
-
};
|
|
11860
|
-
case "fsRead": return {
|
|
11861
|
-
kind: "fetchFsRead",
|
|
11862
|
-
viewer
|
|
11863
|
-
};
|
|
11864
|
-
}
|
|
11865
|
-
}
|
|
11866
|
-
/**
|
|
11867
|
-
* Decide what an fsRead result means for the editor.
|
|
11868
|
-
* - Text: the first match stands (content is valid for any fsRead viewer).
|
|
11869
|
-
* - Binary: the host head bytes enable a re-match — a `detect` viewer (e.g.
|
|
11870
|
-
* a plugin sniffing a binary format) may claim the file. `custom` viewers
|
|
11871
|
-
* load their own bytes; `mediaUrl`/`none` viewers render the media route;
|
|
11872
|
-
* an fsRead viewer or nothing cannot render binary → download UI.
|
|
11873
|
-
*/
|
|
11874
|
-
function planFsReadOutcome(viewer, result, rematch, mediaUrlOf) {
|
|
11875
|
-
if (!result.binary) return {
|
|
11876
|
-
kind: "render",
|
|
11877
|
-
viewer,
|
|
11878
|
-
content: result.content,
|
|
11879
|
-
truncated: result.truncated
|
|
11880
|
-
};
|
|
11881
|
-
const claimed = result.head === void 0 ? void 0 : rematch(decodeHead(result.head));
|
|
11882
|
-
if (claimed !== void 0 && claimed.fetchStrategy === "custom") return {
|
|
11883
|
-
kind: "customLoad",
|
|
11884
|
-
viewer: claimed
|
|
11885
|
-
};
|
|
11886
|
-
if (claimed !== void 0 && (claimed.fetchStrategy === "mediaUrl" || claimed.fetchStrategy === "none")) return {
|
|
11887
|
-
kind: "render",
|
|
11888
|
-
viewer: claimed,
|
|
11889
|
-
mediaUrl: mediaUrlOf()
|
|
11890
|
-
};
|
|
11891
|
-
return { kind: "binary" };
|
|
11892
|
-
}
|
|
11893
|
-
//#endregion
|
|
11894
|
-
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/lib/iconContext.mjs
|
|
11895
|
-
var DefaultContext = {
|
|
11896
|
-
color: void 0,
|
|
11897
|
-
size: void 0,
|
|
11898
|
-
className: void 0,
|
|
11899
|
-
style: void 0,
|
|
11900
|
-
attr: void 0
|
|
11901
|
-
};
|
|
11902
|
-
var IconContext = react.default.createContext && /*#__PURE__*/ react.default.createContext(DefaultContext);
|
|
11903
|
-
//#endregion
|
|
11904
|
-
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/lib/iconBase.mjs
|
|
11905
|
-
var _excluded = [
|
|
11906
|
-
"attr",
|
|
11907
|
-
"size",
|
|
11908
|
-
"title"
|
|
11909
|
-
];
|
|
11910
|
-
function _objectWithoutProperties(e, t) {
|
|
11911
|
-
if (null == e) return {};
|
|
11912
|
-
var o, r, i = _objectWithoutPropertiesLoose(e, t);
|
|
11913
|
-
if (Object.getOwnPropertySymbols) {
|
|
11914
|
-
var n = Object.getOwnPropertySymbols(e);
|
|
11915
|
-
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
11916
|
-
}
|
|
11917
|
-
return i;
|
|
11918
|
-
}
|
|
11919
|
-
function _objectWithoutPropertiesLoose(r, e) {
|
|
11920
|
-
if (null == r) return {};
|
|
11921
|
-
var t = {};
|
|
11922
|
-
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
11923
|
-
if (-1 !== e.indexOf(n)) continue;
|
|
11924
|
-
t[n] = r[n];
|
|
11925
|
-
}
|
|
11926
|
-
return t;
|
|
11927
|
-
}
|
|
11928
|
-
function _extends() {
|
|
11929
|
-
return _extends = Object.assign ? Object.assign.bind() : function(n) {
|
|
11930
|
-
for (var e = 1; e < arguments.length; e++) {
|
|
11931
|
-
var t = arguments[e];
|
|
11932
|
-
for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);
|
|
11933
|
-
}
|
|
11934
|
-
return n;
|
|
11935
|
-
}, _extends.apply(null, arguments);
|
|
11936
|
-
}
|
|
11937
|
-
function ownKeys(e, r) {
|
|
11938
|
-
var t = Object.keys(e);
|
|
11939
|
-
if (Object.getOwnPropertySymbols) {
|
|
11940
|
-
var o = Object.getOwnPropertySymbols(e);
|
|
11941
|
-
r && (o = o.filter(function(r) {
|
|
11942
|
-
return Object.getOwnPropertyDescriptor(e, r).enumerable;
|
|
11943
|
-
})), t.push.apply(t, o);
|
|
11944
|
-
}
|
|
11945
|
-
return t;
|
|
11946
|
-
}
|
|
11947
|
-
function _objectSpread(e) {
|
|
11948
|
-
for (var r = 1; r < arguments.length; r++) {
|
|
11949
|
-
var t = null != arguments[r] ? arguments[r] : {};
|
|
11950
|
-
r % 2 ? ownKeys(Object(t), !0).forEach(function(r) {
|
|
11951
|
-
_defineProperty(e, r, t[r]);
|
|
11952
|
-
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r) {
|
|
11953
|
-
Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
|
|
11954
|
-
});
|
|
11955
|
-
}
|
|
11956
|
-
return e;
|
|
11957
|
-
}
|
|
11958
|
-
function _defineProperty(e, r, t) {
|
|
11959
|
-
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
11960
|
-
value: t,
|
|
11961
|
-
enumerable: !0,
|
|
11962
|
-
configurable: !0,
|
|
11963
|
-
writable: !0
|
|
11964
|
-
}) : e[r] = t, e;
|
|
11965
|
-
}
|
|
11966
|
-
function _toPropertyKey(t) {
|
|
11967
|
-
var i = _toPrimitive(t, "string");
|
|
11968
|
-
return "symbol" == typeof i ? i : i + "";
|
|
11969
|
-
}
|
|
11970
|
-
function _toPrimitive(t, r) {
|
|
11971
|
-
if ("object" != typeof t || !t) return t;
|
|
11972
|
-
var e = t[Symbol.toPrimitive];
|
|
11973
|
-
if (void 0 !== e) {
|
|
11974
|
-
var i = e.call(t, r || "default");
|
|
11975
|
-
if ("object" != typeof i) return i;
|
|
11976
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
11977
|
-
}
|
|
11978
|
-
return ("string" === r ? String : Number)(t);
|
|
11979
|
-
}
|
|
11980
|
-
function Tree2Element(tree) {
|
|
11981
|
-
return tree && tree.map((node, i) => /*#__PURE__*/ react.default.createElement(node.tag, _objectSpread({ key: i }, node.attr), Tree2Element(node.child)));
|
|
11982
|
-
}
|
|
11983
|
-
function GenIcon(data) {
|
|
11984
|
-
return (props) => /*#__PURE__*/ react.default.createElement(IconBase, _extends({ attr: _objectSpread({}, data.attr) }, props), Tree2Element(data.child));
|
|
11985
|
-
}
|
|
11986
|
-
function IconBase(props) {
|
|
11987
|
-
var elem = (conf) => {
|
|
11988
|
-
var attr = props.attr, size = props.size, title = props.title, svgProps = _objectWithoutProperties(props, _excluded);
|
|
11989
|
-
var computedSize = size || conf.size || "1em";
|
|
11990
|
-
var className;
|
|
11991
|
-
if (conf.className) className = conf.className;
|
|
11992
|
-
if (props.className) className = (className ? className + " " : "") + props.className;
|
|
11993
|
-
return /*#__PURE__*/ react.default.createElement("svg", _extends({
|
|
11994
|
-
stroke: "currentColor",
|
|
11995
|
-
fill: "currentColor",
|
|
11996
|
-
strokeWidth: "0"
|
|
11997
|
-
}, conf.attr, attr, svgProps, {
|
|
11998
|
-
className,
|
|
11999
|
-
style: _objectSpread(_objectSpread({ color: props.color || conf.color }, conf.style), props.style),
|
|
12000
|
-
height: computedSize,
|
|
12001
|
-
width: computedSize,
|
|
12002
|
-
xmlns: "http://www.w3.org/2000/svg"
|
|
12003
|
-
}), title && /*#__PURE__*/ react.default.createElement("title", null, title), props.children);
|
|
12004
|
-
};
|
|
12005
|
-
return IconContext !== void 0 ? /*#__PURE__*/ react.default.createElement(IconContext.Consumer, null, (conf) => elem(conf)) : elem(DefaultContext);
|
|
12006
|
-
}
|
|
12007
|
-
//#endregion
|
|
12008
|
-
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/si/index.mjs
|
|
12009
|
-
function SiZedindustries(props) {
|
|
12010
|
-
return GenIcon({
|
|
12011
|
-
"tag": "svg",
|
|
12012
|
-
"attr": {
|
|
12013
|
-
"role": "img",
|
|
12014
|
-
"viewBox": "0 0 24 24"
|
|
12015
|
-
},
|
|
12016
|
-
"child": [{
|
|
12017
|
-
"tag": "path",
|
|
12018
|
-
"attr": { "d": "M2.25 1.5a.75.75 0 0 0-.75.75v16.5H0V2.25A2.25 2.25 0 0 1 2.25 0h20.095c1.002 0 1.504 1.212.795 1.92L10.764 14.298h3.486V12.75h1.5v1.922a1.125 1.125 0 0 1-1.125 1.125H9.264l-2.578 2.578h11.689V9h1.5v9.375a1.5 1.5 0 0 1-1.5 1.5H5.185L2.562 22.5H21.75a.75.75 0 0 0 .75-.75V5.25H24v16.5A2.25 2.25 0 0 1 21.75 24H1.655C.653 24 .151 22.788.86 22.08L13.19 9.75H9.75v1.5h-1.5V9.375A1.125 1.125 0 0 1 9.375 8.25h5.314l2.625-2.625H5.625V15h-1.5V5.625a1.5 1.5 0 0 1 1.5-1.5h13.19L21.438 1.5z" },
|
|
12019
|
-
"child": []
|
|
12020
|
-
}]
|
|
12021
|
-
})(props);
|
|
12022
|
-
}
|
|
12023
|
-
function SiCursor(props) {
|
|
12024
|
-
return GenIcon({
|
|
12025
|
-
"tag": "svg",
|
|
12026
|
-
"attr": {
|
|
12027
|
-
"role": "img",
|
|
12028
|
-
"viewBox": "0 0 24 24"
|
|
12029
|
-
},
|
|
12030
|
-
"child": [{
|
|
12031
|
-
"tag": "path",
|
|
12032
|
-
"attr": { "d": "M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23" },
|
|
12033
|
-
"child": []
|
|
12034
|
-
}]
|
|
12035
|
-
})(props);
|
|
12036
|
-
}
|
|
12037
|
-
//#endregion
|
|
12038
|
-
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/vsc/index.mjs
|
|
12039
|
-
function VscPinned(props) {
|
|
12040
|
-
return GenIcon({
|
|
12041
|
-
"tag": "svg",
|
|
12042
|
-
"attr": {
|
|
12043
|
-
"viewBox": "0 0 16 16",
|
|
12044
|
-
"fill": "currentColor"
|
|
12045
|
-
},
|
|
12046
|
-
"child": [{
|
|
12047
|
-
"tag": "path",
|
|
12048
|
-
"attr": { "d": "M10.0589 2.44511C9.34701 1.73063 8.14697 1.90829 7.67261 2.79839L5.6526 6.58878L2.8419 7.52568C2.6775 7.58048 2.5532 7.71649 2.51339 7.88514C2.47357 8.0538 2.52392 8.23104 2.64646 8.35357L4.79291 10.5L2.14645 13.1465L2 14L2.85356 13.8536L5.50002 11.2071L7.64646 13.3536C7.76899 13.4761 7.94623 13.5265 8.11489 13.4866C8.28354 13.4468 8.41955 13.3225 8.47435 13.1581L9.41143 10.3469L13.1897 8.32423C14.0759 7.84982 14.2538 6.6551 13.5443 5.94305L10.0589 2.44511ZM8.55511 3.2687C8.71323 2.972 9.11324 2.91278 9.35055 3.15094L12.836 6.64889C13.0725 6.88624 13.0131 7.28448 12.7178 7.44262L8.76403 9.55921C8.65137 9.61952 8.56608 9.72068 8.52567 9.84191L7.7815 12.0744L3.92562 8.21853L6.15812 7.47436C6.27966 7.43385 6.38101 7.34823 6.44126 7.23518L8.55511 3.2687Z" },
|
|
12049
|
-
"child": []
|
|
12050
|
-
}]
|
|
12051
|
-
})(props);
|
|
12052
|
-
}
|
|
12053
|
-
function VscPin(props) {
|
|
12054
|
-
return GenIcon({
|
|
12055
|
-
"tag": "svg",
|
|
12056
|
-
"attr": {
|
|
12057
|
-
"viewBox": "0 0 16 16",
|
|
12058
|
-
"fill": "currentColor"
|
|
12059
|
-
},
|
|
12060
|
-
"child": [{
|
|
12061
|
-
"tag": "path",
|
|
12062
|
-
"attr": { "d": "M13.5 3C13.303 3 13.109 3.038 12.923 3.114L8.481 4.967L5.659 4.026C5.505 3.976 5.339 4.001 5.209 4.095C5.078 4.189 5.001 4.339 5.001 4.5V7H1.257L0.5 7.5L1.257 8H5V10.5C5 10.661 5.077 10.812 5.208 10.905C5.338 11 5.504 11.023 5.658 10.974L8.48 10.033L12.925 11.887C13.109 11.962 13.302 12 13.499 12C14.326 12 14.999 11.327 14.999 10.5V4.5C14.999 3.673 14.326 3 13.499 3H13.5ZM14 10.5C14 10.843 13.615 11.09 13.308 10.962L8.693 9.038C8.631 9.013 8.566 9 8.501 9C8.447 9 8.395 9.009 8.343 9.025L6.001 9.806V5.193L8.343 5.974C8.457 6.011 8.581 6.007 8.694 5.961L13.306 4.038C13.629 3.902 14.001 4.156 14.001 4.499V10.499L14 10.5Z" },
|
|
12063
|
-
"child": []
|
|
12064
|
-
}]
|
|
12065
|
-
})(props);
|
|
12066
|
-
}
|
|
12067
|
-
function VscLinkExternal(props) {
|
|
12068
|
-
return GenIcon({
|
|
12069
|
-
"tag": "svg",
|
|
12070
|
-
"attr": {
|
|
12071
|
-
"viewBox": "0 0 16 16",
|
|
12072
|
-
"fill": "currentColor"
|
|
12073
|
-
},
|
|
12074
|
-
"child": [{
|
|
12075
|
-
"tag": "path",
|
|
12076
|
-
"attr": { "d": "M15 9.5V12.5C15 13.879 13.879 15 12.5 15H3.5C2.121 15 1 13.879 1 12.5V3.5C1 2.121 2.121 1 3.5 1H6.5C6.776 1 7 1.224 7 1.5C7 1.776 6.776 2 6.5 2H3.5C2.673 2 2 2.673 2 3.5V12.5C2 13.327 2.673 14 3.5 14H12.5C13.327 14 14 13.327 14 12.5V9.5C14 9.224 14.224 9 14.5 9C14.776 9 15 9.224 15 9.5ZM14.5 1H9.5C9.224 1 9 1.224 9 1.5C9 1.776 9.224 2 9.5 2H13.293L9.147 6.146C8.952 6.341 8.952 6.658 9.147 6.853C9.245 6.951 9.373 6.999 9.501 6.999C9.629 6.999 9.757 6.95 9.855 6.853L14.001 2.707V6.5C14.001 6.776 14.225 7 14.501 7C14.777 7 15.001 6.776 15.001 6.5V1.5C15.001 1.224 14.777 1 14.501 1H14.5Z" },
|
|
12077
|
-
"child": []
|
|
12078
|
-
}]
|
|
12079
|
-
})(props);
|
|
12080
|
-
}
|
|
12081
|
-
function VscFolder(props) {
|
|
12082
|
-
return GenIcon({
|
|
12083
|
-
"tag": "svg",
|
|
12084
|
-
"attr": {
|
|
12085
|
-
"viewBox": "0 0 16 16",
|
|
12086
|
-
"fill": "currentColor"
|
|
12087
|
-
},
|
|
12088
|
-
"child": [{
|
|
12089
|
-
"tag": "path",
|
|
12090
|
-
"attr": { "d": "M2 4.5V6H5.58579C5.71839 6 5.84557 5.94732 5.93934 5.85355L7.29289 4.5L5.93934 3.14645C5.84557 3.05268 5.71839 3 5.58579 3H3.5C2.67157 3 2 3.67157 2 4.5ZM1 4.5C1 3.11929 2.11929 2 3.5 2H5.58579C5.98361 2 6.36514 2.15804 6.64645 2.43934L8.20711 4H12.5C13.8807 4 15 5.11929 15 6.5V11.5C15 12.8807 13.8807 14 12.5 14H3.5C2.11929 14 1 12.8807 1 11.5V4.5ZM2 7V11.5C2 12.3284 2.67157 13 3.5 13H12.5C13.3284 13 14 12.3284 14 11.5V6.5C14 5.67157 13.3284 5 12.5 5H8.20711L6.64645 6.56066C6.36514 6.84197 5.98361 7 5.58579 7H2Z" },
|
|
12091
|
-
"child": []
|
|
12092
|
-
}]
|
|
12093
|
-
})(props);
|
|
12094
|
-
}
|
|
12095
|
-
function VscFolderOpened(props) {
|
|
12096
|
-
return GenIcon({
|
|
12097
|
-
"tag": "svg",
|
|
12098
|
-
"attr": {
|
|
12099
|
-
"viewBox": "0 0 16 16",
|
|
12100
|
-
"fill": "currentColor"
|
|
12101
|
-
},
|
|
12102
|
-
"child": [{
|
|
12103
|
-
"tag": "path",
|
|
12104
|
-
"attr": { "d": "M2 4.5V9.10022L2.92389 7.5C3.45979 6.5718 4.45017 6 5.52196 6L11.9146 6C11.7087 5.4174 11.1531 5 10.5 5H7C6.86739 5 6.74021 4.94732 6.64645 4.85355L4.93934 3.14645C4.84557 3.05268 4.71839 3 4.58579 3H3.5C2.67157 3 2 3.67157 2 4.5ZM7.06895 13.9953C7.04641 13.9984 7.02339 14 7 14H3.5C2.11929 14 1 12.8807 1 11.5V4.5C1 3.11929 2.11929 2 3.5 2H4.58579C4.98361 2 5.36514 2.15804 5.64645 2.43934L7.20711 4H10.5C11.724 4 12.7426 4.87965 12.958 6.04127C14.605 6.34148 15.5443 8.22106 14.6616 9.75L13.0766 12.4953C12.5407 13.4235 11.5503 13.9953 10.4785 13.9953H7.06895ZM5.52196 7C4.80743 7 4.14718 7.3812 3.78991 8L2.20492 10.7453C1.62757 11.7453 2.34926 12.9953 3.50396 12.9953L10.4785 12.9953C11.193 12.9953 11.8533 12.6141 12.2105 11.9953L13.7955 9.25C14.3729 8.25 13.6512 7 12.4965 7L5.52196 7Z" },
|
|
12105
|
-
"child": []
|
|
12106
|
-
}]
|
|
12107
|
-
})(props);
|
|
12108
|
-
}
|
|
12109
|
-
function VscFile(props) {
|
|
12110
|
-
return GenIcon({
|
|
12111
|
-
"tag": "svg",
|
|
12112
|
-
"attr": {
|
|
12113
|
-
"viewBox": "0 0 16 16",
|
|
12114
|
-
"fill": "currentColor"
|
|
12115
|
-
},
|
|
12116
|
-
"child": [{
|
|
12117
|
-
"tag": "path",
|
|
12118
|
-
"attr": { "d": "M5 1C3.89543 1 3 1.89543 3 3V13C3 14.1046 3.89543 15 5 15H11C12.1046 15 13 14.1046 13 13V5.41421C13 5.01639 12.842 4.63486 12.5607 4.35355L9.64645 1.43934C9.36514 1.15804 8.98361 1 8.58579 1H5ZM4 3C4 2.44772 4.44772 2 5 2H8V4.5C8 5.32843 8.67157 6 9.5 6H12V13C12 13.5523 11.5523 14 11 14H5C4.44772 14 4 13.5523 4 13V3ZM11.7929 5H9.5C9.22386 5 9 4.77614 9 4.5V2.20711L11.7929 5Z" },
|
|
12119
|
-
"child": []
|
|
12120
|
-
}]
|
|
12121
|
-
})(props);
|
|
12122
|
-
}
|
|
12123
|
-
//#endregion
|
|
12124
|
-
//#region src/client/icons.tsx
|
|
12125
|
-
/** User-manual glyph: an open book in the sidebar's 1.5px outline style. */
|
|
12126
|
-
const IconBookOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
12127
|
-
width: size,
|
|
12128
|
-
height: size,
|
|
12129
|
-
className,
|
|
12130
|
-
viewBox: "0 0 16 16",
|
|
12131
|
-
fill: "none",
|
|
12132
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12133
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12134
|
-
d: "M2.25 3.5A1.5 1.5 0 0 1 3.75 2H7.5v11H3.75a1.5 1.5 0 0 0-1.5 1.5zM13.75 3.5A1.5 1.5 0 0 0 12.25 2H8.5v11h3.75a1.5 1.5 0 0 1 1.5 1.5z",
|
|
12135
|
-
stroke: "currentColor",
|
|
12136
|
-
strokeWidth: "1.5",
|
|
12137
|
-
strokeLinejoin: "round"
|
|
12138
|
-
})
|
|
12139
|
-
});
|
|
12140
|
-
/**
|
|
12141
|
-
* Right-panel toggle glyph (the "侧拉" button): a frame with a filled strip
|
|
12142
|
-
* along its RIGHT edge, in the app's outline style (1.5px stroke,
|
|
12143
|
-
* currentColor).
|
|
12144
|
-
*/
|
|
12145
|
-
const IconPanelRightOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
12146
|
-
width: size,
|
|
12147
|
-
height: size,
|
|
12148
|
-
className,
|
|
12149
|
-
viewBox: "0 0 16 16",
|
|
12150
|
-
fill: "none",
|
|
12151
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12152
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
12153
|
-
x: "1.5",
|
|
12154
|
-
y: "2",
|
|
12155
|
-
width: "13",
|
|
12156
|
-
height: "12",
|
|
12157
|
-
rx: "2.5",
|
|
12158
|
-
stroke: "currentColor",
|
|
12159
|
-
strokeWidth: "1.5"
|
|
12160
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
12161
|
-
x: "10.5",
|
|
12162
|
-
y: "3.25",
|
|
12163
|
-
width: "2.75",
|
|
12164
|
-
height: "9.5",
|
|
12165
|
-
rx: "1",
|
|
12166
|
-
fill: "currentColor",
|
|
12167
|
-
stroke: "none"
|
|
12168
|
-
})]
|
|
12169
|
-
});
|
|
12170
|
-
/**
|
|
12171
|
-
* Bottom-panel toggle glyph (the "底栏" button): a frame with a filled strip
|
|
12172
|
-
* along its BOTTOM edge, in the app's outline style.
|
|
12173
|
-
*/
|
|
12174
|
-
const IconPanelBottomOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
12175
|
-
width: size,
|
|
12176
|
-
height: size,
|
|
12177
|
-
className,
|
|
12178
|
-
viewBox: "0 0 16 16",
|
|
12179
|
-
fill: "none",
|
|
12180
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12181
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
12182
|
-
x: "1.5",
|
|
12183
|
-
y: "2",
|
|
12184
|
-
width: "13",
|
|
12185
|
-
height: "12",
|
|
12186
|
-
rx: "2.5",
|
|
12187
|
-
stroke: "currentColor",
|
|
12188
|
-
strokeWidth: "1.5"
|
|
12189
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
12190
|
-
x: "3.25",
|
|
12191
|
-
y: "10",
|
|
12192
|
-
width: "9.5",
|
|
12193
|
-
height: "2.75",
|
|
12194
|
-
rx: "1",
|
|
12195
|
-
fill: "currentColor",
|
|
12196
|
-
stroke: "none"
|
|
12197
|
-
})]
|
|
12198
|
-
});
|
|
12199
|
-
/**
|
|
12200
|
-
* Terminal glyph in the app's outline style (1.5px stroke, currentColor):
|
|
12201
|
-
* a rounded frame with a prompt chevron and underscore cursor.
|
|
12202
|
-
*/
|
|
12203
|
-
const IconTerminalOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
12204
|
-
width: size,
|
|
12205
|
-
height: size,
|
|
12206
|
-
className,
|
|
12207
|
-
viewBox: "0 0 16 16",
|
|
12208
|
-
fill: "none",
|
|
12209
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12210
|
-
children: [
|
|
12211
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
12212
|
-
x: "1.5",
|
|
12213
|
-
y: "2.5",
|
|
12214
|
-
width: "13",
|
|
12215
|
-
height: "11",
|
|
12216
|
-
rx: "2",
|
|
12217
|
-
stroke: "currentColor",
|
|
12218
|
-
strokeWidth: "1.5"
|
|
12219
|
-
}),
|
|
12220
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12221
|
-
d: "M4.5 6.25 6.75 8 4.5 9.75",
|
|
12222
|
-
stroke: "currentColor",
|
|
12223
|
-
strokeWidth: "1.5",
|
|
12224
|
-
strokeLinecap: "round",
|
|
12225
|
-
strokeLinejoin: "round"
|
|
12226
|
-
}),
|
|
12227
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12228
|
-
d: "M8.5 10.4h3",
|
|
12229
|
-
stroke: "currentColor",
|
|
12230
|
-
strokeWidth: "1.5",
|
|
12231
|
-
strokeLinecap: "round"
|
|
12232
|
-
})
|
|
12233
|
-
]
|
|
12234
|
-
});
|
|
12235
|
-
/** Diff glyph in the app's outline style: a file frame with a plus and a minus row. */
|
|
12236
|
-
const IconDiffOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
12237
|
-
width: size,
|
|
12238
|
-
height: size,
|
|
12239
|
-
className,
|
|
12240
|
-
viewBox: "0 0 16 16",
|
|
12241
|
-
fill: "none",
|
|
12242
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12243
|
-
children: [
|
|
12244
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("rect", {
|
|
12245
|
-
x: "1.5",
|
|
12246
|
-
y: "1.5",
|
|
12247
|
-
width: "13",
|
|
12248
|
-
height: "13",
|
|
12249
|
-
rx: "2.5",
|
|
12250
|
-
stroke: "currentColor",
|
|
12251
|
-
strokeWidth: "1.5"
|
|
12252
|
-
}),
|
|
12253
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12254
|
-
d: "M4 5h3M5.5 3.5v3",
|
|
12255
|
-
stroke: "currentColor",
|
|
12256
|
-
strokeWidth: "1.5",
|
|
12257
|
-
strokeLinecap: "round"
|
|
12258
|
-
}),
|
|
12259
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12260
|
-
d: "M9.5 12.5h2.5",
|
|
12261
|
-
stroke: "currentColor",
|
|
12262
|
-
strokeWidth: "1.5",
|
|
12263
|
-
strokeLinecap: "round"
|
|
12264
|
-
})
|
|
12265
|
-
]
|
|
12266
|
-
});
|
|
12267
|
-
/** Upload glyph in the app's outline style: an arrow rising into a tray
|
|
12268
|
-
* (the file-manager "upload into the workspace" action). */
|
|
12269
|
-
const IconUploadOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
12270
|
-
width: size,
|
|
12271
|
-
height: size,
|
|
12272
|
-
className,
|
|
12273
|
-
viewBox: "0 0 16 16",
|
|
12274
|
-
fill: "none",
|
|
12275
|
-
xmlns: "http://www.w3.org/2000/svg",
|
|
12276
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12277
|
-
d: "M8 10V2.75M4.75 5.5 8 2.25 11.25 5.5",
|
|
12278
|
-
stroke: "currentColor",
|
|
12279
|
-
strokeWidth: "1.5",
|
|
12280
|
-
strokeLinecap: "round",
|
|
12281
|
-
strokeLinejoin: "round"
|
|
12282
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
|
|
12283
|
-
d: "M2.75 10.5v2.25A1.25 1.25 0 0 0 4 14h8a1.25 1.25 0 0 0 1.25-1.25V10.5",
|
|
12284
|
-
stroke: "currentColor",
|
|
12285
|
-
strokeWidth: "1.5",
|
|
12286
|
-
strokeLinecap: "round"
|
|
12287
|
-
})]
|
|
12288
|
-
});
|
|
12289
|
-
/**
|
|
12290
|
-
* Pin glyph in the app's outline style (1.5px stroke, currentColor): a pushpin
|
|
12291
|
-
* tilted to the lower-right. Used by the PinnedRail and the tab context menu's
|
|
12292
|
-
* pin entry (v0.17.0+).
|
|
12293
|
-
*/
|
|
12294
|
-
const IconPinOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
11672
|
+
const IconPinOutline16 = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("svg", {
|
|
12295
11673
|
width: size,
|
|
12296
11674
|
height: size,
|
|
12297
11675
|
className,
|
|
@@ -12485,6 +11863,1243 @@ window.__ModuleLoader__.load({
|
|
|
12485
11863
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", { d: "M23.15 2.587L18.21.21a1.494 1.494 0 0 0-1.705.29l-9.46 8.63-4.12-3.128a.999.999 0 0 0-1.276.057L.327 7.261A1 1 0 0 0 .326 8.74L3.899 12 .326 15.26a1 1 0 0 0 .001 1.479L1.65 17.94a.999.999 0 0 0 1.276.057l4.12-3.128 9.46 8.63a1.492 1.492 0 0 0 1.704.29l4.942-2.377A1.5 1.5 0 0 0 24 20.06V3.939a1.5 1.5 0 0 0-.85-1.352zm-5.146 14.861L10.826 12l7.178-5.448v10.896z" })
|
|
12486
11864
|
});
|
|
12487
11865
|
//#endregion
|
|
11866
|
+
//#region src/client/paths.ts
|
|
11867
|
+
/**
|
|
11868
|
+
* Path projection helpers shared by the explorer rows: a path relative to
|
|
11869
|
+
* the session cwd (for the @-reference button and "copy relative path").
|
|
11870
|
+
* The fs-tree joins with '/' even on Windows, so both separators normalize
|
|
11871
|
+
* to '/' before comparison.
|
|
11872
|
+
*
|
|
11873
|
+
* This module is dependency-free (no node:path in the client bundle): the
|
|
11874
|
+
* host is the authority for path semantics, so this mirror deliberately
|
|
11875
|
+
* accepts a SUPERSET of absolute forms — anything a Windows host would emit
|
|
11876
|
+
* (drive letters, UNC) plus POSIX roots. A form the host would reject
|
|
11877
|
+
* (e.g. a backslash UNC path on a POSIX host) passes through here and then
|
|
11878
|
+
* fails loudly in the host's requireAbsolute instead of being silently
|
|
11879
|
+
* joined onto the cwd.
|
|
11880
|
+
*/
|
|
11881
|
+
/**
|
|
11882
|
+
* Mirror of the host's absolute-path notion (see fs-tree.requireAbsolute):
|
|
11883
|
+
* POSIX roots, Windows drive letters, and Windows UNC network shares in
|
|
11884
|
+
* both backslash (`\\server\share\...`) and forward-slash
|
|
11885
|
+
* (`//server/share/...`) form. Deliberately a superset — see the module
|
|
11886
|
+
* comment — so a produced UNC path is never joined onto the cwd.
|
|
11887
|
+
*/
|
|
11888
|
+
function isAbsolutePath(path) {
|
|
11889
|
+
return path.startsWith("/") || /^[A-Za-z]:[\\/]/.test(path) || /^[\\/]{2}[^\\/]/.test(path);
|
|
11890
|
+
}
|
|
11891
|
+
/**
|
|
11892
|
+
* The path relative to the session's working directory.
|
|
11893
|
+
* @param cwd - the explorer root (absolute).
|
|
11894
|
+
* @param path - an absolute entry path from the fs-tree.
|
|
11895
|
+
* @returns the relative path with '/' separators ('.' for the cwd itself),
|
|
11896
|
+
* or `path` unchanged when it lies outside the cwd.
|
|
11897
|
+
*
|
|
11898
|
+
* The prefix test is case-insensitive: Windows paths (and macOS's
|
|
11899
|
+
* case-insensitive volumes) may arrive with different casing than the cwd
|
|
11900
|
+
* row, and the containment decision must not depend on it. The returned
|
|
11901
|
+
* relative text keeps the caller's own casing.
|
|
11902
|
+
*/
|
|
11903
|
+
function relativeTo(cwd, path) {
|
|
11904
|
+
const base = cwd.replace(/[\\/]+$/, "");
|
|
11905
|
+
const norm = (value) => value.replace(/\\/g, "/");
|
|
11906
|
+
const nBase = norm(base);
|
|
11907
|
+
const nPath = norm(path);
|
|
11908
|
+
if (nPath === nBase) return ".";
|
|
11909
|
+
if (nPath.toLowerCase().startsWith(`${nBase.toLowerCase()}/`)) return nPath.slice(nBase.length + 1);
|
|
11910
|
+
return path;
|
|
11911
|
+
}
|
|
11912
|
+
/**
|
|
11913
|
+
* Whether `target` lies under `base` (or equals it), tolerant of separator
|
|
11914
|
+
* style and — on Windows-style drive paths — of letter case. A client-side
|
|
11915
|
+
* mirror of the host's `isWithin` (fs-tree.ts) used to decide whether a
|
|
11916
|
+
* git-derived path can be opened in the editor (a linked worktree outside
|
|
11917
|
+
* the session workspace cannot: the host's workspace fence would reject it).
|
|
11918
|
+
*/
|
|
11919
|
+
function isWithinWorkspace(base, target) {
|
|
11920
|
+
const norm = (value) => value.replace(/[\\/]+/g, "/").replace(/\/$/, "");
|
|
11921
|
+
const b = norm(base);
|
|
11922
|
+
const t = norm(target);
|
|
11923
|
+
const lb = b.toLowerCase();
|
|
11924
|
+
const lt = t.toLowerCase();
|
|
11925
|
+
return lt === lb || lt.startsWith(`${lb}/`);
|
|
11926
|
+
}
|
|
11927
|
+
//#endregion
|
|
11928
|
+
//#region src/client/produced-files.ts
|
|
11929
|
+
/**
|
|
11930
|
+
* Pure derivation of one turn's produced files from finalized conversation
|
|
11931
|
+
* nodes — a structural replica of ui-deliverables' `producedForClosing`
|
|
11932
|
+
* (the mutation tools' follow-along `locations`, by render intent: a diff
|
|
11933
|
+
* card or a generic edit card; reads/deletes/failures produce nothing).
|
|
11934
|
+
* Kept dependency-free so the takeover logic is unit-testable and the
|
|
11935
|
+
* replica is easy to diff against upstream when it drifts.
|
|
11936
|
+
*/
|
|
11937
|
+
/** Paths a tool-result view reports as produced, by render intent. */
|
|
11938
|
+
function producedPaths(view) {
|
|
11939
|
+
if (view === null || typeof view !== "object") return [];
|
|
11940
|
+
const record = view;
|
|
11941
|
+
if (!(record.card === "diff" || record.card === "generic" && record.kind === "edit")) return [];
|
|
11942
|
+
if (!Array.isArray(record.locations)) return [];
|
|
11943
|
+
const paths = [];
|
|
11944
|
+
for (const location of record.locations) if (location !== null && typeof location === "object" && typeof location.path === "string") paths.push(location.path);
|
|
11945
|
+
return paths;
|
|
11946
|
+
}
|
|
11947
|
+
/**
|
|
11948
|
+
* Files produced by the turn the assistant at `seq` closes. Accumulation
|
|
11949
|
+
* resets on turn boundaries (a user message, or a node reporting a different
|
|
11950
|
+
* turn number); paths keep first-seen order and appear once.
|
|
11951
|
+
* @param nodes - snapshot nodes in surface order (structural, unknown-safe).
|
|
11952
|
+
* @param seq - the closing assistant's seq (the render site's anchor).
|
|
11953
|
+
* @returns produced paths; empty when the turn wrote nothing.
|
|
11954
|
+
*/
|
|
11955
|
+
function producedForClosing(nodes, seq) {
|
|
11956
|
+
let pending = [];
|
|
11957
|
+
let seen = /* @__PURE__ */ new Set();
|
|
11958
|
+
let turn;
|
|
11959
|
+
for (const node of nodes) {
|
|
11960
|
+
if (node === null || typeof node !== "object") continue;
|
|
11961
|
+
const record = node;
|
|
11962
|
+
if (record.kind === "tool-result") {
|
|
11963
|
+
if (record.isError === true) continue;
|
|
11964
|
+
for (const path of producedPaths(record.callView)) {
|
|
11965
|
+
if (seen.has(path)) continue;
|
|
11966
|
+
seen.add(path);
|
|
11967
|
+
pending.push(path);
|
|
11968
|
+
}
|
|
11969
|
+
continue;
|
|
11970
|
+
}
|
|
11971
|
+
if (record.kind === "user") {
|
|
11972
|
+
turn = void 0;
|
|
11973
|
+
pending = [];
|
|
11974
|
+
seen = /* @__PURE__ */ new Set();
|
|
11975
|
+
} else if (typeof record.turn === "number") {
|
|
11976
|
+
if (turn !== void 0 && record.turn !== turn) {
|
|
11977
|
+
pending = [];
|
|
11978
|
+
seen = /* @__PURE__ */ new Set();
|
|
11979
|
+
}
|
|
11980
|
+
turn = record.turn;
|
|
11981
|
+
}
|
|
11982
|
+
if (record.kind === "assistant" && record.seq === seq) return pending;
|
|
11983
|
+
}
|
|
11984
|
+
return [];
|
|
11985
|
+
}
|
|
11986
|
+
/**
|
|
11987
|
+
* Claim the turn-tail chain only when the closing turn produced files.
|
|
11988
|
+
*
|
|
11989
|
+
* The authoritative source is the engine Turn data — the same value
|
|
11990
|
+
* ui-deliverables reads (`owner.turn.data.get('deliverables')`): a
|
|
11991
|
+
* `{ produced: [{ seq, path }, ...] }` record accumulated per Turn. The
|
|
11992
|
+
* node-based replica below stays as a fallback for compositions that do not
|
|
11993
|
+
* publish it.
|
|
11994
|
+
* @param owner - the turn-tail owner currency ({turn, seq, openFile}).
|
|
11995
|
+
* @returns produced paths as the matched value, or null to decline.
|
|
11996
|
+
*/
|
|
11997
|
+
function selectProducedFiles(owner) {
|
|
11998
|
+
const record = owner;
|
|
11999
|
+
if (record === null || typeof record !== "object") return null;
|
|
12000
|
+
const seq = typeof record.seq === "number" ? record.seq : Number.POSITIVE_INFINITY;
|
|
12001
|
+
const data = record.turn?.data?.get?.("deliverables");
|
|
12002
|
+
if (data !== null && typeof data === "object" && Array.isArray(data.produced)) {
|
|
12003
|
+
const paths = [];
|
|
12004
|
+
const seen = /* @__PURE__ */ new Set();
|
|
12005
|
+
for (const item of data.produced) {
|
|
12006
|
+
if (item === null || typeof item !== "object") continue;
|
|
12007
|
+
const produced = item;
|
|
12008
|
+
if (typeof produced.path !== "string" || produced.path === "") continue;
|
|
12009
|
+
if (typeof produced.seq === "number" && produced.seq > seq) continue;
|
|
12010
|
+
if (seen.has(produced.path)) continue;
|
|
12011
|
+
seen.add(produced.path);
|
|
12012
|
+
paths.push(produced.path);
|
|
12013
|
+
}
|
|
12014
|
+
return paths.length === 0 ? null : paths;
|
|
12015
|
+
}
|
|
12016
|
+
if (!Array.isArray(record.nodes)) return null;
|
|
12017
|
+
const paths = producedForClosing(record.nodes, seq);
|
|
12018
|
+
return paths.length === 0 ? null : paths;
|
|
12019
|
+
}
|
|
12020
|
+
/**
|
|
12021
|
+
* Resolve a (possibly relative) path against the session cwd for the sidebar.
|
|
12022
|
+
* Absolute detection mirrors the host (see client/paths.isAbsolutePath):
|
|
12023
|
+
* POSIX roots, drive letters and UNC shares must not be joined onto the cwd.
|
|
12024
|
+
*/
|
|
12025
|
+
function resolveSidebarPath(cwd, path) {
|
|
12026
|
+
if (isAbsolutePath(path)) return path;
|
|
12027
|
+
const base = cwd ?? "";
|
|
12028
|
+
if (base === "") return path;
|
|
12029
|
+
const separator = base.includes("\\") ? "\\" : "/";
|
|
12030
|
+
return `${base.replace(/[\\/]+$/, "")}${separator}${path}`;
|
|
12031
|
+
}
|
|
12032
|
+
//#endregion
|
|
12033
|
+
//#region src/client/openpath-intercept.ts
|
|
12034
|
+
/**
|
|
12035
|
+
* Whether a path is the "Show in folder" folder-reveal gesture. The stock
|
|
12036
|
+
* ui-deliverables row passes `'.'` (the session workspace root, resolved by
|
|
12037
|
+
* the chat view to `"<cwd>/."`); any path whose final segment is `.` is the
|
|
12038
|
+
* same gesture. A directory has no editor content, so these opens must reach
|
|
12039
|
+
* the explorer instead of an editor tab.
|
|
12040
|
+
*/
|
|
12041
|
+
function isFolderRevealPath(path) {
|
|
12042
|
+
if (path === "." || path === "./") return true;
|
|
12043
|
+
const trimmed = path.replace(/[\\/]+$/, "");
|
|
12044
|
+
return trimmed === "." || /[\\/]\.$/.test(trimmed);
|
|
12045
|
+
}
|
|
12046
|
+
/**
|
|
12047
|
+
* Wrap `workspaces.openPath`: intercepted calls open the file in the sidebar
|
|
12048
|
+
* editor instead of the Host OS and resolve as success (the original's
|
|
12049
|
+
* callers ignore the result); anything that declines falls through to the
|
|
12050
|
+
* original method untouched. The one exception is the folder-reveal gesture,
|
|
12051
|
+
* which is routed to {@link OpenPathInterceptDeps.revealInExplorer} instead.
|
|
12052
|
+
* @param workspaces - the client workspaces service to wrap.
|
|
12053
|
+
* @param deps - per-call takeover decisions.
|
|
12054
|
+
* @returns the disposer restoring the original method (HMR-safe).
|
|
12055
|
+
*/
|
|
12056
|
+
function wrapOpenPath(workspaces, deps) {
|
|
12057
|
+
const original = workspaces.openPath;
|
|
12058
|
+
workspaces.openPath = (path) => {
|
|
12059
|
+
if (deps.takeoverEnabled()) {
|
|
12060
|
+
const sessionId = deps.currentSessionId();
|
|
12061
|
+
if (sessionId !== void 0) {
|
|
12062
|
+
if (isFolderRevealPath(path)) deps.revealInExplorer(path, sessionId);
|
|
12063
|
+
else deps.openInSidebar(path, sessionId);
|
|
12064
|
+
return Promise.resolve();
|
|
12065
|
+
}
|
|
12066
|
+
}
|
|
12067
|
+
return original.call(workspaces, path);
|
|
12068
|
+
};
|
|
12069
|
+
return () => {
|
|
12070
|
+
workspaces.openPath = original;
|
|
12071
|
+
};
|
|
12072
|
+
}
|
|
12073
|
+
//#endregion
|
|
12074
|
+
//#region src/client/current-session.ts
|
|
12075
|
+
/**
|
|
12076
|
+
* Read the session selected by the host's scoped-session adapter.
|
|
12077
|
+
*
|
|
12078
|
+
* Newer hosts deliberately removed `sessions.list.current`: selection is UI
|
|
12079
|
+
* scope state, not catalog state. The adapter is authoritative on both old
|
|
12080
|
+
* and new hosts and tracks main-view retain/release transitions.
|
|
12081
|
+
*/
|
|
12082
|
+
function currentSessionId(ctx) {
|
|
12083
|
+
return ctx.uiSession.adapter.current.getSnapshot().key;
|
|
12084
|
+
}
|
|
12085
|
+
/** React subscription to the same authoritative current-session source. */
|
|
12086
|
+
function useCurrentSessionId(ctx) {
|
|
12087
|
+
const source = ctx.uiSession.adapter.current;
|
|
12088
|
+
return (0, react.useSyncExternalStore)((0, react.useCallback)((listener) => source.subscribe(listener), [source]), (0, react.useCallback)(() => source.getSnapshot().key, [source]));
|
|
12089
|
+
}
|
|
12090
|
+
//#endregion
|
|
12091
|
+
//#region \0dsh-css:/Users/shiguifeng/IdeaProjects/chonggou/DSH-better-sidebar/src/client/sidebar.module.css.mjs
|
|
12092
|
+
const css$5 = ".FV0QMq_releaseNotesOverlay{z-index:120;pointer-events:auto;background:color-mix(in srgb, var(--dsw-alias-bg-base) 72%, transparent);place-items:center;padding:24px;display:grid;position:fixed;inset:0}.FV0QMq_releaseNotesDialog{width:min(720px,100%);max-height:min(760px,100vh - 48px);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-1);border:1px solid var(--dsw-alias-border-l1);border-radius:12px;flex-direction:column;display:flex;overflow:hidden}.FV0QMq_releaseNotesHeader,.FV0QMq_releaseNotesFooter{align-items:center;padding:16px 20px;display:flex}.FV0QMq_releaseNotesHeader{border-bottom:1px solid var(--dsw-alias-border-l1);justify-content:space-between;gap:16px}.FV0QMq_releaseNotesHeader h2{font:var(--dsw-font-s-18);margin:0}.FV0QMq_releaseNotesContent{min-height:120px;font:var(--dsw-font-s-14);padding:20px;overflow:auto}.FV0QMq_releaseNotesFooter{border-top:1px solid var(--dsw-alias-border-l1);justify-content:flex-end}.FV0QMq_releaseNotesIconButton,.FV0QMq_releaseNotesButton{border:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);cursor:pointer}.FV0QMq_releaseNotesIconButton:hover,.FV0QMq_releaseNotesButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_releaseNotesIconButton{width:32px;height:32px;font:var(--dsw-font-s-18);border-radius:50%;padding:0}.FV0QMq_releaseNotesButton{min-width:84px;min-height:36px;font:var(--dsw-font-s-14);border-radius:8px;padding:6px 16px}.FV0QMq_updateList{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.FV0QMq_updateList li{font:var(--dsw-font-s-14);justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateVersions{font-variant-numeric:tabular-nums;color:var(--dsw-alias-label-secondary)}.FV0QMq_updateOk{color:var(--dsw-alias-state-success-primary)}.FV0QMq_updateError,.FV0QMq_updateErrorText{color:var(--dsw-alias-state-error-primary)}.FV0QMq_updateErrorText{white-space:pre-wrap;font:var(--dsw-font-s-14);margin:12px 0 0}.FV0QMq_updateCommand{background:var(--dsw-alias-bg-layer-3);font-family:var(--dsw-font-code,var(--ds-font-family-code,monospace));white-space:pre-wrap;word-break:break-all;user-select:all;border-radius:6px;margin:8px 0 0;padding:8px 10px;font-size:12px;overflow-x:auto}.FV0QMq_updateSettingsRow{justify-content:space-between;align-items:center;gap:16px;display:flex}.FV0QMq_updateSettingsText{flex-direction:column;gap:2px;min-width:0;display:flex}.FV0QMq_updateSettingsTitle{font:var(--dsw-font-s-14)}.FV0QMq_updateSettingsDesc{font:var(--dsw-font-s-13);color:var(--dsw-alias-label-secondary)}.FV0QMq_updateSettingsBlock{flex-direction:column;gap:12px;display:flex}.FV0QMq_updateBody{font:var(--dsw-font-s-14);margin:20px 0 0}.FV0QMq_updateFooter{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.FV0QMq_updateInline{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;padding:16px}[data-dsh-panel-host]{z-index:25;pointer-events:none;position:fixed;inset:0;overflow:clip}[data-dsh-panel-host][data-dsh-panel-host-degraded]{position:absolute;top:0;left:0}[data-dsh-pinned-sessions]{flex:none;min-width:0}.FV0QMq_pinnedSessions{border-bottom:1px solid var(--dsw-alias-border-l1);margin:0 0 6px;padding:4px 0 6px}.FV0QMq_pinnedSessionsHeading{height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-s-14);align-items:center;padding:0 4px;display:flex}.FV0QMq_pinnedSessionsList{gap:1px;display:grid}[data-slot=sidebar\\.workspaces] [class*=_sessionRow][data-dsh-session-pinned]{display:none}.FV0QMq_pinnedSessionRow{border-radius:8px;align-items:center;min-width:0;height:32px;display:flex;position:relative}.FV0QMq_pinnedSessionRow:hover,.FV0QMq_pinnedSessionRow:focus-within{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionOpen,.FV0QMq_pinnedSessionMore,.FV0QMq_pinnedSessionMenu button{font:inherit;cursor:pointer;border:0}.FV0QMq_pinnedSessionOpen{min-width:0;height:100%;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-s-14);background:0 0;flex:1;align-items:center;gap:8px;padding:0 6px 0 8px;display:flex}.FV0QMq_pinnedSessionOpen[aria-current=page]{color:var(--dsw-alias-brand-primary)}.FV0QMq_pinnedSessionDot{background:var(--dsw-alias-label-tertiary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_pinnedSessionDot[data-running]{background:var(--dsw-alias-state-success-primary)}.FV0QMq_pinnedSessionTitle{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_pinnedSessionMore{width:28px;height:28px;color:var(--dsw-alias-label-secondary);letter-spacing:1px;background:0 0;border-radius:50%;justify-content:center;align-items:center;margin-right:2px;padding:0;display:inline-flex}.FV0QMq_pinnedSessionMore:hover,.FV0QMq_pinnedSessionMore[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedSessionMenu{z-index:1101;box-sizing:border-box;border:1px solid var(--dsw-alias-border-inverted);background:var(--dsw-alias-bg-layer-2);border-radius:10px;min-width:150px;padding:4px;position:absolute;top:calc(100% + 2px);right:0}.FV0QMq_pinnedSessionMenu button{width:100%;min-height:32px;color:var(--dsw-alias-label-primary);text-align:left;font:var(--dsw-font-xxs-12);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:5px 8px;display:flex}.FV0QMq_pinnedSessionMenu button:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_pinnedSessionMenuDivider{background:var(--dsw-alias-border-l1);height:1px;margin:4px}.FV0QMq_accountMenu{z-index:3;box-sizing:border-box;width:var(--dsh-account-menu-width,280px);border-top:1px solid var(--dsw-alias-border-l2);border-right:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);pointer-events:auto;position:absolute;bottom:0;left:0}.FV0QMq_accountTrigger,.FV0QMq_accountItem{color:var(--dsw-alias-fg-base);font:inherit;cursor:pointer;border:0}.FV0QMq_accountTrigger{box-sizing:border-box;width:100%;min-height:52px;padding:10px 14px max(10px, env(safe-area-inset-bottom));background:var(--dsw-alias-bg-layer-1);font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);border-radius:0;align-items:center;gap:8px;display:flex}.FV0QMq_accountTrigger:hover,.FV0QMq_accountTrigger[aria-expanded=true]{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountTrigger:focus-visible,.FV0QMq_accountItem:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:2px}.FV0QMq_accountAvatar{background:var(--dsw-alias-bg-layer-3);border:1px solid var(--dsw-alias-border-l2);width:28px;height:28px;color:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;place-items:center;font-weight:600;display:grid;position:relative}.FV0QMq_accountName{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_accountDropdown{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);z-index:1;border-radius:12px;width:min(252px,100% - 16px);padding:10px 8px 8px;display:grid;position:absolute;bottom:calc(100% + 8px);left:8px}.FV0QMq_accountDropdownHeader{min-height:36px;font-family:var(--dsw-font-family-body);font-size:var(--dsw-font-size-body-sm);line-height:var(--dsw-font-line-height-body-sm);align-items:center;gap:8px;padding:0 8px 8px;display:flex}.FV0QMq_accountMenuDivider{background:var(--dsw-alias-border-l2);height:1px;margin:0 4px 6px}.FV0QMq_accountItem{text-align:left;min-height:32px;font:var(--dsw-font-s-14);background:0 0;border-radius:7px;align-items:center;gap:8px;padding:0 10px;display:flex}.FV0QMq_accountItem:hover{background:var(--dsw-alias-bg-hover)}.FV0QMq_accountPresence{box-sizing:content-box;border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-fg-accent);border-radius:50%;flex:none;width:6px;height:6px;margin-left:auto}.FV0QMq_accountTrigger .FV0QMq_accountPresence{border-color:var(--dsw-alias-bg-layer-1)}.FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-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}.FV0QMq_toggleClusterNative{z-index:auto;flex:none;align-items:center;position:static;inset:auto}button[data-dsh-better-sidebar-toggle]{display:none}body:not([data-dsh-native-sidebar-toggle]) .FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:var(--dsh-sidebar-toggle-reserve,188px)}.FV0QMq_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}.FV0QMq_manualButton{min-width:94px;height:28px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);white-space:nowrap;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:6px;flex:none;justify-content:center;align-items:center;gap:6px;margin-right:4px;padding:0 10px;display:inline-flex}.FV0QMq_manualButton:hover,.FV0QMq_toggleButton:hover:not(:disabled):not([aria-disabled=true]){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_toggleButton:disabled,.FV0QMq_toggleButton[aria-disabled=true]{opacity:.4;cursor:default}.FV0QMq_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}.FV0QMq_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%)}.FV0QMq_panel[data-dragging]{transition:none}.FV0QMq_panelResize{cursor:col-resize;z-index:2;touch-action:none;width:8px;position:absolute;top:0;bottom:0;left:-4px}.FV0QMq_panelResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_panelBody{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_bottomPanel{z-index:40;background:var(--dsw-alias-bg-layer-1);border-top:1px solid var(--dsw-alias-border-l2);pointer-events:auto;padding-bottom:env(safe-area-inset-bottom);transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out);flex-direction:column;display:flex;position:absolute;bottom:0}.FV0QMq_bottomPanelHidden{pointer-events:none;visibility:hidden;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), height var(--ds-transition-duration-slow) var(--ds-ease-in-out), visibility 0s linear var(--ds-transition-duration-slow);transform:translateY(102%)}.FV0QMq_bottomPanel[data-dragging]{transition:none}.FV0QMq_panel,.FV0QMq_bottomPanel{contain:layout style}body[data-dsh-sidebar-dragging] .FV0QMq_panel,body[data-dsh-sidebar-dragging] .FV0QMq_bottomPanel{will-change:transform}.FV0QMq_bottomResize{cursor:row-resize;z-index:2;touch-action:none;height:8px;position:absolute;top:-4px;left:0;right:0}.FV0QMq_bottomResizeActive{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_bottomClose{z-index:4;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;position:absolute;top:3px;right:6px}.FV0QMq_bottomClose:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_bottomPanel .FV0QMq_tabBar{padding-right:40px}.FV0QMq_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}.FV0QMq_floatWindowDragging{will-change:left, top, width, height}.FV0QMq_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}.FV0QMq_floatWindowDragging .FV0QMq_floatHeader{cursor:grabbing}.FV0QMq_floatTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_floatClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_floatContent{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.FV0QMq_floatResize{z-index:2;cursor:nwse-resize;touch-action:none;width:14px;height:14px;position:absolute;bottom:0;right:0}.FV0QMq_floatResize:hover{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane[data-dsh-float-dock-over]{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px}.FV0QMq_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}.FV0QMq_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}.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_manualButton,.FV0QMq_tabBar,.FV0QMq_floatHeader{-webkit-app-region:no-drag}body[data-dsh-title-bar-compat] .FV0QMq_toggleCluster{top:var(--dsh-native-sidebar-toggle-top,calc(var(--dsh-title-bar-strip,40px) + 3px))}body[data-dsh-title-bar-compat] .FV0QMq_panel{padding-top:var(--dsh-title-bar-strip,40px)}.FV0QMq_cornerHandle{left:-6px;bottom:calc(var(--dsh-sidebar-height,0px) + 6px);z-index:2;cursor:nwse-resize;touch-action:none;width:12px;height:12px;position:absolute}.FV0QMq_cornerHandle:hover,.FV0QMq_cornerHandle[data-dragging]{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_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}.FV0QMq_iconButton:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_iconButton:disabled{opacity:.4;cursor:default}.FV0QMq_workbench,.FV0QMq_split{flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_splitRow{flex-direction:row}.FV0QMq_splitCol{flex-direction:column}.FV0QMq_splitChild{display:flex;position:relative;overflow:hidden}.FV0QMq_divider{z-index:3;touch-action:none;flex:none;position:relative}.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{content:\"\";background:var(--dsw-alias-border-l2);transition:background var(--ds-transition-duration-slow) var(--ds-ease-in-out);position:absolute}.FV0QMq_dividerRow{cursor:col-resize;width:7px;margin:0 -2px}.FV0QMq_dividerRow:after{width:1px;top:0;bottom:0;left:50%;transform:translate(-50%)}.FV0QMq_dividerCol{cursor:row-resize;height:7px;margin:-2px 0}.FV0QMq_dividerCol:after{height:1px;top:50%;left:0;right:0;transform:translateY(-50%)}.FV0QMq_divider:hover:after,.FV0QMq_dividerActive:after{background:var(--dsw-alias-interactive-bg-hover-accent)}.FV0QMq_pane{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_paneDrop{outline:1px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_dropOverlay{z-index:6;pointer-events:none;background:var(--dsw-alias-interactive-bg-hover-accent);opacity:.5;position:absolute}.FV0QMq_dropLeft{width:25%;top:0;bottom:0;left:0}.FV0QMq_dropRight{width:25%;top:0;bottom:0;right:0}.FV0QMq_dropUp{height:25%;top:0;left:0;right:0}.FV0QMq_dropDown{height:25%;bottom:0;left:0;right:0}.FV0QMq_dropCenter{outline:2px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-2px;background:0 0;inset:25%}.FV0QMq_paneContent{flex-direction:column;flex:1;min-height:0;display:flex;overflow:hidden}.FV0QMq_paneTab{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_paneTabHidden{display:none}.FV0QMq_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}.FV0QMq_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}.FV0QMq_paneCard:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-border-l2)}.FV0QMq_paneCard:disabled{opacity:.45;cursor:default}.FV0QMq_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}.FV0QMq_tabBarDrop{outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_tabList{scrollbar-width:none;flex:1;min-width:0;display:flex;overflow-x:auto}.FV0QMq_tabList::-webkit-scrollbar{display:none}.FV0QMq_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}.FV0QMq_tab:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_tabActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_tabTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_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}.FV0QMq_tabClose:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_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}.FV0QMq_tabBarPlus:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_pinnedTab{color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_pinnedTab:hover{color:var(--dsw-alias-label-secondary)}.FV0QMq_explorer{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_explorerHeader{flex:none;justify-content:space-between;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_explorerRoot{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_explorerBody{flex:1;min-height:0;padding:4px 8px 8px;overflow:hidden auto}.FV0QMq_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:FV0QMq_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}.FV0QMq_explorerRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_explorerRowRevealed{background:var(--dsw-alias-state-business-tertiary)}.FV0QMq_explorerRowRevealed+.FV0QMq_explorerRowRevealed{border-top-left-radius:0;border-top-right-radius:0}.FV0QMq_explorerRowRevealed:has(+.FV0QMq_explorerRowRevealed){border-bottom-right-radius:0;border-bottom-left-radius:0}.FV0QMq_explorerDir{font:var(--dsw-font-s-strong-14)}.FV0QMq_explorerHidden{opacity:.45}.FV0QMq_explorerSymlink{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerBroken .FV0QMq_explorerName{color:var(--dsw-alias-state-error-primary)}.FV0QMq_explorerName{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_explorerRef:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_explorerRow:hover .FV0QMq_explorerRef,.FV0QMq_explorerRow:focus-within .FV0QMq_explorerRef{display:inline-flex}.FV0QMq_explorerCopied{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_explorerError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);cursor:default}@keyframes FV0QMq_dsh-row-in{0%{opacity:0}}.FV0QMq_explorerEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_explorerRowDropTarget{background:var(--dsw-alias-interactive-bg-hover);outline:1px dashed var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}.FV0QMq_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:FV0QMq_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}.FV0QMq_uploadDropHero{flex-direction:column;align-items:center;gap:10px;max-width:100%;padding-top:8px;display:flex}.FV0QMq_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}.FV0QMq_uploadDropZoneText{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.FV0QMq_uploadDropChatHint{z-index:1002;pointer-events:none;animation:FV0QMq_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}.FV0QMq_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}.FV0QMq_uploadOverlay{z-index:30;background:var(--dsw-alias-bg-mask-1);backdrop-filter:var(--dsw-mask-blur);animation:FV0QMq_dsh-row-in .15s var(--ds-ease-in-out);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.FV0QMq_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}.FV0QMq_uploadOverlayTitle{font:var(--dsw-font-s-strong-14);color:var(--dsw-alias-label-primary);align-items:center;gap:8px;display:flex}.FV0QMq_uploadOverlayTitle>svg{flex:none}.FV0QMq_uploadOverlayTitle>span{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.FV0QMq_uploadOverlayProgress{background:var(--dsw-alias-border-l2);border-radius:3px;height:6px;overflow:hidden}.FV0QMq_uploadOverlayProgressFill{background:var(--dsw-alias-interactive-bg-hover-accent);height:100%;transition:width .15s var(--ds-ease-in-out);border-radius:3px}.FV0QMq_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}.FV0QMq_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}.FV0QMq_uploadOverlayCancel:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_uploadOverlayCancel:disabled{opacity:.4;cursor:default}.FV0QMq_editor{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_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}.FV0QMq_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}.FV0QMq_editorPathInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorTreeToggleActive{color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_editorBody{flex:1;min-height:0;display:flex}.FV0QMq_editorMain{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.FV0QMq_editorTreeDock{border-left:1px solid var(--dsw-alias-border-l1);flex:none;min-height:0;display:flex;position:relative}.FV0QMq_editorTreeResize{cursor:col-resize;touch-action:none;z-index:3;width:6px;position:absolute;top:0;bottom:0;left:0}.FV0QMq_editorTreeResize:hover{background:var(--dsw-alias-border-l2)}.FV0QMq_editorTreePanel{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;position:relative}.FV0QMq_editorTreePanelFull{flex:1}.FV0QMq_editorTreeSearch{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:6px;padding:6px 8px;display:flex}.FV0QMq_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}.FV0QMq_editorSearchInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_editorSearchHint{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:8px 12px}.FV0QMq_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}.FV0QMq_editorSearchResult:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorStatus{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_editorStatusError{color:var(--dsw-alias-state-error-primary)}.FV0QMq_dirtyDot{background:var(--dsw-alias-state-warn-primary);border-radius:50%;flex:none;width:7px;height:7px}.FV0QMq_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}.FV0QMq_orphanedType{opacity:.7;overflow-wrap:anywhere;margin-top:8px;font-size:12px;display:block}.FV0QMq_editorBinary{text-align:center;flex-direction:column;flex:1;justify-content:center;align-items:center;gap:12px;padding:24px 16px;display:flex}.FV0QMq_editorBinaryNotice{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_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}.FV0QMq_editorDownloadLink:hover{background:var(--dsw-alias-interactive-bg-hover);border-color:var(--dsw-alias-border-l2)}.FV0QMq_editorError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);padding:12px 16px}.FV0QMq_fenceError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 16px;display:flex}.FV0QMq_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}.FV0QMq_sandboxStatus{font:var(--dsw-font-xxxs-11);flex:none;align-items:center;gap:8px;padding:4px 10px;display:flex}.FV0QMq_sandboxStatusOn{color:var(--dsw-alias-label-secondary);background:var(--dsw-alias-bg-layer-1);border-bottom:1px solid var(--dsw-alias-border-l1)}.FV0QMq_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)}.FV0QMq_sandboxDot{background:var(--dsw-alias-state-success-primary);border-radius:50%;flex:none;width:6px;height:6px}.FV0QMq_sandboxStatusOff .FV0QMq_sandboxDot{background:var(--dsw-alias-state-error-primary)}.FV0QMq_sandboxStatusText{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.FV0QMq_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}.FV0QMq_sandboxAction:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorHtml{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_browser{flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_browserBar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:4px;padding:6px 8px;display:flex}.FV0QMq_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}.FV0QMq_browserInput:focus{border-color:var(--dsw-alias-border-l2);outline:none}.FV0QMq_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}.FV0QMq_browserFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_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}.FV0QMq_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}.FV0QMq_browserBlockedTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary)}.FV0QMq_browserBlockedDesc{max-width:280px;font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-secondary)}.FV0QMq_browserBlockedActions{gap:8px;margin-top:6px;display:flex}.FV0QMq_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}.FV0QMq_browserBlockedButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorCm{background:0 0;flex:1;min-height:0;overflow:hidden}.FV0QMq_editorCmHidden{display:none}.FV0QMq_editorCm .cm-editor{height:100%}.FV0QMq_editorCm .cm-scroller{padding:12px 16px}.FV0QMq_editorCm .cm-editor.cm-focused{outline:none}.FV0QMq_editorModeToggle{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;flex:none;align-items:center;gap:2px;padding:2px;display:inline-flex}.FV0QMq_editorModeButton{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;padding:2px 8px}.FV0QMq_editorModeButton:hover{color:var(--dsw-alias-label-primary)}.FV0QMq_editorModeActive{background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary)}.FV0QMq_editorImageWrap{flex:1;justify-content:center;align-items:center;min-height:0;padding:12px;display:flex;overflow:auto}.FV0QMq_editorImage{object-fit:contain;max-width:100%;max-height:100%}.FV0QMq_editorMd{min-height:0;font:var(--dsw-font-xs-13);flex:1;padding:12px 16px;overflow-y:auto}.FV0QMq_mermaidWrap{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:6px;margin:6px 0;overflow:hidden}.FV0QMq_mermaidHeader{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);justify-content:space-between;align-items:center;gap:6px;padding:4px 8px;display:flex}.FV0QMq_mermaidInfo{font:var(--dsw-font-xxxs-strong-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_mermaidCopy{height:20px;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxxs-11);cursor:pointer;background:0 0;border:none;border-radius:4px;align-items:center;gap:4px;padding:0 6px;display:inline-flex}.FV0QMq_mermaidCopy:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_mermaidBody{cursor:zoom-in;justify-content:center;padding:10px;display:flex;overflow:auto}.FV0QMq_mermaidBody svg{max-width:100%;height:auto}.FV0QMq_mermaidError{border-bottom:1px solid var(--dsw-alias-border-l1);color:var(--dsw-alias-state-error-primary);font:var(--dsw-font-xxxs-11);padding:6px 10px}.FV0QMq_mermaidCode{font:var(--dsw-font-xxxs-11);margin:0;padding:8px 10px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;overflow:auto}.FV0QMq_mermaidMarkdown .md-code-block[data-mermaid-processed]{display:contents}.FV0QMq_mermaidModal{z-index:1000;background:var(--dsw-alias-bg-mask-1);backdrop-filter:blur(2px);flex-direction:column;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.FV0QMq_mermaidModalToolbar{z-index:10;gap:8px;display:flex;position:absolute;top:16px;right:16px}.FV0QMq_mermaidModalButton{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:36px;height:36px;color:var(--dsw-alias-label-primary);font:var(--dsw-font-xs-strong-13);cursor:pointer;border-radius:8px;justify-content:center;align-items:center;display:inline-flex}.FV0QMq_mermaidModalButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_mermaidModalStage{justify-content:center;align-items:center;width:90vw;height:80vh;display:flex;position:relative;overflow:hidden}.FV0QMq_mermaidModalStage svg{cursor:grab;transform-origin:50%;user-select:none;-webkit-user-drag:none;background:var(--dsw-alias-bg-layer-1);border-radius:12px;max-width:none;max-height:none;padding:16px}.FV0QMq_mermaidModalStage svg:active{cursor:grabbing}.FV0QMq_mermaidModalHint{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);pointer-events:none;position:absolute;bottom:16px;left:50%;transform:translate(-50%)}.FV0QMq_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))}.FV0QMq_selectionPopup:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_editorPdf{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex}.FV0QMq_editorPdfToolbar{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;padding:6px 8px;display:flex}.FV0QMq_editorPdfStage{flex:1;min-height:0;display:flex;position:relative}.FV0QMq_editorPdfFrame{background:var(--dsw-alias-bg-base);border:none;flex:1;width:100%;min-height:0}.FV0QMq_editorPdfFrameBlocked{pointer-events:none}.FV0QMq_editorPdfDragShield{z-index:4;pointer-events:none;background:0 0;position:absolute;inset:0}.FV0QMq_editorPdfDragShieldActive{pointer-events:auto}body[data-dsh-tab-dragging] .FV0QMq_editorPdfFrame{pointer-events:none!important}body[data-dsh-tab-dragging] .FV0QMq_editorPdfDragShield{pointer-events:auto!important}.FV0QMq_terminalWrap{background:var(--dsw-alias-bg-base);flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.FV0QMq_terminal{flex:1;min-height:0;padding:6px 4px 6px 8px}.FV0QMq_terminal .xterm{height:100%}.FV0QMq_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}.FV0QMq_terminalBannerUrl{word-break:break-all;opacity:.85;flex-basis:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.FV0QMq_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}.FV0QMq_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}.FV0QMq_terminalRetry:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_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}.FV0QMq_terminalDepsTitle{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-state-warn-primary)}.FV0QMq_terminalDepsHint{opacity:.9}.FV0QMq_terminalDepsCommandRow{align-items:flex-start;gap:8px;display:flex}.FV0QMq_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}.FV0QMq_terminalDepsNote{opacity:.85}.FV0QMq_terminalDepsActions{align-items:center;gap:8px;display:flex}.FV0QMq_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}.FV0QMq_git{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_gitHeader{flex:none;align-items:center;gap:8px;height:36px;padding:0 8px 0 12px;display:flex}.FV0QMq_gitWorktreeRow{flex:none;align-items:center;gap:8px;padding:6px 8px 0 12px;display:flex}.FV0QMq_gitWorktreeLabel{color:var(--dsw-alias-label-tertiary);font:var(--dsw-font-xxxs-11);flex:none}.FV0QMq_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}.FV0QMq_gitSection{border-top:1px solid var(--dsw-alias-border-l1)}.FV0QMq_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}.FV0QMq_gitLink{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:none;padding:0}.FV0QMq_gitLink:hover:not(:disabled){text-decoration:underline}.FV0QMq_gitLink:disabled{opacity:.4;cursor:default}.FV0QMq_gitRow{min-height:34px;animation:FV0QMq_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}.FV0QMq_gitRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitRowSelected{background:var(--dsw-alias-interactive-bg-active)}.FV0QMq_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}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitEmpty{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);padding:4px 12px 8px}.FV0QMq_gitPlaceholder{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary);text-align:center;padding:16px}.FV0QMq_gitError{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-state-error-primary);white-space:pre-wrap;padding:8px 12px}.FV0QMq_gitDiff{border-top:1px solid var(--dsw-alias-border-l1);padding:8px}.FV0QMq_gitDiffTab{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden auto}.FV0QMq_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}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitDiffFile:disabled{cursor:default}.FV0QMq_gitDiffFile:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitDiffFileChevron{color:var(--dsw-alias-label-tertiary);flex:none;transform:rotate(0)}.FV0QMq_gitDiffFileChevronExpanded{transform:rotate(90deg)}.FV0QMq_gitDiffFilePath{font:var(--dsw-font-xxs-strong-12);color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitDiffHunk{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);gap:8px;padding:3px 2px;display:flex}.FV0QMq_gitDiffHunkHeader{color:var(--dsw-alias-label-secondary);flex:none}.FV0QMq_gitDiffHunkSection{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_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}.FV0QMq_gitDiffNum{text-align:right;width:36px;color:var(--dsw-alias-label-tertiary);user-select:none;flex:none;padding-right:8px}.FV0QMq_gitDiffCode{flex:1;min-width:0;overflow:visible}.FV0QMq_gitDiffCtx{color:var(--dsw-alias-label-primary)}.FV0QMq_gitDiffDel{color:var(--dsw-alias-state-error-primary);background:color-mix(in srgb, var(--dsw-alias-state-error-primary) 12%, transparent)}.FV0QMq_gitDiffAdd{color:var(--dsw-alias-state-success-primary);background:color-mix(in srgb, var(--dsw-alias-state-success-primary) 12%, transparent)}.FV0QMq_gitDiffMeta{padding-left:2px}.FV0QMq_gitDiffMetaText{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);font-style:italic}.FV0QMq_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}.FV0QMq_gitDiffExpand:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitConfirmDesc{font:var(--dsw-font-s-14);color:var(--dsw-alias-label-primary);white-space:pre-wrap;margin:0}.FV0QMq_gitCommit{border-top:1px solid var(--dsw-alias-border-l1);align-items:center;gap:6px;padding:8px 12px;display:flex}.FV0QMq_gitCommitInput{flex:1;min-width:0}.FV0QMq_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}.FV0QMq_gitCommitButton:hover:not(:disabled){background:var(--dsw-alias-button-primary-hover)}.FV0QMq_gitCommitButton:disabled{opacity:.45;cursor:default}.FV0QMq_gitLogRow{cursor:pointer;border-radius:8px;flex-direction:column;gap:2px;padding:5px 12px;display:flex}.FV0QMq_gitLogRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.FV0QMq_gitLogLine1{align-items:baseline;gap:8px;min-width:0;display:flex}.FV0QMq_gitLogHash{font:var(--dsw-font-markdown-code-block-small);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_gitLogLine2{flex-wrap:wrap;align-items:center;gap:6px;min-width:0;display:flex}.FV0QMq_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}.FV0QMq_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}.FV0QMq_gitLogMeta{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary)}.FV0QMq_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}.FV0QMq_gitLogMore:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_gitLogMore:disabled{opacity:.5;cursor:default}.FV0QMq_producedRow{flex-wrap:wrap;align-items:center;gap:8px;padding:4px 0;display:flex}.FV0QMq_producedLabel{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_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}.FV0QMq_producedChip:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_producedChip span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.FV0QMq_producedMore{font:var(--dsw-font-xxs-12);color:var(--dsw-alias-label-tertiary)}.FV0QMq_toggleButton:focus-visible,.FV0QMq_manualButton:focus-visible,.FV0QMq_bottomClose:focus-visible,.FV0QMq_iconButton:focus-visible,.FV0QMq_tab:focus-visible,.FV0QMq_tabClose:focus-visible,.FV0QMq_tabBarPlus:focus-visible,.FV0QMq_paneCard:focus-visible,.FV0QMq_explorerRow:focus-visible,.FV0QMq_explorerRef:focus-visible,.FV0QMq_gitRowMain:focus-visible,.FV0QMq_gitLink:focus-visible,.FV0QMq_gitCommitButton:focus-visible,.FV0QMq_gitLogRow:focus-visible,.FV0QMq_gitLogMore:focus-visible,.FV0QMq_gitDiffFile:focus-visible,.FV0QMq_gitDiffExpand:focus-visible,.FV0QMq_terminalRetry:focus-visible,.FV0QMq_editorModeButton:focus-visible,.FV0QMq_editorDownloadLink:focus-visible,.FV0QMq_editorPptxButton:focus-visible,.FV0QMq_editorDocxZoomRange:focus-visible{outline:2px solid var(--dsw-alias-interactive-bg-hover-accent);outline-offset:-1px}@media (prefers-reduced-motion:reduce){.FV0QMq_panel,.FV0QMq_panelHidden,.FV0QMq_bottomPanel,.FV0QMq_bottomPanelHidden,.FV0QMq_toggleCluster,.FV0QMq_toggleButton,.FV0QMq_tab,.FV0QMq_tabBarPlus,.FV0QMq_paneCard,.FV0QMq_explorerRow,.FV0QMq_gitRow,.FV0QMq_divider,.FV0QMq_dividerRow:after,.FV0QMq_dividerCol:after{transition:none;animation:none}}@media (width<=767px){.FV0QMq_panel:not(.FV0QMq_panelHidden) .FV0QMq_tabBar{padding-right:148px}.FV0QMq_tab{min-width:48px;max-width:128px}}.FV0QMq_openWithLabel{align-items:center;gap:8px;width:100%;min-width:0;display:flex}.FV0QMq_openWithName{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.FV0QMq_openWithChevron{color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_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}.FV0QMq_openWithPin:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_openWithPinActive{color:var(--dsw-alias-state-business-primary)}.FV0QMq_editorHtmlBlock{margin:8px 0}.FV0QMq_editorHtmlBlock img,.FV0QMq_editorHtmlBlock video{max-width:100%}.FV0QMq_editorHtmlBlock details{margin:4px 0;padding:4px 0}.FV0QMq_editorHtmlBlock summary{cursor:pointer}.FV0QMq_tocBar{z-index:3;pointer-events:none;justify-content:flex-end;height:0;display:flex;position:sticky;top:0}.FV0QMq_tocButton{pointer-events:auto;border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;margin:4px 2px 0 0;padding:0;display:inline-flex}.FV0QMq_tocButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:min(300px,82%);max-height:60vh;box-shadow:var(--dsw-shadow-lv2);pointer-events:auto;border-radius:8px;flex-direction:column;padding:4px;display:flex;position:absolute;top:32px;right:2px;overflow-y:auto}.FV0QMq_tocItem{min-width:0;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-xxs-12);text-align:left;cursor:pointer;background:0 0;border:none;border-radius:6px;align-items:baseline;gap:8px;padding:4px 8px;display:flex}.FV0QMq_tocItem:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.FV0QMq_tocItem[data-level=\"2\"]{padding-left:18px}.FV0QMq_tocItem[data-level=\"3\"]{padding-left:28px}.FV0QMq_tocItem[data-level=\"4\"]{padding-left:38px}.FV0QMq_tocItem[data-level=\"5\"]{padding-left:48px}.FV0QMq_tocItem[data-level=\"6\"]{padding-left:58px}.FV0QMq_tocItemLevel{font:var(--dsw-font-xxxs-11);color:var(--dsw-alias-label-tertiary);flex:none}.FV0QMq_tocItemText{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}@keyframes FV0QMq_dsh-toc-flash{0%,60%{background:var(--dsw-alias-interactive-bg-hover)}to{background:0 0}}.FV0QMq_tocFlash{border-radius:4px;animation:1.2s ease-out FV0QMq_dsh-toc-flash}.FV0QMq_chatcodeGate{z-index:2147483000;isolation:isolate;background-color:var(--dsw-alias-tooltip-bg);background-image:linear-gradient(135deg, var(--dsw-alias-tooltip-bg) 0%, var(--dsw-alias-brand-primary) 48%, var(--dsw-alias-tooltip-bg) 100%);color:var(--dsw-alias-fg-base);pointer-events:auto;place-items:center;padding:24px;display:grid;position:fixed;inset:0;overflow:hidden}.FV0QMq_chatcodeGateCard{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:linear-gradient(145deg, var(--dsw-alias-bg-layer-2), var(--dsw-alias-bg-layer-1));width:min(460px,100%);box-shadow:var(--dsw-shadow-lv3);text-align:center;border-radius:20px;padding:40px 36px;position:relative}.FV0QMq_chatcodeGateContent{position:relative}.FV0QMq_chatcodeGateCard h1{font:var(--dsw-font-heading-lg);letter-spacing:-.02em;margin:0 0 12px;font-size:clamp(32px,5vw,46px);line-height:1.1}.FV0QMq_chatcodeGateCard p{max-width:29em;color:var(--dsw-alias-label-secondary);font:var(--dsw-font-s-14);margin:0 auto;line-height:1.7}.FV0QMq_chatcodeGateError{border:1px solid color-mix(in srgb, var(--dsw-alias-fg-error) 36%, var(--dsw-alias-border-l2));background:color-mix(in srgb, var(--dsw-alias-fg-error) 8%, transparent);border-radius:10px;padding:9px 11px;position:relative;color:var(--dsw-alias-fg-error)!important;font:var(--dsw-font-xxs-12)!important;margin-top:16px!important;line-height:1.5!important}.FV0QMq_chatcodeGateActions{justify-content:center;gap:10px;margin:28px 0 14px;display:flex;position:relative}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:42px;color:var(--dsw-alias-fg-base);font:var(--dsw-font-xxs-strong-12);cursor:pointer;transition:transform var(--ds-transition-duration-slow) var(--ds-ease-in-out), 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:10px;padding:9px 17px}.FV0QMq_chatcodeGateActions button:first-child{border-color:var(--dsw-alias-state-error-primary);background:var(--dsw-alias-state-error-primary);min-width:152px;min-height:46px;color:var(--dsw-alias-label-primary-inverted)}.FV0QMq_chatcodeGateActions button:first-child:hover:not(:disabled){box-shadow:var(--dsw-shadow-lv2);transform:translateY(-2px);border-color:var(--dsw-alias-state-error-primary)!important;background:var(--dsw-alias-state-error-primary)!important;color:var(--dsw-alias-label-primary-inverted)!important}.FV0QMq_chatcodeGateActions button:not(:first-child):hover:not(:disabled),.FV0QMq_chatcodeGateCard a:hover{border-color:var(--dsw-alias-button-primary-hover);background:var(--dsw-alias-button-primary-hover);color:var(--dsw-alias-label-primary-inverted);transform:translateY(-1px)}.FV0QMq_chatcodeGateActions button:disabled{cursor:default;opacity:.55}.FV0QMq_chatcodeGateCard a{align-items:center;text-decoration:none;display:inline-flex;position:relative}.FV0QMq_chatcodeGateActions button:focus-visible,.FV0QMq_chatcodeGateCard a:focus-visible{outline:2px solid var(--dsw-alias-border-accent);outline-offset:3px}@media (width<=480px){.FV0QMq_chatcodeGate{padding:16px}.FV0QMq_chatcodeGateCard{padding:32px 24px}.FV0QMq_chatcodeGateActions{flex-direction:column;align-items:stretch}.FV0QMq_chatcodeGateActions button,.FV0QMq_chatcodeGateCard a{justify-content:center}}";
|
|
12093
|
+
const tagId$5 = "dsh-external/dsh-better-sidebar/sidebar.module.css";
|
|
12094
|
+
if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
|
|
12095
|
+
const tag = document.createElement("style");
|
|
12096
|
+
tag.dataset.plugin = "dsh-external/dsh-better-sidebar";
|
|
12097
|
+
tag.dataset.pluginCss = tagId$5;
|
|
12098
|
+
tag.textContent = css$5;
|
|
12099
|
+
document.head.appendChild(tag);
|
|
12100
|
+
}
|
|
12101
|
+
var sidebar_module_css_default = {
|
|
12102
|
+
"bottomPanelHidden": "FV0QMq_bottomPanelHidden",
|
|
12103
|
+
"tabActive": "FV0QMq_tabActive",
|
|
12104
|
+
"editorPdfFrame": "FV0QMq_editorPdfFrame",
|
|
12105
|
+
"toggleCluster": "FV0QMq_toggleCluster",
|
|
12106
|
+
"gitDiffFile": "FV0QMq_gitDiffFile",
|
|
12107
|
+
"dropUp": "FV0QMq_dropUp",
|
|
12108
|
+
"splitChild": "FV0QMq_splitChild",
|
|
12109
|
+
"dropOverlay": "FV0QMq_dropOverlay",
|
|
12110
|
+
"tocFlash": "FV0QMq_tocFlash",
|
|
12111
|
+
"producedChip": "FV0QMq_producedChip",
|
|
12112
|
+
"pinnedSessionDot": "FV0QMq_pinnedSessionDot",
|
|
12113
|
+
"dropCenter": "FV0QMq_dropCenter",
|
|
12114
|
+
"updateSettingsDesc": "FV0QMq_updateSettingsDesc",
|
|
12115
|
+
"divider": "FV0QMq_divider",
|
|
12116
|
+
"editor": "FV0QMq_editor",
|
|
12117
|
+
"updateSettingsBlock": "FV0QMq_updateSettingsBlock",
|
|
12118
|
+
"editorDocxZoomRange": "FV0QMq_editorDocxZoomRange",
|
|
12119
|
+
"gitBadge": "FV0QMq_gitBadge",
|
|
12120
|
+
"explorerError": "FV0QMq_explorerError",
|
|
12121
|
+
"tocItem": "FV0QMq_tocItem",
|
|
12122
|
+
"paneTab": "FV0QMq_paneTab",
|
|
12123
|
+
"sandboxAction": "FV0QMq_sandboxAction",
|
|
12124
|
+
"editorModeButton": "FV0QMq_editorModeButton",
|
|
12125
|
+
"pinnedSessionMenu": "FV0QMq_pinnedSessionMenu",
|
|
12126
|
+
"tabBarPlus": "FV0QMq_tabBarPlus",
|
|
12127
|
+
"explorerRef": "FV0QMq_explorerRef",
|
|
12128
|
+
"editorPdfDragShieldActive": "FV0QMq_editorPdfDragShieldActive",
|
|
12129
|
+
"dsh-row-in": "FV0QMq_dsh-row-in",
|
|
12130
|
+
"editorSearchHint": "FV0QMq_editorSearchHint",
|
|
12131
|
+
"toggleClusterNative": "FV0QMq_toggleClusterNative",
|
|
12132
|
+
"openWithPin": "FV0QMq_openWithPin",
|
|
12133
|
+
"chatcodeGate": "FV0QMq_chatcodeGate",
|
|
12134
|
+
"uploadOverlayProgress": "FV0QMq_uploadOverlayProgress",
|
|
12135
|
+
"gitDiffFileTag": "FV0QMq_gitDiffFileTag",
|
|
12136
|
+
"pinnedTab": "FV0QMq_pinnedTab",
|
|
12137
|
+
"pane": "FV0QMq_pane",
|
|
12138
|
+
"gitDiffHunkHeader": "FV0QMq_gitDiffHunkHeader",
|
|
12139
|
+
"gitLink": "FV0QMq_gitLink",
|
|
12140
|
+
"gitName": "FV0QMq_gitName",
|
|
12141
|
+
"pinnedSessions": "FV0QMq_pinnedSessions",
|
|
12142
|
+
"releaseNotesFooter": "FV0QMq_releaseNotesFooter",
|
|
12143
|
+
"terminalDepsActions": "FV0QMq_terminalDepsActions",
|
|
12144
|
+
"releaseNotesDialog": "FV0QMq_releaseNotesDialog",
|
|
12145
|
+
"fenceError": "FV0QMq_fenceError",
|
|
12146
|
+
"explorerBroken": "FV0QMq_explorerBroken",
|
|
12147
|
+
"editorPdfToolbar": "FV0QMq_editorPdfToolbar",
|
|
12148
|
+
"sandboxDot": "FV0QMq_sandboxDot",
|
|
12149
|
+
"browserBlockedDesc": "FV0QMq_browserBlockedDesc",
|
|
12150
|
+
"panelBody": "FV0QMq_panelBody",
|
|
12151
|
+
"releaseNotesButton": "FV0QMq_releaseNotesButton",
|
|
12152
|
+
"floatDropHintLabel": "FV0QMq_floatDropHintLabel",
|
|
12153
|
+
"paneDrop": "FV0QMq_paneDrop",
|
|
12154
|
+
"releaseNotesContent": "FV0QMq_releaseNotesContent",
|
|
12155
|
+
"uploadDropZoneText": "FV0QMq_uploadDropZoneText",
|
|
12156
|
+
"browserBlocked": "FV0QMq_browserBlocked",
|
|
12157
|
+
"browserBlockedActions": "FV0QMq_browserBlockedActions",
|
|
12158
|
+
"workbench": "FV0QMq_workbench",
|
|
12159
|
+
"editorBanner": "FV0QMq_editorBanner",
|
|
12160
|
+
"pinnedSessionsList": "FV0QMq_pinnedSessionsList",
|
|
12161
|
+
"uploadDropZone": "FV0QMq_uploadDropZone",
|
|
12162
|
+
"panelHidden": "FV0QMq_panelHidden",
|
|
12163
|
+
"gitEmpty": "FV0QMq_gitEmpty",
|
|
12164
|
+
"producedLabel": "FV0QMq_producedLabel",
|
|
12165
|
+
"openWithName": "FV0QMq_openWithName",
|
|
12166
|
+
"openWithChevron": "FV0QMq_openWithChevron",
|
|
12167
|
+
"gitLogLine1": "FV0QMq_gitLogLine1",
|
|
12168
|
+
"dirtyDot": "FV0QMq_dirtyDot",
|
|
12169
|
+
"editorPdfDragShield": "FV0QMq_editorPdfDragShield",
|
|
12170
|
+
"git": "FV0QMq_git",
|
|
12171
|
+
"updateFooter": "FV0QMq_updateFooter",
|
|
12172
|
+
"bottomResizeActive": "FV0QMq_bottomResizeActive",
|
|
12173
|
+
"explorerCopied": "FV0QMq_explorerCopied",
|
|
12174
|
+
"updateSettingsTitle": "FV0QMq_updateSettingsTitle",
|
|
12175
|
+
"explorerEmpty": "FV0QMq_explorerEmpty",
|
|
12176
|
+
"uploadOverlayTitle": "FV0QMq_uploadOverlayTitle",
|
|
12177
|
+
"mermaidBody": "FV0QMq_mermaidBody",
|
|
12178
|
+
"selectionPopup": "FV0QMq_selectionPopup",
|
|
12179
|
+
"producedRow": "FV0QMq_producedRow",
|
|
12180
|
+
"openWithLabel": "FV0QMq_openWithLabel",
|
|
12181
|
+
"gitDiffMeta": "FV0QMq_gitDiffMeta",
|
|
12182
|
+
"editorTreePanelFull": "FV0QMq_editorTreePanelFull",
|
|
12183
|
+
"mermaidModalStage": "FV0QMq_mermaidModalStage",
|
|
12184
|
+
"accountDropdownHeader": "FV0QMq_accountDropdownHeader",
|
|
12185
|
+
"editorSearchResult": "FV0QMq_editorSearchResult",
|
|
12186
|
+
"editorPathInput": "FV0QMq_editorPathInput",
|
|
12187
|
+
"terminalWrap": "FV0QMq_terminalWrap",
|
|
12188
|
+
"uploadOverlayStatus": "FV0QMq_uploadOverlayStatus",
|
|
12189
|
+
"gitDiffAdd": "FV0QMq_gitDiffAdd",
|
|
12190
|
+
"gitDiffExpand": "FV0QMq_gitDiffExpand",
|
|
12191
|
+
"gitLogHash": "FV0QMq_gitLogHash",
|
|
12192
|
+
"toggleButton": "FV0QMq_toggleButton",
|
|
12193
|
+
"tocItemLevel": "FV0QMq_tocItemLevel",
|
|
12194
|
+
"dsh-toc-flash": "FV0QMq_dsh-toc-flash",
|
|
12195
|
+
"paneContent": "FV0QMq_paneContent",
|
|
12196
|
+
"gitDiff": "FV0QMq_gitDiff",
|
|
12197
|
+
"gitCommit": "FV0QMq_gitCommit",
|
|
12198
|
+
"explorer": "FV0QMq_explorer",
|
|
12199
|
+
"gitDiffHunkSection": "FV0QMq_gitDiffHunkSection",
|
|
12200
|
+
"editorStatusError": "FV0QMq_editorStatusError",
|
|
12201
|
+
"editorError": "FV0QMq_editorError",
|
|
12202
|
+
"chatcodeGateCard": "FV0QMq_chatcodeGateCard",
|
|
12203
|
+
"gitLogRow": "FV0QMq_gitLogRow",
|
|
12204
|
+
"dividerCol": "FV0QMq_dividerCol",
|
|
12205
|
+
"terminalRepairCommand": "FV0QMq_terminalRepairCommand",
|
|
12206
|
+
"terminalRetry": "FV0QMq_terminalRetry",
|
|
12207
|
+
"tabBadge": "FV0QMq_tabBadge",
|
|
12208
|
+
"accountMenuDivider": "FV0QMq_accountMenuDivider",
|
|
12209
|
+
"pinnedSessionTitle": "FV0QMq_pinnedSessionTitle",
|
|
12210
|
+
"gitDiffTab": "FV0QMq_gitDiffTab",
|
|
12211
|
+
"updateError": "FV0QMq_updateError",
|
|
12212
|
+
"editorHeader": "FV0QMq_editorHeader",
|
|
12213
|
+
"editorTreeToggleActive": "FV0QMq_editorTreeToggleActive",
|
|
12214
|
+
"terminalBannerUrl": "FV0QMq_terminalBannerUrl",
|
|
12215
|
+
"editorModeActive": "FV0QMq_editorModeActive",
|
|
12216
|
+
"gitSectionHeader": "FV0QMq_gitSectionHeader",
|
|
12217
|
+
"dividerRow": "FV0QMq_dividerRow",
|
|
12218
|
+
"explorerBody": "FV0QMq_explorerBody",
|
|
12219
|
+
"splitRow": "FV0QMq_splitRow",
|
|
12220
|
+
"dropDown": "FV0QMq_dropDown",
|
|
12221
|
+
"terminalBanner": "FV0QMq_terminalBanner",
|
|
12222
|
+
"gitDiffCode": "FV0QMq_gitDiffCode",
|
|
12223
|
+
"producedMore": "FV0QMq_producedMore",
|
|
12224
|
+
"manualButton": "FV0QMq_manualButton",
|
|
12225
|
+
"gitDiffFileChevronExpanded": "FV0QMq_gitDiffFileChevronExpanded",
|
|
12226
|
+
"accountTrigger": "FV0QMq_accountTrigger",
|
|
12227
|
+
"mermaidModalToolbar": "FV0QMq_mermaidModalToolbar",
|
|
12228
|
+
"editorPdf": "FV0QMq_editorPdf",
|
|
12229
|
+
"floatTitle": "FV0QMq_floatTitle",
|
|
12230
|
+
"editorPdfStage": "FV0QMq_editorPdfStage",
|
|
12231
|
+
"gitLogRef": "FV0QMq_gitLogRef",
|
|
12232
|
+
"tocButton": "FV0QMq_tocButton",
|
|
12233
|
+
"floatClose": "FV0QMq_floatClose",
|
|
12234
|
+
"paneEmptyCards": "FV0QMq_paneEmptyCards",
|
|
12235
|
+
"tab": "FV0QMq_tab",
|
|
12236
|
+
"editorDownloadLink": "FV0QMq_editorDownloadLink",
|
|
12237
|
+
"pinnedSessionMore": "FV0QMq_pinnedSessionMore",
|
|
12238
|
+
"floatDropHint": "FV0QMq_floatDropHint",
|
|
12239
|
+
"sandboxStatusOn": "FV0QMq_sandboxStatusOn",
|
|
12240
|
+
"gitDiffTabTitle": "FV0QMq_gitDiffTabTitle",
|
|
12241
|
+
"gitDiffDel": "FV0QMq_gitDiffDel",
|
|
12242
|
+
"chatcodeGateError": "FV0QMq_chatcodeGateError",
|
|
12243
|
+
"splitCol": "FV0QMq_splitCol",
|
|
12244
|
+
"pinnedSessionRow": "FV0QMq_pinnedSessionRow",
|
|
12245
|
+
"gitLogMeta": "FV0QMq_gitLogMeta",
|
|
12246
|
+
"tabTitle": "FV0QMq_tabTitle",
|
|
12247
|
+
"explorerName": "FV0QMq_explorerName",
|
|
12248
|
+
"tocBar": "FV0QMq_tocBar",
|
|
12249
|
+
"gitLogSubject": "FV0QMq_gitLogSubject",
|
|
12250
|
+
"paneCard": "FV0QMq_paneCard",
|
|
12251
|
+
"gitWorktreeLabel": "FV0QMq_gitWorktreeLabel",
|
|
12252
|
+
"pinnedSessionMenuDivider": "FV0QMq_pinnedSessionMenuDivider",
|
|
12253
|
+
"browserBar": "FV0QMq_browserBar",
|
|
12254
|
+
"paneTabHidden": "FV0QMq_paneTabHidden",
|
|
12255
|
+
"browserBlockedTitle": "FV0QMq_browserBlockedTitle",
|
|
12256
|
+
"gitRowMain": "FV0QMq_gitRowMain",
|
|
12257
|
+
"chatcodeGateContent": "FV0QMq_chatcodeGateContent",
|
|
12258
|
+
"explorerRowRevealed": "FV0QMq_explorerRowRevealed",
|
|
12259
|
+
"accountName": "FV0QMq_accountName",
|
|
12260
|
+
"gitCommitButton": "FV0QMq_gitCommitButton",
|
|
12261
|
+
"explorerRoot": "FV0QMq_explorerRoot",
|
|
12262
|
+
"terminal": "FV0QMq_terminal",
|
|
12263
|
+
"gitDiffCtx": "FV0QMq_gitDiffCtx",
|
|
12264
|
+
"browserFrame": "FV0QMq_browserFrame",
|
|
12265
|
+
"accountPresence": "FV0QMq_accountPresence",
|
|
12266
|
+
"uploadDropZonePill": "FV0QMq_uploadDropZonePill",
|
|
12267
|
+
"gitWorktreeRow": "FV0QMq_gitWorktreeRow",
|
|
12268
|
+
"tocPanel": "FV0QMq_tocPanel",
|
|
12269
|
+
"chatcodeGateActions": "FV0QMq_chatcodeGateActions",
|
|
12270
|
+
"floatWindow": "FV0QMq_floatWindow",
|
|
12271
|
+
"updateVersions": "FV0QMq_updateVersions",
|
|
12272
|
+
"gitDiffHunk": "FV0QMq_gitDiffHunk",
|
|
12273
|
+
"pinnedSessionOpen": "FV0QMq_pinnedSessionOpen",
|
|
12274
|
+
"editorTitle": "FV0QMq_editorTitle",
|
|
12275
|
+
"gitError": "FV0QMq_gitError",
|
|
12276
|
+
"mermaidWrap": "FV0QMq_mermaidWrap",
|
|
12277
|
+
"gitHeader": "FV0QMq_gitHeader",
|
|
12278
|
+
"bottomClose": "FV0QMq_bottomClose",
|
|
12279
|
+
"editorTreePanel": "FV0QMq_editorTreePanel",
|
|
12280
|
+
"sandboxStatusText": "FV0QMq_sandboxStatusText",
|
|
12281
|
+
"gitDiffFileOld": "FV0QMq_gitDiffFileOld",
|
|
12282
|
+
"floatWindowDragging": "FV0QMq_floatWindowDragging",
|
|
12283
|
+
"sandboxStatusOff": "FV0QMq_sandboxStatusOff",
|
|
12284
|
+
"updateErrorText": "FV0QMq_updateErrorText",
|
|
12285
|
+
"split": "FV0QMq_split",
|
|
12286
|
+
"gitDiffMetaText": "FV0QMq_gitDiffMetaText",
|
|
12287
|
+
"updateSettingsText": "FV0QMq_updateSettingsText",
|
|
12288
|
+
"accountAvatar": "FV0QMq_accountAvatar",
|
|
12289
|
+
"explorerHeader": "FV0QMq_explorerHeader",
|
|
12290
|
+
"mermaidCopy": "FV0QMq_mermaidCopy",
|
|
12291
|
+
"terminalDepsTitle": "FV0QMq_terminalDepsTitle",
|
|
12292
|
+
"orphanedType": "FV0QMq_orphanedType",
|
|
12293
|
+
"updateSettingsRow": "FV0QMq_updateSettingsRow",
|
|
12294
|
+
"mermaidError": "FV0QMq_mermaidError",
|
|
12295
|
+
"floatContent": "FV0QMq_floatContent",
|
|
12296
|
+
"browserInput": "FV0QMq_browserInput",
|
|
12297
|
+
"mermaidHeader": "FV0QMq_mermaidHeader",
|
|
12298
|
+
"updateOk": "FV0QMq_updateOk",
|
|
12299
|
+
"editorTreeDock": "FV0QMq_editorTreeDock",
|
|
12300
|
+
"gitBranchSelect": "FV0QMq_gitBranchSelect",
|
|
12301
|
+
"dividerActive": "FV0QMq_dividerActive",
|
|
12302
|
+
"tabBarDrop": "FV0QMq_tabBarDrop",
|
|
12303
|
+
"gitLogLine2": "FV0QMq_gitLogLine2",
|
|
12304
|
+
"openWithPinActive": "FV0QMq_openWithPinActive",
|
|
12305
|
+
"editorTreeSearch": "FV0QMq_editorTreeSearch",
|
|
12306
|
+
"editorTreeResize": "FV0QMq_editorTreeResize",
|
|
12307
|
+
"editorHtmlBlock": "FV0QMq_editorHtmlBlock",
|
|
12308
|
+
"updateList": "FV0QMq_updateList",
|
|
12309
|
+
"releaseNotesIconButton": "FV0QMq_releaseNotesIconButton",
|
|
12310
|
+
"dropLeft": "FV0QMq_dropLeft",
|
|
12311
|
+
"mermaidModalButton": "FV0QMq_mermaidModalButton",
|
|
12312
|
+
"mermaidModal": "FV0QMq_mermaidModal",
|
|
12313
|
+
"tocItemText": "FV0QMq_tocItemText",
|
|
12314
|
+
"panelResizeActive": "FV0QMq_panelResizeActive",
|
|
12315
|
+
"updateBody": "FV0QMq_updateBody",
|
|
12316
|
+
"releaseNotesOverlay": "FV0QMq_releaseNotesOverlay",
|
|
12317
|
+
"terminalDepsNote": "FV0QMq_terminalDepsNote",
|
|
12318
|
+
"editorBinary": "FV0QMq_editorBinary",
|
|
12319
|
+
"gitDiffFileChevron": "FV0QMq_gitDiffFileChevron",
|
|
12320
|
+
"editorCm": "FV0QMq_editorCm",
|
|
12321
|
+
"iconButton": "FV0QMq_iconButton",
|
|
12322
|
+
"accountMenu": "FV0QMq_accountMenu",
|
|
12323
|
+
"editorMain": "FV0QMq_editorMain",
|
|
12324
|
+
"pinnedSessionsHeading": "FV0QMq_pinnedSessionsHeading",
|
|
12325
|
+
"accountDropdown": "FV0QMq_accountDropdown",
|
|
12326
|
+
"mermaidMarkdown": "FV0QMq_mermaidMarkdown",
|
|
12327
|
+
"gitRow": "FV0QMq_gitRow",
|
|
12328
|
+
"dropRight": "FV0QMq_dropRight",
|
|
12329
|
+
"uploadOverlay": "FV0QMq_uploadOverlay",
|
|
12330
|
+
"browserStart": "FV0QMq_browserStart",
|
|
12331
|
+
"tabBoundaryError": "FV0QMq_tabBoundaryError",
|
|
12332
|
+
"editorStatus": "FV0QMq_editorStatus",
|
|
12333
|
+
"explorerRow": "FV0QMq_explorerRow",
|
|
12334
|
+
"gitLogMore": "FV0QMq_gitLogMore",
|
|
12335
|
+
"accountItem": "FV0QMq_accountItem",
|
|
12336
|
+
"editorImage": "FV0QMq_editorImage",
|
|
12337
|
+
"gitPlaceholder": "FV0QMq_gitPlaceholder",
|
|
12338
|
+
"gitConfirmDesc": "FV0QMq_gitConfirmDesc",
|
|
12339
|
+
"tabList": "FV0QMq_tabList",
|
|
12340
|
+
"floatResize": "FV0QMq_floatResize",
|
|
12341
|
+
"browserBlockedButton": "FV0QMq_browserBlockedButton",
|
|
12342
|
+
"gitDiffNum": "FV0QMq_gitDiffNum",
|
|
12343
|
+
"uploadOverlayCancel": "FV0QMq_uploadOverlayCancel",
|
|
12344
|
+
"editorBinaryNotice": "FV0QMq_editorBinaryNotice",
|
|
12345
|
+
"mermaidModalHint": "FV0QMq_mermaidModalHint",
|
|
12346
|
+
"floatHeader": "FV0QMq_floatHeader",
|
|
12347
|
+
"gitCommitInput": "FV0QMq_gitCommitInput",
|
|
12348
|
+
"explorerHidden": "FV0QMq_explorerHidden",
|
|
12349
|
+
"mermaidInfo": "FV0QMq_mermaidInfo",
|
|
12350
|
+
"editorImageWrap": "FV0QMq_editorImageWrap",
|
|
12351
|
+
"explorerSymlink": "FV0QMq_explorerSymlink",
|
|
12352
|
+
"editorSearchInput": "FV0QMq_editorSearchInput",
|
|
12353
|
+
"tabClose": "FV0QMq_tabClose",
|
|
12354
|
+
"uploadDropChatHint": "FV0QMq_uploadDropChatHint",
|
|
12355
|
+
"mermaidCode": "FV0QMq_mermaidCode",
|
|
12356
|
+
"gitDiffFilePath": "FV0QMq_gitDiffFilePath",
|
|
12357
|
+
"gitDiffTabHeader": "FV0QMq_gitDiffTabHeader",
|
|
12358
|
+
"terminalDepsCommandRow": "FV0QMq_terminalDepsCommandRow",
|
|
12359
|
+
"terminalDepsHint": "FV0QMq_terminalDepsHint",
|
|
12360
|
+
"bottomPanel": "FV0QMq_bottomPanel",
|
|
12361
|
+
"releaseNotesHeader": "FV0QMq_releaseNotesHeader",
|
|
12362
|
+
"tabBar": "FV0QMq_tabBar",
|
|
12363
|
+
"terminalDepsBanner": "FV0QMq_terminalDepsBanner",
|
|
12364
|
+
"editorModeToggle": "FV0QMq_editorModeToggle",
|
|
12365
|
+
"editorMd": "FV0QMq_editorMd",
|
|
12366
|
+
"editorHtml": "FV0QMq_editorHtml",
|
|
12367
|
+
"gitDiffLine": "FV0QMq_gitDiffLine",
|
|
12368
|
+
"panel": "FV0QMq_panel",
|
|
12369
|
+
"editorPptxButton": "FV0QMq_editorPptxButton",
|
|
12370
|
+
"browserMessage": "FV0QMq_browserMessage",
|
|
12371
|
+
"updateInline": "FV0QMq_updateInline",
|
|
12372
|
+
"uploadDropHero": "FV0QMq_uploadDropHero",
|
|
12373
|
+
"cornerHandle": "FV0QMq_cornerHandle",
|
|
12374
|
+
"explorerDir": "FV0QMq_explorerDir",
|
|
12375
|
+
"uploadOverlayProgressFill": "FV0QMq_uploadOverlayProgressFill",
|
|
12376
|
+
"updateCommand": "FV0QMq_updateCommand",
|
|
12377
|
+
"bottomResize": "FV0QMq_bottomResize",
|
|
12378
|
+
"editorBody": "FV0QMq_editorBody",
|
|
12379
|
+
"editorPlaceholder": "FV0QMq_editorPlaceholder",
|
|
12380
|
+
"uploadOverlayCard": "FV0QMq_uploadOverlayCard",
|
|
12381
|
+
"gitRowSelected": "FV0QMq_gitRowSelected",
|
|
12382
|
+
"sandboxStatus": "FV0QMq_sandboxStatus",
|
|
12383
|
+
"boundaryError": "FV0QMq_boundaryError",
|
|
12384
|
+
"gitSection": "FV0QMq_gitSection",
|
|
12385
|
+
"panelResize": "FV0QMq_panelResize",
|
|
12386
|
+
"uploadDropChatCard": "FV0QMq_uploadDropChatCard",
|
|
12387
|
+
"browser": "FV0QMq_browser",
|
|
12388
|
+
"editorCmHidden": "FV0QMq_editorCmHidden",
|
|
12389
|
+
"explorerRowDropTarget": "FV0QMq_explorerRowDropTarget",
|
|
12390
|
+
"editorPdfFrameBlocked": "FV0QMq_editorPdfFrameBlocked"
|
|
12391
|
+
};
|
|
12392
|
+
//#endregion
|
|
12393
|
+
//#region src/client/intercept.tsx
|
|
12394
|
+
/**
|
|
12395
|
+
* Contribution of the chat's produced-files row. Current Hosts expose the
|
|
12396
|
+
* turn-tail surface as a list; older Hosts exposed it as a chain. The
|
|
12397
|
+
* registration supplies both shapes' routing fields so one bundle remains
|
|
12398
|
+
* compatible across that transition. The chips open the file in the sidebar
|
|
12399
|
+
* instead of the host OS.
|
|
12400
|
+
*/
|
|
12401
|
+
/** Open a file in the sidebar's editor (used by the intercepted row and the explorer). */
|
|
12402
|
+
function openSidebarFile(ctx, store, sessionId, path) {
|
|
12403
|
+
const summary = ctx.sessions.list.getSnapshot().byId[sessionId];
|
|
12404
|
+
const absolute = resolveSidebarPath(summary?.cwd, path);
|
|
12405
|
+
const at = Math.max(absolute.lastIndexOf("/"), absolute.lastIndexOf("\\"));
|
|
12406
|
+
const title = at === -1 ? absolute : absolute.slice(at + 1);
|
|
12407
|
+
ctx.get("betterSidebar")?.openTab({
|
|
12408
|
+
type: "editor",
|
|
12409
|
+
title,
|
|
12410
|
+
path: absolute,
|
|
12411
|
+
id: `editor:${absolute}`
|
|
12412
|
+
});
|
|
12413
|
+
}
|
|
12414
|
+
/**
|
|
12415
|
+
* The produced files the turn-tail selector last matched for the visible
|
|
12416
|
+
* session. The "Show in folder" gesture carries no file path of its own
|
|
12417
|
+
* (`'.'`), so the reveal highlights exactly these rows when available.
|
|
12418
|
+
*/
|
|
12419
|
+
let lastProduced = [];
|
|
12420
|
+
/**
|
|
12421
|
+
* Reveal the produced files in the sidebar explorer: expand their parent
|
|
12422
|
+
* directories, highlight the rows, and focus the explorer tab (expanding the
|
|
12423
|
+
* hosting panel when it is collapsed). Unknown files fall back to revealing
|
|
12424
|
+
* the workspace root itself.
|
|
12425
|
+
*/
|
|
12426
|
+
function revealInExplorer(ctx, store, sessionId, files) {
|
|
12427
|
+
const cwd = ctx.sessions.list.getSnapshot().byId[sessionId]?.cwd;
|
|
12428
|
+
const targets = files.length > 0 ? files.map((path) => resolveSidebarPath(cwd, path)) : cwd === void 0 ? [] : [cwd];
|
|
12429
|
+
store.reduce((state) => revealPaths(state, cwd, targets));
|
|
12430
|
+
store.reduce((s) => s.panelOpen ? s : togglePanel(s));
|
|
12431
|
+
store.reduce((s) => ({
|
|
12432
|
+
...s,
|
|
12433
|
+
activePane: firstLeaf(s.splits).id
|
|
12434
|
+
}));
|
|
12435
|
+
ctx.get("betterSidebar")?.openTab({
|
|
12436
|
+
type: "editor",
|
|
12437
|
+
title: t("files")
|
|
12438
|
+
});
|
|
12439
|
+
}
|
|
12440
|
+
/** The intercepted produced-files row (visual twin of the deliverables chips). */
|
|
12441
|
+
function SidebarProducedFiles(props) {
|
|
12442
|
+
const { matched, openInSidebar, onShowInFolder } = props;
|
|
12443
|
+
const shown = matched.slice(0, 6);
|
|
12444
|
+
const hidden = matched.length - shown.length;
|
|
12445
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
12446
|
+
className: sidebar_module_css_default.producedRow,
|
|
12447
|
+
children: [
|
|
12448
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
12449
|
+
className: sidebar_module_css_default.producedLabel,
|
|
12450
|
+
children: t("produced")
|
|
12451
|
+
}),
|
|
12452
|
+
shown.map((path) => {
|
|
12453
|
+
const at = Math.max(path.lastIndexOf("/"), path.lastIndexOf("\\"));
|
|
12454
|
+
const name = at === -1 ? path : path.slice(at + 1);
|
|
12455
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
12456
|
+
type: "button",
|
|
12457
|
+
className: sidebar_module_css_default.producedChip,
|
|
12458
|
+
title: path,
|
|
12459
|
+
onClick: () => {
|
|
12460
|
+
openInSidebar(path);
|
|
12461
|
+
},
|
|
12462
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCodeOutline16, { size: 12 }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: name })]
|
|
12463
|
+
}, path);
|
|
12464
|
+
}),
|
|
12465
|
+
hidden > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
12466
|
+
className: sidebar_module_css_default.producedMore,
|
|
12467
|
+
children: ["+", hidden]
|
|
12468
|
+
}),
|
|
12469
|
+
hidden > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
12470
|
+
type: "button",
|
|
12471
|
+
className: sidebar_module_css_default.producedMore,
|
|
12472
|
+
style: {
|
|
12473
|
+
cursor: "pointer",
|
|
12474
|
+
textDecoration: "underline",
|
|
12475
|
+
textUnderlineOffset: 2
|
|
12476
|
+
},
|
|
12477
|
+
onClick: () => {
|
|
12478
|
+
onShowInFolder(matched);
|
|
12479
|
+
},
|
|
12480
|
+
children: t("showInFolder")
|
|
12481
|
+
})
|
|
12482
|
+
]
|
|
12483
|
+
});
|
|
12484
|
+
}
|
|
12485
|
+
/** Adapt both the legacy chain match and the current list owner to the row. */
|
|
12486
|
+
function SidebarProducedFilesEntry(props) {
|
|
12487
|
+
if (props.store.getSuspended() || props.store.getPrefs().tabsEnabled["editor"] === false) return null;
|
|
12488
|
+
const matched = props.matched ?? selectProducedFiles(props);
|
|
12489
|
+
if (matched === null) return null;
|
|
12490
|
+
lastProduced = matched;
|
|
12491
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarProducedFiles, {
|
|
12492
|
+
matched,
|
|
12493
|
+
openInSidebar: props.openInSidebar,
|
|
12494
|
+
onShowInFolder: props.onShowInFolder
|
|
12495
|
+
});
|
|
12496
|
+
}
|
|
12497
|
+
/**
|
|
12498
|
+
* Register the turn-tail interception (returns the disposer).
|
|
12499
|
+
*
|
|
12500
|
+
* The slot is a CHILD slot the host's ui-conversation declares in its
|
|
12501
|
+
* `conversation.chat.node` children table (currently kind: list, scope:
|
|
12502
|
+
* session; older compatible Hosts declared a chain).
|
|
12503
|
+
* Registering it directly races the declaration — the ui-slots core's
|
|
12504
|
+
* load-time validation throws "not declared (a parent entry's children
|
|
12505
|
+
* table must declare it)" when the parent entry is not on the ledger yet.
|
|
12506
|
+
* slots.inject waits for the declaration: the callback runs synchronously
|
|
12507
|
+
* when the slot is already declared, otherwise it runs inside the declaring
|
|
12508
|
+
* register() call once the declaration commits; declaration collapse
|
|
12509
|
+
* disposes the entry and a later declaration re-registers it. This mirrors
|
|
12510
|
+
* @deepseek-ai/dsh-client-ui-deliverables' registration of the same slot.
|
|
12511
|
+
*/
|
|
12512
|
+
function registerTurnTailInterception(ctx, store) {
|
|
12513
|
+
return ctx.slots.inject("conversation.chat.turnTail", () => ctx.slots.register({
|
|
12514
|
+
name: "conversation.chat.turnTail",
|
|
12515
|
+
id: "dsh-better-sidebar:produced-files",
|
|
12516
|
+
select: (owner) => {
|
|
12517
|
+
if (store.getSuspended()) return null;
|
|
12518
|
+
if (store.getPrefs().tabsEnabled["editor"] === false) return null;
|
|
12519
|
+
const matched = selectProducedFiles(owner);
|
|
12520
|
+
if (matched !== null) lastProduced = matched;
|
|
12521
|
+
return matched;
|
|
12522
|
+
},
|
|
12523
|
+
priority: -1,
|
|
12524
|
+
registrant: "dsh-better-sidebar",
|
|
12525
|
+
inject: (sessionId) => ({
|
|
12526
|
+
store,
|
|
12527
|
+
openInSidebar: (path) => {
|
|
12528
|
+
openSidebarFile(ctx, store, sessionId, path);
|
|
12529
|
+
},
|
|
12530
|
+
onShowInFolder: (files) => {
|
|
12531
|
+
revealInExplorer(ctx, store, sessionId, files);
|
|
12532
|
+
}
|
|
12533
|
+
})
|
|
12534
|
+
}, SidebarProducedFilesEntry));
|
|
12535
|
+
}
|
|
12536
|
+
/**
|
|
12537
|
+
* Register the chat file-open interception: wraps `ctx.workspaces.openPath`
|
|
12538
|
+
* — the single funnel every chat-side file open goes through (tool-row path
|
|
12539
|
+
* links, the produced-files row, prose mentions) — so opens land in the
|
|
12540
|
+
* sidebar editor instead of the Host OS. The folder-reveal gesture ("Show in
|
|
12541
|
+
* folder" passes `'.'`) is the one exception: it is routed to the explorer.
|
|
12542
|
+
* Gated by BOTH the `interceptOpenPath` pref and the editor tab's enable
|
|
12543
|
+
* switch; declined opens fall through to the original method. Returns the
|
|
12544
|
+
* disposer restoring the original (HMR-safe).
|
|
12545
|
+
*/
|
|
12546
|
+
function registerOpenPathInterception(ctx, store) {
|
|
12547
|
+
return wrapOpenPath(ctx.workspaces, {
|
|
12548
|
+
takeoverEnabled: () => !store.getSuspended() && store.getPrefs().interceptOpenPath !== false && store.getPrefs().tabsEnabled["editor"] !== false,
|
|
12549
|
+
currentSessionId: () => currentSessionId(ctx),
|
|
12550
|
+
openInSidebar: (path, sessionId) => {
|
|
12551
|
+
openSidebarFile(ctx, store, sessionId, path);
|
|
12552
|
+
},
|
|
12553
|
+
revealInExplorer: (_path, sessionId) => {
|
|
12554
|
+
revealInExplorer(ctx, store, sessionId, lastProduced);
|
|
12555
|
+
}
|
|
12556
|
+
});
|
|
12557
|
+
}
|
|
12558
|
+
//#endregion
|
|
12559
|
+
//#region node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
|
|
12560
|
+
function r(e) {
|
|
12561
|
+
var t, f, n = "";
|
|
12562
|
+
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
12563
|
+
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
12564
|
+
var o = e.length;
|
|
12565
|
+
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
12566
|
+
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
12567
|
+
return n;
|
|
12568
|
+
}
|
|
12569
|
+
function clsx() {
|
|
12570
|
+
for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
12571
|
+
return n;
|
|
12572
|
+
}
|
|
12573
|
+
//#endregion
|
|
12574
|
+
//#region src/client/api.ts
|
|
12575
|
+
/** One wire failure. */
|
|
12576
|
+
var SidebarApiError = class extends Error {
|
|
12577
|
+
code;
|
|
12578
|
+
constructor(code, message) {
|
|
12579
|
+
super(message);
|
|
12580
|
+
this.code = code;
|
|
12581
|
+
}
|
|
12582
|
+
};
|
|
12583
|
+
/** Message-level variant for surfaces that stored the raw text (file-tree level errors). */
|
|
12584
|
+
function isOutsideWorkspaceMessage(message) {
|
|
12585
|
+
return message.includes("outside workspace");
|
|
12586
|
+
}
|
|
12587
|
+
async function call(method, payload, signal) {
|
|
12588
|
+
let response;
|
|
12589
|
+
try {
|
|
12590
|
+
response = await fetch(`/sidebar/api/${method}`, {
|
|
12591
|
+
method: "POST",
|
|
12592
|
+
headers: { "content-type": "application/json" },
|
|
12593
|
+
body: JSON.stringify(payload),
|
|
12594
|
+
signal
|
|
12595
|
+
});
|
|
12596
|
+
} catch (error) {
|
|
12597
|
+
throw new SidebarApiError("network", error instanceof Error ? error.message : String(error));
|
|
12598
|
+
}
|
|
12599
|
+
const parsed = await response.json().catch(() => null);
|
|
12600
|
+
if (!response.ok || parsed === null || parsed.ok !== true || parsed.value === void 0) throw new SidebarApiError(parsed?.error?.code ?? "http", parsed?.error?.message ?? `HTTP ${response.status}`);
|
|
12601
|
+
return parsed.value;
|
|
12602
|
+
}
|
|
12603
|
+
/**
|
|
12604
|
+
* Upload one file to the sidebar's raw upload route: the File goes straight
|
|
12605
|
+
* into the POST body (no JSON/base64 re-encoding — the host streams it into
|
|
12606
|
+
* the workspace). Failure surfaces as {@link SidebarApiError} with the wire
|
|
12607
|
+
* code, exactly like every `/sidebar/api` call. An aborted `signal` rejects
|
|
12608
|
+
* with the DOMException as-is (the caller decides whether that is an error).
|
|
12609
|
+
*/
|
|
12610
|
+
async function fetchUpload(scope, dir, relativePath, body, signal) {
|
|
12611
|
+
const params = new URLSearchParams({
|
|
12612
|
+
sessionId: scope.sessionId,
|
|
12613
|
+
dir,
|
|
12614
|
+
relativePath
|
|
12615
|
+
});
|
|
12616
|
+
if (scope.cwd !== void 0 && scope.cwd !== "") params.set("cwd", scope.cwd);
|
|
12617
|
+
let response;
|
|
12618
|
+
try {
|
|
12619
|
+
response = await fetch(`/sidebar/upload?${params.toString()}`, {
|
|
12620
|
+
method: "POST",
|
|
12621
|
+
headers: { "content-type": "application/octet-stream" },
|
|
12622
|
+
body,
|
|
12623
|
+
signal
|
|
12624
|
+
});
|
|
12625
|
+
} catch (error) {
|
|
12626
|
+
if (error instanceof DOMException && error.name === "AbortError") throw error;
|
|
12627
|
+
throw new SidebarApiError("network", error instanceof Error ? error.message : String(error));
|
|
12628
|
+
}
|
|
12629
|
+
const parsed = await response.json().catch(() => null);
|
|
12630
|
+
if (!response.ok || parsed === null || parsed.ok !== true || parsed.value === void 0) throw new SidebarApiError(parsed?.error?.code ?? "http", parsed?.error?.message ?? `HTTP ${response.status}`);
|
|
12631
|
+
return parsed.value;
|
|
12632
|
+
}
|
|
12633
|
+
/** Fold a scope into a JSON payload ({cwd} only when present). */
|
|
12634
|
+
function scopePayload(scope, extra) {
|
|
12635
|
+
return {
|
|
12636
|
+
sessionId: scope.sessionId,
|
|
12637
|
+
...scope.cwd !== void 0 && scope.cwd !== "" ? { cwd: scope.cwd } : {},
|
|
12638
|
+
...scope.repoRoot !== void 0 && scope.repoRoot !== "" ? { repoRoot: scope.repoRoot } : {},
|
|
12639
|
+
...extra
|
|
12640
|
+
};
|
|
12641
|
+
}
|
|
12642
|
+
/** Add a linked-worktree selection to a scoped Git request. The host validates
|
|
12643
|
+
* membership before using it as a command cwd. */
|
|
12644
|
+
function gitPayload(scope, worktree, extra) {
|
|
12645
|
+
return scopePayload(scope, {
|
|
12646
|
+
...worktree !== void 0 && worktree !== "" ? { worktree } : {},
|
|
12647
|
+
...extra
|
|
12648
|
+
});
|
|
12649
|
+
}
|
|
12650
|
+
/** The sidebar API surface (session scope threaded through every call). */
|
|
12651
|
+
const api = {
|
|
12652
|
+
chatcodeStatus: (signal) => call("chatcode.status", {}, signal),
|
|
12653
|
+
chatcodeStart: () => call("chatcode.start", {}),
|
|
12654
|
+
chatcodeCancel: (sessionId) => call("chatcode.cancel", { sessionId }),
|
|
12655
|
+
chatcodeLogout: () => call("chatcode.logout", {}),
|
|
12656
|
+
/** Check both ChatCode packages (web + CLI) against the npm registry. */
|
|
12657
|
+
chatcodeUpdateCheck: (signal) => call("chatcode.update.check", {}, signal),
|
|
12658
|
+
/** Upgrade both ChatCode packages to their npm-latest versions. */
|
|
12659
|
+
chatcodeUpdatePerform: (signal) => call("chatcode.update.perform", {}, signal),
|
|
12660
|
+
releaseNoteCurrent: (packageName, versionNum, signal) => call("release-note.current", {
|
|
12661
|
+
packageName,
|
|
12662
|
+
versionNum
|
|
12663
|
+
}, signal),
|
|
12664
|
+
/** Per-day token usage of one day range (`YYYY-MM-DD`). */
|
|
12665
|
+
chatcodeTokenTrend: (begin, end, signal) => call("chatcode.token-trend", {
|
|
12666
|
+
begin,
|
|
12667
|
+
end
|
|
12668
|
+
}, signal),
|
|
12669
|
+
/** Personal commit records of one day range (AI-ratio view). */
|
|
12670
|
+
chatcodeGitCommitStats: (begin, end, signal) => call("chatcode.git-commit-stats", {
|
|
12671
|
+
begin,
|
|
12672
|
+
end
|
|
12673
|
+
}, signal),
|
|
12674
|
+
sessionCwd: (scope, signal) => call("session.cwd", scopePayload(scope, {}), signal),
|
|
12675
|
+
fsTree: (scope, path, signal) => call("fs.tree", scopePayload(scope, { path }), signal),
|
|
12676
|
+
/** Global recursive file-name search rooted at the session cwd (the editor
|
|
12677
|
+
* side panel's search box); matches are cwd-relative '/'-separated paths. */
|
|
12678
|
+
fsSearch: (scope, query, signal) => call("fs.search", scopePayload(scope, { query }), signal),
|
|
12679
|
+
fsRead: (scope, path, signal) => call("fs.read", scopePayload(scope, { path }), signal),
|
|
12680
|
+
fsWrite: (scope, path, content) => call("fs.write", scopePayload(scope, {
|
|
12681
|
+
path,
|
|
12682
|
+
content
|
|
12683
|
+
})),
|
|
12684
|
+
/** Upload one file's raw bytes into `dir` (keeps the folder tree via
|
|
12685
|
+
* `relativePath`); the host streams it under the session workspace. */
|
|
12686
|
+
uploadFile: (scope, dir, relativePath, body, signal) => fetchUpload(scope, dir, relativePath, body, signal),
|
|
12687
|
+
gitWorktrees: (scope, signal) => call("git.worktrees", scopePayload(scope, {}), signal),
|
|
12688
|
+
gitStatus: (scope, worktree, signal) => call("git.status", gitPayload(scope, worktree, {}), signal),
|
|
12689
|
+
gitDiff: (scope, path, staged, worktree, signal) => call("git.diff", gitPayload(scope, worktree, {
|
|
12690
|
+
...path !== void 0 ? { path } : {},
|
|
12691
|
+
staged
|
|
12692
|
+
}), signal),
|
|
12693
|
+
gitStage: (scope, path, worktree) => call("git.stage", gitPayload(scope, worktree, { ...path !== void 0 ? { path } : {} })),
|
|
12694
|
+
gitUnstage: (scope, path, worktree) => call("git.unstage", gitPayload(scope, worktree, { ...path !== void 0 ? { path } : {} })),
|
|
12695
|
+
gitCommit: (scope, message, worktree) => call("git.commit", gitPayload(scope, worktree, { message })),
|
|
12696
|
+
gitBranch: (scope, worktree, signal) => call("git.branch", gitPayload(scope, worktree, {}), signal),
|
|
12697
|
+
gitCheckout: (scope, branch, worktree) => call("git.checkout", gitPayload(scope, worktree, { branch })),
|
|
12698
|
+
/** Recent commit history, lazily pageable (skip/count; defaults 0/30). */
|
|
12699
|
+
gitLog: (scope, count, skip, worktree, signal) => call("git.log", gitPayload(scope, worktree, {
|
|
12700
|
+
...count !== void 0 ? { count } : {},
|
|
12701
|
+
...skip !== void 0 ? { skip } : {}
|
|
12702
|
+
}), signal),
|
|
12703
|
+
/** Full patch text of one commit (diff display for the history rows). */
|
|
12704
|
+
gitCommitDiff: (scope, hash, worktree, signal) => call("git.commit-diff", gitPayload(scope, worktree, { hash }), signal),
|
|
12705
|
+
/** Discard the worktree changes of one file (the index is untouched). */
|
|
12706
|
+
gitDiscard: (scope, path, worktree) => call("git.discard", gitPayload(scope, worktree, { path })),
|
|
12707
|
+
/** Revert one commit onto the current branch. */
|
|
12708
|
+
gitRevert: (scope, hash, worktree) => call("git.revert", gitPayload(scope, worktree, { hash })),
|
|
12709
|
+
/** Cherry-pick one commit onto the current branch. */
|
|
12710
|
+
gitCherryPick: (scope, hash, worktree) => call("git.cherry-pick", gitPayload(scope, worktree, { hash })),
|
|
12711
|
+
/** Release a terminal's process immediately (tab closed; the WS close frame
|
|
12712
|
+
* may be unreachable while the socket is down, so the host also accepts
|
|
12713
|
+
* this explicit route). */
|
|
12714
|
+
ptyClose: (scope, tab) => call("pty.close", scopePayload(scope, { tab })),
|
|
12715
|
+
/** Release an agent terminal by uuid (tab closed while WS was down). */
|
|
12716
|
+
agentPtyClose: (uuid) => call("agent-pty.close", { uuid }),
|
|
12717
|
+
/** Terminal dependency status (issue #140): after a WS close 1011 with
|
|
12718
|
+
* reason `pty-deps-missing` the view fetches the full repair details here
|
|
12719
|
+
* (the close reason itself is capped at 123 bytes). */
|
|
12720
|
+
terminalDeps: () => call("terminal.deps", {}),
|
|
12721
|
+
/** The effective terminal shell and its display name (plugin-global). */
|
|
12722
|
+
shellGet: () => call("shell.get", {}),
|
|
12723
|
+
/** The local display name used by the bottom-left account menu. */
|
|
12724
|
+
accountGet: () => call("account.get", {}),
|
|
12725
|
+
/** Read the host-cached CodingPlan model catalogue. */
|
|
12726
|
+
codingPlanModels: () => call("codingplan.models", {}),
|
|
12727
|
+
/** Refresh the host-cached CodingPlan catalogue. */
|
|
12728
|
+
codingPlanRefresh: () => call("codingplan.refresh", {}),
|
|
12729
|
+
/** Read the side card preferences (plugin-global, no session scope). */
|
|
12730
|
+
settingsGet: () => call("settings.get", {}),
|
|
12731
|
+
/** Merge a patch into the side card preferences (revision-guarded). */
|
|
12732
|
+
settingsUpdate: (patch, expectedRevision) => call("settings.update", {
|
|
12733
|
+
patch,
|
|
12734
|
+
...expectedRevision !== void 0 ? { expectedRevision } : {}
|
|
12735
|
+
}),
|
|
12736
|
+
/** Probe a URL's response headers (the sidebar browser's embeddability
|
|
12737
|
+
* check; see the host's browser.probe route). */
|
|
12738
|
+
browserProbe: (url, signal) => call("browser.probe", { url }, signal),
|
|
12739
|
+
/** External open for the file tree's "open with" menu: reveal a path in
|
|
12740
|
+
* the OS file manager, or hand a custom-scheme URL (vscode://, cursor://,
|
|
12741
|
+
* zed://, custom editors) to its registered handler. The host launches
|
|
12742
|
+
* the platform opener (argv, no shell). */
|
|
12743
|
+
openExternal: (payload) => call("open.external", payload)
|
|
12744
|
+
};
|
|
12745
|
+
/** Absolute URL of the media route for one path (images only). */
|
|
12746
|
+
function mediaUrl(scope, path) {
|
|
12747
|
+
return fileUrl(scope, path, false);
|
|
12748
|
+
}
|
|
12749
|
+
/** Absolute URL of the download route: serves raw bytes (binary-safe) with
|
|
12750
|
+
* `Content-Disposition: attachment`, so the browser saves the file. */
|
|
12751
|
+
function downloadUrl(scope, path) {
|
|
12752
|
+
return fileUrl(scope, path, true);
|
|
12753
|
+
}
|
|
12754
|
+
/** Shared URL builder for the /sidebar/file route (media vs download). */
|
|
12755
|
+
function fileUrl(scope, path, download) {
|
|
12756
|
+
const params = new URLSearchParams({
|
|
12757
|
+
sessionId: scope.sessionId,
|
|
12758
|
+
path
|
|
12759
|
+
});
|
|
12760
|
+
if (scope.cwd !== void 0 && scope.cwd !== "") params.set("cwd", scope.cwd);
|
|
12761
|
+
if (download) params.set("download", "1");
|
|
12762
|
+
return `/sidebar/file?${params.toString()}`;
|
|
12763
|
+
}
|
|
12764
|
+
//#endregion
|
|
12765
|
+
//#region src/client/binary-download.tsx
|
|
12766
|
+
function BinaryDownload(props) {
|
|
12767
|
+
const { scope, path } = props;
|
|
12768
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
12769
|
+
className: sidebar_module_css_default.editorBinary,
|
|
12770
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
12771
|
+
className: sidebar_module_css_default.editorBinaryNotice,
|
|
12772
|
+
children: t("binaryNoPreview")
|
|
12773
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("a", {
|
|
12774
|
+
className: sidebar_module_css_default.editorDownloadLink,
|
|
12775
|
+
href: downloadUrl(scope, path),
|
|
12776
|
+
download: true,
|
|
12777
|
+
children: t("downloadToView")
|
|
12778
|
+
})]
|
|
12779
|
+
});
|
|
12780
|
+
}
|
|
12781
|
+
//#endregion
|
|
12782
|
+
//#region src/client/prefs.ts
|
|
12783
|
+
/** Validate one raw resolved value into {@link SidebarPrefs}. Used for the
|
|
12784
|
+
* settings.get payload AND the settings.update response (both carry the
|
|
12785
|
+
* layered resolved value); any malformed field falls back to its default.
|
|
12786
|
+
* @param value - the raw resolved section from the settings wire.
|
|
12787
|
+
* @returns validated prefs (always well-formed).
|
|
12788
|
+
*/
|
|
12789
|
+
function parsePrefs(value) {
|
|
12790
|
+
if (value === null || typeof value !== "object") return { ...SIDEBAR_PREFS_DEFAULTS };
|
|
12791
|
+
const record = value;
|
|
12792
|
+
return {
|
|
12793
|
+
openByDefault: typeof record.openByDefault === "boolean" ? record.openByDefault : SIDEBAR_PREFS_DEFAULTS.openByDefault,
|
|
12794
|
+
defaultWidthPercent: typeof record.defaultWidthPercent === "number" && Number.isFinite(record.defaultWidthPercent) ? clampWidthPercent(record.defaultWidthPercent) : SIDEBAR_PREFS_DEFAULTS.defaultWidthPercent,
|
|
12795
|
+
autoOpenSubagent: typeof record.autoOpenSubagent === "boolean" ? record.autoOpenSubagent : SIDEBAR_PREFS_DEFAULTS.autoOpenSubagent,
|
|
12796
|
+
autoOpenJobs: typeof record.autoOpenJobs === "boolean" ? record.autoOpenJobs : SIDEBAR_PREFS_DEFAULTS.autoOpenJobs,
|
|
12797
|
+
agentTerminalTools: typeof record.agentTerminalTools === "boolean" ? record.agentTerminalTools : SIDEBAR_PREFS_DEFAULTS.agentTerminalTools,
|
|
12798
|
+
agentOpenTools: typeof record.agentOpenTools === "boolean" ? record.agentOpenTools : SIDEBAR_PREFS_DEFAULTS.agentOpenTools,
|
|
12799
|
+
bottomPanelAutoTerminal: typeof record.bottomPanelAutoTerminal === "boolean" ? record.bottomPanelAutoTerminal : SIDEBAR_PREFS_DEFAULTS.bottomPanelAutoTerminal,
|
|
12800
|
+
terminalFontFamily: typeof record.terminalFontFamily === "string" ? record.terminalFontFamily : SIDEBAR_PREFS_DEFAULTS.terminalFontFamily,
|
|
12801
|
+
terminalShell: typeof record.terminalShell === "string" ? record.terminalShell : SIDEBAR_PREFS_DEFAULTS.terminalShell,
|
|
12802
|
+
terminalShellArgs: typeof record.terminalShellArgs === "string" ? record.terminalShellArgs : SIDEBAR_PREFS_DEFAULTS.terminalShellArgs,
|
|
12803
|
+
terminalFontSize: typeof record.terminalFontSize === "number" && Number.isFinite(record.terminalFontSize) ? clampTerminalFontSize(record.terminalFontSize) : SIDEBAR_PREFS_DEFAULTS.terminalFontSize,
|
|
12804
|
+
interceptOpenPath: typeof record.interceptOpenPath === "boolean" ? record.interceptOpenPath : SIDEBAR_PREFS_DEFAULTS.interceptOpenPath,
|
|
12805
|
+
editorExplorer: typeof record.editorExplorer === "boolean" ? record.editorExplorer : SIDEBAR_PREFS_DEFAULTS.editorExplorer,
|
|
12806
|
+
workspaceFence: typeof record.workspaceFence === "boolean" ? record.workspaceFence : SIDEBAR_PREFS_DEFAULTS.workspaceFence,
|
|
12807
|
+
titleBarScheme: isTitleBarScheme(record.titleBarScheme) ? record.titleBarScheme : record.titleBarCompat === true || hasLegacyStripValue(record.titleBarStripPx) ? "custom" : "auto",
|
|
12808
|
+
titleBarPresetId: typeof record.titleBarPresetId === "string" ? record.titleBarPresetId : SIDEBAR_PREFS_DEFAULTS.titleBarPresetId,
|
|
12809
|
+
customCss: typeof record.customCss === "string" ? record.customCss : SIDEBAR_PREFS_DEFAULTS.customCss,
|
|
12810
|
+
titleBarCompat: typeof record.titleBarCompat === "boolean" ? record.titleBarCompat : SIDEBAR_PREFS_DEFAULTS.titleBarCompat,
|
|
12811
|
+
titleBarStripPx: typeof record.titleBarStripPx === "number" && Number.isFinite(record.titleBarStripPx) ? clampTitleBarStrip(record.titleBarStripPx) : SIDEBAR_PREFS_DEFAULTS.titleBarStripPx,
|
|
12812
|
+
htmlViewerNoSandbox: typeof record.htmlViewerNoSandbox === "boolean" ? record.htmlViewerNoSandbox : SIDEBAR_PREFS_DEFAULTS.htmlViewerNoSandbox,
|
|
12813
|
+
htmlViewerDefaultUnsafe: typeof record.htmlViewerDefaultUnsafe === "boolean" ? record.htmlViewerDefaultUnsafe : SIDEBAR_PREFS_DEFAULTS.htmlViewerDefaultUnsafe,
|
|
12814
|
+
browserNoSandbox: typeof record.browserNoSandbox === "boolean" ? record.browserNoSandbox : SIDEBAR_PREFS_DEFAULTS.browserNoSandbox,
|
|
12815
|
+
browserInterceptLinks: typeof record.browserInterceptLinks === "boolean" ? record.browserInterceptLinks : SIDEBAR_PREFS_DEFAULTS.browserInterceptLinks,
|
|
12816
|
+
browserInterceptHttp: typeof record.browserInterceptHttp === "boolean" ? record.browserInterceptHttp : SIDEBAR_PREFS_DEFAULTS.browserInterceptHttp,
|
|
12817
|
+
browserInterceptHttps: typeof record.browserInterceptHttps === "boolean" ? record.browserInterceptHttps : SIDEBAR_PREFS_DEFAULTS.browserInterceptHttps,
|
|
12818
|
+
browserAllowedLoopback: typeof record.browserAllowedLoopback === "string" ? record.browserAllowedLoopback : SIDEBAR_PREFS_DEFAULTS.browserAllowedLoopback,
|
|
12819
|
+
tabsEnabled: booleanMapOf(record.tabsEnabled),
|
|
12820
|
+
viewersEnabled: booleanMapOf(record.viewersEnabled),
|
|
12821
|
+
pluginSettings: pluginSettingsMapOf(record.pluginSettings)
|
|
12822
|
+
};
|
|
12823
|
+
}
|
|
12824
|
+
/**
|
|
12825
|
+
* Validate the plugin-owned settings map (v0.12.0+): `{ descriptorId: { key:
|
|
12826
|
+
* value } }`, nested open maps. Any non-object value (or a malformed whole)
|
|
12827
|
+
* falls back to the empty map — the schema defaults already guard the wire
|
|
12828
|
+
* shape, this is the client's second line.
|
|
12829
|
+
*/
|
|
12830
|
+
function pluginSettingsMapOf(value) {
|
|
12831
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return {};
|
|
12832
|
+
const out = {};
|
|
12833
|
+
for (const [id, blob] of Object.entries(value)) if (blob !== null && typeof blob === "object" && !Array.isArray(blob)) out[id] = blob;
|
|
12834
|
+
return out;
|
|
12835
|
+
}
|
|
12836
|
+
/**
|
|
12837
|
+
* Validate one enable-switch map (per-tab / per-viewer). Only boolean values
|
|
12838
|
+
* survive; a non-object or a non-boolean entry falls back to the empty map /
|
|
12839
|
+
* drops the entry — an absent key means the feature stays enabled.
|
|
12840
|
+
*/
|
|
12841
|
+
function booleanMapOf(value) {
|
|
12842
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) return {};
|
|
12843
|
+
const out = {};
|
|
12844
|
+
for (const [key, item] of Object.entries(value)) if (typeof item === "boolean") out[key] = item;
|
|
12845
|
+
return out;
|
|
12846
|
+
}
|
|
12847
|
+
/** Type guard for the title-bar scheme union (anything else falls back). */
|
|
12848
|
+
function isTitleBarScheme(value) {
|
|
12849
|
+
return typeof value === "string" && TITLE_BAR_SCHEMES.includes(value);
|
|
12850
|
+
}
|
|
12851
|
+
/**
|
|
12852
|
+
* Whether the legacy document carries an explicit strip value (only
|
|
12853
|
+
* reachable through the old gear popup): a stored number different from the
|
|
12854
|
+
* default counts as "the user already configured something" and migrates to
|
|
12855
|
+
* the `custom` scheme.
|
|
12856
|
+
*/
|
|
12857
|
+
function hasLegacyStripValue(value) {
|
|
12858
|
+
return typeof value === "number" && Number.isFinite(value) && value !== 40;
|
|
12859
|
+
}
|
|
12860
|
+
/**
|
|
12861
|
+
* Read the resolved side card preferences through the plugin's settings route.
|
|
12862
|
+
* @param settings - the settings wire face (the plugin api by default).
|
|
12863
|
+
* @returns validated prefs, or the schema defaults when the route rejects,
|
|
12864
|
+
* the namespace is absent, or a stored value violates the contract.
|
|
12865
|
+
*/
|
|
12866
|
+
async function loadPrefs(settings) {
|
|
12867
|
+
try {
|
|
12868
|
+
return parsePrefs((await settings.settingsGet()).value);
|
|
12869
|
+
} catch {
|
|
12870
|
+
return { ...SIDEBAR_PREFS_DEFAULTS };
|
|
12871
|
+
}
|
|
12872
|
+
}
|
|
12873
|
+
/**
|
|
12874
|
+
* Read the external-disable flag from the same settings route: the
|
|
12875
|
+
* dsh-web-ui family's aionui-panel provider choice. True only when the host
|
|
12876
|
+
* resolved `aionui-panel.rightPanel` to 'aionui-panel' — while true the
|
|
12877
|
+
* sidebar must not mount (the two right panels are mutually exclusive). Any
|
|
12878
|
+
* failure (route rejected, aionui absent, malformed response) reads false,
|
|
12879
|
+
* so a missing family never hides the sidebar.
|
|
12880
|
+
* @param settings - the settings wire face (the plugin api by default).
|
|
12881
|
+
* @returns the external-disable flag (false on any failure).
|
|
12882
|
+
*/
|
|
12883
|
+
async function loadExternalDisable(settings) {
|
|
12884
|
+
try {
|
|
12885
|
+
return (await settings.settingsGet()).externalDisable === true;
|
|
12886
|
+
} catch {
|
|
12887
|
+
return false;
|
|
12888
|
+
}
|
|
12889
|
+
}
|
|
12890
|
+
//#endregion
|
|
12891
|
+
//#region src/client/FenceErrorNotice.tsx
|
|
12892
|
+
/**
|
|
12893
|
+
* The workspace-fence refusal surface. The raw wire text (`path "..." is
|
|
12894
|
+
* outside workspace`) is never shown as-is: the editor / file-tree error
|
|
12895
|
+
* slots render the localized reason plus a one-click global off — the click
|
|
12896
|
+
* flips the `workspaceFence` pref through the settings route, adopts the
|
|
12897
|
+
* returned document into the store (so every prefs reader — GitView's open
|
|
12898
|
+
* guard, the settings page — flips with it), and calls `onDisabled` so the
|
|
12899
|
+
* caller retries the failed operation immediately.
|
|
12900
|
+
*/
|
|
12901
|
+
function FenceErrorNotice(props) {
|
|
12902
|
+
const { store, onDisabled } = props;
|
|
12903
|
+
const [busy, setBusy] = (0, react.useState)(false);
|
|
12904
|
+
const disable = () => {
|
|
12905
|
+
if (busy) return;
|
|
12906
|
+
setBusy(true);
|
|
12907
|
+
api.settingsUpdate({ workspaceFence: false }).then((view) => {
|
|
12908
|
+
store.setPrefs(parsePrefs(view.value));
|
|
12909
|
+
onDisabled();
|
|
12910
|
+
}).catch((error) => {
|
|
12911
|
+
console.error("workspace fence disable failed", error);
|
|
12912
|
+
setBusy(false);
|
|
12913
|
+
});
|
|
12914
|
+
};
|
|
12915
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
12916
|
+
className: sidebar_module_css_default.fenceError,
|
|
12917
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("fenceErrorReason") }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
|
|
12918
|
+
variant: "outline",
|
|
12919
|
+
disabled: busy,
|
|
12920
|
+
onClick: disable,
|
|
12921
|
+
children: t("fenceDisableAction")
|
|
12922
|
+
})]
|
|
12923
|
+
});
|
|
12924
|
+
}
|
|
12925
|
+
//#endregion
|
|
12926
|
+
//#region src/client/editor-load.ts
|
|
12927
|
+
/** Decode the host's base64 head bytes into the sniffing buffer. */
|
|
12928
|
+
function decodeHead(headBase64) {
|
|
12929
|
+
const binary = atob(headBase64);
|
|
12930
|
+
const bytes = new Uint8Array(binary.length);
|
|
12931
|
+
for (let i = 0; i < binary.length; i += 1) bytes[i] = binary.charCodeAt(i);
|
|
12932
|
+
return bytes;
|
|
12933
|
+
}
|
|
12934
|
+
/**
|
|
12935
|
+
* Dispatch one matched viewer's fetchStrategy. A missing viewer or a
|
|
12936
|
+
* `binary-download` strategy both mean "no client-side renderer" → the
|
|
12937
|
+
* download UI. `mediaUrlOf` builds the media URL for `mediaUrl`/`none`
|
|
12938
|
+
* strategies (pure, but scope-bound — injected by the host).
|
|
12939
|
+
*/
|
|
12940
|
+
function planFirstMatch(viewer, mediaUrlOf) {
|
|
12941
|
+
if (viewer === void 0 || viewer.fetchStrategy === "binary-download") return { kind: "binary" };
|
|
12942
|
+
switch (viewer.fetchStrategy) {
|
|
12943
|
+
case "mediaUrl":
|
|
12944
|
+
case "none": return {
|
|
12945
|
+
kind: "render",
|
|
12946
|
+
viewer,
|
|
12947
|
+
mediaUrl: mediaUrlOf()
|
|
12948
|
+
};
|
|
12949
|
+
case "custom": return {
|
|
12950
|
+
kind: "customLoad",
|
|
12951
|
+
viewer
|
|
12952
|
+
};
|
|
12953
|
+
case "fsRead": return {
|
|
12954
|
+
kind: "fetchFsRead",
|
|
12955
|
+
viewer
|
|
12956
|
+
};
|
|
12957
|
+
}
|
|
12958
|
+
}
|
|
12959
|
+
/**
|
|
12960
|
+
* Decide what an fsRead result means for the editor.
|
|
12961
|
+
* - Text: the first match stands (content is valid for any fsRead viewer).
|
|
12962
|
+
* - Binary: the host head bytes enable a re-match — a `detect` viewer (e.g.
|
|
12963
|
+
* a plugin sniffing a binary format) may claim the file. `custom` viewers
|
|
12964
|
+
* load their own bytes; `mediaUrl`/`none` viewers render the media route;
|
|
12965
|
+
* an fsRead viewer or nothing cannot render binary → download UI.
|
|
12966
|
+
*/
|
|
12967
|
+
function planFsReadOutcome(viewer, result, rematch, mediaUrlOf) {
|
|
12968
|
+
if (!result.binary) return {
|
|
12969
|
+
kind: "render",
|
|
12970
|
+
viewer,
|
|
12971
|
+
content: result.content,
|
|
12972
|
+
truncated: result.truncated
|
|
12973
|
+
};
|
|
12974
|
+
const claimed = result.head === void 0 ? void 0 : rematch(decodeHead(result.head));
|
|
12975
|
+
if (claimed !== void 0 && claimed.fetchStrategy === "custom") return {
|
|
12976
|
+
kind: "customLoad",
|
|
12977
|
+
viewer: claimed
|
|
12978
|
+
};
|
|
12979
|
+
if (claimed !== void 0 && (claimed.fetchStrategy === "mediaUrl" || claimed.fetchStrategy === "none")) return {
|
|
12980
|
+
kind: "render",
|
|
12981
|
+
viewer: claimed,
|
|
12982
|
+
mediaUrl: mediaUrlOf()
|
|
12983
|
+
};
|
|
12984
|
+
return { kind: "binary" };
|
|
12985
|
+
}
|
|
12986
|
+
//#endregion
|
|
12987
|
+
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/si/index.mjs
|
|
12988
|
+
function SiZedindustries(props) {
|
|
12989
|
+
return GenIcon({
|
|
12990
|
+
"tag": "svg",
|
|
12991
|
+
"attr": {
|
|
12992
|
+
"role": "img",
|
|
12993
|
+
"viewBox": "0 0 24 24"
|
|
12994
|
+
},
|
|
12995
|
+
"child": [{
|
|
12996
|
+
"tag": "path",
|
|
12997
|
+
"attr": { "d": "M2.25 1.5a.75.75 0 0 0-.75.75v16.5H0V2.25A2.25 2.25 0 0 1 2.25 0h20.095c1.002 0 1.504 1.212.795 1.92L10.764 14.298h3.486V12.75h1.5v1.922a1.125 1.125 0 0 1-1.125 1.125H9.264l-2.578 2.578h11.689V9h1.5v9.375a1.5 1.5 0 0 1-1.5 1.5H5.185L2.562 22.5H21.75a.75.75 0 0 0 .75-.75V5.25H24v16.5A2.25 2.25 0 0 1 21.75 24H1.655C.653 24 .151 22.788.86 22.08L13.19 9.75H9.75v1.5h-1.5V9.375A1.125 1.125 0 0 1 9.375 8.25h5.314l2.625-2.625H5.625V15h-1.5V5.625a1.5 1.5 0 0 1 1.5-1.5h13.19L21.438 1.5z" },
|
|
12998
|
+
"child": []
|
|
12999
|
+
}]
|
|
13000
|
+
})(props);
|
|
13001
|
+
}
|
|
13002
|
+
function SiCursor(props) {
|
|
13003
|
+
return GenIcon({
|
|
13004
|
+
"tag": "svg",
|
|
13005
|
+
"attr": {
|
|
13006
|
+
"role": "img",
|
|
13007
|
+
"viewBox": "0 0 24 24"
|
|
13008
|
+
},
|
|
13009
|
+
"child": [{
|
|
13010
|
+
"tag": "path",
|
|
13011
|
+
"attr": { "d": "M11.503.131 1.891 5.678a.84.84 0 0 0-.42.726v11.188c0 .3.162.575.42.724l9.609 5.55a1 1 0 0 0 .998 0l9.61-5.55a.84.84 0 0 0 .42-.724V6.404a.84.84 0 0 0-.42-.726L12.497.131a1.01 1.01 0 0 0-.996 0M2.657 6.338h18.55c.263 0 .43.287.297.515L12.23 22.918c-.062.107-.229.064-.229-.06V12.335a.59.59 0 0 0-.295-.51l-9.11-5.257c-.109-.063-.064-.23.061-.23" },
|
|
13012
|
+
"child": []
|
|
13013
|
+
}]
|
|
13014
|
+
})(props);
|
|
13015
|
+
}
|
|
13016
|
+
//#endregion
|
|
13017
|
+
//#region node_modules/.pnpm/react-icons@5.7.0_react@18.2.0/node_modules/react-icons/vsc/index.mjs
|
|
13018
|
+
function VscPinned(props) {
|
|
13019
|
+
return GenIcon({
|
|
13020
|
+
"tag": "svg",
|
|
13021
|
+
"attr": {
|
|
13022
|
+
"viewBox": "0 0 16 16",
|
|
13023
|
+
"fill": "currentColor"
|
|
13024
|
+
},
|
|
13025
|
+
"child": [{
|
|
13026
|
+
"tag": "path",
|
|
13027
|
+
"attr": { "d": "M10.0589 2.44511C9.34701 1.73063 8.14697 1.90829 7.67261 2.79839L5.6526 6.58878L2.8419 7.52568C2.6775 7.58048 2.5532 7.71649 2.51339 7.88514C2.47357 8.0538 2.52392 8.23104 2.64646 8.35357L4.79291 10.5L2.14645 13.1465L2 14L2.85356 13.8536L5.50002 11.2071L7.64646 13.3536C7.76899 13.4761 7.94623 13.5265 8.11489 13.4866C8.28354 13.4468 8.41955 13.3225 8.47435 13.1581L9.41143 10.3469L13.1897 8.32423C14.0759 7.84982 14.2538 6.6551 13.5443 5.94305L10.0589 2.44511ZM8.55511 3.2687C8.71323 2.972 9.11324 2.91278 9.35055 3.15094L12.836 6.64889C13.0725 6.88624 13.0131 7.28448 12.7178 7.44262L8.76403 9.55921C8.65137 9.61952 8.56608 9.72068 8.52567 9.84191L7.7815 12.0744L3.92562 8.21853L6.15812 7.47436C6.27966 7.43385 6.38101 7.34823 6.44126 7.23518L8.55511 3.2687Z" },
|
|
13028
|
+
"child": []
|
|
13029
|
+
}]
|
|
13030
|
+
})(props);
|
|
13031
|
+
}
|
|
13032
|
+
function VscPin(props) {
|
|
13033
|
+
return GenIcon({
|
|
13034
|
+
"tag": "svg",
|
|
13035
|
+
"attr": {
|
|
13036
|
+
"viewBox": "0 0 16 16",
|
|
13037
|
+
"fill": "currentColor"
|
|
13038
|
+
},
|
|
13039
|
+
"child": [{
|
|
13040
|
+
"tag": "path",
|
|
13041
|
+
"attr": { "d": "M13.5 3C13.303 3 13.109 3.038 12.923 3.114L8.481 4.967L5.659 4.026C5.505 3.976 5.339 4.001 5.209 4.095C5.078 4.189 5.001 4.339 5.001 4.5V7H1.257L0.5 7.5L1.257 8H5V10.5C5 10.661 5.077 10.812 5.208 10.905C5.338 11 5.504 11.023 5.658 10.974L8.48 10.033L12.925 11.887C13.109 11.962 13.302 12 13.499 12C14.326 12 14.999 11.327 14.999 10.5V4.5C14.999 3.673 14.326 3 13.499 3H13.5ZM14 10.5C14 10.843 13.615 11.09 13.308 10.962L8.693 9.038C8.631 9.013 8.566 9 8.501 9C8.447 9 8.395 9.009 8.343 9.025L6.001 9.806V5.193L8.343 5.974C8.457 6.011 8.581 6.007 8.694 5.961L13.306 4.038C13.629 3.902 14.001 4.156 14.001 4.499V10.499L14 10.5Z" },
|
|
13042
|
+
"child": []
|
|
13043
|
+
}]
|
|
13044
|
+
})(props);
|
|
13045
|
+
}
|
|
13046
|
+
function VscLinkExternal(props) {
|
|
13047
|
+
return GenIcon({
|
|
13048
|
+
"tag": "svg",
|
|
13049
|
+
"attr": {
|
|
13050
|
+
"viewBox": "0 0 16 16",
|
|
13051
|
+
"fill": "currentColor"
|
|
13052
|
+
},
|
|
13053
|
+
"child": [{
|
|
13054
|
+
"tag": "path",
|
|
13055
|
+
"attr": { "d": "M15 9.5V12.5C15 13.879 13.879 15 12.5 15H3.5C2.121 15 1 13.879 1 12.5V3.5C1 2.121 2.121 1 3.5 1H6.5C6.776 1 7 1.224 7 1.5C7 1.776 6.776 2 6.5 2H3.5C2.673 2 2 2.673 2 3.5V12.5C2 13.327 2.673 14 3.5 14H12.5C13.327 14 14 13.327 14 12.5V9.5C14 9.224 14.224 9 14.5 9C14.776 9 15 9.224 15 9.5ZM14.5 1H9.5C9.224 1 9 1.224 9 1.5C9 1.776 9.224 2 9.5 2H13.293L9.147 6.146C8.952 6.341 8.952 6.658 9.147 6.853C9.245 6.951 9.373 6.999 9.501 6.999C9.629 6.999 9.757 6.95 9.855 6.853L14.001 2.707V6.5C14.001 6.776 14.225 7 14.501 7C14.777 7 15.001 6.776 15.001 6.5V1.5C15.001 1.224 14.777 1 14.501 1H14.5Z" },
|
|
13056
|
+
"child": []
|
|
13057
|
+
}]
|
|
13058
|
+
})(props);
|
|
13059
|
+
}
|
|
13060
|
+
function VscFolder(props) {
|
|
13061
|
+
return GenIcon({
|
|
13062
|
+
"tag": "svg",
|
|
13063
|
+
"attr": {
|
|
13064
|
+
"viewBox": "0 0 16 16",
|
|
13065
|
+
"fill": "currentColor"
|
|
13066
|
+
},
|
|
13067
|
+
"child": [{
|
|
13068
|
+
"tag": "path",
|
|
13069
|
+
"attr": { "d": "M2 4.5V6H5.58579C5.71839 6 5.84557 5.94732 5.93934 5.85355L7.29289 4.5L5.93934 3.14645C5.84557 3.05268 5.71839 3 5.58579 3H3.5C2.67157 3 2 3.67157 2 4.5ZM1 4.5C1 3.11929 2.11929 2 3.5 2H5.58579C5.98361 2 6.36514 2.15804 6.64645 2.43934L8.20711 4H12.5C13.8807 4 15 5.11929 15 6.5V11.5C15 12.8807 13.8807 14 12.5 14H3.5C2.11929 14 1 12.8807 1 11.5V4.5ZM2 7V11.5C2 12.3284 2.67157 13 3.5 13H12.5C13.3284 13 14 12.3284 14 11.5V6.5C14 5.67157 13.3284 5 12.5 5H8.20711L6.64645 6.56066C6.36514 6.84197 5.98361 7 5.58579 7H2Z" },
|
|
13070
|
+
"child": []
|
|
13071
|
+
}]
|
|
13072
|
+
})(props);
|
|
13073
|
+
}
|
|
13074
|
+
function VscFolderOpened(props) {
|
|
13075
|
+
return GenIcon({
|
|
13076
|
+
"tag": "svg",
|
|
13077
|
+
"attr": {
|
|
13078
|
+
"viewBox": "0 0 16 16",
|
|
13079
|
+
"fill": "currentColor"
|
|
13080
|
+
},
|
|
13081
|
+
"child": [{
|
|
13082
|
+
"tag": "path",
|
|
13083
|
+
"attr": { "d": "M2 4.5V9.10022L2.92389 7.5C3.45979 6.5718 4.45017 6 5.52196 6L11.9146 6C11.7087 5.4174 11.1531 5 10.5 5H7C6.86739 5 6.74021 4.94732 6.64645 4.85355L4.93934 3.14645C4.84557 3.05268 4.71839 3 4.58579 3H3.5C2.67157 3 2 3.67157 2 4.5ZM7.06895 13.9953C7.04641 13.9984 7.02339 14 7 14H3.5C2.11929 14 1 12.8807 1 11.5V4.5C1 3.11929 2.11929 2 3.5 2H4.58579C4.98361 2 5.36514 2.15804 5.64645 2.43934L7.20711 4H10.5C11.724 4 12.7426 4.87965 12.958 6.04127C14.605 6.34148 15.5443 8.22106 14.6616 9.75L13.0766 12.4953C12.5407 13.4235 11.5503 13.9953 10.4785 13.9953H7.06895ZM5.52196 7C4.80743 7 4.14718 7.3812 3.78991 8L2.20492 10.7453C1.62757 11.7453 2.34926 12.9953 3.50396 12.9953L10.4785 12.9953C11.193 12.9953 11.8533 12.6141 12.2105 11.9953L13.7955 9.25C14.3729 8.25 13.6512 7 12.4965 7L5.52196 7Z" },
|
|
13084
|
+
"child": []
|
|
13085
|
+
}]
|
|
13086
|
+
})(props);
|
|
13087
|
+
}
|
|
13088
|
+
function VscFile(props) {
|
|
13089
|
+
return GenIcon({
|
|
13090
|
+
"tag": "svg",
|
|
13091
|
+
"attr": {
|
|
13092
|
+
"viewBox": "0 0 16 16",
|
|
13093
|
+
"fill": "currentColor"
|
|
13094
|
+
},
|
|
13095
|
+
"child": [{
|
|
13096
|
+
"tag": "path",
|
|
13097
|
+
"attr": { "d": "M5 1C3.89543 1 3 1.89543 3 3V13C3 14.1046 3.89543 15 5 15H11C12.1046 15 13 14.1046 13 13V5.41421C13 5.01639 12.842 4.63486 12.5607 4.35355L9.64645 1.43934C9.36514 1.15804 8.98361 1 8.58579 1H5ZM4 3C4 2.44772 4.44772 2 5 2H8V4.5C8 5.32843 8.67157 6 9.5 6H12V13C12 13.5523 11.5523 14 11 14H5C4.44772 14 4 13.5523 4 13V3ZM11.7929 5H9.5C9.22386 5 9 4.77614 9 4.5V2.20711L11.7929 5Z" },
|
|
13098
|
+
"child": []
|
|
13099
|
+
}]
|
|
13100
|
+
})(props);
|
|
13101
|
+
}
|
|
13102
|
+
//#endregion
|
|
12488
13103
|
//#region src/client/upload.ts
|
|
12489
13104
|
/**
|
|
12490
13105
|
* File-upload plumbing for the files window: turn a file picker or a drag-drop
|
|
@@ -13005,7 +13620,7 @@ window.__ModuleLoader__.load({
|
|
|
13005
13620
|
if (target.id === "vscode") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconVscode16, { size: 16 });
|
|
13006
13621
|
if (target.id === "cursor") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SiCursor, { size: 16 });
|
|
13007
13622
|
if (target.id === "zed") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SiZedindustries, { size: 16 });
|
|
13008
|
-
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13623
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCodeOutline16, { size: 16 });
|
|
13009
13624
|
};
|
|
13010
13625
|
const pinned = openWithTargets.filter((target) => pinnedIds.includes(target.id)).map((target) => ({
|
|
13011
13626
|
id: `open-with:${target.id}`,
|
|
@@ -13051,7 +13666,7 @@ window.__ModuleLoader__.load({
|
|
|
13051
13666
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
13052
13667
|
className: sidebar_module_css_default.openWithName,
|
|
13053
13668
|
children: t("openWithMenu")
|
|
13054
|
-
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13669
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronRightOutline14, {
|
|
13055
13670
|
size: 14,
|
|
13056
13671
|
className: sidebar_module_css_default.openWithChevron,
|
|
13057
13672
|
"aria-hidden": true
|
|
@@ -13119,7 +13734,7 @@ window.__ModuleLoader__.load({
|
|
|
13119
13734
|
className: sidebar_module_css_default.explorerName,
|
|
13120
13735
|
children: entry.name
|
|
13121
13736
|
}),
|
|
13122
|
-
entry.isSymlink && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13737
|
+
entry.isSymlink && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconLinkOutline16, {
|
|
13123
13738
|
size: 12,
|
|
13124
13739
|
className: sidebar_module_css_default.explorerSymlink
|
|
13125
13740
|
}),
|
|
@@ -13158,7 +13773,7 @@ window.__ModuleLoader__.load({
|
|
|
13158
13773
|
className: sidebar_module_css_default.explorerName,
|
|
13159
13774
|
children: entry.name
|
|
13160
13775
|
}),
|
|
13161
|
-
entry.isSymlink && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13776
|
+
entry.isSymlink && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconLinkOutline16, {
|
|
13162
13777
|
size: 12,
|
|
13163
13778
|
className: sidebar_module_css_default.explorerSymlink
|
|
13164
13779
|
}),
|
|
@@ -13259,7 +13874,7 @@ window.__ModuleLoader__.load({
|
|
|
13259
13874
|
...rowMenu?.isDir === false && onOpenFileNewTab !== void 0 ? [{
|
|
13260
13875
|
id: "open-new-tab",
|
|
13261
13876
|
label: t("openFileNewTab"),
|
|
13262
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13877
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCodeOutline16, { size: 16 })
|
|
13263
13878
|
}] : [],
|
|
13264
13879
|
...rowMenu?.isDir === false && onOpenFileSide !== void 0 ? [{
|
|
13265
13880
|
id: "open-side",
|
|
@@ -13270,7 +13885,7 @@ window.__ModuleLoader__.load({
|
|
|
13270
13885
|
...rowMenu?.isDir === false ? [{
|
|
13271
13886
|
id: "download",
|
|
13272
13887
|
label: t("download"),
|
|
13273
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13888
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconDownloadOutline16, { size: 16 })
|
|
13274
13889
|
}] : [],
|
|
13275
13890
|
...rowMenu?.isDir === true ? [{
|
|
13276
13891
|
id: "upload-here",
|
|
@@ -13280,12 +13895,12 @@ window.__ModuleLoader__.load({
|
|
|
13280
13895
|
{
|
|
13281
13896
|
id: "relative",
|
|
13282
13897
|
label: t("copyRelative"),
|
|
13283
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13898
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 16 })
|
|
13284
13899
|
},
|
|
13285
13900
|
{
|
|
13286
13901
|
id: "absolute",
|
|
13287
13902
|
label: t("copyAbsolute"),
|
|
13288
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
13903
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 16 })
|
|
13289
13904
|
}
|
|
13290
13905
|
],
|
|
13291
13906
|
onSelect: (id) => {
|
|
@@ -13735,7 +14350,7 @@ window.__ModuleLoader__.load({
|
|
|
13735
14350
|
onClick: () => {
|
|
13736
14351
|
setRefreshTick((tick) => tick + 1);
|
|
13737
14352
|
},
|
|
13738
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
14353
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline16, { size: 14 })
|
|
13739
14354
|
}),
|
|
13740
14355
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
13741
14356
|
type: "button",
|
|
@@ -13757,7 +14372,7 @@ window.__ModuleLoader__.load({
|
|
|
13757
14372
|
onClick: () => {
|
|
13758
14373
|
folderInputRef.current?.click();
|
|
13759
14374
|
},
|
|
13760
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
14375
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconFolderOpen16, { size: 14 })
|
|
13761
14376
|
}),
|
|
13762
14377
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
13763
14378
|
ref: fileInputRef,
|
|
@@ -14192,7 +14807,7 @@ window.__ModuleLoader__.load({
|
|
|
14192
14807
|
onClick: () => {
|
|
14193
14808
|
controlsRef.current?.save();
|
|
14194
14809
|
},
|
|
14195
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
14810
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCheckOutline16, { size: 14 })
|
|
14196
14811
|
}),
|
|
14197
14812
|
saveLabel !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
14198
14813
|
className: clsx(sidebar_module_css_default.editorStatus, toolbar?.saveState === "failed" && sidebar_module_css_default.editorStatusError),
|
|
@@ -14204,7 +14819,7 @@ window.__ModuleLoader__.load({
|
|
|
14204
14819
|
"aria-label": t("refresh"),
|
|
14205
14820
|
title: t("refresh"),
|
|
14206
14821
|
onClick: refreshFile,
|
|
14207
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
14822
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline14, { size: 14 })
|
|
14208
14823
|
}),
|
|
14209
14824
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
14210
14825
|
type: "button",
|
|
@@ -14213,7 +14828,7 @@ window.__ModuleLoader__.load({
|
|
|
14213
14828
|
title: t("editorTreeToggle"),
|
|
14214
14829
|
"aria-pressed": treeOpen,
|
|
14215
14830
|
onClick: toggleTree,
|
|
14216
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
14831
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconFolderOpen16, { size: 14 })
|
|
14217
14832
|
})
|
|
14218
14833
|
]
|
|
14219
14834
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -14344,72 +14959,72 @@ window.__ModuleLoader__.load({
|
|
|
14344
14959
|
document.head.appendChild(tag);
|
|
14345
14960
|
}
|
|
14346
14961
|
var SideCardSection_module_css_default = {
|
|
14962
|
+
"typedInput": "N4aF0W_typedInput",
|
|
14963
|
+
"grid": "N4aF0W_grid",
|
|
14964
|
+
"pluginModal": "N4aF0W_pluginModal",
|
|
14965
|
+
"pluginCopyBtn": "N4aF0W_pluginCopyBtn",
|
|
14347
14966
|
"switchTrack": "N4aF0W_switchTrack",
|
|
14348
|
-
"
|
|
14349
|
-
"
|
|
14967
|
+
"card": "N4aF0W_card",
|
|
14968
|
+
"switchInput": "N4aF0W_switchInput",
|
|
14969
|
+
"openWithHint": "N4aF0W_openWithHint",
|
|
14970
|
+
"pluginEntries": "N4aF0W_pluginEntries",
|
|
14971
|
+
"title": "N4aF0W_title",
|
|
14972
|
+
"selectOptionIcon": "N4aF0W_selectOptionIcon",
|
|
14973
|
+
"cardMain": "N4aF0W_cardMain",
|
|
14350
14974
|
"pluginDesc": "N4aF0W_pluginDesc",
|
|
14351
|
-
"
|
|
14352
|
-
"
|
|
14975
|
+
"popupRow": "N4aF0W_popupRow",
|
|
14976
|
+
"desc": "N4aF0W_desc",
|
|
14353
14977
|
"openWithRemove": "N4aF0W_openWithRemove",
|
|
14354
|
-
"
|
|
14978
|
+
"openWithFamily": "N4aF0W_openWithFamily",
|
|
14979
|
+
"pluginEntry": "N4aF0W_pluginEntry",
|
|
14355
14980
|
"pluginJumpBtn": "N4aF0W_pluginJumpBtn",
|
|
14356
|
-
"
|
|
14357
|
-
"
|
|
14981
|
+
"group": "N4aF0W_group",
|
|
14982
|
+
"percentInput": "N4aF0W_percentInput",
|
|
14983
|
+
"pluginEntryHead": "N4aF0W_pluginEntryHead",
|
|
14984
|
+
"control": "N4aF0W_control",
|
|
14358
14985
|
"cardSwitch": "N4aF0W_cardSwitch",
|
|
14359
|
-
"
|
|
14360
|
-
"pluginEntries": "N4aF0W_pluginEntries",
|
|
14361
|
-
"cardTop": "N4aF0W_cardTop",
|
|
14986
|
+
"intro": "N4aF0W_intro",
|
|
14362
14987
|
"cardTitle": "N4aF0W_cardTitle",
|
|
14363
|
-
"
|
|
14364
|
-
"
|
|
14365
|
-
"
|
|
14366
|
-
"pluginInstall": "N4aF0W_pluginInstall",
|
|
14367
|
-
"selectOptionIcon": "N4aF0W_selectOptionIcon",
|
|
14368
|
-
"pluginTopicBtn": "N4aF0W_pluginTopicBtn",
|
|
14369
|
-
"pluginCopyBtn": "N4aF0W_pluginCopyBtn",
|
|
14988
|
+
"cardSettings": "N4aF0W_cardSettings",
|
|
14989
|
+
"typedInputNumber": "N4aF0W_typedInputNumber",
|
|
14990
|
+
"selectAnchorText": "N4aF0W_selectAnchorText",
|
|
14370
14991
|
"selectOptionText": "N4aF0W_selectOptionText",
|
|
14371
|
-
"
|
|
14372
|
-
"
|
|
14373
|
-
"
|
|
14374
|
-
"
|
|
14992
|
+
"addCard": "N4aF0W_addCard",
|
|
14993
|
+
"switch": "N4aF0W_switch",
|
|
14994
|
+
"selectAnchorIcon": "N4aF0W_selectAnchorIcon",
|
|
14995
|
+
"selectAnchor": "N4aF0W_selectAnchor",
|
|
14996
|
+
"cardTop": "N4aF0W_cardTop",
|
|
14375
14997
|
"openWithEditorTemplate": "N4aF0W_openWithEditorTemplate",
|
|
14998
|
+
"popupDialog": "N4aF0W_popupDialog",
|
|
14999
|
+
"pluginEntryActions": "N4aF0W_pluginEntryActions",
|
|
15000
|
+
"cardSwitchTrack": "N4aF0W_cardSwitchTrack",
|
|
14376
15001
|
"pluginName": "N4aF0W_pluginName",
|
|
14377
|
-
"
|
|
14378
|
-
"
|
|
15002
|
+
"pluginTopicBtn": "N4aF0W_pluginTopicBtn",
|
|
15003
|
+
"switchThumb": "N4aF0W_switchThumb",
|
|
15004
|
+
"pluginGroupHeading": "N4aF0W_pluginGroupHeading",
|
|
14379
15005
|
"cardOn": "N4aF0W_cardOn",
|
|
14380
|
-
"
|
|
14381
|
-
"
|
|
15006
|
+
"count": "N4aF0W_count",
|
|
15007
|
+
"openWithEditorRow": "N4aF0W_openWithEditorRow",
|
|
15008
|
+
"done": "N4aF0W_done",
|
|
14382
15009
|
"openWithEditorInput": "N4aF0W_openWithEditorInput",
|
|
14383
|
-
"
|
|
14384
|
-
"openWithFamily": "N4aF0W_openWithFamily",
|
|
14385
|
-
"control": "N4aF0W_control",
|
|
14386
|
-
"grid": "N4aF0W_grid",
|
|
14387
|
-
"intro": "N4aF0W_intro",
|
|
14388
|
-
"percentInput": "N4aF0W_percentInput",
|
|
14389
|
-
"typedInput": "N4aF0W_typedInput",
|
|
14390
|
-
"pluginModal": "N4aF0W_pluginModal",
|
|
15010
|
+
"groupHeading": "N4aF0W_groupHeading",
|
|
14391
15011
|
"cssTextArea": "N4aF0W_cssTextArea",
|
|
14392
|
-
"cardSwitchTrack": "N4aF0W_cardSwitchTrack",
|
|
14393
|
-
"suffix": "N4aF0W_suffix",
|
|
14394
|
-
"switchThumb": "N4aF0W_switchThumb",
|
|
14395
|
-
"error": "N4aF0W_error",
|
|
14396
15012
|
"rowGear": "N4aF0W_rowGear",
|
|
14397
|
-
"done": "N4aF0W_done",
|
|
14398
|
-
"selectAnchorIcon": "N4aF0W_selectAnchorIcon",
|
|
14399
|
-
"switchInput": "N4aF0W_switchInput",
|
|
14400
|
-
"desc": "N4aF0W_desc",
|
|
14401
|
-
"openWithHint": "N4aF0W_openWithHint",
|
|
14402
|
-
"cardSettings": "N4aF0W_cardSettings",
|
|
14403
|
-
"pluginEntry": "N4aF0W_pluginEntry",
|
|
14404
|
-
"group": "N4aF0W_group",
|
|
14405
|
-
"addCard": "N4aF0W_addCard",
|
|
14406
|
-
"switch": "N4aF0W_switch",
|
|
14407
|
-
"pluginEmpty": "N4aF0W_pluginEmpty",
|
|
14408
|
-
"pluginEntryActions": "N4aF0W_pluginEntryActions",
|
|
14409
|
-
"popupDialog": "N4aF0W_popupDialog",
|
|
14410
|
-
"pluginSearch": "N4aF0W_pluginSearch",
|
|
14411
15013
|
"pluginList": "N4aF0W_pluginList",
|
|
14412
|
-
"
|
|
15014
|
+
"cardSwitchThumb": "N4aF0W_cardSwitchThumb",
|
|
15015
|
+
"popupRows": "N4aF0W_popupRows",
|
|
15016
|
+
"cardDesc": "N4aF0W_cardDesc",
|
|
15017
|
+
"pluginSearch": "N4aF0W_pluginSearch",
|
|
15018
|
+
"row": "N4aF0W_row",
|
|
15019
|
+
"rowText": "N4aF0W_rowText",
|
|
15020
|
+
"section": "N4aF0W_section",
|
|
15021
|
+
"pluginGroup": "N4aF0W_pluginGroup",
|
|
15022
|
+
"cardIconChip": "N4aF0W_cardIconChip",
|
|
15023
|
+
"selectOption": "N4aF0W_selectOption",
|
|
15024
|
+
"pluginEmpty": "N4aF0W_pluginEmpty",
|
|
15025
|
+
"suffix": "N4aF0W_suffix",
|
|
15026
|
+
"error": "N4aF0W_error",
|
|
15027
|
+
"pluginInstall": "N4aF0W_pluginInstall"
|
|
14413
15028
|
};
|
|
14414
15029
|
//#endregion
|
|
14415
15030
|
//#region src/client/open-with-settings.tsx
|
|
@@ -14548,7 +15163,7 @@ window.__ModuleLoader__.load({
|
|
|
14548
15163
|
onClick: () => {
|
|
14549
15164
|
removeCustom(editor.id);
|
|
14550
15165
|
},
|
|
14551
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15166
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCloseOutline16, { size: 14 })
|
|
14552
15167
|
})
|
|
14553
15168
|
]
|
|
14554
15169
|
}, editor.id)),
|
|
@@ -15029,7 +15644,7 @@ window.__ModuleLoader__.load({
|
|
|
15029
15644
|
onClick: () => {
|
|
15030
15645
|
stageEntry(entry, staged);
|
|
15031
15646
|
},
|
|
15032
|
-
children: staged ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15647
|
+
children: staged ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconTrashOutline16, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconBranchOutline16, {})
|
|
15033
15648
|
})]
|
|
15034
15649
|
}, `${staged ? "s" : "u"}:${entry.path}`);
|
|
15035
15650
|
};
|
|
@@ -15101,7 +15716,7 @@ window.__ModuleLoader__.load({
|
|
|
15101
15716
|
onClick: () => {
|
|
15102
15717
|
refresh();
|
|
15103
15718
|
},
|
|
15104
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15719
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline16, { size: 14 })
|
|
15105
15720
|
})
|
|
15106
15721
|
]
|
|
15107
15722
|
}),
|
|
@@ -15272,21 +15887,21 @@ window.__ModuleLoader__.load({
|
|
|
15272
15887
|
...fileMenu !== null && (store.getPrefs().workspaceFence === false || isWithinWorkspace(scope.cwd ?? "", resolveSidebarPath(repoRoot ?? selectedWorktree ?? scope.cwd, fileMenu.entry.path))) ? [{
|
|
15273
15888
|
id: "open",
|
|
15274
15889
|
label: t("openEditor"),
|
|
15275
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15890
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCodeOutline16, { size: 14 })
|
|
15276
15891
|
}] : [],
|
|
15277
15892
|
fileMenu?.staged === true ? {
|
|
15278
15893
|
id: "stage",
|
|
15279
15894
|
label: t("unstage"),
|
|
15280
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15895
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconTrashOutline16, { size: 14 })
|
|
15281
15896
|
} : {
|
|
15282
15897
|
id: "stage",
|
|
15283
15898
|
label: t("stage"),
|
|
15284
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15899
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconBranchOutline16, { size: 14 })
|
|
15285
15900
|
},
|
|
15286
15901
|
...fileMenu !== null && !isUntracked(fileMenu.entry) ? [{
|
|
15287
15902
|
id: "discard",
|
|
15288
15903
|
label: t("discard"),
|
|
15289
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15904
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconTrashOutline16, { size: 14 }),
|
|
15290
15905
|
danger: true
|
|
15291
15906
|
}] : [],
|
|
15292
15907
|
{
|
|
@@ -15296,12 +15911,12 @@ window.__ModuleLoader__.load({
|
|
|
15296
15911
|
{
|
|
15297
15912
|
id: "relative",
|
|
15298
15913
|
label: t("copyRelative"),
|
|
15299
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15914
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 14 })
|
|
15300
15915
|
},
|
|
15301
15916
|
{
|
|
15302
15917
|
id: "absolute",
|
|
15303
15918
|
label: t("copyAbsolute"),
|
|
15304
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15919
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 14 })
|
|
15305
15920
|
}
|
|
15306
15921
|
],
|
|
15307
15922
|
onSelect: (id) => {
|
|
@@ -15351,17 +15966,17 @@ window.__ModuleLoader__.load({
|
|
|
15351
15966
|
{
|
|
15352
15967
|
id: "copyShort",
|
|
15353
15968
|
label: t("copyShortHash"),
|
|
15354
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15969
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 14 })
|
|
15355
15970
|
},
|
|
15356
15971
|
{
|
|
15357
15972
|
id: "copyFull",
|
|
15358
15973
|
label: t("copyFullHash"),
|
|
15359
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15974
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 14 })
|
|
15360
15975
|
},
|
|
15361
15976
|
{
|
|
15362
15977
|
id: "copySubject",
|
|
15363
15978
|
label: t("copySubject"),
|
|
15364
|
-
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
15979
|
+
icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCopyOutline16, { size: 14 })
|
|
15365
15980
|
},
|
|
15366
15981
|
{
|
|
15367
15982
|
type: "separator",
|
|
@@ -15877,7 +16492,7 @@ window.__ModuleLoader__.load({
|
|
|
15877
16492
|
"aria-label": t("refresh"),
|
|
15878
16493
|
title: t("refresh"),
|
|
15879
16494
|
onClick: refresh,
|
|
15880
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
16495
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline16, { size: 14 })
|
|
15881
16496
|
})]
|
|
15882
16497
|
}),
|
|
15883
16498
|
loading && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -16241,7 +16856,7 @@ window.__ModuleLoader__.load({
|
|
|
16241
16856
|
title: t("browserBack"),
|
|
16242
16857
|
disabled: cursor <= 0,
|
|
16243
16858
|
onClick: goBack,
|
|
16244
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
16859
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronLeftOutline14, {})
|
|
16245
16860
|
}),
|
|
16246
16861
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
16247
16862
|
type: "button",
|
|
@@ -16250,7 +16865,7 @@ window.__ModuleLoader__.load({
|
|
|
16250
16865
|
title: t("browserForward"),
|
|
16251
16866
|
disabled: cursor >= history.length - 1,
|
|
16252
16867
|
onClick: goForward,
|
|
16253
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
16868
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronRightOutline14, {})
|
|
16254
16869
|
}),
|
|
16255
16870
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
16256
16871
|
type: "button",
|
|
@@ -16260,7 +16875,7 @@ window.__ModuleLoader__.load({
|
|
|
16260
16875
|
onClick: () => {
|
|
16261
16876
|
setReloadKey((key) => key + 1);
|
|
16262
16877
|
},
|
|
16263
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
16878
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline14, {})
|
|
16264
16879
|
}),
|
|
16265
16880
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
16266
16881
|
className: sidebar_module_css_default.browserInput,
|
|
@@ -16282,7 +16897,7 @@ window.__ModuleLoader__.load({
|
|
|
16282
16897
|
onClick: () => {
|
|
16283
16898
|
navigateTo(input);
|
|
16284
16899
|
},
|
|
16285
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
16900
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconLinkOutline14, {})
|
|
16286
16901
|
}),
|
|
16287
16902
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
16288
16903
|
type: "button",
|
|
@@ -16350,7 +16965,7 @@ window.__ModuleLoader__.load({
|
|
|
16350
16965
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
16351
16966
|
className: sidebar_module_css_default.browserBlocked,
|
|
16352
16967
|
children: [
|
|
16353
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
16968
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconWarningOutline16, { size: 16 }),
|
|
16354
16969
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
16355
16970
|
className: sidebar_module_css_default.browserBlockedTitle,
|
|
16356
16971
|
children: t("browserEmbedBlocked", { host })
|
|
@@ -16379,15 +16994,6 @@ window.__ModuleLoader__.load({
|
|
|
16379
16994
|
//#endregion
|
|
16380
16995
|
//#region src/client/builtins/tabs.tsx
|
|
16381
16996
|
/**
|
|
16382
|
-
* The 7 built-in tab descriptors: the plugin registers its own pages
|
|
16383
|
-
* (editor / git / terminal / browser / diff) through
|
|
16384
|
-
* the same {@link BetterSidebarService} external plugins use — eating its
|
|
16385
|
-
* own dogfood. The terminal descriptor owns its quota (`TERMINAL_LIMIT`)
|
|
16386
|
-
* and mints `terminal:<uuid>` ids through `createTab`; the browser mints
|
|
16387
|
-
* `browser:<n>` the same way (no quota). The editor IS the files window
|
|
16388
|
-
* (the old standalone explorer merged into it).
|
|
16389
|
-
*/
|
|
16390
|
-
/**
|
|
16391
16997
|
* Lazy wrapper over the terminal view: xterm (and its stylesheet) is fetched
|
|
16392
16998
|
* only when a terminal tab is first opened (see chunk-loader.ts). The
|
|
16393
16999
|
* wrapper keeps the descriptor contract `(props) => ReactNode` — Sidebar
|
|
@@ -16415,7 +17021,7 @@ window.__ModuleLoader__.load({
|
|
|
16415
17021
|
{
|
|
16416
17022
|
id: "editor",
|
|
16417
17023
|
title: () => t("files"),
|
|
16418
|
-
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17024
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconFolderOpen16, { size }),
|
|
16419
17025
|
order: 10,
|
|
16420
17026
|
hidden: false,
|
|
16421
17027
|
dedupeKey: (tab) => tab.path,
|
|
@@ -16427,12 +17033,12 @@ window.__ModuleLoader__.load({
|
|
|
16427
17033
|
desc: () => t("editorExplorerDesc"),
|
|
16428
17034
|
options: [{
|
|
16429
17035
|
value: true,
|
|
16430
|
-
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17036
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconPanelLeftOutline16, { size }),
|
|
16431
17037
|
title: () => t("editorExplorerMerged"),
|
|
16432
17038
|
desc: () => t("editorExplorerMergedDesc")
|
|
16433
17039
|
}, {
|
|
16434
17040
|
value: false,
|
|
16435
|
-
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17041
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCodeOutline16, { size }),
|
|
16436
17042
|
title: () => t("editorExplorerSplit"),
|
|
16437
17043
|
desc: () => t("editorExplorerSplitDesc")
|
|
16438
17044
|
}]
|
|
@@ -16460,7 +17066,7 @@ window.__ModuleLoader__.load({
|
|
|
16460
17066
|
{
|
|
16461
17067
|
id: "git",
|
|
16462
17068
|
title: () => t("git"),
|
|
16463
|
-
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17069
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconBranchOutline16, { size }),
|
|
16464
17070
|
order: 20,
|
|
16465
17071
|
single: true,
|
|
16466
17072
|
component: ({ ctx, store, scope, visible, onOpenDiff }) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GitView, {
|
|
@@ -16807,7 +17413,7 @@ window.__ModuleLoader__.load({
|
|
|
16807
17413
|
{
|
|
16808
17414
|
id: "code",
|
|
16809
17415
|
title: () => t("viewerCode"),
|
|
16810
|
-
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17416
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCodeOutline16, { size }),
|
|
16811
17417
|
exts: [],
|
|
16812
17418
|
priority: -100,
|
|
16813
17419
|
fetchStrategy: "fsRead",
|
|
@@ -16816,7 +17422,7 @@ window.__ModuleLoader__.load({
|
|
|
16816
17422
|
{
|
|
16817
17423
|
id: "binary-download",
|
|
16818
17424
|
title: () => t("viewerBinary"),
|
|
16819
|
-
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17425
|
+
icon: (size) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconDownloadOutline16, { size }),
|
|
16820
17426
|
exts: [
|
|
16821
17427
|
"doc",
|
|
16822
17428
|
"xls",
|
|
@@ -17161,7 +17767,7 @@ window.__ModuleLoader__.load({
|
|
|
17161
17767
|
event.stopPropagation();
|
|
17162
17768
|
onClose(tab.id);
|
|
17163
17769
|
},
|
|
17164
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17770
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCloseFill14, {})
|
|
17165
17771
|
})
|
|
17166
17772
|
]
|
|
17167
17773
|
}, tab.id);
|
|
@@ -17192,7 +17798,7 @@ window.__ModuleLoader__.load({
|
|
|
17192
17798
|
setMenuOpen((v) => !v);
|
|
17193
17799
|
setTabMenu(null);
|
|
17194
17800
|
},
|
|
17195
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
17801
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconPlusOutline16, {})
|
|
17196
17802
|
})
|
|
17197
17803
|
}),
|
|
17198
17804
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
@@ -17904,7 +18510,7 @@ window.__ModuleLoader__.load({
|
|
|
17904
18510
|
event.stopPropagation();
|
|
17905
18511
|
onClose();
|
|
17906
18512
|
},
|
|
17907
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
18513
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCloseFill14, {})
|
|
17908
18514
|
}),
|
|
17909
18515
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
17910
18516
|
open: menu !== null,
|
|
@@ -19967,7 +20573,7 @@ window.__ModuleLoader__.load({
|
|
|
19967
20573
|
onClick: () => {
|
|
19968
20574
|
store.reduce(toggleBottomPanel);
|
|
19969
20575
|
},
|
|
19970
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
20576
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconCloseFill14, {})
|
|
19971
20577
|
})
|
|
19972
20578
|
}),
|
|
19973
20579
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
@@ -21124,21 +21730,21 @@ window.__ModuleLoader__.load({
|
|
|
21124
21730
|
document.head.appendChild(tag);
|
|
21125
21731
|
}
|
|
21126
21732
|
var CodingPlanModelsSettings_module_css_default = {
|
|
21127
|
-
"
|
|
21128
|
-
"selected": "kn_HcG_selected",
|
|
21129
|
-
"status": "kn_HcG_status",
|
|
21733
|
+
"refresh": "kn_HcG_refresh",
|
|
21130
21734
|
"model": "kn_HcG_model",
|
|
21735
|
+
"meta": "kn_HcG_meta",
|
|
21736
|
+
"selected": "kn_HcG_selected",
|
|
21737
|
+
"modelSelected": "kn_HcG_modelSelected",
|
|
21738
|
+
"models": "kn_HcG_models",
|
|
21739
|
+
"group": "kn_HcG_group",
|
|
21131
21740
|
"modelDescription": "kn_HcG_modelDescription",
|
|
21132
|
-
"
|
|
21741
|
+
"modelTop": "kn_HcG_modelTop",
|
|
21742
|
+
"status": "kn_HcG_status",
|
|
21133
21743
|
"headingRow": "kn_HcG_headingRow",
|
|
21134
21744
|
"modelId": "kn_HcG_modelId",
|
|
21135
|
-
"
|
|
21136
|
-
"refresh": "kn_HcG_refresh",
|
|
21137
|
-
"models": "kn_HcG_models",
|
|
21138
|
-
"modelSelected": "kn_HcG_modelSelected",
|
|
21745
|
+
"description": "kn_HcG_description",
|
|
21139
21746
|
"modelName": "kn_HcG_modelName",
|
|
21140
|
-
"
|
|
21141
|
-
"modelTop": "kn_HcG_modelTop"
|
|
21747
|
+
"heading": "kn_HcG_heading"
|
|
21142
21748
|
};
|
|
21143
21749
|
//#endregion
|
|
21144
21750
|
//#region src/client/CodingPlanModelsSettings.tsx
|
|
@@ -21584,7 +22190,7 @@ window.__ModuleLoader__.load({
|
|
|
21584
22190
|
className: SideCardSection_module_css_default.selectAnchorText,
|
|
21585
22191
|
children: selected.length === 0 ? placeholder ?? "—" : selected.map((option) => textOf$1(option.title)).join(", ")
|
|
21586
22192
|
}),
|
|
21587
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
22193
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronDownOutline14, { size: 12 })
|
|
21588
22194
|
]
|
|
21589
22195
|
});
|
|
21590
22196
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
|
|
@@ -21948,7 +22554,7 @@ window.__ModuleLoader__.load({
|
|
|
21948
22554
|
className: SideCardSection_module_css_default.cardSettings,
|
|
21949
22555
|
"aria-label": `${props.title} ${t("settingsPopup")}`,
|
|
21950
22556
|
onClick: props.onOpenSettings,
|
|
21951
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
22557
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconSettingsOutline16, { size: 12 }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("settingsPopup") })]
|
|
21952
22558
|
})]
|
|
21953
22559
|
});
|
|
21954
22560
|
};
|
|
@@ -22102,7 +22708,7 @@ window.__ModuleLoader__.load({
|
|
|
22102
22708
|
onClick: () => {
|
|
22103
22709
|
setStripSettingsOpen(true);
|
|
22104
22710
|
},
|
|
22105
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
22711
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconSettingsOutline16, { size: 14 })
|
|
22106
22712
|
})]
|
|
22107
22713
|
})]
|
|
22108
22714
|
})
|
|
@@ -22145,7 +22751,7 @@ window.__ModuleLoader__.load({
|
|
|
22145
22751
|
className: SideCardSection_module_css_default.cardTop,
|
|
22146
22752
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22147
22753
|
className: SideCardSection_module_css_default.cardIconChip,
|
|
22148
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
22754
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconPlusOutline16, { size: 16 })
|
|
22149
22755
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22150
22756
|
className: SideCardSection_module_css_default.cardTitle,
|
|
22151
22757
|
children: t("addPluginsTabCard")
|
|
@@ -22188,7 +22794,7 @@ window.__ModuleLoader__.load({
|
|
|
22188
22794
|
className: SideCardSection_module_css_default.cardTop,
|
|
22189
22795
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22190
22796
|
className: SideCardSection_module_css_default.cardIconChip,
|
|
22191
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
22797
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconPlusOutline16, { size: 16 })
|
|
22192
22798
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22193
22799
|
className: SideCardSection_module_css_default.cardTitle,
|
|
22194
22800
|
children: t("addPluginsViewerCard")
|
|
@@ -22307,48 +22913,48 @@ window.__ModuleLoader__.load({
|
|
|
22307
22913
|
document.head.appendChild(tag);
|
|
22308
22914
|
}
|
|
22309
22915
|
var UsageHeatmapSection_module_css_default = {
|
|
22310
|
-
"
|
|
22311
|
-
"
|
|
22312
|
-
"
|
|
22313
|
-
"monthButton": "iUwB6a_monthButton",
|
|
22314
|
-
"tooltipSplit": "iUwB6a_tooltipSplit",
|
|
22315
|
-
"group": "iUwB6a_group",
|
|
22916
|
+
"monthLabel": "iUwB6a_monthLabel",
|
|
22917
|
+
"section": "iUwB6a_section",
|
|
22918
|
+
"monthNav": "iUwB6a_monthNav",
|
|
22316
22919
|
"dshSidebarUsageSpin": "iUwB6a_dshSidebarUsageSpin",
|
|
22920
|
+
"tooltipSplit": "iUwB6a_tooltipSplit",
|
|
22921
|
+
"totalValue": "iUwB6a_totalValue",
|
|
22922
|
+
"retry": "iUwB6a_retry",
|
|
22923
|
+
"cellFuture": "iUwB6a_cellFuture",
|
|
22317
22924
|
"totalNumber": "iUwB6a_totalNumber",
|
|
22925
|
+
"statLabel": "iUwB6a_statLabel",
|
|
22926
|
+
"weekdays": "iUwB6a_weekdays",
|
|
22927
|
+
"tooltip": "iUwB6a_tooltip",
|
|
22928
|
+
"group": "iUwB6a_group",
|
|
22929
|
+
"legendSwatch": "iUwB6a_legendSwatch",
|
|
22930
|
+
"todayDot": "iUwB6a_todayDot",
|
|
22931
|
+
"stats": "iUwB6a_stats",
|
|
22932
|
+
"monthButton": "iUwB6a_monthButton",
|
|
22933
|
+
"totalUnit": "iUwB6a_totalUnit",
|
|
22934
|
+
"total": "iUwB6a_total",
|
|
22935
|
+
"spin": "iUwB6a_spin",
|
|
22318
22936
|
"tooltipBelow": "iUwB6a_tooltipBelow",
|
|
22319
|
-
"
|
|
22320
|
-
"footer": "iUwB6a_footer",
|
|
22321
|
-
"empty": "iUwB6a_empty",
|
|
22322
|
-
"stat": "iUwB6a_stat",
|
|
22323
|
-
"cellFuture": "iUwB6a_cellFuture",
|
|
22324
|
-
"monthNav": "iUwB6a_monthNav",
|
|
22937
|
+
"headerRow": "iUwB6a_headerRow",
|
|
22325
22938
|
"tooltipTokens": "iUwB6a_tooltipTokens",
|
|
22326
22939
|
"refreshButton": "iUwB6a_refreshButton",
|
|
22327
|
-
"state": "iUwB6a_state",
|
|
22328
|
-
"section": "iUwB6a_section",
|
|
22329
|
-
"grid": "iUwB6a_grid",
|
|
22330
|
-
"todayDot": "iUwB6a_todayDot",
|
|
22331
|
-
"tooltipToday": "iUwB6a_tooltipToday",
|
|
22332
|
-
"legend": "iUwB6a_legend",
|
|
22333
|
-
"statLabel": "iUwB6a_statLabel",
|
|
22334
|
-
"spin": "iUwB6a_spin",
|
|
22335
|
-
"overview": "iUwB6a_overview",
|
|
22336
|
-
"totalUnit": "iUwB6a_totalUnit",
|
|
22337
22940
|
"cell": "iUwB6a_cell",
|
|
22338
|
-
"
|
|
22339
|
-
"stats": "iUwB6a_stats",
|
|
22941
|
+
"stat": "iUwB6a_stat",
|
|
22340
22942
|
"cellHover": "iUwB6a_cellHover",
|
|
22341
|
-
"
|
|
22342
|
-
"
|
|
22343
|
-
"
|
|
22344
|
-
"
|
|
22345
|
-
"
|
|
22346
|
-
"
|
|
22347
|
-
"
|
|
22943
|
+
"overview": "iUwB6a_overview",
|
|
22944
|
+
"cellTokens": "iUwB6a_cellTokens",
|
|
22945
|
+
"cellToday": "iUwB6a_cellToday",
|
|
22946
|
+
"footer": "iUwB6a_footer",
|
|
22947
|
+
"tooltipToday": "iUwB6a_tooltipToday",
|
|
22948
|
+
"cellDay": "iUwB6a_cellDay",
|
|
22949
|
+
"empty": "iUwB6a_empty",
|
|
22348
22950
|
"statValue": "iUwB6a_statValue",
|
|
22951
|
+
"state": "iUwB6a_state",
|
|
22349
22952
|
"gridBody": "iUwB6a_gridBody",
|
|
22350
|
-
"
|
|
22351
|
-
"
|
|
22953
|
+
"legend": "iUwB6a_legend",
|
|
22954
|
+
"stateError": "iUwB6a_stateError",
|
|
22955
|
+
"todayLabel": "iUwB6a_todayLabel",
|
|
22956
|
+
"grid": "iUwB6a_grid",
|
|
22957
|
+
"tooltipDate": "iUwB6a_tooltipDate"
|
|
22352
22958
|
};
|
|
22353
22959
|
//#endregion
|
|
22354
22960
|
//#region src/client/UsageHeatmapSection.tsx
|
|
@@ -22505,7 +23111,7 @@ window.__ModuleLoader__.load({
|
|
|
22505
23111
|
className: UsageHeatmapSection_module_css_default.monthButton,
|
|
22506
23112
|
"aria-label": t("usagePrevMonth"),
|
|
22507
23113
|
onClick: goPrev,
|
|
22508
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
23114
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronLeftOutline14, { size: 14 })
|
|
22509
23115
|
}),
|
|
22510
23116
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
22511
23117
|
className: UsageHeatmapSection_module_css_default.monthLabel,
|
|
@@ -22518,7 +23124,7 @@ window.__ModuleLoader__.load({
|
|
|
22518
23124
|
"aria-label": t("usageNextMonth"),
|
|
22519
23125
|
onClick: goNext,
|
|
22520
23126
|
disabled: nextMonthDisabled,
|
|
22521
|
-
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
23127
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconChevronRightOutline14, { size: 14 })
|
|
22522
23128
|
})
|
|
22523
23129
|
]
|
|
22524
23130
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
@@ -22526,7 +23132,7 @@ window.__ModuleLoader__.load({
|
|
|
22526
23132
|
className: UsageHeatmapSection_module_css_default.refreshButton,
|
|
22527
23133
|
onClick: reload,
|
|
22528
23134
|
disabled: load.kind === "loading",
|
|
22529
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
23135
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconRefreshOutline14, {
|
|
22530
23136
|
size: 14,
|
|
22531
23137
|
className: load.kind === "loading" ? UsageHeatmapSection_module_css_default.spin : void 0
|
|
22532
23138
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("usageRefresh") })]
|
|
@@ -22668,7 +23274,7 @@ window.__ModuleLoader__.load({
|
|
|
22668
23274
|
] }) : load.kind === "loading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
22669
23275
|
className: UsageHeatmapSection_module_css_default.state,
|
|
22670
23276
|
role: "status",
|
|
22671
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
23277
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconLoadingOutline16, {
|
|
22672
23278
|
className: UsageHeatmapSection_module_css_default.spin,
|
|
22673
23279
|
size: 16
|
|
22674
23280
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: t("usageLoading") })]
|
|
@@ -22724,34 +23330,34 @@ window.__ModuleLoader__.load({
|
|
|
22724
23330
|
document.head.appendChild(tag);
|
|
22725
23331
|
}
|
|
22726
23332
|
var AiRatioSection_module_css_default = {
|
|
22727
|
-
"tableWrap": "JtMahq_tableWrap",
|
|
22728
|
-
"num": "JtMahq_num",
|
|
22729
|
-
"dash": "JtMahq_dash",
|
|
22730
|
-
"ratioBar": "JtMahq_ratioBar",
|
|
22731
|
-
"pager": "JtMahq_pager",
|
|
22732
23333
|
"dateInput": "JtMahq_dateInput",
|
|
22733
23334
|
"tableHeading": "JtMahq_tableHeading",
|
|
23335
|
+
"table": "JtMahq_table",
|
|
22734
23336
|
"ratioValue": "JtMahq_ratioValue",
|
|
22735
|
-
"
|
|
22736
|
-
"
|
|
23337
|
+
"ratioBar": "JtMahq_ratioBar",
|
|
23338
|
+
"queryRow": "JtMahq_queryRow",
|
|
23339
|
+
"commitsValue": "JtMahq_commitsValue",
|
|
23340
|
+
"stateError": "JtMahq_stateError",
|
|
23341
|
+
"cardLabel": "JtMahq_cardLabel",
|
|
23342
|
+
"pager": "JtMahq_pager",
|
|
22737
23343
|
"addedValue": "JtMahq_addedValue",
|
|
22738
23344
|
"adoptedValue": "JtMahq_adoptedValue",
|
|
22739
|
-
"cardValue": "JtMahq_cardValue",
|
|
22740
|
-
"ratioCardHigh": "JtMahq_ratioCardHigh",
|
|
22741
23345
|
"section": "JtMahq_section",
|
|
22742
|
-
"queryRow": "JtMahq_queryRow",
|
|
22743
|
-
"table": "JtMahq_table",
|
|
22744
|
-
"cardLabel": "JtMahq_cardLabel",
|
|
22745
|
-
"aiValue": "JtMahq_aiValue",
|
|
22746
23346
|
"dateCell": "JtMahq_dateCell",
|
|
22747
|
-
"exportButton": "JtMahq_exportButton",
|
|
22748
|
-
"commitsValue": "JtMahq_commitsValue",
|
|
22749
23347
|
"pageInfo": "JtMahq_pageInfo",
|
|
23348
|
+
"num": "JtMahq_num",
|
|
23349
|
+
"state": "JtMahq_state",
|
|
23350
|
+
"exportButton": "JtMahq_exportButton",
|
|
22750
23351
|
"overview": "JtMahq_overview",
|
|
22751
|
-
"
|
|
23352
|
+
"ratioCardHigh": "JtMahq_ratioCardHigh",
|
|
23353
|
+
"cardValue": "JtMahq_cardValue",
|
|
22752
23354
|
"primaryButton": "JtMahq_primaryButton",
|
|
23355
|
+
"tableWrap": "JtMahq_tableWrap",
|
|
23356
|
+
"cardRatio": "JtMahq_cardRatio",
|
|
23357
|
+
"aiValue": "JtMahq_aiValue",
|
|
23358
|
+
"dash": "JtMahq_dash",
|
|
22753
23359
|
"card": "JtMahq_card",
|
|
22754
|
-
"
|
|
23360
|
+
"ratioCardLow": "JtMahq_ratioCardLow"
|
|
22755
23361
|
};
|
|
22756
23362
|
//#endregion
|
|
22757
23363
|
//#region src/client/AiRatioSection.tsx
|
|
@@ -27929,12 +28535,25 @@ to{transform:translateX(-8px)}
|
|
|
27929
28535
|
const PROJECT_LOGO_URL = "/_dsh/ui-tweaks/assets/logo.svg";
|
|
27930
28536
|
const PROJECT_NAME = "ChatCode CLI";
|
|
27931
28537
|
const HERO_TITLE = "与世界,深一度对话";
|
|
27932
|
-
const LEGACY_HOST_BRAND_TEXT = /DSH\s*(?:Local\s*Build|本地构建)|ChatCode\s*CLI/giu;
|
|
27933
|
-
const
|
|
28538
|
+
const LEGACY_HOST_BRAND_TEXT = /DSH\s*(?:Local\s*Build|本地构建)|DeepSeek\s*Harness|ChatCode\s*CLI/giu;
|
|
28539
|
+
const LEGACY_HOST_BRAND_LABEL_TEXT = /^(?:DSH\s*(?:Local\s*Build|本地构建)|ChatCode\s*CLI)$/iu;
|
|
27934
28540
|
const HOST_BUILD_VERSION_TEXT = /^v?\d+\.\d+\.\d+(?:[-+][0-9a-z.-]+)*$/iu;
|
|
27935
28541
|
const HERO_HEADLINE = /探索未至之境/u;
|
|
27936
28542
|
const HERO_PREVIEW_TEXT = /^(?:预览版|Preview)$/iu;
|
|
27937
28543
|
const FAVICON_MARKER = "data-dut-project-favicon";
|
|
28544
|
+
const VERSION_NOTICE_MARKER = "data-dut-version-notice";
|
|
28545
|
+
const VERSION_NOTICE = {
|
|
28546
|
+
en: {
|
|
28547
|
+
legacyTitle: "Internal Testing Notice",
|
|
28548
|
+
title: "Version Usage Notice",
|
|
28549
|
+
paragraphs: ["ChatCode CLI is currently evolving rapidly, and its features and user experience will continue to improve. If you encounter any issues or have feedback or suggestions, please join our DingTalk group to share them.", "DingTalk group ID: 178730000511"]
|
|
28550
|
+
},
|
|
28551
|
+
zh: {
|
|
28552
|
+
legacyTitle: "内测声明",
|
|
28553
|
+
title: "版本使用声明",
|
|
28554
|
+
paragraphs: ["ChatCode CLI 当前版本处于快速迭代阶段,相关功能与使用体验将持续优化。如您在使用过程中遇到问题,或有任何意见与建议,欢迎加入钉钉交流群反馈。", "钉钉群号:178730000511"]
|
|
28555
|
+
}
|
|
28556
|
+
};
|
|
27938
28557
|
/** Reusable rendering of the packaged project logo. */
|
|
27939
28558
|
function ProjectLogoIcon({ className = "" }) {
|
|
27940
28559
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
|
|
@@ -28043,6 +28662,24 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28043
28662
|
sibling.setAttribute("aria-hidden", "true");
|
|
28044
28663
|
}
|
|
28045
28664
|
}
|
|
28665
|
+
/** Replace the registry build's older upstream notice with ChatCode product copy. */
|
|
28666
|
+
function syncVersionNotice() {
|
|
28667
|
+
document.querySelectorAll(`[role="dialog"][aria-label="${VERSION_NOTICE.zh.legacyTitle}"],[role="dialog"][aria-label="${VERSION_NOTICE.en.legacyTitle}"],[role="dialog"][${VERSION_NOTICE_MARKER}]`).forEach((dialog) => {
|
|
28668
|
+
const heading = dialog.querySelector("h1,h2,h3");
|
|
28669
|
+
const legacyTitle = dialog.getAttribute("aria-label") ?? heading?.textContent?.trim();
|
|
28670
|
+
const language = dialog.dataset.dutVersionNoticeLanguage === "zh" || legacyTitle === VERSION_NOTICE.zh.legacyTitle ? "zh" : "en";
|
|
28671
|
+
const notice = VERSION_NOTICE[language];
|
|
28672
|
+
dialog.setAttribute("aria-label", notice.title);
|
|
28673
|
+
dialog.setAttribute(VERSION_NOTICE_MARKER, "");
|
|
28674
|
+
dialog.dataset.dutVersionNoticeLanguage = language;
|
|
28675
|
+
if (heading !== null) heading.textContent = notice.title;
|
|
28676
|
+
const paragraphs = dialog.querySelectorAll("p");
|
|
28677
|
+
notice.paragraphs.forEach((text, index) => {
|
|
28678
|
+
const paragraph = paragraphs.item(index);
|
|
28679
|
+
if (paragraph !== null) paragraph.textContent = text;
|
|
28680
|
+
});
|
|
28681
|
+
});
|
|
28682
|
+
}
|
|
28046
28683
|
function syncBranding() {
|
|
28047
28684
|
document.title = document.title.replace(LEGACY_HOST_BRAND_TEXT, PROJECT_NAME);
|
|
28048
28685
|
document.querySelectorAll("[class*=\"previewBadge\"]").forEach((badge) => {
|
|
@@ -28051,7 +28688,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28051
28688
|
badge.setAttribute("aria-hidden", "true");
|
|
28052
28689
|
});
|
|
28053
28690
|
document.querySelectorAll("body *").forEach((element) => {
|
|
28054
|
-
if (element.childElementCount !== 0 || !
|
|
28691
|
+
if (element.childElementCount !== 0 || !LEGACY_HOST_BRAND_LABEL_TEXT.test(element.textContent?.trim() ?? "")) return;
|
|
28055
28692
|
if (element.textContent !== PROJECT_NAME) element.textContent = PROJECT_NAME;
|
|
28056
28693
|
element.classList.add("dut-brand-title");
|
|
28057
28694
|
replaceLogoBesideBrandLabel(element);
|
|
@@ -28075,6 +28712,7 @@ body[data-ds-dark-theme] .dut-unicom-primary-action:not(:hover){background:#9B0B
|
|
|
28075
28712
|
title.textContent = HERO_TITLE;
|
|
28076
28713
|
title.classList.add("dut-hero-title");
|
|
28077
28714
|
});
|
|
28715
|
+
syncVersionNotice();
|
|
28078
28716
|
document.querySelectorAll("[class*=\"brandMark\"]").forEach((host) => {
|
|
28079
28717
|
const svg = host.matches("svg") ? host : host.querySelector("svg");
|
|
28080
28718
|
if (svg instanceof SVGElement) replaceHostLogo(svg);
|
|
@@ -29943,15 +30581,15 @@ div[data-slot="conversation.chat.node"] table pre{
|
|
|
29943
30581
|
}, SettingsSection));
|
|
29944
30582
|
ctx.slots.inject("conversation.hero.brand.mark", () => ctx.slots.register({
|
|
29945
30583
|
name: "conversation.hero.brand.mark",
|
|
29946
|
-
priority: 10
|
|
30584
|
+
priority: -10
|
|
29947
30585
|
}, HeroProjectLogo));
|
|
29948
30586
|
ctx.slots.inject("sidebar.brand.mark", () => ctx.slots.register({
|
|
29949
30587
|
name: "sidebar.brand.mark",
|
|
29950
|
-
priority: 10
|
|
30588
|
+
priority: -10
|
|
29951
30589
|
}, SidebarProjectLogo));
|
|
29952
30590
|
ctx.slots.inject("sidebar.brand.name", () => ctx.slots.register({
|
|
29953
30591
|
name: "sidebar.brand.name",
|
|
29954
|
-
priority: 10
|
|
30592
|
+
priority: -10
|
|
29955
30593
|
}, SidebarProjectName));
|
|
29956
30594
|
ctx.slots.inject("conversation.session.header.actions", () => ctx.slots.register({
|
|
29957
30595
|
name: "conversation.session.header.actions",
|