@industry-theme/xterm-terminal-panel 0.5.2 → 0.5.4
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
|
@@ -32,7 +32,7 @@ import {
|
|
|
32
32
|
context,
|
|
33
33
|
SpanStatusCode
|
|
34
34
|
} from "@opentelemetry/api";
|
|
35
|
-
var PACKAGE_VERSION = "0.5.
|
|
35
|
+
var PACKAGE_VERSION = "0.5.4";
|
|
36
36
|
var TRACER_NAME = "@industry-theme/xterm-terminal-panel";
|
|
37
37
|
var TRACER_VERSION = PACKAGE_VERSION;
|
|
38
38
|
function getTracer() {
|
|
@@ -1782,16 +1782,40 @@ var TerminalPanel = ({
|
|
|
1782
1782
|
};
|
|
1783
1783
|
// src/panels/TabbedTerminalPanel.tsx
|
|
1784
1784
|
import { useTheme as useTheme6 } from "@principal-ade/industry-theme";
|
|
1785
|
-
import { Terminal as TerminalIcon2, Lock as Lock2, Unlock as Unlock2, Box, Boxes
|
|
1785
|
+
import { Terminal as TerminalIcon2, Lock as Lock2, Unlock as Unlock2, Box, Boxes } from "lucide-react";
|
|
1786
1786
|
import React2, {
|
|
1787
1787
|
useState as useState4,
|
|
1788
1788
|
useCallback as useCallback3,
|
|
1789
1789
|
useEffect as useEffect4,
|
|
1790
1790
|
useRef as useRef3
|
|
1791
1791
|
} from "react";
|
|
1792
|
-
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
1792
|
+
import { jsx as jsx7, jsxs as jsxs6, Fragment as Fragment2 } from "react/jsx-runtime";
|
|
1793
|
+
var ActivityIndicator = ({ color, isAnimating }) => /* @__PURE__ */ jsxs6("div", {
|
|
1794
|
+
style: { display: "flex", gap: 1, alignItems: "center", height: 12 },
|
|
1795
|
+
children: [
|
|
1796
|
+
[0, 1, 2, 3, 4].map((i) => /* @__PURE__ */ jsx7("div", {
|
|
1797
|
+
style: {
|
|
1798
|
+
width: 2,
|
|
1799
|
+
height: 10,
|
|
1800
|
+
backgroundColor: color,
|
|
1801
|
+
borderRadius: 1,
|
|
1802
|
+
transformOrigin: "center",
|
|
1803
|
+
transform: isAnimating ? undefined : "scaleY(0.4)",
|
|
1804
|
+
animation: isAnimating ? `waveSine 1.2s ease-in-out ${i * 0.1}s infinite` : "none"
|
|
1805
|
+
}
|
|
1806
|
+
}, i)),
|
|
1807
|
+
/* @__PURE__ */ jsx7("style", {
|
|
1808
|
+
children: `
|
|
1809
|
+
@keyframes waveSine {
|
|
1810
|
+
0%, 100% { transform: scaleY(0.4); }
|
|
1811
|
+
50% { transform: scaleY(1); }
|
|
1812
|
+
}
|
|
1813
|
+
`
|
|
1814
|
+
})
|
|
1815
|
+
]
|
|
1816
|
+
});
|
|
1793
1817
|
function TerminalTabContentInner(props, ref) {
|
|
1794
|
-
const { tab, sessionId, isActive, isVisible, actions, events, terminalContext, onSessionCreated, onScrollPositionChange, isForeign = false, defaultScrollLocked, activityDetection = true, activityTimeout = 500, autoShowBlinds = false } = props;
|
|
1818
|
+
const { tab, sessionId, isActive, isVisible, actions, events, terminalContext, onSessionCreated, onScrollPositionChange, isForeign = false, defaultScrollLocked, activityDetection = true, activityTimeout = 500, autoShowBlinds = false, onActivityStateChange } = props;
|
|
1795
1819
|
console.log("[TerminalTabContent] RENDER", { tabId: tab.id, isActive, sessionId });
|
|
1796
1820
|
const terminalRef = useRef3(null);
|
|
1797
1821
|
const [localSessionId, setLocalSessionId] = useState4(sessionId);
|
|
@@ -1988,6 +2012,7 @@ function TerminalTabContentInner(props, ref) {
|
|
|
1988
2012
|
}, [localSessionId, events]);
|
|
1989
2013
|
const handleActivityChange = useCallback3((state) => {
|
|
1990
2014
|
if (localSessionId) {
|
|
2015
|
+
onActivityStateChange?.(localSessionId, state.isActive);
|
|
1991
2016
|
events.emit({
|
|
1992
2017
|
type: "terminal:activity-changed",
|
|
1993
2018
|
source: "TabbedTerminalPanel",
|
|
@@ -1999,7 +2024,7 @@ function TerminalTabContentInner(props, ref) {
|
|
|
1999
2024
|
}
|
|
2000
2025
|
});
|
|
2001
2026
|
}
|
|
2002
|
-
}, [localSessionId, events]);
|
|
2027
|
+
}, [localSessionId, events, onActivityStateChange]);
|
|
2003
2028
|
const handleScrollToBottom = useCallback3(() => {
|
|
2004
2029
|
terminalRef.current?.scrollToBottom();
|
|
2005
2030
|
}, []);
|
|
@@ -2146,6 +2171,7 @@ var TabbedTerminalPanelInner = ({
|
|
|
2146
2171
|
}, [isControlled, onActiveTabChange]);
|
|
2147
2172
|
const [sessionIds, setSessionIds] = useState4(new Map);
|
|
2148
2173
|
const [scrollPositions, setScrollPositions] = useState4(new Map);
|
|
2174
|
+
const [activityStates, setActivityStates] = useState4(new Map);
|
|
2149
2175
|
const customTabsKey = React2.useMemo(() => {
|
|
2150
2176
|
const customTabs = initialTabs.filter((tab) => tab.contentType !== "terminal");
|
|
2151
2177
|
return JSON.stringify(customTabs);
|
|
@@ -2449,6 +2475,17 @@ var TabbedTerminalPanelInner = ({
|
|
|
2449
2475
|
const handleSessionCreated = useCallback3((tabId, sessionId) => {
|
|
2450
2476
|
setSessionIds((prev) => new Map(prev).set(tabId, sessionId));
|
|
2451
2477
|
}, []);
|
|
2478
|
+
const handleActivityStateChange = useCallback3((sessionId, isActive) => {
|
|
2479
|
+
setActivityStates((prev) => {
|
|
2480
|
+
const next = new Map(prev);
|
|
2481
|
+
if (isActive) {
|
|
2482
|
+
next.set(sessionId, true);
|
|
2483
|
+
} else {
|
|
2484
|
+
next.delete(sessionId);
|
|
2485
|
+
}
|
|
2486
|
+
return next;
|
|
2487
|
+
});
|
|
2488
|
+
}, []);
|
|
2452
2489
|
useTabKeyboardShortcuts({
|
|
2453
2490
|
onNewTab: () => {
|
|
2454
2491
|
if (isCreatingTabRef.current)
|
|
@@ -2471,32 +2508,16 @@ var TabbedTerminalPanelInner = ({
|
|
|
2471
2508
|
});
|
|
2472
2509
|
const renderTabAccessory = useCallback3((tab) => {
|
|
2473
2510
|
const tabSessionId = sessionIds.get(tab.id);
|
|
2474
|
-
const
|
|
2511
|
+
const hasExternalWorkingState = tabSessionId ? workingStates?.[tabSessionId]?.isWorking : false;
|
|
2512
|
+
const hasInternalActivity = tabSessionId ? activityStates.get(tabSessionId) : false;
|
|
2513
|
+
const isWorking = hasExternalWorkingState || hasInternalActivity;
|
|
2475
2514
|
const isActive = tab.id === activeTabId;
|
|
2476
|
-
if (!isActive
|
|
2515
|
+
if (!isActive)
|
|
2477
2516
|
return null;
|
|
2478
2517
|
const scrollPosition = scrollPositions.get(tab.id) ?? defaultScrollPosition;
|
|
2479
|
-
return /* @__PURE__ */ jsxs6(
|
|
2480
|
-
style: { display: "flex", alignItems: "center", gap: "4px" },
|
|
2518
|
+
return /* @__PURE__ */ jsxs6(Fragment2, {
|
|
2481
2519
|
children: [
|
|
2482
|
-
|
|
2483
|
-
style: {
|
|
2484
|
-
display: "flex",
|
|
2485
|
-
alignItems: "center",
|
|
2486
|
-
justifyContent: "center",
|
|
2487
|
-
width: "16px",
|
|
2488
|
-
height: "16px",
|
|
2489
|
-
color: theme.colors.primary
|
|
2490
|
-
},
|
|
2491
|
-
title: "Agent working",
|
|
2492
|
-
children: /* @__PURE__ */ jsx7(Loader2, {
|
|
2493
|
-
size: 12,
|
|
2494
|
-
style: {
|
|
2495
|
-
animation: "spin 1s linear infinite"
|
|
2496
|
-
}
|
|
2497
|
-
})
|
|
2498
|
-
}),
|
|
2499
|
-
isActive && /* @__PURE__ */ jsx7("button", {
|
|
2520
|
+
/* @__PURE__ */ jsx7("button", {
|
|
2500
2521
|
onClick: (e) => {
|
|
2501
2522
|
e.stopPropagation();
|
|
2502
2523
|
handleToggleScrollLock();
|
|
@@ -2526,10 +2547,26 @@ var TabbedTerminalPanelInner = ({
|
|
|
2526
2547
|
}) : /* @__PURE__ */ jsx7(Unlock2, {
|
|
2527
2548
|
size: 10
|
|
2528
2549
|
})
|
|
2550
|
+
}),
|
|
2551
|
+
/* @__PURE__ */ jsx7("div", {
|
|
2552
|
+
style: {
|
|
2553
|
+
position: "absolute",
|
|
2554
|
+
right: "8px",
|
|
2555
|
+
display: "flex",
|
|
2556
|
+
alignItems: "center",
|
|
2557
|
+
justifyContent: "center",
|
|
2558
|
+
width: "16px",
|
|
2559
|
+
height: "16px"
|
|
2560
|
+
},
|
|
2561
|
+
title: isWorking ? "Terminal active" : "Terminal idle",
|
|
2562
|
+
children: /* @__PURE__ */ jsx7(ActivityIndicator, {
|
|
2563
|
+
color: theme.colors.primary,
|
|
2564
|
+
isAnimating: isWorking ?? false
|
|
2565
|
+
})
|
|
2529
2566
|
})
|
|
2530
2567
|
]
|
|
2531
2568
|
});
|
|
2532
|
-
}, [activeTabId, scrollPositions, defaultScrollPosition, handleToggleScrollLock, theme, sessionIds, workingStates]);
|
|
2569
|
+
}, [activeTabId, scrollPositions, defaultScrollPosition, handleToggleScrollLock, theme, sessionIds, workingStates, activityStates]);
|
|
2533
2570
|
return /* @__PURE__ */ jsxs6("div", {
|
|
2534
2571
|
style: {
|
|
2535
2572
|
display: "flex",
|
|
@@ -2614,7 +2651,8 @@ var TabbedTerminalPanelInner = ({
|
|
|
2614
2651
|
defaultScrollLocked,
|
|
2615
2652
|
activityDetection,
|
|
2616
2653
|
activityTimeout,
|
|
2617
|
-
autoShowBlinds
|
|
2654
|
+
autoShowBlinds,
|
|
2655
|
+
onActivityStateChange: handleActivityStateChange
|
|
2618
2656
|
}, tab.id);
|
|
2619
2657
|
}
|
|
2620
2658
|
return /* @__PURE__ */ jsx7("div", {
|
|
@@ -2643,7 +2681,8 @@ var TabbedTerminalPanelInner = ({
|
|
|
2643
2681
|
defaultScrollLocked,
|
|
2644
2682
|
activityDetection,
|
|
2645
2683
|
activityTimeout,
|
|
2646
|
-
autoShowBlinds
|
|
2684
|
+
autoShowBlinds,
|
|
2685
|
+
onActivityStateChange: handleActivityStateChange
|
|
2647
2686
|
}, tab.id);
|
|
2648
2687
|
}
|
|
2649
2688
|
return /* @__PURE__ */ jsxs6("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemedTerminal.d.ts","sourceRoot":"","sources":["../../../src/components/ThemedTerminal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAkC3D,OAAO,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"ThemedTerminal.d.ts","sourceRoot":"","sources":["../../../src/components/ThemedTerminal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAkC3D,OAAO,4BAA4B,CAAC;AAGpC,OAAO,KAAK,EAGV,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,8BAA8B,CAAC;AAEtC,MAAM,WAAW,4BAA6B,SAAQ,mBAAmB;IACvE,KAAK,EAAE,KAAK,CAAC;CACd;AAsBD,eAAO,MAAM,cAAc,4HAunC1B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAKN,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"TabbedTerminalPanel.d.ts","sourceRoot":"","sources":["../../../src/panels/TabbedTerminalPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAKN,MAAM,OAAO,CAAC;AAKf,OAAO,KAAK,EACV,wBAAwB,EACxB,WAAW,EAKZ,MAAM,gBAAgB,CAAC;AAkExB,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAqzCD,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/dist/src/telemetry.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { trace, context, SpanStatusCode, type Tracer, type Span } from '@opentelemetry/api';
|
|
2
2
|
export declare const TRACER_NAME = "@industry-theme/xterm-terminal-panel";
|
|
3
|
-
export declare const TRACER_VERSION = "0.5.
|
|
3
|
+
export declare const TRACER_VERSION = "0.5.4";
|
|
4
4
|
export declare function getTracer(): Tracer;
|
|
5
5
|
export declare function getActiveSpan(): Span | undefined;
|
|
6
6
|
export declare function withSpan<T>(span: Span, fn: () => Promise<T>): Promise<T>;
|
package/package.json
CHANGED