@phenx-inc/ctlsurf 0.1.15 → 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.
Files changed (21) hide show
  1. package/out/renderer/assets/{cssMode-woG3Vtms.js → cssMode-CihsrbZY.js} +3 -3
  2. package/out/renderer/assets/{freemarker2-DgtqmvCd.js → freemarker2-DFrJ_l05.js} +1 -1
  3. package/out/renderer/assets/{handlebars-YEqC-zOn.js → handlebars-BZi7_LdH.js} +1 -1
  4. package/out/renderer/assets/{html-CwvkGxeB.js → html-CdaPU_YJ.js} +1 -1
  5. package/out/renderer/assets/{htmlMode-DzdyF21q.js → htmlMode-DZnUcBOX.js} +3 -3
  6. package/out/renderer/assets/{index-CpDga7fF.js → index-CKhIh5ZQ.js} +83 -57
  7. package/out/renderer/assets/{javascript-Dy9cX9Fu.js → javascript-DvV4owMk.js} +2 -2
  8. package/out/renderer/assets/{jsonMode-CPhJ_ION.js → jsonMode-DX3yX_PF.js} +3 -3
  9. package/out/renderer/assets/{liquid-BJdFPWrv.js → liquid-c7QWTywx.js} +1 -1
  10. package/out/renderer/assets/{lspLanguageFeatures-BMM3SRX4.js → lspLanguageFeatures-Dp-OZOZS.js} +1 -1
  11. package/out/renderer/assets/{mdx-kg2kuPRK.js → mdx-Bi7NE1tt.js} +1 -1
  12. package/out/renderer/assets/{python-aIrmxkmH.js → python-BeMAHtzr.js} +1 -1
  13. package/out/renderer/assets/{razor-DdymcPOc.js → razor-Cfc9e2QR.js} +1 -1
  14. package/out/renderer/assets/{tsMode-D7kqIJ_o.js → tsMode-CKrhuOxD.js} +1 -1
  15. package/out/renderer/assets/{typescript-Cq3g-z7h.js → typescript-BEFZ19OD.js} +1 -1
  16. package/out/renderer/assets/{xml-BuBP5jOc.js → xml-CVdJPpsd.js} +1 -1
  17. package/out/renderer/assets/{yaml-B-3hWmol.js → yaml-B_Px-4th.js} +1 -1
  18. package/out/renderer/index.html +1 -1
  19. package/package.json +1 -1
  20. package/src/renderer/App.tsx +25 -20
  21. package/src/renderer/components/PaneLayout.tsx +44 -6
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-CpDga7fF.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-BMM3SRX4.js";
3
- import { h, i, j, t, k } from "./lspLanguageFeatures-BMM3SRX4.js";
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,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "assign",
4
4
  "flush",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,6 +1,6 @@
1
- import { c as createWebWorker, l as languages } from "./index-CpDga7fF.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-BMM3SRX4.js";
3
- import { a, e, d, R, i, j, t, k } from "./lspLanguageFeatures-BMM3SRX4.js";
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-woG3Vtms.js","./lspLanguageFeatures-BMM3SRX4.js","./htmlMode-DzdyF21q.js","./jsonMode-CPhJ_ION.js","./javascript-Dy9cX9Fu.js","./typescript-Cq3g-z7h.js"])))=>i.map(i=>d[i]);
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
  }
@@ -206492,7 +206492,7 @@ const lessDefaults = new LanguageServiceDefaultsImpl$3(
206492
206492
  modeConfigurationDefault$2
206493
206493
  );
206494
206494
  function getMode$3() {
206495
- return __vitePreload(() => import("./cssMode-woG3Vtms.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
206495
+ return __vitePreload(() => import("./cssMode-CihsrbZY.js"), true ? __vite__mapDeps([0,1]) : void 0, import.meta.url);
206496
206496
  }
206497
206497
  languages.onLanguage("less", () => {
206498
206498
  getMode$3().then((mode2) => mode2.setupMode(lessDefaults));
@@ -206597,7 +206597,7 @@ const razorLanguageService = registerHTMLLanguageService(
206597
206597
  );
206598
206598
  const razorDefaults = razorLanguageService.defaults;
206599
206599
  function getMode$2() {
206600
- return __vitePreload(() => import("./htmlMode-DzdyF21q.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
206600
+ return __vitePreload(() => import("./htmlMode-DZnUcBOX.js"), true ? __vite__mapDeps([2,1]) : void 0, import.meta.url);
206601
206601
  }
206602
206602
  function registerHTMLLanguageService(languageId, options = optionsDefault, modeConfiguration = getConfigurationDefault(languageId)) {
206603
206603
  const defaults = new LanguageServiceDefaultsImpl$2(languageId, options, modeConfiguration);
@@ -206681,7 +206681,7 @@ const jsonDefaults = new LanguageServiceDefaultsImpl$1(
206681
206681
  );
206682
206682
  const getWorker$1 = () => getMode$1().then((mode2) => mode2.getWorker());
206683
206683
  function getMode$1() {
206684
- return __vitePreload(() => import("./jsonMode-CPhJ_ION.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
206684
+ return __vitePreload(() => import("./jsonMode-DX3yX_PF.js"), true ? __vite__mapDeps([3,1]) : void 0, import.meta.url);
206685
206685
  }
206686
206686
  languages.register({
206687
206687
  id: "json",
@@ -206927,7 +206927,7 @@ const getJavaScriptWorker = () => {
206927
206927
  return getMode().then((mode) => mode.getJavaScriptWorker());
206928
206928
  };
206929
206929
  function getMode() {
206930
- return __vitePreload(() => import("./tsMode-D7kqIJ_o.js"), true ? [] : void 0, import.meta.url);
206930
+ return __vitePreload(() => import("./tsMode-CKrhuOxD.js"), true ? [] : void 0, import.meta.url);
206931
206931
  }
206932
206932
  languages.onLanguage("typescript", () => {
206933
206933
  return getMode().then((mode) => mode.setupTypeScript(typescriptDefaults));
@@ -207122,49 +207122,49 @@ registerLanguage({
207122
207122
  extensions: [".ftl", ".ftlh", ".ftlx"],
207123
207123
  aliases: ["FreeMarker2", "Apache FreeMarker2"],
207124
207124
  loader: () => {
207125
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
207125
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
207126
207126
  }
207127
207127
  });
207128
207128
  registerLanguage({
207129
207129
  id: "freemarker2.tag-angle.interpolation-dollar",
207130
207130
  aliases: ["FreeMarker2 (Angle/Dollar)", "Apache FreeMarker2 (Angle/Dollar)"],
207131
207131
  loader: () => {
207132
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
207132
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationDollar);
207133
207133
  }
207134
207134
  });
207135
207135
  registerLanguage({
207136
207136
  id: "freemarker2.tag-bracket.interpolation-dollar",
207137
207137
  aliases: ["FreeMarker2 (Bracket/Dollar)", "Apache FreeMarker2 (Bracket/Dollar)"],
207138
207138
  loader: () => {
207139
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
207139
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationDollar);
207140
207140
  }
207141
207141
  });
207142
207142
  registerLanguage({
207143
207143
  id: "freemarker2.tag-angle.interpolation-bracket",
207144
207144
  aliases: ["FreeMarker2 (Angle/Bracket)", "Apache FreeMarker2 (Angle/Bracket)"],
207145
207145
  loader: () => {
207146
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
207146
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAngleInterpolationBracket);
207147
207147
  }
207148
207148
  });
207149
207149
  registerLanguage({
207150
207150
  id: "freemarker2.tag-bracket.interpolation-bracket",
207151
207151
  aliases: ["FreeMarker2 (Bracket/Bracket)", "Apache FreeMarker2 (Bracket/Bracket)"],
207152
207152
  loader: () => {
207153
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
207153
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagBracketInterpolationBracket);
207154
207154
  }
207155
207155
  });
207156
207156
  registerLanguage({
207157
207157
  id: "freemarker2.tag-auto.interpolation-dollar",
207158
207158
  aliases: ["FreeMarker2 (Auto/Dollar)", "Apache FreeMarker2 (Auto/Dollar)"],
207159
207159
  loader: () => {
207160
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
207160
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationDollar);
207161
207161
  }
207162
207162
  });
207163
207163
  registerLanguage({
207164
207164
  id: "freemarker2.tag-auto.interpolation-bracket",
207165
207165
  aliases: ["FreeMarker2 (Auto/Bracket)", "Apache FreeMarker2 (Auto/Bracket)"],
207166
207166
  loader: () => {
207167
- return __vitePreload(() => import("./freemarker2-DgtqmvCd.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
207167
+ return __vitePreload(() => import("./freemarker2-DFrJ_l05.js"), true ? [] : void 0, import.meta.url).then((m) => m.TagAutoInterpolationBracket);
207168
207168
  }
207169
207169
  });
207170
207170
  registerLanguage({
@@ -207185,7 +207185,7 @@ registerLanguage({
207185
207185
  extensions: [".handlebars", ".hbs"],
207186
207186
  aliases: ["Handlebars", "handlebars", "hbs"],
207187
207187
  mimetypes: ["text/x-handlebars-template"],
207188
- loader: () => __vitePreload(() => import("./handlebars-YEqC-zOn.js"), true ? [] : void 0, import.meta.url)
207188
+ loader: () => __vitePreload(() => import("./handlebars-BZi7_LdH.js"), true ? [] : void 0, import.meta.url)
207189
207189
  });
207190
207190
  registerLanguage({
207191
207191
  id: "hcl",
@@ -207198,7 +207198,7 @@ registerLanguage({
207198
207198
  extensions: [".html", ".htm", ".shtml", ".xhtml", ".mdoc", ".jsp", ".asp", ".aspx", ".jshtm"],
207199
207199
  aliases: ["HTML", "htm", "html", "xhtml"],
207200
207200
  mimetypes: ["text/html", "text/x-jshtm", "text/template", "text/ng-template"],
207201
- loader: () => __vitePreload(() => import("./html-CwvkGxeB.js"), true ? [] : void 0, import.meta.url)
207201
+ loader: () => __vitePreload(() => import("./html-CdaPU_YJ.js"), true ? [] : void 0, import.meta.url)
207202
207202
  });
207203
207203
  registerLanguage({
207204
207204
  id: "ini",
@@ -207221,7 +207221,7 @@ registerLanguage({
207221
207221
  filenames: ["jakefile"],
207222
207222
  aliases: ["JavaScript", "javascript", "js"],
207223
207223
  mimetypes: ["text/javascript"],
207224
- loader: () => __vitePreload(() => import("./javascript-Dy9cX9Fu.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
207224
+ loader: () => __vitePreload(() => import("./javascript-DvV4owMk.js"), true ? __vite__mapDeps([4,5]) : void 0, import.meta.url)
207225
207225
  });
207226
207226
  registerLanguage({
207227
207227
  id: "julia",
@@ -207260,7 +207260,7 @@ registerLanguage({
207260
207260
  extensions: [".liquid", ".html.liquid"],
207261
207261
  aliases: ["Liquid", "liquid"],
207262
207262
  mimetypes: ["application/liquid"],
207263
- loader: () => __vitePreload(() => import("./liquid-BJdFPWrv.js"), true ? [] : void 0, import.meta.url)
207263
+ loader: () => __vitePreload(() => import("./liquid-c7QWTywx.js"), true ? [] : void 0, import.meta.url)
207264
207264
  });
207265
207265
  registerLanguage({
207266
207266
  id: "m3",
@@ -207278,7 +207278,7 @@ registerLanguage({
207278
207278
  id: "mdx",
207279
207279
  extensions: [".mdx"],
207280
207280
  aliases: ["MDX", "mdx"],
207281
- loader: () => __vitePreload(() => import("./mdx-kg2kuPRK.js"), true ? [] : void 0, import.meta.url)
207281
+ loader: () => __vitePreload(() => import("./mdx-Bi7NE1tt.js"), true ? [] : void 0, import.meta.url)
207282
207282
  });
207283
207283
  registerLanguage({
207284
207284
  id: "mips",
@@ -207377,7 +207377,7 @@ registerLanguage({
207377
207377
  extensions: [".py", ".rpy", ".pyw", ".cpy", ".gyp", ".gypi"],
207378
207378
  aliases: ["Python", "py"],
207379
207379
  firstLine: "^#!/.*\\bpython[0-9.-]*\\b",
207380
- loader: () => __vitePreload(() => import("./python-aIrmxkmH.js"), true ? [] : void 0, import.meta.url)
207380
+ loader: () => __vitePreload(() => import("./python-BeMAHtzr.js"), true ? [] : void 0, import.meta.url)
207381
207381
  });
207382
207382
  registerLanguage({
207383
207383
  id: "qsharp",
@@ -207396,7 +207396,7 @@ registerLanguage({
207396
207396
  extensions: [".cshtml"],
207397
207397
  aliases: ["Razor", "razor"],
207398
207398
  mimetypes: ["text/x-cshtml"],
207399
- loader: () => __vitePreload(() => import("./razor-DdymcPOc.js"), true ? [] : void 0, import.meta.url)
207399
+ loader: () => __vitePreload(() => import("./razor-Cfc9e2QR.js"), true ? [] : void 0, import.meta.url)
207400
207400
  });
207401
207401
  registerLanguage({
207402
207402
  id: "redis",
@@ -207529,7 +207529,7 @@ registerLanguage({
207529
207529
  aliases: ["TypeScript", "ts", "typescript"],
207530
207530
  mimetypes: ["text/typescript"],
207531
207531
  loader: () => {
207532
- return __vitePreload(() => import("./typescript-Cq3g-z7h.js"), true ? [] : void 0, import.meta.url);
207532
+ return __vitePreload(() => import("./typescript-BEFZ19OD.js"), true ? [] : void 0, import.meta.url);
207533
207533
  }
207534
207534
  });
207535
207535
  registerLanguage({
@@ -207574,14 +207574,14 @@ registerLanguage({
207574
207574
  firstLine: "(\\<\\?xml.*)|(\\<svg)|(\\<\\!doctype\\s+svg)",
207575
207575
  aliases: ["XML", "xml"],
207576
207576
  mimetypes: ["text/xml", "application/xml", "application/xaml+xml", "application/xml-dtd"],
207577
- loader: () => __vitePreload(() => import("./xml-BuBP5jOc.js"), true ? [] : void 0, import.meta.url)
207577
+ loader: () => __vitePreload(() => import("./xml-CVdJPpsd.js"), true ? [] : void 0, import.meta.url)
207578
207578
  });
207579
207579
  registerLanguage({
207580
207580
  id: "yaml",
207581
207581
  extensions: [".yaml", ".yml"],
207582
207582
  aliases: ["YAML", "yaml", "YML", "yml"],
207583
207583
  mimetypes: ["application/x-yaml", "text/x-yaml"],
207584
- loader: () => __vitePreload(() => import("./yaml-B-3hWmol.js"), true ? [] : void 0, import.meta.url)
207584
+ loader: () => __vitePreload(() => import("./yaml-B_Px-4th.js"), true ? [] : void 0, import.meta.url)
207585
207585
  });
207586
207586
  var __defProp = Object.defineProperty;
207587
207587
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
@@ -211152,7 +211152,7 @@ const DragContext = reactExports.createContext({
211152
211152
  setDragPaneId: () => {
211153
211153
  }
211154
211154
  });
211155
- function PaneLayout({ layout: layout2, panes, onLayoutChange, onToggle }) {
211155
+ function PaneLayout({ layout: layout2, panes, onLayoutChange, onToggle, paneHostPrefix }) {
211156
211156
  const [dragPaneId, setDragPaneId] = reactExports.useState(null);
211157
211157
  const handleDrop = reactExports.useCallback((targetPaneId, zone) => {
211158
211158
  if (!dragPaneId || dragPaneId === targetPaneId) return;
@@ -211174,11 +211174,12 @@ function PaneLayout({ layout: layout2, panes, onLayoutChange, onToggle }) {
211174
211174
  onToggle,
211175
211175
  onLayoutChange,
211176
211176
  parentDirection: null,
211177
- path: []
211177
+ path: [],
211178
+ paneHostPrefix
211178
211179
  }
211179
211180
  ) }) });
211180
211181
  }
211181
- function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, parentDirection, path }) {
211182
+ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, parentDirection, path, paneHostPrefix }) {
211182
211183
  if (node.type === "leaf") {
211183
211184
  const pane = paneMap.get(node.paneId);
211184
211185
  if (!pane) return null;
@@ -211187,7 +211188,8 @@ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, paren
211187
211188
  {
211188
211189
  pane,
211189
211190
  onDrop,
211190
- onToggle
211191
+ onToggle,
211192
+ paneHostPrefix
211191
211193
  }
211192
211194
  );
211193
211195
  }
@@ -211199,11 +211201,12 @@ function LayoutRenderer({ node, paneMap, onDrop, onToggle, onLayoutChange, paren
211199
211201
  onDrop,
211200
211202
  onToggle,
211201
211203
  onLayoutChange,
211202
- path
211204
+ path,
211205
+ paneHostPrefix
211203
211206
  }
211204
211207
  );
211205
211208
  }
211206
- function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path }) {
211209
+ function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path, paneHostPrefix }) {
211207
211210
  const containerRef = reactExports.useRef(null);
211208
211211
  const draggingDivider = reactExports.useRef(null);
211209
211212
  const sizesRef = reactExports.useRef(node.sizes);
@@ -211288,7 +211291,8 @@ function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path
211288
211291
  onLayoutChange({ ...node, children: newChildren });
211289
211292
  },
211290
211293
  parentDirection: node.direction,
211291
- path: [...path, i2]
211294
+ path: [...path, i2],
211295
+ paneHostPrefix
211292
211296
  }
211293
211297
  )
211294
211298
  }
@@ -211310,10 +211314,34 @@ function SplitContainer({ node, paneMap, onDrop, onToggle, onLayoutChange, path
211310
211314
  }
211311
211315
  );
211312
211316
  }
211313
- function LeafPane({ pane, onDrop, onToggle }) {
211317
+ function LeafPane({ pane, onDrop, onToggle, paneHostPrefix }) {
211314
211318
  const { dragPaneId, setDragPaneId } = reactExports.useContext(DragContext);
211315
211319
  const [hoverZone, setHoverZone] = reactExports.useState(null);
211316
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]);
211317
211345
  const isDragging = dragPaneId === pane.id;
211318
211346
  const isDropTarget = dragPaneId !== null && dragPaneId !== pane.id;
211319
211347
  const computeZone = reactExports.useCallback((e) => {
@@ -211359,7 +211387,7 @@ function LeafPane({ pane, onDrop, onToggle }) {
211359
211387
  ]
211360
211388
  }
211361
211389
  ),
211362
- /* @__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 }),
211363
211391
  isDropTarget && /* @__PURE__ */ jsxRuntimeExports.jsxs(
211364
211392
  "div",
211365
211393
  {
@@ -211613,6 +211641,14 @@ const DEFAULT_LAYOUT = {
211613
211641
  sizes: [50, 50]
211614
211642
  };
211615
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
+ };
211616
211652
  function App() {
211617
211653
  const [agents, setAgents] = reactExports.useState([]);
211618
211654
  const [selectedAgent, setSelectedAgent] = reactExports.useState(null);
@@ -211745,15 +211781,14 @@ function App() {
211745
211781
  return () => window.removeEventListener("keydown", handleKeyDown);
211746
211782
  }, [togglePane]);
211747
211783
  const panes = [
211748
- { id: "editor", label: "Editor", content: /* @__PURE__ */ jsxRuntimeExports.jsx(EditorPanel, { cwd: cwd2 }) },
211749
- {
211750
- id: "terminal",
211751
- label: "Terminal",
211752
- content: /* @__PURE__ */ jsxRuntimeExports.jsx(TerminalPanel, { agent: selectedAgent, onSpawn: handleSpawn, onExit: handleExit })
211753
- },
211754
- { 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 }
211755
211787
  ];
211756
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, {}) }),
211757
211792
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "titlebar", children: [
211758
211793
  /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "titlebar-title", children: "ctlsurf-worker" }),
211759
211794
  /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "titlebar-controls", children: [
@@ -211782,25 +211817,16 @@ function App() {
211782
211817
  ))
211783
211818
  ] })
211784
211819
  ] }),
211785
- /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "main-content", children: [
211786
- visiblePaneIds.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "multi-split-empty", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "All panes hidden. Use the titlebar buttons to show a pane." }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
211787
- PaneLayout,
211788
- {
211789
- layout: layout2,
211790
- panes: panes.filter((p) => visiblePaneIds.includes(p.id)),
211791
- onLayoutChange: setLayout,
211792
- onToggle: togglePane
211793
- }
211794
- ),
211795
- panes.filter((p) => !visiblePaneIds.includes(p.id)).map((p) => /* @__PURE__ */ jsxRuntimeExports.jsx("div", { style: {
211796
- position: "absolute",
211797
- width: "1px",
211798
- height: "1px",
211799
- overflow: "hidden",
211800
- opacity: 0,
211801
- pointerEvents: "none"
211802
- }, children: p.content }, p.id))
211803
- ] }),
211820
+ /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "main-content", children: visiblePaneIds.length === 0 ? /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "multi-split-empty", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { children: "All panes hidden. Use the titlebar buttons to show a pane." }) }) : /* @__PURE__ */ jsxRuntimeExports.jsx(
211821
+ PaneLayout,
211822
+ {
211823
+ layout: layout2,
211824
+ panes: panes.filter((p) => visiblePaneIds.includes(p.id)),
211825
+ onLayoutChange: setLayout,
211826
+ onToggle: togglePane,
211827
+ paneHostPrefix: "pane-host-"
211828
+ }
211829
+ ) }),
211804
211830
  /* @__PURE__ */ jsxRuntimeExports.jsx(StatusBar, { wsStatus, cwd: cwd2, onChangeCwd: handleChangeCwd }),
211805
211831
  /* @__PURE__ */ jsxRuntimeExports.jsx(SettingsDialog, { open: showSettings, onClose: () => setShowSettings(false) }),
211806
211832
  showAgentPicker && agents.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
@@ -1,5 +1,5 @@
1
- import { conf as conf$1, language as language$1 } from "./typescript-Cq3g-z7h.js";
2
- import "./index-CpDga7fF.js";
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-CpDga7fF.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-BMM3SRX4.js";
3
- import { a, D, h, R, c, i, j, t, k } from "./lspLanguageFeatures-BMM3SRX4.js";
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) {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -1,4 +1,4 @@
1
- import { R as Range$1, l as languages, e as editor, U as Uri, M as MarkerSeverity } from "./index-CpDga7fF.js";
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 { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["{/*", "*/}"]
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  lineComment: "#",
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const EMPTY_ELEMENTS = [
3
3
  "area",
4
4
  "base",
@@ -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-CpDga7fF.js";
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;
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const conf = {
3
3
  wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,
4
4
  comments: {
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  blockComment: ["<!--", "-->"]
@@ -1,4 +1,4 @@
1
- import { l as languages } from "./index-CpDga7fF.js";
1
+ import { l as languages } from "./index-CKhIh5ZQ.js";
2
2
  const conf = {
3
3
  comments: {
4
4
  lineComment: "#"
@@ -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-CpDga7fF.js"></script>
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.15",
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": {
@@ -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
- // Build pane contents (always rendered, layout controls visibility)
229
+ // Pane definitions content is rendered via portals to preserve React tree position
221
230
  const panes: PaneContent[] = [
222
- { id: 'editor', label: 'Editor', content: <EditorPanel cwd={cwd} /> },
223
- {
224
- id: 'terminal',
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,20 +288,9 @@ 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
- {panes.filter(p => !visiblePaneIds.includes(p.id)).map(p => (
278
- <div key={p.id} style={{
279
- position: 'absolute',
280
- width: '1px',
281
- height: '1px',
282
- overflow: 'hidden',
283
- opacity: 0,
284
- pointerEvents: 'none',
285
- }}>
286
- {p.content}
287
- </div>
288
- ))}
289
294
  </div>
290
295
 
291
296
  <StatusBar wsStatus={wsStatus} cwd={cwd} onChangeCwd={handleChangeCwd} />
@@ -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) */}