@mp-lb/termkit 0.1.0 → 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/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/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"}
|