@phenx-inc/ctlsurf 0.1.13 → 0.1.16
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/out/renderer/assets/{cssMode-CY6x0qXW.js → cssMode-CihsrbZY.js} +3 -3
- package/out/renderer/assets/{freemarker2-BXSW9BAX.js → freemarker2-DFrJ_l05.js} +1 -1
- package/out/renderer/assets/{handlebars-BYUZ1IOs.js → handlebars-BZi7_LdH.js} +1 -1
- package/out/renderer/assets/{html-DPocQM4t.js → html-CdaPU_YJ.js} +1 -1
- package/out/renderer/assets/{htmlMode-CsPinKYA.js → htmlMode-DZnUcBOX.js} +3 -3
- package/out/renderer/assets/{index-Bml7oDn9.js → index-CKhIh5ZQ.js} +78 -39
- package/out/renderer/assets/{javascript-_HVGB-lj.js → javascript-DvV4owMk.js} +2 -2
- package/out/renderer/assets/{jsonMode-JbrRQBOU.js → jsonMode-DX3yX_PF.js} +3 -3
- package/out/renderer/assets/{liquid-B7izKdqo.js → liquid-c7QWTywx.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-DzxH499X.js → lspLanguageFeatures-Dp-OZOZS.js} +1 -1
- package/out/renderer/assets/{mdx-CmvUeYLw.js → mdx-Bi7NE1tt.js} +1 -1
- package/out/renderer/assets/{python-DJqYTFoi.js → python-BeMAHtzr.js} +1 -1
- package/out/renderer/assets/{razor-CGEA5nUK.js → razor-Cfc9e2QR.js} +1 -1
- package/out/renderer/assets/{tsMode-CN0FOHMy.js → tsMode-CKrhuOxD.js} +1 -1
- package/out/renderer/assets/{typescript-CIn-DSfY.js → typescript-BEFZ19OD.js} +1 -1
- package/out/renderer/assets/{xml-C5t3U2jS.js → xml-CVdJPpsd.js} +1 -1
- package/out/renderer/assets/{yaml-n-Jb6xf1.js → yaml-B_Px-4th.js} +1 -1
- package/out/renderer/index.html +1 -1
- package/package.json +1 -1
- package/src/renderer/App.tsx +25 -8
- package/src/renderer/components/PaneLayout.tsx +44 -6
- package/src/renderer/components/TerminalPanel.tsx +4 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages } from "./index-
|
|
2
|
-
import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-
|
|
3
|
-
import { h, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages } from "./index-CKhIh5ZQ.js";
|
|
2
|
+
import { C as CompletionAdapter, H as HoverAdapter, D as DocumentHighlightAdapter, a as DefinitionAdapter, R as ReferenceAdapter, b as DocumentSymbolAdapter, c as RenameAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, e as DiagnosticsAdapter, S as SelectionRangeAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider } from "./lspLanguageFeatures-Dp-OZOZS.js";
|
|
3
|
+
import { h, i, j, t, k } from "./lspLanguageFeatures-Dp-OZOZS.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages } from "./index-
|
|
2
|
-
import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-
|
|
3
|
-
import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages } from "./index-CKhIh5ZQ.js";
|
|
2
|
+
import { H as HoverAdapter, D as DocumentHighlightAdapter, h as DocumentLinkAdapter, F as FoldingRangeAdapter, b as DocumentSymbolAdapter, S as SelectionRangeAdapter, c as RenameAdapter, f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter } from "./lspLanguageFeatures-Dp-OZOZS.js";
|
|
3
|
+
import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-Dp-OZOZS.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./cssMode-CihsrbZY.js","./lspLanguageFeatures-Dp-OZOZS.js","./htmlMode-DZnUcBOX.js","./jsonMode-DX3yX_PF.js","./javascript-DvV4owMk.js","./typescript-BEFZ19OD.js"])))=>i.map(i=>d[i]);
|
|
2
2
|
function getDefaultExportFromCjs(x) {
|
|
3
3
|
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
|
4
4
|
}
|
|
@@ -18755,6 +18755,7 @@ function TerminalPanel({ agent, onSpawn, onExit }) {
|
|
|
18755
18755
|
brightWhite: "#c0caf5"
|
|
18756
18756
|
},
|
|
18757
18757
|
scrollback: 1e4,
|
|
18758
|
+
scrollOnUserInput: true,
|
|
18758
18759
|
allowTransparency: false
|
|
18759
18760
|
});
|
|
18760
18761
|
const fitAddon = new addonFitExports.FitAddon();
|
|
@@ -18781,6 +18782,7 @@ function TerminalPanel({ agent, onSpawn, onExit }) {
|
|
|
18781
18782
|
resizeTimeout = setTimeout(() => {
|
|
18782
18783
|
if (fitAddonRef.current && terminalRef.current) {
|
|
18783
18784
|
fitAddonRef.current.fit();
|
|
18785
|
+
terminalRef.current.scrollToBottom();
|
|
18784
18786
|
const { cols, rows } = terminalRef.current;
|
|
18785
18787
|
window.worker.resizePty(cols, rows);
|
|
18786
18788
|
}
|
|
@@ -18808,6 +18810,7 @@ function TerminalPanel({ agent, onSpawn, onExit }) {
|
|
|
18808
18810
|
onSpawn(agent).then(() => {
|
|
18809
18811
|
if (fitAddonRef.current && terminalRef.current) {
|
|
18810
18812
|
fitAddonRef.current.fit();
|
|
18813
|
+
terminalRef.current.scrollToBottom();
|
|
18811
18814
|
const { cols, rows } = terminalRef.current;
|
|
18812
18815
|
window.worker.resizePty(cols, rows);
|
|
18813
18816
|
}
|
|
@@ -206489,7 +206492,7 @@ const lessDefaults = new LanguageServiceDefaultsImpl$3(
|
|
|
206489
206492
|
modeConfigurationDefault$2
|
|
206490
206493
|
);
|
|
206491
206494
|
function getMode$3() {
|
|
206492
|
-
return __vitePreload(() => import("./cssMode-
|
|
206495
|
+
return __vitePreload(() => import("./cssMode-CihsrbZY.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
|
|
206493
206496
|
}
|
|
206494
206497
|
languages.onLanguage("less", () => {
|
|
206495
206498
|
getMode$3().then((mode2) => mode2.setupMode(lessDefaults));
|
|
@@ -206594,7 +206597,7 @@ const razorLanguageService = registerHTMLLanguageService(
|
|
|
206594
206597
|
);
|
|
206595
206598
|
const razorDefaults = razorLanguageService.defaults;
|
|
206596
206599
|
function getMode$2() {
|
|
206597
|
-
return __vitePreload(() => import("./htmlMode-
|
|
206600
|
+
return __vitePreload(() => import("./htmlMode-DZnUcBOX.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
|
|
206598
206601
|
}
|
|
206599
206602
|
function registerHTMLLanguageService(languageId, options = optionsDefault, modeConfiguration = getConfigurationDefault(languageId)) {
|
|
206600
206603
|
const defaults = new LanguageServiceDefaultsImpl$2(languageId, options, modeConfiguration);
|
|
@@ -206678,7 +206681,7 @@ const jsonDefaults = new LanguageServiceDefaultsImpl$1(
|
|
|
206678
206681
|
);
|
|
206679
206682
|
const getWorker$1 = () => getMode$1().then((mode2) => mode2.getWorker());
|
|
206680
206683
|
function getMode$1() {
|
|
206681
|
-
return __vitePreload(() => import("./jsonMode-
|
|
206684
|
+
return __vitePreload(() => import("./jsonMode-DX3yX_PF.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
|
|
206682
206685
|
}
|
|
206683
206686
|
languages.register({
|
|
206684
206687
|
id: "json",
|
|
@@ -206924,7 +206927,7 @@ const getJavaScriptWorker = () => {
|
|
|
206924
206927
|
return getMode().then((mode) => mode.getJavaScriptWorker());
|
|
206925
206928
|
};
|
|
206926
206929
|
function getMode() {
|
|
206927
|
-
return __vitePreload(() => import("./tsMode-
|
|
206930
|
+
return __vitePreload(() => import("./tsMode-CKrhuOxD.js"), true ? [] : void 0, import.meta.url);
|
|
206928
206931
|
}
|
|
206929
206932
|
languages.onLanguage("typescript", () => {
|
|
206930
206933
|
return getMode().then((mode) => mode.setupTypeScript(typescriptDefaults));
|
|
@@ -207119,49 +207122,49 @@ registerLanguage({
|
|
|
207119
207122
|
extensions: [".ftl", ".ftlh", ".ftlx"],
|
|
207120
207123
|
aliases: ["FreeMarker2", "Apache FreeMarker2"],
|
|
207121
207124
|
loader: () => {
|
|
207122
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207125
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
|
|
207123
207126
|
}
|
|
207124
207127
|
});
|
|
207125
207128
|
registerLanguage({
|
|
207126
207129
|
id: "freemarker2.tag-angle.interpolation-dollar",
|
|
207127
207130
|
aliases: ["FreeMarker2 (Angle/Dollar)", "Apache FreeMarker2 (Angle/Dollar)"],
|
|
207128
207131
|
loader: () => {
|
|
207129
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207132
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
|
|
207130
207133
|
}
|
|
207131
207134
|
});
|
|
207132
207135
|
registerLanguage({
|
|
207133
207136
|
id: "freemarker2.tag-bracket.interpolation-dollar",
|
|
207134
207137
|
aliases: ["FreeMarker2 (Bracket/Dollar)", "Apache FreeMarker2 (Bracket/Dollar)"],
|
|
207135
207138
|
loader: () => {
|
|
207136
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207139
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
|
|
207137
207140
|
}
|
|
207138
207141
|
});
|
|
207139
207142
|
registerLanguage({
|
|
207140
207143
|
id: "freemarker2.tag-angle.interpolation-bracket",
|
|
207141
207144
|
aliases: ["FreeMarker2 (Angle/Bracket)", "Apache FreeMarker2 (Angle/Bracket)"],
|
|
207142
207145
|
loader: () => {
|
|
207143
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207146
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
|
|
207144
207147
|
}
|
|
207145
207148
|
});
|
|
207146
207149
|
registerLanguage({
|
|
207147
207150
|
id: "freemarker2.tag-bracket.interpolation-bracket",
|
|
207148
207151
|
aliases: ["FreeMarker2 (Bracket/Bracket)", "Apache FreeMarker2 (Bracket/Bracket)"],
|
|
207149
207152
|
loader: () => {
|
|
207150
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207153
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
|
|
207151
207154
|
}
|
|
207152
207155
|
});
|
|
207153
207156
|
registerLanguage({
|
|
207154
207157
|
id: "freemarker2.tag-auto.interpolation-dollar",
|
|
207155
207158
|
aliases: ["FreeMarker2 (Auto/Dollar)", "Apache FreeMarker2 (Auto/Dollar)"],
|
|
207156
207159
|
loader: () => {
|
|
207157
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207160
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
|
|
207158
207161
|
}
|
|
207159
207162
|
});
|
|
207160
207163
|
registerLanguage({
|
|
207161
207164
|
id: "freemarker2.tag-auto.interpolation-bracket",
|
|
207162
207165
|
aliases: ["FreeMarker2 (Auto/Bracket)", "Apache FreeMarker2 (Auto/Bracket)"],
|
|
207163
207166
|
loader: () => {
|
|
207164
|
-
return __vitePreload(() => import("./freemarker2-
|
|
207167
|
+
return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
|
|
207165
207168
|
}
|
|
207166
207169
|
});
|
|
207167
207170
|
registerLanguage({
|
|
@@ -207182,7 +207185,7 @@ registerLanguage({
|
|
|
207182
207185
|
extensions: [".handlebars", ".hbs"],
|
|
207183
207186
|
aliases: ["Handlebars", "handlebars", "hbs"],
|
|
207184
207187
|
mimetypes: ["text/x-handlebars-template"],
|
|
207185
|
-
loader: () => __vitePreload(() => import("./handlebars-
|
|
207188
|
+
loader: () => __vitePreload(() => import("./handlebars-BZi7_LdH.js"), true ? [] : void 0, import.meta.url)
|
|
207186
207189
|
});
|
|
207187
207190
|
registerLanguage({
|
|
207188
207191
|
id: "hcl",
|
|
@@ -207195,7 +207198,7 @@ registerLanguage({
|
|
|
207195
207198
|
extensions: [".html", ".htm", ".shtml", ".xhtml", ".mdoc", ".jsp", ".asp", ".aspx", ".jshtm"],
|
|
207196
207199
|
aliases: ["HTML", "htm", "html", "xhtml"],
|
|
207197
207200
|
mimetypes: ["text/html", "text/x-jshtm", "text/template", "text/ng-template"],
|
|
207198
|
-
loader: () => __vitePreload(() => import("./html-
|
|
207201
|
+
loader: () => __vitePreload(() => import("./html-CdaPU_YJ.js"), true ? [] : void 0, import.meta.url)
|
|
207199
207202
|
});
|
|
207200
207203
|
registerLanguage({
|
|
207201
207204
|
id: "ini",
|
|
@@ -207218,7 +207221,7 @@ registerLanguage({
|
|
|
207218
207221
|
filenames: ["jakefile"],
|
|
207219
207222
|
aliases: ["JavaScript", "javascript", "js"],
|
|
207220
207223
|
mimetypes: ["text/javascript"],
|
|
207221
|
-
loader: () => __vitePreload(() => import("./javascript-
|
|
207224
|
+
loader: () => __vitePreload(() => import("./javascript-DvV4owMk.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
|
|
207222
207225
|
});
|
|
207223
207226
|
registerLanguage({
|
|
207224
207227
|
id: "julia",
|
|
@@ -207257,7 +207260,7 @@ registerLanguage({
|
|
|
207257
207260
|
extensions: [".liquid", ".html.liquid"],
|
|
207258
207261
|
aliases: ["Liquid", "liquid"],
|
|
207259
207262
|
mimetypes: ["application/liquid"],
|
|
207260
|
-
loader: () => __vitePreload(() => import("./liquid-
|
|
207263
|
+
loader: () => __vitePreload(() => import("./liquid-c7QWTywx.js"), true ? [] : void 0, import.meta.url)
|
|
207261
207264
|
});
|
|
207262
207265
|
registerLanguage({
|
|
207263
207266
|
id: "m3",
|
|
@@ -207275,7 +207278,7 @@ registerLanguage({
|
|
|
207275
207278
|
id: "mdx",
|
|
207276
207279
|
extensions: [".mdx"],
|
|
207277
207280
|
aliases: ["MDX", "mdx"],
|
|
207278
|
-
loader: () => __vitePreload(() => import("./mdx-
|
|
207281
|
+
loader: () => __vitePreload(() => import("./mdx-Bi7NE1tt.js"), true ? [] : void 0, import.meta.url)
|
|
207279
207282
|
});
|
|
207280
207283
|
registerLanguage({
|
|
207281
207284
|
id: "mips",
|
|
@@ -207374,7 +207377,7 @@ registerLanguage({
|
|
|
207374
207377
|
extensions: [".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi"],
|
|
207375
207378
|
aliases: ["Python", "py"],
|
|
207376
207379
|
firstLine: "^#!/.*\\bpython[0-9.-]*\\b",
|
|
207377
|
-
loader: () => __vitePreload(() => import("./python-
|
|
207380
|
+
loader: () => __vitePreload(() => import("./python-BeMAHtzr.js"), true ? [] : void 0, import.meta.url)
|
|
207378
207381
|
});
|
|
207379
207382
|
registerLanguage({
|
|
207380
207383
|
id: "qsharp",
|
|
@@ -207393,7 +207396,7 @@ registerLanguage({
|
|
|
207393
207396
|
extensions: [".cshtml"],
|
|
207394
207397
|
aliases: ["Razor", "razor"],
|
|
207395
207398
|
mimetypes: ["text/x-cshtml"],
|
|
207396
|
-
loader: () => __vitePreload(() => import("./razor-
|
|
207399
|
+
loader: () => __vitePreload(() => import("./razor-Cfc9e2QR.js"), true ? [] : void 0, import.meta.url)
|
|
207397
207400
|
});
|
|
207398
207401
|
registerLanguage({
|
|
207399
207402
|
id: "redis",
|
|
@@ -207526,7 +207529,7 @@ registerLanguage({
|
|
|
207526
207529
|
aliases: ["TypeScript", "ts", "typescript"],
|
|
207527
207530
|
mimetypes: ["text/typescript"],
|
|
207528
207531
|
loader: () => {
|
|
207529
|
-
return __vitePreload(() => import("./typescript-
|
|
207532
|
+
return __vitePreload(() => import("./typescript-BEFZ19OD.js"), true ? [] : void 0, import.meta.url);
|
|
207530
207533
|
}
|
|
207531
207534
|
});
|
|
207532
207535
|
registerLanguage({
|
|
@@ -207571,14 +207574,14 @@ registerLanguage({
|
|
|
207571
207574
|
firstLine: "(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)",
|
|
207572
207575
|
aliases: ["XML", "xml"],
|
|
207573
207576
|
mimetypes: ["text/xml", "application/xml", "application/xaml+xml", "application/xml-dtd"],
|
|
207574
|
-
loader: () => __vitePreload(() => import("./xml-
|
|
207577
|
+
loader: () => __vitePreload(() => import("./xml-CVdJPpsd.js"), true ? [] : void 0, import.meta.url)
|
|
207575
207578
|
});
|
|
207576
207579
|
registerLanguage({
|
|
207577
207580
|
id: "yaml",
|
|
207578
207581
|
extensions: [".yaml", ".yml"],
|
|
207579
207582
|
aliases: ["YAML", "yaml", "YML", "yml"],
|
|
207580
207583
|
mimetypes: ["application/x-yaml", "text/x-yaml"],
|
|
207581
|
-
loader: () => __vitePreload(() => import("./yaml-
|
|
207584
|
+
loader: () => __vitePreload(() => import("./yaml-B_Px-4th.js"), true ? [] : void 0, import.meta.url)
|
|
207582
207585
|
});
|
|
207583
207586
|
var __defProp = Object.defineProperty;
|
|
207584
207587
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
@@ -211149,7 +211152,7 @@ const DragContext = reactExports.createContext({
|
|
|
211149
211152
|
setDragPaneId: () => {
|
|
211150
211153
|
}
|
|
211151
211154
|
});
|
|
211152
|
-
function PaneLayout({ layout: layout2, panes, onLayoutChange, onToggle }) {
|
|
211155
|
+
function PaneLayout({ layout: layout2, panes, onLayoutChange, onToggle, paneHostPrefix }) {
|
|
211153
211156
|
const [dragPaneId, setDragPaneId] = reactExports.useState(null);
|
|
211154
211157
|
const handleDrop = reactExports.useCallback((targetPaneId, zone) => {
|
|
211155
211158
|
if (!dragPaneId || dragPaneId === targetPaneId) return;
|
|
@@ -211171,11 +211174,12 @@ function PaneLayout({ layout: layout2, panes, onLayoutChange, onToggle }) {
|
|
|
211171
211174
|
onToggle,
|
|
211172
211175
|
onLayoutChange,
|
|
211173
211176
|
parentDirection: null,
|
|
211174
|
-
path: []
|
|
211177
|
+
path: [],
|
|
211178
|
+
paneHostPrefix
|
|
211175
211179
|
}
|
|
211176
211180
|
) }) });
|
|
211177
211181
|
}
|
|
211178
|
-
function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, parentDirection, path }) {
|
|
211182
|
+
function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, parentDirection, path, paneHostPrefix }) {
|
|
211179
211183
|
if (node.type === "leaf") {
|
|
211180
211184
|
const pane = paneMap.get(node.paneId);
|
|
211181
211185
|
if (!pane) return null;
|
|
@@ -211184,7 +211188,8 @@ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, paren
|
|
|
211184
211188
|
{
|
|
211185
211189
|
pane,
|
|
211186
211190
|
onDrop,
|
|
211187
|
-
onToggle
|
|
211191
|
+
onToggle,
|
|
211192
|
+
paneHostPrefix
|
|
211188
211193
|
}
|
|
211189
211194
|
);
|
|
211190
211195
|
}
|
|
@@ -211196,11 +211201,12 @@ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, paren
|
|
|
211196
211201
|
onDrop,
|
|
211197
211202
|
onToggle,
|
|
211198
211203
|
onLayoutChange,
|
|
211199
|
-
path
|
|
211204
|
+
path,
|
|
211205
|
+
paneHostPrefix
|
|
211200
211206
|
}
|
|
211201
211207
|
);
|
|
211202
211208
|
}
|
|
211203
|
-
function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path }) {
|
|
211209
|
+
function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path, paneHostPrefix }) {
|
|
211204
211210
|
const containerRef = reactExports.useRef(null);
|
|
211205
211211
|
const draggingDivider = reactExports.useRef(null);
|
|
211206
211212
|
const sizesRef = reactExports.useRef(node.sizes);
|
|
@@ -211285,7 +211291,8 @@ function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path
|
|
|
211285
211291
|
onLayoutChange({ ...node, children: newChildren });
|
|
211286
211292
|
},
|
|
211287
211293
|
parentDirection: node.direction,
|
|
211288
|
-
path: [...path, i2]
|
|
211294
|
+
path: [...path, i2],
|
|
211295
|
+
paneHostPrefix
|
|
211289
211296
|
}
|
|
211290
211297
|
)
|
|
211291
211298
|
}
|
|
@@ -211307,10 +211314,34 @@ function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path
|
|
|
211307
211314
|
}
|
|
211308
211315
|
);
|
|
211309
211316
|
}
|
|
211310
|
-
function LeafPane({ pane, onDrop, onToggle }) {
|
|
211317
|
+
function LeafPane({ pane, onDrop, onToggle, paneHostPrefix }) {
|
|
211311
211318
|
const { dragPaneId, setDragPaneId } = reactExports.useContext(DragContext);
|
|
211312
211319
|
const [hoverZone, setHoverZone] = reactExports.useState(null);
|
|
211313
211320
|
const paneRef = reactExports.useRef(null);
|
|
211321
|
+
const contentRef = reactExports.useRef(null);
|
|
211322
|
+
reactExports.useEffect(() => {
|
|
211323
|
+
if (!paneHostPrefix || !contentRef.current) return;
|
|
211324
|
+
const hostEl = document.getElementById(`${paneHostPrefix}${pane.id}`);
|
|
211325
|
+
if (!hostEl) return;
|
|
211326
|
+
hostEl.style.position = "";
|
|
211327
|
+
hostEl.style.width = "100%";
|
|
211328
|
+
hostEl.style.height = "100%";
|
|
211329
|
+
hostEl.style.overflow = "";
|
|
211330
|
+
hostEl.style.opacity = "1";
|
|
211331
|
+
hostEl.style.pointerEvents = "";
|
|
211332
|
+
contentRef.current.appendChild(hostEl);
|
|
211333
|
+
return () => {
|
|
211334
|
+
if (hostEl.parentElement === contentRef.current) {
|
|
211335
|
+
document.body.appendChild(hostEl);
|
|
211336
|
+
hostEl.style.position = "absolute";
|
|
211337
|
+
hostEl.style.width = "1px";
|
|
211338
|
+
hostEl.style.height = "1px";
|
|
211339
|
+
hostEl.style.overflow = "hidden";
|
|
211340
|
+
hostEl.style.opacity = "0";
|
|
211341
|
+
hostEl.style.pointerEvents = "none";
|
|
211342
|
+
}
|
|
211343
|
+
};
|
|
211344
|
+
}, [pane.id, paneHostPrefix]);
|
|
211314
211345
|
const isDragging = dragPaneId === pane.id;
|
|
211315
211346
|
const isDropTarget = dragPaneId !== null && dragPaneId !== pane.id;
|
|
211316
211347
|
const computeZone = reactExports.useCallback((e) => {
|
|
@@ -211356,7 +211387,7 @@ function LeafPane({ pane, onDrop, onToggle }) {
|
|
|
211356
211387
|
]
|
|
211357
211388
|
}
|
|
211358
211389
|
),
|
|
211359
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "leaf-pane-content", children: pane.content }),
|
|
211390
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "leaf-pane-content", ref: contentRef, children: !paneHostPrefix && pane.content }),
|
|
211360
211391
|
isDropTarget && /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
211361
211392
|
"div",
|
|
211362
211393
|
{
|
|
@@ -211610,6 +211641,14 @@ const DEFAULT_LAYOUT = {
|
|
|
211610
211641
|
sizes: [50, 50]
|
|
211611
211642
|
};
|
|
211612
211643
|
const ALL_PANE_IDS = ["editor", "terminal", "ctlsurf"];
|
|
211644
|
+
const offscreenStyle = {
|
|
211645
|
+
position: "absolute",
|
|
211646
|
+
width: "1px",
|
|
211647
|
+
height: "1px",
|
|
211648
|
+
overflow: "hidden",
|
|
211649
|
+
opacity: 0,
|
|
211650
|
+
pointerEvents: "none"
|
|
211651
|
+
};
|
|
211613
211652
|
function App() {
|
|
211614
211653
|
const [agents, setAgents] = reactExports.useState([]);
|
|
211615
211654
|
const [selectedAgent, setSelectedAgent] = reactExports.useState(null);
|
|
@@ -211742,15 +211781,14 @@ function App() {
|
|
|
211742
211781
|
return () => window.removeEventListener("keydown", handleKeyDown);
|
|
211743
211782
|
}, [togglePane]);
|
|
211744
211783
|
const panes = [
|
|
211745
|
-
{ id: "editor", label: "Editor", content:
|
|
211746
|
-
{
|
|
211747
|
-
|
|
211748
|
-
label: "Terminal",
|
|
211749
|
-
content: /* @__PURE__ */ jsxRuntimeExports.jsx(TerminalPanel, { agent: selectedAgent, onSpawn: handleSpawn, onExit: handleExit })
|
|
211750
|
-
},
|
|
211751
|
-
{ id: "ctlsurf", label: "ctlsurf", content: /* @__PURE__ */ jsxRuntimeExports.jsx(CtlsurfPanel, {}) }
|
|
211784
|
+
{ id: "editor", label: "Editor", content: null },
|
|
211785
|
+
{ id: "terminal", label: "Terminal", content: null },
|
|
211786
|
+
{ id: "ctlsurf", label: "ctlsurf", content: null }
|
|
211752
211787
|
];
|
|
211753
211788
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "app", children: [
|
|
211789
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: "pane-host-editor", style: visiblePaneIds.includes("editor") ? void 0 : offscreenStyle, children: /* @__PURE__ */ jsxRuntimeExports.jsx(EditorPanel, { cwd: cwd2 }) }),
|
|
211790
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: "pane-host-terminal", style: visiblePaneIds.includes("terminal") ? void 0 : offscreenStyle, children: /* @__PURE__ */ jsxRuntimeExports.jsx(TerminalPanel, { agent: selectedAgent, onSpawn: handleSpawn, onExit: handleExit }) }),
|
|
211791
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("div", { id: "pane-host-ctlsurf", style: visiblePaneIds.includes("ctlsurf") ? void 0 : offscreenStyle, children: /* @__PURE__ */ jsxRuntimeExports.jsx(CtlsurfPanel, {}) }),
|
|
211754
211792
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "titlebar", children: [
|
|
211755
211793
|
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "titlebar-title", children: "ctlsurf-worker" }),
|
|
211756
211794
|
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "titlebar-controls", children: [
|
|
@@ -211785,7 +211823,8 @@ function App() {
|
|
|
211785
211823
|
layout: layout2,
|
|
211786
211824
|
panes: panes.filter((p) => visiblePaneIds.includes(p.id)),
|
|
211787
211825
|
onLayoutChange: setLayout,
|
|
211788
|
-
onToggle: togglePane
|
|
211826
|
+
onToggle: togglePane,
|
|
211827
|
+
paneHostPrefix: "pane-host-"
|
|
211789
211828
|
}
|
|
211790
211829
|
) }),
|
|
211791
211830
|
/* @__PURE__ */ jsxRuntimeExports.jsx(StatusBar, { wsStatus, cwd: cwd2, onChangeCwd: handleChangeCwd }),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { conf as conf$1, language as language$1 } from "./typescript-
|
|
2
|
-
import "./index-
|
|
1
|
+
import { conf as conf$1, language as language$1 } from "./typescript-BEFZ19OD.js";
|
|
2
|
+
import "./index-CKhIh5ZQ.js";
|
|
3
3
|
const conf = conf$1;
|
|
4
4
|
const language = {
|
|
5
5
|
// Set defaultToken to invalid to see what you do not tokenize yet
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { c as createWebWorker, l as languages, e as editor } from "./index-
|
|
2
|
-
import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-
|
|
3
|
-
import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-
|
|
1
|
+
import { c as createWebWorker, l as languages, e as editor } from "./index-CKhIh5ZQ.js";
|
|
2
|
+
import { f as DocumentFormattingEditProvider, g as DocumentRangeFormattingEditProvider, C as CompletionAdapter, H as HoverAdapter, b as DocumentSymbolAdapter, d as DocumentColorAdapter, F as FoldingRangeAdapter, S as SelectionRangeAdapter, e as DiagnosticsAdapter } from "./lspLanguageFeatures-Dp-OZOZS.js";
|
|
3
|
+
import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-Dp-OZOZS.js";
|
|
4
4
|
const STOP_WHEN_IDLE_FOR = 2 * 60 * 1e3;
|
|
5
5
|
class WorkerManager {
|
|
6
6
|
constructor(defaults) {
|
package/out/renderer/assets/{lspLanguageFeatures-DzxH499X.js → lspLanguageFeatures-Dp-OZOZS.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-
|
|
1
|
+
import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-CKhIh5ZQ.js";
|
|
2
2
|
var DocumentUri;
|
|
3
3
|
(function(DocumentUri2) {
|
|
4
4
|
function is(value) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { c as createWebWorker, e as editor, U as Uri, a as MarkerTag, M as MarkerSeverity, l as languages, t as typescriptDefaults, R as Range } from "./index-
|
|
1
|
+
import { c as createWebWorker, e as editor, U as Uri, a as MarkerTag, M as MarkerSeverity, l as languages, t as typescriptDefaults, R as Range } from "./index-CKhIh5ZQ.js";
|
|
2
2
|
class WorkerManager {
|
|
3
3
|
constructor(_modeId, _defaults) {
|
|
4
4
|
this._modeId = _modeId;
|
package/out/renderer/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>ctlsurf-worker</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-CKhIh5ZQ.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="./assets/index-DK9wLFFm.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@phenx-inc/ctlsurf",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "Agent-agnostic terminal and desktop app for ctlsurf — run Claude Code, Codex, or any coding agent with live session logging and remote control",
|
|
5
5
|
"main": "out/main/index.js",
|
|
6
6
|
"bin": {
|
package/src/renderer/App.tsx
CHANGED
|
@@ -72,6 +72,15 @@ const DEFAULT_LAYOUT: LayoutNode = {
|
|
|
72
72
|
|
|
73
73
|
const ALL_PANE_IDS = ['editor', 'terminal', 'ctlsurf']
|
|
74
74
|
|
|
75
|
+
const offscreenStyle: React.CSSProperties = {
|
|
76
|
+
position: 'absolute',
|
|
77
|
+
width: '1px',
|
|
78
|
+
height: '1px',
|
|
79
|
+
overflow: 'hidden',
|
|
80
|
+
opacity: 0,
|
|
81
|
+
pointerEvents: 'none',
|
|
82
|
+
}
|
|
83
|
+
|
|
75
84
|
export default function App() {
|
|
76
85
|
const [agents, setAgents] = useState<AgentConfig[]>([])
|
|
77
86
|
const [selectedAgent, setSelectedAgent] = useState<AgentConfig | null>(null)
|
|
@@ -217,19 +226,26 @@ export default function App() {
|
|
|
217
226
|
return () => window.removeEventListener('keydown', handleKeyDown)
|
|
218
227
|
}, [togglePane])
|
|
219
228
|
|
|
220
|
-
//
|
|
229
|
+
// Pane definitions — content is rendered via portals to preserve React tree position
|
|
221
230
|
const panes: PaneContent[] = [
|
|
222
|
-
{ id: 'editor', label: 'Editor', content:
|
|
223
|
-
{
|
|
224
|
-
|
|
225
|
-
label: 'Terminal',
|
|
226
|
-
content: <TerminalPanel agent={selectedAgent} onSpawn={handleSpawn} onExit={handleExit} />,
|
|
227
|
-
},
|
|
228
|
-
{ id: 'ctlsurf', label: 'ctlsurf', content: <CtlsurfPanel /> },
|
|
231
|
+
{ id: 'editor', label: 'Editor', content: null },
|
|
232
|
+
{ id: 'terminal', label: 'Terminal', content: null },
|
|
233
|
+
{ id: 'ctlsurf', label: 'ctlsurf', content: null },
|
|
229
234
|
]
|
|
230
235
|
|
|
231
236
|
return (
|
|
232
237
|
<div className="app">
|
|
238
|
+
{/* Persistent component instances — never unmounted, positioned by portal targets */}
|
|
239
|
+
<div id="pane-host-editor" style={visiblePaneIds.includes('editor') ? undefined : offscreenStyle}>
|
|
240
|
+
<EditorPanel cwd={cwd} />
|
|
241
|
+
</div>
|
|
242
|
+
<div id="pane-host-terminal" style={visiblePaneIds.includes('terminal') ? undefined : offscreenStyle}>
|
|
243
|
+
<TerminalPanel agent={selectedAgent} onSpawn={handleSpawn} onExit={handleExit} />
|
|
244
|
+
</div>
|
|
245
|
+
<div id="pane-host-ctlsurf" style={visiblePaneIds.includes('ctlsurf') ? undefined : offscreenStyle}>
|
|
246
|
+
<CtlsurfPanel />
|
|
247
|
+
</div>
|
|
248
|
+
|
|
233
249
|
<div className="titlebar">
|
|
234
250
|
<span className="titlebar-title">ctlsurf-worker</span>
|
|
235
251
|
<div className="titlebar-controls">
|
|
@@ -272,6 +288,7 @@ export default function App() {
|
|
|
272
288
|
panes={panes.filter(p => visiblePaneIds.includes(p.id))}
|
|
273
289
|
onLayoutChange={setLayout}
|
|
274
290
|
onToggle={togglePane}
|
|
291
|
+
paneHostPrefix="pane-host-"
|
|
275
292
|
/>
|
|
276
293
|
)}
|
|
277
294
|
</div>
|
|
@@ -116,9 +116,10 @@ interface PaneLayoutProps {
|
|
|
116
116
|
panes: PaneContent[]
|
|
117
117
|
onLayoutChange: (layout: LayoutNode) => void
|
|
118
118
|
onToggle: (id: string) => void
|
|
119
|
+
paneHostPrefix?: string
|
|
119
120
|
}
|
|
120
121
|
|
|
121
|
-
export function PaneLayout({ layout, panes, onLayoutChange, onToggle }: PaneLayoutProps) {
|
|
122
|
+
export function PaneLayout({ layout, panes, onLayoutChange, onToggle, paneHostPrefix }: PaneLayoutProps) {
|
|
122
123
|
const [dragPaneId, setDragPaneId] = useState<string | null>(null)
|
|
123
124
|
|
|
124
125
|
const handleDrop = useCallback((targetPaneId: string, zone: DropZone) => {
|
|
@@ -150,6 +151,7 @@ export function PaneLayout({ layout, panes, onLayoutChange, onToggle }: PaneLayo
|
|
|
150
151
|
onLayoutChange={onLayoutChange}
|
|
151
152
|
parentDirection={null}
|
|
152
153
|
path={[]}
|
|
154
|
+
paneHostPrefix={paneHostPrefix}
|
|
153
155
|
/>
|
|
154
156
|
</div>
|
|
155
157
|
</DragContext.Provider>
|
|
@@ -166,9 +168,10 @@ interface LayoutRendererProps {
|
|
|
166
168
|
onLayoutChange: (layout: LayoutNode) => void
|
|
167
169
|
parentDirection: SplitDirection | null
|
|
168
170
|
path: number[]
|
|
171
|
+
paneHostPrefix?: string
|
|
169
172
|
}
|
|
170
173
|
|
|
171
|
-
function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, parentDirection, path }: LayoutRendererProps) {
|
|
174
|
+
function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, parentDirection, path, paneHostPrefix }: LayoutRendererProps) {
|
|
172
175
|
if (node.type === 'leaf') {
|
|
173
176
|
const pane = paneMap.get(node.paneId)
|
|
174
177
|
if (!pane) return null
|
|
@@ -177,6 +180,7 @@ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, paren
|
|
|
177
180
|
pane={pane}
|
|
178
181
|
onDrop={onDrop}
|
|
179
182
|
onToggle={onToggle}
|
|
183
|
+
paneHostPrefix={paneHostPrefix}
|
|
180
184
|
/>
|
|
181
185
|
)
|
|
182
186
|
}
|
|
@@ -189,6 +193,7 @@ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, paren
|
|
|
189
193
|
onToggle={onToggle}
|
|
190
194
|
onLayoutChange={onLayoutChange}
|
|
191
195
|
path={path}
|
|
196
|
+
paneHostPrefix={paneHostPrefix}
|
|
192
197
|
/>
|
|
193
198
|
)
|
|
194
199
|
}
|
|
@@ -202,9 +207,10 @@ interface SplitContainerProps {
|
|
|
202
207
|
onToggle: (id: string) => void
|
|
203
208
|
onLayoutChange: (layout: LayoutNode) => void
|
|
204
209
|
path: number[]
|
|
210
|
+
paneHostPrefix?: string
|
|
205
211
|
}
|
|
206
212
|
|
|
207
|
-
function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path }: SplitContainerProps) {
|
|
213
|
+
function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path, paneHostPrefix }: SplitContainerProps) {
|
|
208
214
|
const containerRef = useRef<HTMLDivElement>(null)
|
|
209
215
|
const draggingDivider = useRef<number | null>(null)
|
|
210
216
|
const sizesRef = useRef(node.sizes)
|
|
@@ -306,6 +312,7 @@ function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path
|
|
|
306
312
|
}}
|
|
307
313
|
parentDirection={node.direction}
|
|
308
314
|
path={[...path, i]}
|
|
315
|
+
paneHostPrefix={paneHostPrefix}
|
|
309
316
|
/>
|
|
310
317
|
</div>
|
|
311
318
|
{i < node.children.length - 1 && (
|
|
@@ -332,12 +339,43 @@ interface LeafPaneProps {
|
|
|
332
339
|
pane: PaneContent
|
|
333
340
|
onDrop: (targetPaneId: string, zone: DropZone) => void
|
|
334
341
|
onToggle: (id: string) => void
|
|
342
|
+
paneHostPrefix?: string
|
|
335
343
|
}
|
|
336
344
|
|
|
337
|
-
function LeafPane({ pane, onDrop, onToggle }: LeafPaneProps) {
|
|
345
|
+
function LeafPane({ pane, onDrop, onToggle, paneHostPrefix }: LeafPaneProps) {
|
|
338
346
|
const { dragPaneId, setDragPaneId } = useContext(DragContext)
|
|
339
347
|
const [hoverZone, setHoverZone] = useState<DropZone | null>(null)
|
|
340
348
|
const paneRef = useRef<HTMLDivElement>(null)
|
|
349
|
+
const contentRef = useRef<HTMLDivElement>(null)
|
|
350
|
+
|
|
351
|
+
// Reparent the persistent host element into this leaf's content area
|
|
352
|
+
useEffect(() => {
|
|
353
|
+
if (!paneHostPrefix || !contentRef.current) return
|
|
354
|
+
const hostEl = document.getElementById(`${paneHostPrefix}${pane.id}`)
|
|
355
|
+
if (!hostEl) return
|
|
356
|
+
|
|
357
|
+
// Move host element into this container
|
|
358
|
+
hostEl.style.position = ''
|
|
359
|
+
hostEl.style.width = '100%'
|
|
360
|
+
hostEl.style.height = '100%'
|
|
361
|
+
hostEl.style.overflow = ''
|
|
362
|
+
hostEl.style.opacity = '1'
|
|
363
|
+
hostEl.style.pointerEvents = ''
|
|
364
|
+
contentRef.current.appendChild(hostEl)
|
|
365
|
+
|
|
366
|
+
return () => {
|
|
367
|
+
// When this leaf unmounts, move host back to offscreen
|
|
368
|
+
if (hostEl.parentElement === contentRef.current) {
|
|
369
|
+
document.body.appendChild(hostEl)
|
|
370
|
+
hostEl.style.position = 'absolute'
|
|
371
|
+
hostEl.style.width = '1px'
|
|
372
|
+
hostEl.style.height = '1px'
|
|
373
|
+
hostEl.style.overflow = 'hidden'
|
|
374
|
+
hostEl.style.opacity = '0'
|
|
375
|
+
hostEl.style.pointerEvents = 'none'
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
}, [pane.id, paneHostPrefix])
|
|
341
379
|
|
|
342
380
|
const isDragging = dragPaneId === pane.id
|
|
343
381
|
const isDropTarget = dragPaneId !== null && dragPaneId !== pane.id
|
|
@@ -385,8 +423,8 @@ function LeafPane({ pane, onDrop, onToggle }: LeafPaneProps) {
|
|
|
385
423
|
</div>
|
|
386
424
|
|
|
387
425
|
{/* Content */}
|
|
388
|
-
<div className="leaf-pane-content">
|
|
389
|
-
{pane.content}
|
|
426
|
+
<div className="leaf-pane-content" ref={contentRef}>
|
|
427
|
+
{!paneHostPrefix && pane.content}
|
|
390
428
|
</div>
|
|
391
429
|
|
|
392
430
|
{/* Drop zone overlay (only visible when another pane is being dragged) */}
|
|
@@ -55,6 +55,7 @@ export function TerminalPanel({ agent, onSpawn, onExit }: TerminalPanelProps) {
|
|
|
55
55
|
brightWhite: '#c0caf5'
|
|
56
56
|
},
|
|
57
57
|
scrollback: 10000,
|
|
58
|
+
scrollOnUserInput: true,
|
|
58
59
|
allowTransparency: false
|
|
59
60
|
})
|
|
60
61
|
|
|
@@ -84,13 +85,14 @@ export function TerminalPanel({ agent, onSpawn, onExit }: TerminalPanelProps) {
|
|
|
84
85
|
onExit()
|
|
85
86
|
})
|
|
86
87
|
|
|
87
|
-
// Resize handling
|
|
88
|
+
// Resize handling — scroll to bottom after fit to prevent jumping to top
|
|
88
89
|
let resizeTimeout: ReturnType<typeof setTimeout>
|
|
89
90
|
const handleResize = () => {
|
|
90
91
|
clearTimeout(resizeTimeout)
|
|
91
92
|
resizeTimeout = setTimeout(() => {
|
|
92
93
|
if (fitAddonRef.current && terminalRef.current) {
|
|
93
94
|
fitAddonRef.current.fit()
|
|
95
|
+
terminalRef.current.scrollToBottom()
|
|
94
96
|
const { cols, rows } = terminalRef.current
|
|
95
97
|
window.worker.resizePty(cols, rows)
|
|
96
98
|
}
|
|
@@ -127,6 +129,7 @@ export function TerminalPanel({ agent, onSpawn, onExit }: TerminalPanelProps) {
|
|
|
127
129
|
// Send initial resize after spawn
|
|
128
130
|
if (fitAddonRef.current && terminalRef.current) {
|
|
129
131
|
fitAddonRef.current.fit()
|
|
132
|
+
terminalRef.current.scrollToBottom()
|
|
130
133
|
const { cols, rows } = terminalRef.current
|
|
131
134
|
window.worker.resizePty(cols, rows)
|
|
132
135
|
}
|