@industry-theme/xterm-terminal-panel 0.5.29 → 0.5.30

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/dist/index.js CHANGED
@@ -35,7 +35,7 @@ import {
35
35
  // package.json
36
36
  var package_default = {
37
37
  name: "@industry-theme/xterm-terminal-panel",
38
- version: "0.5.29",
38
+ version: "0.5.30",
39
39
  description: "Industry-themed xterm.js terminal components with panel framework integration",
40
40
  type: "module",
41
41
  main: "dist/index.js",
@@ -2646,34 +2646,51 @@ var TabbedTerminalPanelInner = ({
2646
2646
  sessions = await actions.listTerminalSessions();
2647
2647
  }
2648
2648
  const ownedSessions = sessions.filter((session) => session.context?.startsWith(terminalContext));
2649
- if (ownedSessions.length > 0 && initialTabs.length === 0) {
2650
- const restoredTabs = [];
2651
- const restoredSessionIds = new Map;
2652
- ownedSessions.forEach((session) => {
2653
- const tabId = `tab-restored-${session.id}`;
2654
- const sessionCwd = session.cwd || directory;
2655
- const tab = {
2656
- id: tabId,
2657
- label: sessionCwd.split("/").pop() || sessionCwd,
2658
- contentType: "terminal",
2659
- directory: sessionCwd,
2660
- closable: true
2661
- };
2662
- restoredTabs.push(tab);
2663
- restoredSessionIds.set(tabId, session.id);
2649
+ if (ownedSessions.length === 0)
2650
+ return;
2651
+ const knownSessionIds = new Set(sessionIds.values());
2652
+ const newSessions = ownedSessions.filter((s) => !knownSessionIds.has(s.id));
2653
+ if (newSessions.length === 0)
2654
+ return;
2655
+ const newRestoredTabs = newSessions.map((session) => {
2656
+ const sessionCwd = session.cwd || directory;
2657
+ return {
2658
+ id: `tab-restored-${session.id}`,
2659
+ label: sessionCwd.split("/").pop() || sessionCwd,
2660
+ contentType: "terminal",
2661
+ directory: sessionCwd,
2662
+ closable: true
2663
+ };
2664
+ });
2665
+ setSessionIds((prev) => {
2666
+ const next = new Map(prev);
2667
+ newSessions.forEach((s, i) => {
2668
+ next.set(newRestoredTabs[i].id, s.id);
2664
2669
  });
2665
- setOwnedTabs(restoredTabs);
2666
- setSessionIds(restoredSessionIds);
2667
- setActiveTabId(restoredTabs[0]?.id || null);
2668
- onTabsChange?.(restoredTabs);
2669
- } else if (initialTabs.length > 0) {
2670
- setOwnedTabs(initialTabs);
2671
- setActiveTabId(initialTabs[0]?.id || null);
2670
+ return next;
2671
+ });
2672
+ let appendedTabs = [];
2673
+ setOwnedTabs((prevTabs) => {
2674
+ const existingIds = new Set(prevTabs.map((t) => t.id));
2675
+ const tabsToAdd = newRestoredTabs.filter((t) => !existingIds.has(t.id));
2676
+ if (tabsToAdd.length === 0)
2677
+ return prevTabs;
2678
+ const terminalTabs = prevTabs.filter((t) => t.contentType === "terminal");
2679
+ const customTabs = prevTabs.filter((t) => t.contentType !== "terminal");
2680
+ const merged = [...terminalTabs, ...tabsToAdd, ...customTabs];
2681
+ appendedTabs = merged;
2682
+ return merged;
2683
+ });
2684
+ if (appendedTabs.length > 0) {
2685
+ onTabsChange?.(appendedTabs);
2686
+ }
2687
+ if (!activeTabId && newRestoredTabs[0]) {
2688
+ setActiveTabId(newRestoredTabs[0].id);
2672
2689
  }
2673
2690
  } catch (err) {
2674
2691
  console.error("[TabbedTerminalPanel] Failed to restore owned sessions:", err);
2675
2692
  }
2676
- }, [terminalContext, initialTabs, onTabsChange, actions, directory]);
2693
+ }, [terminalContext, sessionIds, activeTabId, onTabsChange, actions, directory, setActiveTabId]);
2677
2694
  const fetchForeignSessions = useCallback5(async () => {
2678
2695
  try {
2679
2696
  if (!actions.listTerminalSessions) {
@@ -1 +1 @@
1
- {"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAKN,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EAMZ,MAAM,gBAAgB,CAAC;AAkExB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AA2mDD,eAAO,MAAM,mBAAmB,EAAkC,CAAC,IAAI,SAAS,OAAO,cAAc,EAAE,OAAO,GAAG,WAAW,EAC1H,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAClC,KAAK,CAAC,YAAY,CAAC"}
1
+ {"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAKN,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EAMZ,MAAM,gBAAgB,CAAC;AAkExB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AA4oDD,eAAO,MAAM,mBAAmB,EAAkC,CAAC,IAAI,SAAS,OAAO,cAAc,EAAE,OAAO,GAAG,WAAW,EAC1H,KAAK,EAAE,wBAAwB,CAAC,IAAI,CAAC,KAClC,KAAK,CAAC,YAAY,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@industry-theme/xterm-terminal-panel",
3
- "version": "0.5.29",
3
+ "version": "0.5.30",
4
4
  "description": "Industry-themed xterm.js terminal components with panel framework integration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",