@mp-lb/termkit 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -4
- package/dist/Terminal.d.ts +4 -2
- package/dist/Terminal.d.ts.map +1 -1
- package/dist/Terminal.js +31 -20
- package/dist/Terminal.js.map +1 -1
- package/dist/createTerminalWriteQueue.d.ts +10 -0
- package/dist/createTerminalWriteQueue.d.ts.map +1 -0
- package/dist/createTerminalWriteQueue.js +32 -0
- package/dist/createTerminalWriteQueue.js.map +1 -0
- package/dist/fitTerminal.d.ts +9 -0
- package/dist/fitTerminal.d.ts.map +1 -0
- package/dist/fitTerminal.js +10 -0
- package/dist/fitTerminal.js.map +1 -0
- package/dist/hooks.d.ts +4 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +22 -0
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/store.d.ts +1 -2
- package/dist/store.d.ts.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -62,7 +62,8 @@ import { Terminal } from "@mp-lb/termkit"
|
|
|
62
62
|
Props: `session` (required, stable id), `params`, `autoFocus`, `dismissOnView`
|
|
63
63
|
(default `true` — clear this session's bell when you view it), `pendingCommand`
|
|
64
64
|
(auto-typed once after the prompt settles), `onExitFocus` (called on
|
|
65
|
-
Ctrl+Shift+Enter, after termkit blurs the terminal), `
|
|
65
|
+
Ctrl+Shift+Enter, after termkit blurs the terminal), `background`, `className`,
|
|
66
|
+
`style`.
|
|
66
67
|
|
|
67
68
|
## Bells & session hooks
|
|
68
69
|
|
|
@@ -80,9 +81,23 @@ via `dismissBell(id)` / `dismissAllBells()`.
|
|
|
80
81
|
|
|
81
82
|
## Theming
|
|
82
83
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
`<Terminal>` renders xterm on a transparent surface inside a full-size wrapper.
|
|
85
|
+
Set the wrapper background with Tailwind/classes, an explicit colour, a CSS
|
|
86
|
+
variable, or a provider default:
|
|
87
|
+
|
|
88
|
+
```tsx
|
|
89
|
+
<Terminal session="global" className="bg-zinc-950" />
|
|
90
|
+
<Terminal session="global" background="var(--background)" />
|
|
91
|
+
<Terminal session="global" style={{ backgroundColor: theme.terminal }} />
|
|
92
|
+
|
|
93
|
+
const config = {
|
|
94
|
+
...baseConfig,
|
|
95
|
+
terminalOptions: { background: "var(--termkit-bg)" },
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Because the terminal itself is transparent, any leftover space that cannot fit a
|
|
100
|
+
full row or column uses the same background as the terminal.
|
|
86
101
|
|
|
87
102
|
## Migrating dash onto termkit
|
|
88
103
|
|
package/dist/Terminal.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type CSSProperties } from "react";
|
|
1
2
|
import "@xterm/xterm/css/xterm.css";
|
|
2
3
|
export interface TerminalProps {
|
|
3
4
|
session: string;
|
|
@@ -6,8 +7,9 @@ export interface TerminalProps {
|
|
|
6
7
|
dismissOnView?: boolean;
|
|
7
8
|
pendingCommand?: string;
|
|
8
9
|
onExitFocus?: () => void;
|
|
10
|
+
background?: string;
|
|
9
11
|
className?: string;
|
|
10
|
-
style?:
|
|
12
|
+
style?: CSSProperties;
|
|
11
13
|
}
|
|
12
|
-
export declare function Terminal({ session, params, autoFocus, dismissOnView, pendingCommand, onExitFocus, className, style, }: TerminalProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export declare function Terminal({ session, params, autoFocus, dismissOnView, pendingCommand, onExitFocus, background, className, style, }: TerminalProps): import("react/jsx-runtime").JSX.Element;
|
|
13
15
|
//# sourceMappingURL=Terminal.d.ts.map
|
package/dist/Terminal.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Terminal.d.ts","sourceRoot":"","sources":["../src/Terminal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Terminal.d.ts","sourceRoot":"","sources":["../src/Terminal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,OAAO,CAAA;AAG7D,OAAO,4BAA4B,CAAA;AAWnC,MAAM,WAAW,aAAa;IAK5B,OAAO,EAAE,MAAM,CAAA;IAIf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE/B,SAAS,CAAC,EAAE,OAAO,CAAA;IAKnB,aAAa,CAAC,EAAE,OAAO,CAAA;IAGvB,cAAc,CAAC,EAAE,MAAM,CAAA;IAIvB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IAIxB,UAAU,CAAC,EAAE,MAAM,CAAA;IAGnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,aAAa,CAAA;CACtB;AAED,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,MAAM,EACN,SAAiB,EACjB,aAAoB,EACpB,cAAc,EACd,WAAW,EACX,UAAU,EACV,SAAS,EACT,KAAK,GACN,EAAE,aAAa,2CAkRf"}
|
package/dist/Terminal.js
CHANGED
|
@@ -5,17 +5,17 @@ import { FitAddon } from "@xterm/addon-fit";
|
|
|
5
5
|
import "@xterm/xterm/css/xterm.css";
|
|
6
6
|
import { CLOSE_SESSION_GONE, HEARTBEAT_INTERVAL_MS, HEARTBEAT_PONG_GRACE_MS, } from "@mp-lb/termkit-core";
|
|
7
7
|
import { useTermkitContext } from "./context.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const root = getComputedStyle(document.documentElement);
|
|
12
|
-
return (root.getPropertyValue("--termkit-bg").trim() ||
|
|
13
|
-
root.getPropertyValue("--background").trim() ||
|
|
14
|
-
"#0a0a0a");
|
|
15
|
-
}
|
|
16
|
-
export function Terminal({ session, params, autoFocus = false, dismissOnView = true, pendingCommand, onExitFocus, className, style, }) {
|
|
8
|
+
import { createTerminalWriteQueue } from "./createTerminalWriteQueue.js";
|
|
9
|
+
import { fitTerminal } from "./fitTerminal.js";
|
|
10
|
+
export function Terminal({ session, params, autoFocus = false, dismissOnView = true, pendingCommand, onExitFocus, background, className, style, }) {
|
|
17
11
|
const { store, config } = useTermkitContext();
|
|
18
12
|
const containerRef = useRef(null);
|
|
13
|
+
const containerStyle = {
|
|
14
|
+
width: "100%",
|
|
15
|
+
height: "100%",
|
|
16
|
+
backgroundColor: background ?? config.terminalOptions?.background,
|
|
17
|
+
...style,
|
|
18
|
+
};
|
|
19
19
|
useEffect(() => {
|
|
20
20
|
const sessionId = session;
|
|
21
21
|
const { attach, detach, focus, blur, setStatus, setPendingCommand, consumePendingCommand } = store.getState();
|
|
@@ -36,12 +36,14 @@ export function Terminal({ session, params, autoFocus = false, dismissOnView = t
|
|
|
36
36
|
fontFamily: opts.fontFamily ?? '"IBM Plex Mono", monospace',
|
|
37
37
|
fontSize: opts.fontSize ?? 13,
|
|
38
38
|
cursorBlink: opts.cursorBlink ?? true,
|
|
39
|
-
theme: { background:
|
|
39
|
+
theme: { background: "transparent" },
|
|
40
40
|
});
|
|
41
41
|
const fitAddon = new FitAddon();
|
|
42
42
|
term.loadAddon(fitAddon);
|
|
43
43
|
term.open(container);
|
|
44
|
-
fitAddon
|
|
44
|
+
let lastFitSize = fitTerminal(container, term, fitAddon, null);
|
|
45
|
+
let lastSentSize = null;
|
|
46
|
+
const terminalWriteQueue = createTerminalWriteQueue(term);
|
|
45
47
|
// If a bell lands while you're actively looking at this session — its terminal
|
|
46
48
|
// is visible and the window has focus — it's already "seen", so clear it now
|
|
47
49
|
// instead of making you switch away and back. Bells that arrive while you're
|
|
@@ -190,7 +192,16 @@ export function Terminal({ session, params, autoFocus = false, dismissOnView = t
|
|
|
190
192
|
clearTimeout(quietTimer);
|
|
191
193
|
quietTimer = setTimeout(flushPendingCmd, QUIET_MS);
|
|
192
194
|
};
|
|
193
|
-
const
|
|
195
|
+
const fitAndSendResize = () => {
|
|
196
|
+
const nextSize = fitTerminal(container, term, fitAddon, lastFitSize);
|
|
197
|
+
if (nextSize === null)
|
|
198
|
+
return;
|
|
199
|
+
lastFitSize = nextSize;
|
|
200
|
+
if (lastSentSize?.cols === nextSize.cols && lastSentSize.rows === nextSize.rows)
|
|
201
|
+
return;
|
|
202
|
+
lastSentSize = nextSize;
|
|
203
|
+
send({ type: "resize", cols: nextSize.cols, rows: nextSize.rows });
|
|
204
|
+
};
|
|
194
205
|
const connect = () => {
|
|
195
206
|
if (disposed)
|
|
196
207
|
return;
|
|
@@ -204,11 +215,13 @@ export function Terminal({ session, params, autoFocus = false, dismissOnView = t
|
|
|
204
215
|
// so it repaints cleanly rather than stacking on stale content. (First
|
|
205
216
|
// attach: the terminal is already empty, so nothing to clear.)
|
|
206
217
|
const firstAttach = !attachedBefore;
|
|
207
|
-
if (attachedBefore)
|
|
218
|
+
if (attachedBefore) {
|
|
219
|
+
terminalWriteQueue.clear();
|
|
208
220
|
term.reset();
|
|
221
|
+
}
|
|
209
222
|
attachedBefore = true;
|
|
210
223
|
setStatus(sessionId, "ready");
|
|
211
|
-
|
|
224
|
+
fitAndSendResize();
|
|
212
225
|
// Run the queued command once, on the very first attach. Wait for the prompt
|
|
213
226
|
// to finish painting (see noteOutput/flushPendingCmd) so it lands on the real
|
|
214
227
|
// prompt instead of racing shell startup. The cap timer is a backstop.
|
|
@@ -235,7 +248,7 @@ export function Terminal({ session, params, autoFocus = false, dismissOnView = t
|
|
|
235
248
|
}
|
|
236
249
|
return;
|
|
237
250
|
}
|
|
238
|
-
|
|
251
|
+
terminalWriteQueue.write(e.data);
|
|
239
252
|
noteOutput();
|
|
240
253
|
};
|
|
241
254
|
ws.onclose = (e) => {
|
|
@@ -258,10 +271,7 @@ export function Terminal({ session, params, autoFocus = false, dismissOnView = t
|
|
|
258
271
|
};
|
|
259
272
|
connect();
|
|
260
273
|
term.onData((data) => send({ type: "input", data }));
|
|
261
|
-
const observer = new ResizeObserver(
|
|
262
|
-
fitAddon.fit();
|
|
263
|
-
sendResize();
|
|
264
|
-
});
|
|
274
|
+
const observer = new ResizeObserver(fitAndSendResize);
|
|
265
275
|
observer.observe(container);
|
|
266
276
|
return () => {
|
|
267
277
|
disposed = true;
|
|
@@ -281,9 +291,10 @@ export function Terminal({ session, params, autoFocus = false, dismissOnView = t
|
|
|
281
291
|
container.removeEventListener("keydown", onExitChord, true);
|
|
282
292
|
term.textarea?.removeEventListener("focus", onFocus);
|
|
283
293
|
term.textarea?.removeEventListener("blur", onBlur);
|
|
294
|
+
terminalWriteQueue.dispose();
|
|
284
295
|
term.dispose();
|
|
285
296
|
};
|
|
286
297
|
}, [session]); // eslint-disable-line react-hooks/exhaustive-deps
|
|
287
|
-
return
|
|
298
|
+
return _jsx("div", { ref: containerRef, className: className, style: containerStyle });
|
|
288
299
|
}
|
|
289
300
|
//# sourceMappingURL=Terminal.js.map
|
package/dist/Terminal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../src/Terminal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../src/Terminal.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface WritableTerminal {
|
|
2
|
+
write: (data: string, callback?: () => void) => void;
|
|
3
|
+
}
|
|
4
|
+
export declare const createTerminalWriteQueue: (term: WritableTerminal) => {
|
|
5
|
+
write(data: string): void;
|
|
6
|
+
clear(): void;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
};
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=createTerminalWriteQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTerminalWriteQueue.d.ts","sourceRoot":"","sources":["../src/createTerminalWriteQueue.ts"],"names":[],"mappings":"AAAA,UAAU,gBAAgB;IACxB,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,IAAI,KAAK,IAAI,CAAA;CACrD;AAED,eAAO,MAAM,wBAAwB,GAAI,MAAM,gBAAgB;gBAkB/C,MAAM;;;CAarB,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export const createTerminalWriteQueue = (term) => {
|
|
2
|
+
let chunks = [];
|
|
3
|
+
let isWriting = false;
|
|
4
|
+
let isDisposed = false;
|
|
5
|
+
const drain = () => {
|
|
6
|
+
if (isDisposed || isWriting || chunks.length === 0)
|
|
7
|
+
return;
|
|
8
|
+
const data = chunks.join("");
|
|
9
|
+
chunks = [];
|
|
10
|
+
isWriting = true;
|
|
11
|
+
term.write(data, () => {
|
|
12
|
+
isWriting = false;
|
|
13
|
+
drain();
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
write(data) {
|
|
18
|
+
if (isDisposed)
|
|
19
|
+
return;
|
|
20
|
+
chunks.push(data);
|
|
21
|
+
drain();
|
|
22
|
+
},
|
|
23
|
+
clear() {
|
|
24
|
+
chunks = [];
|
|
25
|
+
},
|
|
26
|
+
dispose() {
|
|
27
|
+
isDisposed = true;
|
|
28
|
+
chunks = [];
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=createTerminalWriteQueue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createTerminalWriteQueue.js","sourceRoot":"","sources":["../src/createTerminalWriteQueue.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAsB,EAAE,EAAE;IACjE,IAAI,MAAM,GAAa,EAAE,CAAA;IACzB,IAAI,SAAS,GAAG,KAAK,CAAA;IACrB,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,UAAU,IAAI,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;QAE1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC5B,MAAM,GAAG,EAAE,CAAA;QACX,SAAS,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE;YACpB,SAAS,GAAG,KAAK,CAAA;YACjB,KAAK,EAAE,CAAA;QACT,CAAC,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,OAAO;QACL,KAAK,CAAC,IAAY;YAChB,IAAI,UAAU;gBAAE,OAAM;YACtB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACjB,KAAK,EAAE,CAAA;QACT,CAAC;QACD,KAAK;YACH,MAAM,GAAG,EAAE,CAAA;QACb,CAAC;QACD,OAAO;YACL,UAAU,GAAG,IAAI,CAAA;YACjB,MAAM,GAAG,EAAE,CAAA;QACb,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { FitAddon } from "@xterm/addon-fit";
|
|
2
|
+
import type { Terminal as XTerm } from "@xterm/xterm";
|
|
3
|
+
interface TerminalSize {
|
|
4
|
+
cols: number;
|
|
5
|
+
rows: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const fitTerminal: (container: HTMLElement, term: XTerm, fitAddon: FitAddon, lastSize: TerminalSize | null) => TerminalSize | null;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=fitTerminal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fitTerminal.d.ts","sourceRoot":"","sources":["../src/fitTerminal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,QAAQ,IAAI,KAAK,EAAE,MAAM,cAAc,CAAA;AAErD,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,eAAO,MAAM,WAAW,GACtB,WAAW,WAAW,EACtB,MAAM,KAAK,EACX,UAAU,QAAQ,EAClB,UAAU,YAAY,GAAG,IAAI,KAC5B,YAAY,GAAG,IASjB,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export const fitTerminal = (container, term, fitAddon, lastSize) => {
|
|
2
|
+
if (container.clientWidth === 0 || container.clientHeight === 0)
|
|
3
|
+
return lastSize;
|
|
4
|
+
fitAddon.fit();
|
|
5
|
+
const nextSize = { cols: term.cols, rows: term.rows };
|
|
6
|
+
if (lastSize?.cols === nextSize.cols && lastSize.rows === nextSize.rows)
|
|
7
|
+
return lastSize;
|
|
8
|
+
return nextSize;
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=fitTerminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fitTerminal.js","sourceRoot":"","sources":["../src/fitTerminal.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,SAAsB,EACtB,IAAW,EACX,QAAkB,EAClB,QAA6B,EACR,EAAE;IACvB,IAAI,SAAS,CAAC,WAAW,KAAK,CAAC,IAAI,SAAS,CAAC,YAAY,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAA;IAEhF,QAAQ,CAAC,GAAG,EAAE,CAAA;IAEd,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAA;IACrD,IAAI,QAAQ,EAAE,IAAI,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAA;IAExF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA"}
|
package/dist/hooks.d.ts
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
import type { LiveSession } from "@mp-lb/termkit-core";
|
|
2
|
+
import type { TerminalSlot } from "./store.js";
|
|
2
3
|
import type { SessionStatus } from "./types.js";
|
|
3
4
|
export declare function useSessions(): LiveSession[];
|
|
4
5
|
export declare function useSession(sessionId: string): LiveSession | undefined;
|
|
5
6
|
export declare function useRingingSessions(): Set<string>;
|
|
6
7
|
export declare function useIsRinging(sessionId: string): boolean;
|
|
7
8
|
export declare function useSessionStatus(sessionId: string): SessionStatus | undefined;
|
|
9
|
+
export declare function useFocusedSession(): string | null;
|
|
10
|
+
export declare function useIsFocused(sessionId: string): boolean;
|
|
11
|
+
export declare function useSlots(): Record<string, TerminalSlot>;
|
|
8
12
|
export declare function useDanglingSessions(known: Set<string>): LiveSession[];
|
|
9
13
|
export interface TermkitActions {
|
|
10
14
|
focus: (sessionId: string) => void;
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK/C,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAG3C;AAGD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrE;AAID,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAMhD;AAID,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAID,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG7E;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,CAGrE;AAED,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAEjC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAEjC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAExC,eAAe,EAAE,MAAM,IAAI,CAAA;IAE3B,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChE;AAID,wBAAgB,iBAAiB,IAAI,cAAc,CAelD"}
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAEtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAK/C,wBAAgB,WAAW,IAAI,WAAW,EAAE,CAG3C;AAGD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAGrE;AAID,wBAAgB,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAMhD;AAID,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAID,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG7E;AAOD,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAID,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEvD;AAMD,wBAAgB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAGvD;AAMD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,WAAW,EAAE,CAGrE;AAED,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAEjC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAEjC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAExC,eAAe,EAAE,MAAM,IAAI,CAAA;IAE3B,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CAChE;AAID,wBAAgB,iBAAiB,IAAI,cAAc,CAelD"}
|
package/dist/hooks.js
CHANGED
|
@@ -30,6 +30,28 @@ export function useSessionStatus(sessionId) {
|
|
|
30
30
|
const { store } = useTermkitContext();
|
|
31
31
|
return useStore(store, (s) => s.slots[sessionId]?.status);
|
|
32
32
|
}
|
|
33
|
+
// The session that currently holds keyboard focus, or null if none does.
|
|
34
|
+
// Reactive: it re-renders when focus moves — including when the user clicks into a
|
|
35
|
+
// terminal, which termkit's <Terminal> reports to the store. Host UIs use this to
|
|
36
|
+
// highlight the focused session, which they can't track themselves because focus
|
|
37
|
+
// changes originate inside the terminal.
|
|
38
|
+
export function useFocusedSession() {
|
|
39
|
+
const { store } = useTermkitContext();
|
|
40
|
+
return useStore(store, (s) => s.focusedSlot);
|
|
41
|
+
}
|
|
42
|
+
// Whether a specific session currently holds focus. Convenience over
|
|
43
|
+
// useFocusedSession for a single tab.
|
|
44
|
+
export function useIsFocused(sessionId) {
|
|
45
|
+
return useFocusedSession() === sessionId;
|
|
46
|
+
}
|
|
47
|
+
// The client-side slot registry: every session a mounted <Terminal> has attached,
|
|
48
|
+
// keyed by id, with its connection status. This is the "what's mounted and how's
|
|
49
|
+
// its socket" view — distinct from useSessions() (what the daemon is running).
|
|
50
|
+
// Mainly for diagnostics; most UIs want useSessions()/useSessionStatus() instead.
|
|
51
|
+
export function useSlots() {
|
|
52
|
+
const { store } = useTermkitContext();
|
|
53
|
+
return useStore(store, (s) => s.slots);
|
|
54
|
+
}
|
|
33
55
|
// Live PTYs with no matching id in `known` — orphaned shells. Pass the set of ids
|
|
34
56
|
// your UI knows about (its tabs); anything live but unknown is a dangler you can
|
|
35
57
|
// surface for cleanup. The known-id bookkeeping is host domain, so it lives there;
|
package/dist/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ export { TermkitProvider } from "./context.js";
|
|
|
2
2
|
export type { TermkitProviderProps } from "./context.js";
|
|
3
3
|
export { Terminal } from "./Terminal.js";
|
|
4
4
|
export type { TerminalProps } from "./Terminal.js";
|
|
5
|
-
export { useSessions, useSession, useRingingSessions, useIsRinging, useSessionStatus, useDanglingSessions, useTermkitActions, } from "./hooks.js";
|
|
5
|
+
export { useSessions, useSession, useRingingSessions, useIsRinging, useSessionStatus, useFocusedSession, useIsFocused, useSlots, useDanglingSessions, useTermkitActions, } from "./hooks.js";
|
|
6
6
|
export type { TermkitActions } from "./hooks.js";
|
|
7
|
+
export type { TerminalSlot } from "./store.js";
|
|
7
8
|
export type { TermkitConfig, TermkitTransport, TermkitTerminalOptions, SessionStatus, LiveSession, } from "./types.js";
|
|
8
9
|
export { generateSessionName, SESSION_NAMES } from "@mp-lb/termkit-core";
|
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EACL,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EACL,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,sBAAsB,EACtB,aAAa,EACb,WAAW,GACZ,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// whether or not a terminal for them is currently on screen.
|
|
8
8
|
export { TermkitProvider } from "./context.js";
|
|
9
9
|
export { Terminal } from "./Terminal.js";
|
|
10
|
-
export { useSessions, useSession, useRingingSessions, useIsRinging, useSessionStatus, useDanglingSessions, useTermkitActions, } from "./hooks.js";
|
|
10
|
+
export { useSessions, useSession, useRingingSessions, useIsRinging, useSessionStatus, useFocusedSession, useIsFocused, useSlots, useDanglingSessions, useTermkitActions, } from "./hooks.js";
|
|
11
11
|
// Re-export the session-name helper so hosts can label new sessions consistently.
|
|
12
12
|
export { generateSessionName, SESSION_NAMES } from "@mp-lb/termkit-core";
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,gFAAgF;AAChF,iFAAiF;AACjF,6DAA6D;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,OAAO,EACL,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,gFAAgF;AAChF,kFAAkF;AAClF,gFAAgF;AAChF,iFAAiF;AACjF,6DAA6D;AAE7D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAGxC,OAAO,EACL,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAYnB,kFAAkF;AAClF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA"}
|
package/dist/store.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type StoreApi } from "zustand/vanilla";
|
|
2
2
|
import type { LiveSession } from "@mp-lb/termkit-core";
|
|
3
3
|
import type { SessionStatus, TermkitTransport } from "./types.js";
|
|
4
|
-
interface TerminalSlot {
|
|
4
|
+
export interface TerminalSlot {
|
|
5
5
|
sessionId: string;
|
|
6
6
|
status: SessionStatus;
|
|
7
7
|
}
|
|
@@ -23,5 +23,4 @@ export interface TermkitState {
|
|
|
23
23
|
}
|
|
24
24
|
export type TermkitStore = StoreApi<TermkitState>;
|
|
25
25
|
export declare function createTermkitStore(transport: TermkitTransport): TermkitStore;
|
|
26
|
-
export {};
|
|
27
26
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAOjE,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAOjE,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,YAAY;IAE3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IAEnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAI1B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAIvC,IAAI,EAAE,WAAW,EAAE,CAAA;IAGnB,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,KAAK,IAAI,CAAA;IAG7D,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAGjC,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/D,qBAAqB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAG3D,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAGxC,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,IAAI,CAAA;CACvC;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAA;AAEjD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,GAAG,YAAY,CAwF5E"}
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKtD,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAA;AAO5E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAClC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7C,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9C;AAGD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAKtD,MAAM,MAAM,aAAa,GAAG,YAAY,GAAG,OAAO,GAAG,cAAc,GAAG,MAAM,CAAA;AAO5E,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;IAClC,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7C,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;CAC9C;AAGD,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,OAAO,CAAA;IAIrB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAKD,MAAM,WAAW,aAAa;IAO5B,aAAa,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,KAAK,MAAM,CAAA;IACtF,SAAS,EAAE,gBAAgB,CAAA;IAE3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,eAAe,CAAC,EAAE,sBAAsB,CAAA;CACzC;AAED,YAAY,EAAE,WAAW,EAAE,CAAA"}
|