@mks2508/mks-ui 0.10.0 → 0.11.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/dist/react-ui/blocks/Terminal/ChromeShell/ChromeShell.styles.d.ts +55 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/ChromeShell.styles.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/ChromeShell.styles.js +62 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/ChromeShell.types.d.ts +92 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/ChromeShell.types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/index.d.ts +71 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/ChromeShell/index.js +114 -0
- package/dist/react-ui/blocks/Terminal/chrome.d.ts +1 -0
- package/dist/react-ui/blocks/Terminal/chrome.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/chrome.js +3 -1
- package/dist/react-ui/blocks/Terminal/index.d.ts +1 -0
- package/dist/react-ui/blocks/Terminal/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/index.js +3 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelWterm.js +20 -9
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalInteractivePanelXterm.js +19 -6
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalLogsPanel/index.js +31 -9
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts +31 -2
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.js +41 -5
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.d.ts +22 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.d.ts +8 -0
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.js +54 -12
- package/dist/react-ui/blocks/Terminal/renderers/ResttyRenderer.d.ts +52 -0
- package/dist/react-ui/blocks/Terminal/renderers/ResttyRenderer.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/renderers/ResttyRenderer.js +160 -0
- package/dist/react-ui/blocks/Terminal/renderers/WtermRenderer.d.ts +46 -0
- package/dist/react-ui/blocks/Terminal/renderers/WtermRenderer.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/renderers/WtermRenderer.js +195 -0
- package/dist/react-ui/blocks/Terminal/renderers/XTermRenderer.d.ts +39 -0
- package/dist/react-ui/blocks/Terminal/renderers/XTermRenderer.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/renderers/XTermRenderer.js +251 -0
- package/dist/react-ui/blocks/Terminal/renderers/index.d.ts +20 -0
- package/dist/react-ui/blocks/Terminal/renderers/index.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/renderers/types.d.ts +47 -0
- package/dist/react-ui/blocks/Terminal/renderers/types.d.ts.map +1 -0
- package/dist/react-ui/blocks/Terminal/restty.d.ts +2 -0
- package/dist/react-ui/blocks/Terminal/restty.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/restty.js +2 -1
- package/dist/react-ui/blocks/Terminal/wterm.d.ts +2 -0
- package/dist/react-ui/blocks/Terminal/wterm.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/wterm.js +2 -1
- package/dist/react-ui/blocks/Terminal/xterm.d.ts +2 -0
- package/dist/react-ui/blocks/Terminal/xterm.d.ts.map +1 -1
- package/dist/react-ui/blocks/Terminal/xterm.js +2 -1
- package/dist/react-ui/index.d.ts +2 -2
- package/dist/react-ui/index.d.ts.map +1 -1
- package/dist/react-ui/index.js +2 -2
- package/package.json +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import { cn } from "../../../../lib/utils.js";
|
|
4
|
+
import { Button } from "../../../../ui/Button/index.js";
|
|
4
5
|
import { ArrowDownToLineIcon } from "../../../../icons/lucide-animated/arrow-down-to-line.js";
|
|
5
6
|
import { ArrowUpIcon } from "../../../../icons/lucide-animated/arrow-up.js";
|
|
6
7
|
import { DeleteIcon } from "../../../../icons/lucide-animated/delete.js";
|
|
@@ -245,49 +246,66 @@ const TerminalLogsPanel = forwardRef(({ containerName, isConnected, _logs = "",
|
|
|
245
246
|
/* @__PURE__ */ jsx("div", { className: cn(terminalLogsPanelStyles.actionBarDivider, slots?.actionBarDivider) }),
|
|
246
247
|
/* @__PURE__ */ jsxs("div", {
|
|
247
248
|
className: "flex items-center gap-1",
|
|
248
|
-
children: [viewMode === "terminal" && /* @__PURE__ */ jsx(
|
|
249
|
+
children: [viewMode === "terminal" && /* @__PURE__ */ jsx(Button, {
|
|
250
|
+
variant: "bare",
|
|
251
|
+
size: "bare",
|
|
249
252
|
type: "button",
|
|
250
253
|
onClick: () => onFollowCursorChange(!followCursor),
|
|
251
254
|
className: cn(TOGGLE_STYLES.base, followCursor ? TOGGLE_STYLES.active : TOGGLE_STYLES.inactive),
|
|
252
255
|
title: followCursor ? "Disable auto-scroll (Ctrl+F)" : "Enable auto-scroll (Ctrl+F)",
|
|
253
|
-
|
|
254
|
-
|
|
256
|
+
"aria-pressed": followCursor,
|
|
257
|
+
"aria-label": followCursor ? "Disable auto-scroll" : "Enable auto-scroll",
|
|
258
|
+
children: followCursor ? /* @__PURE__ */ jsx(ArrowDownToLineIcon, { className: "w-4 h-4 shrink-0" }) : /* @__PURE__ */ jsx(ArrowUpIcon, { className: "w-4 h-4 shrink-0" })
|
|
259
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
260
|
+
variant: "bare",
|
|
261
|
+
size: "bare",
|
|
255
262
|
type: "button",
|
|
256
263
|
onClick: () => onShowLineNumbersChange(!showLineNumbers),
|
|
257
264
|
className: cn(TOGGLE_STYLES.base, showLineNumbers ? TOGGLE_STYLES.active : TOGGLE_STYLES.inactive),
|
|
258
265
|
title: showLineNumbers ? "Hide line numbers (Ctrl+L)" : "Show line numbers (Ctrl+L)",
|
|
259
|
-
|
|
266
|
+
"aria-pressed": showLineNumbers,
|
|
267
|
+
"aria-label": showLineNumbers ? "Hide line numbers" : "Show line numbers",
|
|
268
|
+
children: /* @__PURE__ */ jsx(ListIcon, { className: "w-4 h-4 shrink-0" })
|
|
260
269
|
})]
|
|
261
270
|
}),
|
|
262
271
|
/* @__PURE__ */ jsx("div", { className: "flex-1" }),
|
|
263
272
|
/* @__PURE__ */ jsxs("div", {
|
|
264
273
|
className: "flex items-center gap-1",
|
|
265
274
|
children: [
|
|
266
|
-
/* @__PURE__ */ jsx(
|
|
275
|
+
/* @__PURE__ */ jsx(Button, {
|
|
276
|
+
variant: "bare",
|
|
277
|
+
size: "bare",
|
|
267
278
|
type: "button",
|
|
268
279
|
onClick: onSearch,
|
|
269
280
|
className: cn(ACTION_BUTTON_STYLES.base, ACTION_BUTTON_STYLES.default),
|
|
270
281
|
title: "Search in logs (Ctrl+Shift+F)",
|
|
282
|
+
"aria-label": "Search in logs",
|
|
271
283
|
children: /* @__PURE__ */ jsx(IconWrapper, {
|
|
272
284
|
icon: SearchIcon,
|
|
273
285
|
size: 16
|
|
274
286
|
})
|
|
275
287
|
}),
|
|
276
|
-
/* @__PURE__ */ jsx(
|
|
288
|
+
/* @__PURE__ */ jsx(Button, {
|
|
289
|
+
variant: "bare",
|
|
290
|
+
size: "bare",
|
|
277
291
|
type: "button",
|
|
278
292
|
onClick: onClear,
|
|
279
293
|
className: cn(ACTION_BUTTON_STYLES.base, ACTION_BUTTON_STYLES.default),
|
|
280
294
|
title: "Clear logs (Ctrl+K)",
|
|
295
|
+
"aria-label": "Clear logs",
|
|
281
296
|
children: /* @__PURE__ */ jsx(IconWrapper, {
|
|
282
297
|
icon: DeleteIcon,
|
|
283
298
|
size: 16
|
|
284
299
|
})
|
|
285
300
|
}),
|
|
286
|
-
/* @__PURE__ */ jsx(
|
|
301
|
+
/* @__PURE__ */ jsx(Button, {
|
|
302
|
+
variant: "bare",
|
|
303
|
+
size: "bare",
|
|
287
304
|
type: "button",
|
|
288
305
|
onClick: onDownload,
|
|
289
306
|
className: cn(ACTION_BUTTON_STYLES.base, ACTION_BUTTON_STYLES.default),
|
|
290
307
|
title: "Download logs",
|
|
308
|
+
"aria-label": "Download logs",
|
|
291
309
|
children: /* @__PURE__ */ jsx(IconWrapper, {
|
|
292
310
|
icon: DownloadIcon,
|
|
293
311
|
size: 16
|
|
@@ -357,12 +375,16 @@ const TerminalLogsPanel = forwardRef(({ containerName, isConnected, _logs = "",
|
|
|
357
375
|
children: "Available containers:"
|
|
358
376
|
}), /* @__PURE__ */ jsxs("div", {
|
|
359
377
|
className: "flex flex-wrap gap-2 justify-center",
|
|
360
|
-
children: [containers.slice(0, 3).map((container) => /* @__PURE__ */ jsx(
|
|
378
|
+
children: [containers.slice(0, 3).map((container) => /* @__PURE__ */ jsx(Button, {
|
|
379
|
+
variant: "bare",
|
|
380
|
+
size: "bare",
|
|
361
381
|
type: "button",
|
|
362
382
|
onClick: () => onAddContainer(container.name),
|
|
363
383
|
className: cn(terminalLogsPanelStyles.containerButton, slots?.containerButton, `hover:${PRIMARY_GLOW.md}`),
|
|
364
384
|
children: container.name
|
|
365
|
-
}, container.id)), containers.length > 3 && /* @__PURE__ */ jsxs(
|
|
385
|
+
}, container.id)), containers.length > 3 && /* @__PURE__ */ jsxs(Button, {
|
|
386
|
+
variant: "bare",
|
|
387
|
+
size: "bare",
|
|
366
388
|
type: "button",
|
|
367
389
|
onClick: () => onNewSession?.(),
|
|
368
390
|
className: cn(terminalLogsPanelStyles.containerButton, slots?.containerButton),
|
|
@@ -9,11 +9,17 @@
|
|
|
9
9
|
* - Noise texture SVG overlay for depth
|
|
10
10
|
* - Animated top accent line (primary gradient with glow)
|
|
11
11
|
* - Session tabs (TerminalSessionTabs)
|
|
12
|
-
* - macOS-style header (TerminalPanelHeader)
|
|
12
|
+
* - macOS-style header (TerminalPanelHeader) — gated by `showHeader` (default `true`)
|
|
13
13
|
* - Slots for action bar, children (terminal content), and footer
|
|
14
14
|
* - Neon magenta scrollbar styles
|
|
15
15
|
* - StyleSlots + CVA variants for customization
|
|
16
16
|
*
|
|
17
|
+
* As of v0.11.0 the structural skeleton is also available as the public
|
|
18
|
+
* {@link ChromeShell} primitive (variant B nativa upstream). Consumers
|
|
19
|
+
* who need full toolbar control without the macOS header should compose
|
|
20
|
+
* with {@link ChromeShell} directly. This component remains the
|
|
21
|
+
* batteries-included default for log / interactive panels.
|
|
22
|
+
*
|
|
17
23
|
* @module components/devenv/terminal/panel/chrome
|
|
18
24
|
*/
|
|
19
25
|
import type { ITerminalPanelChromeProps } from './TerminalPanelChrome.types';
|
|
@@ -37,6 +43,16 @@ export declare const terminalScrollStyles = "\n @keyframes shimmer-line {\n
|
|
|
37
43
|
* Supports StyleSlots for class overrides and CVA variants
|
|
38
44
|
* for visual presets (default, minimal, error).
|
|
39
45
|
*
|
|
46
|
+
* v0.11.0 additions (additive, fully backward-compatible):
|
|
47
|
+
* - `showHeader` (default `true`) — set to `false` to skip rendering
|
|
48
|
+
* the default {@link TerminalPanelHeader}.
|
|
49
|
+
* - `header` slot — replace the default header with custom content
|
|
50
|
+
* (e.g. richer status, breadcrumbs). Wins over `showHeader`.
|
|
51
|
+
*
|
|
52
|
+
* For chrome-less composition (no traffic lights, no session tabs,
|
|
53
|
+
* full toolbar control), use the public {@link ChromeShell} primitive
|
|
54
|
+
* directly instead.
|
|
55
|
+
*
|
|
40
56
|
* @example
|
|
41
57
|
* ```tsx
|
|
42
58
|
* <TerminalPanelChrome
|
|
@@ -50,6 +66,19 @@ export declare const terminalScrollStyles = "\n @keyframes shimmer-line {\n
|
|
|
50
66
|
* <div ref={containerRef} className="terminal-container" />
|
|
51
67
|
* </TerminalPanelChrome>
|
|
52
68
|
* ```
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```tsx
|
|
72
|
+
* // v0.11.0 — opt out of the default macOS header.
|
|
73
|
+
* <TerminalPanelChrome
|
|
74
|
+
* containerName="devenv-agent-backend"
|
|
75
|
+
* isConnected={true}
|
|
76
|
+
* showHeader={false}
|
|
77
|
+
* actionBar={<MyCustomToolbar />}
|
|
78
|
+
* >
|
|
79
|
+
* <MyTerminalContent />
|
|
80
|
+
* </TerminalPanelChrome>
|
|
81
|
+
* ```
|
|
53
82
|
*/
|
|
54
|
-
export declare function TerminalPanelChrome({ containerName, isConnected, variant, size, viewMode, onViewModeChange, sessions, activeSessionId, onSessionTabClick, onSessionClose, onNewSession, availableContainers, onAddContainer, children, actionBar, footer, onClose, onMinimize, onMaximize, crtEffect, slots, className, }: ITerminalPanelChromeProps): import("react/jsx-runtime").JSX.Element;
|
|
83
|
+
export declare function TerminalPanelChrome({ containerName, isConnected, variant, size, viewMode, onViewModeChange, sessions, activeSessionId, onSessionTabClick, onSessionClose, onNewSession, availableContainers, onAddContainer, children, actionBar, footer, onClose, onMinimize, onMaximize, crtEffect, showHeader, header, slots, className, }: ITerminalPanelChromeProps): import("react/jsx-runtime").JSX.Element;
|
|
55
84
|
//# sourceMappingURL=TerminalPanelChrome.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalPanelChrome.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TerminalPanelChrome.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAU7E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,yTAAuT,CAAC;AAEtV;;;GAGG;AACH,eAAO,MAAM,oBAAoB,84EAuFhC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,aAAa,EACb,WAAW,EACX,OAAmB,EACnB,IAAgB,EAChB,QAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,SAAS,EACT,MAAM,EACN,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAiB,EACjB,MAAM,EACN,KAAK,EACL,SAAS,GACV,EAAE,yBAAyB,2CAyG3B"}
|
|
@@ -18,11 +18,17 @@ import { jsx, jsxs } from "react/jsx-runtime";
|
|
|
18
18
|
* - Noise texture SVG overlay for depth
|
|
19
19
|
* - Animated top accent line (primary gradient with glow)
|
|
20
20
|
* - Session tabs (TerminalSessionTabs)
|
|
21
|
-
* - macOS-style header (TerminalPanelHeader)
|
|
21
|
+
* - macOS-style header (TerminalPanelHeader) — gated by `showHeader` (default `true`)
|
|
22
22
|
* - Slots for action bar, children (terminal content), and footer
|
|
23
23
|
* - Neon magenta scrollbar styles
|
|
24
24
|
* - StyleSlots + CVA variants for customization
|
|
25
25
|
*
|
|
26
|
+
* As of v0.11.0 the structural skeleton is also available as the public
|
|
27
|
+
* {@link ChromeShell} primitive (variant B nativa upstream). Consumers
|
|
28
|
+
* who need full toolbar control without the macOS header should compose
|
|
29
|
+
* with {@link ChromeShell} directly. This component remains the
|
|
30
|
+
* batteries-included default for log / interactive panels.
|
|
31
|
+
*
|
|
26
32
|
* @module components/devenv/terminal/panel/chrome
|
|
27
33
|
*/
|
|
28
34
|
/**
|
|
@@ -132,6 +138,16 @@ const terminalScrollStyles = `
|
|
|
132
138
|
* Supports StyleSlots for class overrides and CVA variants
|
|
133
139
|
* for visual presets (default, minimal, error).
|
|
134
140
|
*
|
|
141
|
+
* v0.11.0 additions (additive, fully backward-compatible):
|
|
142
|
+
* - `showHeader` (default `true`) — set to `false` to skip rendering
|
|
143
|
+
* the default {@link TerminalPanelHeader}.
|
|
144
|
+
* - `header` slot — replace the default header with custom content
|
|
145
|
+
* (e.g. richer status, breadcrumbs). Wins over `showHeader`.
|
|
146
|
+
*
|
|
147
|
+
* For chrome-less composition (no traffic lights, no session tabs,
|
|
148
|
+
* full toolbar control), use the public {@link ChromeShell} primitive
|
|
149
|
+
* directly instead.
|
|
150
|
+
*
|
|
135
151
|
* @example
|
|
136
152
|
* ```tsx
|
|
137
153
|
* <TerminalPanelChrome
|
|
@@ -145,8 +161,25 @@ const terminalScrollStyles = `
|
|
|
145
161
|
* <div ref={containerRef} className="terminal-container" />
|
|
146
162
|
* </TerminalPanelChrome>
|
|
147
163
|
* ```
|
|
164
|
+
*
|
|
165
|
+
* @example
|
|
166
|
+
* ```tsx
|
|
167
|
+
* // v0.11.0 — opt out of the default macOS header.
|
|
168
|
+
* <TerminalPanelChrome
|
|
169
|
+
* containerName="devenv-agent-backend"
|
|
170
|
+
* isConnected={true}
|
|
171
|
+
* showHeader={false}
|
|
172
|
+
* actionBar={<MyCustomToolbar />}
|
|
173
|
+
* >
|
|
174
|
+
* <MyTerminalContent />
|
|
175
|
+
* </TerminalPanelChrome>
|
|
176
|
+
* ```
|
|
148
177
|
*/
|
|
149
|
-
function TerminalPanelChrome({ containerName, isConnected, variant = "default", size = "default", viewMode = "terminal", onViewModeChange, sessions, activeSessionId, onSessionTabClick, onSessionClose, onNewSession, availableContainers, onAddContainer, children, actionBar, footer, onClose, onMinimize, onMaximize, crtEffect, slots, className }) {
|
|
178
|
+
function TerminalPanelChrome({ containerName, isConnected, variant = "default", size = "default", viewMode = "terminal", onViewModeChange, sessions, activeSessionId, onSessionTabClick, onSessionClose, onNewSession, availableContainers, onAddContainer, children, actionBar, footer, onClose, onMinimize, onMaximize, crtEffect, showHeader = true, header, slots, className }) {
|
|
179
|
+
/** Custom header slot wins over `showHeader`. */
|
|
180
|
+
const hasCustomHeader = header !== void 0;
|
|
181
|
+
/** Render the default `<TerminalPanelHeader>` when no custom slot and `showHeader` is on. */
|
|
182
|
+
const renderDefaultHeader = !hasCustomHeader && showHeader;
|
|
150
183
|
/** Whether to render session tabs (multi-session mode) */
|
|
151
184
|
const showSessionTabs = sessions && sessions.length > 0 || availableContainers && availableContainers.length > 0;
|
|
152
185
|
/** Whether to show the accent line (hidden in minimal variant) */
|
|
@@ -162,7 +195,7 @@ function TerminalPanelChrome({ containerName, isConnected, variant = "default",
|
|
|
162
195
|
showAccentLine && /* @__PURE__ */ jsxs("div", {
|
|
163
196
|
className: cn(terminalChromeStyles.accentLine, slots?.accentLine),
|
|
164
197
|
children: [/* @__PURE__ */ jsx("div", { className: cn(accentGradient, slots?.accentGradient) }), /* @__PURE__ */ jsx("div", {
|
|
165
|
-
className: cn(terminalChromeStyles.accentShimmer, slots?.accentShimmer),
|
|
198
|
+
className: cn(terminalChromeStyles.accentShimmer, "motion-reduce:[animation:none]", slots?.accentShimmer),
|
|
166
199
|
style: {
|
|
167
200
|
backgroundSize: "200% 100%",
|
|
168
201
|
animation: "shimmer-line 4s ease-in-out infinite"
|
|
@@ -181,7 +214,10 @@ function TerminalPanelChrome({ containerName, isConnected, variant = "default",
|
|
|
181
214
|
onAddContainer
|
|
182
215
|
})
|
|
183
216
|
}),
|
|
184
|
-
/* @__PURE__ */ jsx("div", {
|
|
217
|
+
hasCustomHeader ? /* @__PURE__ */ jsx("div", {
|
|
218
|
+
className: cn(slots?.header),
|
|
219
|
+
children: header
|
|
220
|
+
}) : renderDefaultHeader ? /* @__PURE__ */ jsx("div", {
|
|
185
221
|
className: cn(slots?.header),
|
|
186
222
|
children: /* @__PURE__ */ jsx(TerminalPanelHeader, {
|
|
187
223
|
containerName,
|
|
@@ -192,7 +228,7 @@ function TerminalPanelChrome({ containerName, isConnected, variant = "default",
|
|
|
192
228
|
onMinimize,
|
|
193
229
|
onMaximize
|
|
194
230
|
})
|
|
195
|
-
}),
|
|
231
|
+
}) : null,
|
|
196
232
|
actionBar && /* @__PURE__ */ jsx("div", {
|
|
197
233
|
className: cn(slots?.actionBar),
|
|
198
234
|
children: actionBar
|
|
@@ -54,6 +54,28 @@ export interface ITerminalPanelChromeProps extends TerminalChromeVariantProps {
|
|
|
54
54
|
onMaximize?: () => void;
|
|
55
55
|
/** Enable CRT shader effects (scanlines, bloom, vignette) */
|
|
56
56
|
crtEffect?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether to render the default macOS-style header (traffic lights +
|
|
59
|
+
* container name + connection status). Defaults to `true` to preserve
|
|
60
|
+
* v0.10.0 behavior — pass `false` when composing a custom toolbar that
|
|
61
|
+
* already includes the connection status, or when delegating header
|
|
62
|
+
* concerns to the consumer (variant B nativa, v0.11.0+).
|
|
63
|
+
*
|
|
64
|
+
* Has no effect when {@link ITerminalPanelChromeProps.header} is set
|
|
65
|
+
* (the explicit slot always wins).
|
|
66
|
+
*/
|
|
67
|
+
showHeader?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* Custom header slot. When provided, replaces the default
|
|
70
|
+
* {@link TerminalPanelHeader} (traffic lights + container name).
|
|
71
|
+
* Mutually exclusive with `showHeader`: if `header` is non-`undefined`
|
|
72
|
+
* it always wins, regardless of the `showHeader` flag.
|
|
73
|
+
*
|
|
74
|
+
* Use this when the default header is fine for the macOS chrome
|
|
75
|
+
* cosmetics but the consumer wants to swap the inner content
|
|
76
|
+
* (e.g. richer status, custom session label, breadcrumbs).
|
|
77
|
+
*/
|
|
78
|
+
header?: React.ReactNode;
|
|
57
79
|
/** Slot class overrides for each chrome sub-region */
|
|
58
80
|
slots?: SlotOverrides<TerminalChromeSlot>;
|
|
59
81
|
/** Custom class name appended to outer wrapper */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalPanelChrome.types.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAEnG;;;;;;GAMG;AACH,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;IAC3E,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IAEtB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IAErB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAEhC,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC;IAExD,qCAAqC;IACrC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE9B,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhD,0DAA0D;IAC1D,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1B,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH,8DAA8D;IAC9D,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjD,kCAAkC;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE5B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEzB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,sDAAsD;IACtD,KAAK,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAE1C,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
1
|
+
{"version":3,"file":"TerminalPanelChrome.types.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/panel/TerminalPanelChrome.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAEnG;;;;;;GAMG;AACH,MAAM,WAAW,yBAA0B,SAAQ,0BAA0B;IAC3E,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IAEtB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;IAErB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAEhC,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC;IAExD,qCAAqC;IACrC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAE9B,kCAAkC;IAClC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,6CAA6C;IAC7C,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAEhD,0DAA0D;IAC1D,cAAc,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAE7C,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAE1B,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,KAAK,CAAC;QAC1B,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IAEH,8DAA8D;IAC9D,cAAc,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjD,kCAAkC;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAE1B,2DAA2D;IAC3D,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE5B,0CAA0C;IAC1C,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEzB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAEzB,sDAAsD;IACtD,KAAK,CAAC,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAE1C,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -16,6 +16,14 @@ export type { TerminalSettingsPopoverSlot } from './TerminalSettingsPopover.styl
|
|
|
16
16
|
* Renders a settings gear icon that opens a popover with terminal
|
|
17
17
|
* configuration options. Uses centralized tokens for all shared styles.
|
|
18
18
|
*
|
|
19
|
+
* **Side-effect warning**: every mutation persists to `localStorage` via
|
|
20
|
+
* `useTerminalSettings` and propagates to ALL other consumers of the same
|
|
21
|
+
* hook in the running app (cross-component sync via `useSyncExternalStore`).
|
|
22
|
+
* Renderer / fontSize / CRT / debug switches are global, not scoped to
|
|
23
|
+
* the panel that hosts the popover. If a consumer wants per-panel
|
|
24
|
+
* settings, do not use this popover — drive the setting from a local
|
|
25
|
+
* prop instead.
|
|
26
|
+
*
|
|
19
27
|
* @example
|
|
20
28
|
* ```tsx
|
|
21
29
|
* <TerminalSettingsPopover slots={{ trigger: 'h-10 w-10' }} />
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/react-ui/blocks/Terminal/panel/TerminalSettingsPopover/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAGrF,YAAY,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC;AACjF,YAAY,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAMpF;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,uBAAuB,CAAC,EAAE,KAAK,EAAE,GAAE,6BAAkC,2CA4OpF"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { cn } from "../../../../lib/utils.js";
|
|
4
4
|
import { Popover, PopoverPopup, PopoverPortal, PopoverPositioner, PopoverTrigger } from "../../../../ui/Popover/index.js";
|
|
5
|
+
import { Button } from "../../../../ui/Button/index.js";
|
|
5
6
|
import { Separator } from "../../../../ui/Separator/index.js";
|
|
6
7
|
import { SettingsIcon } from "../../../../icons/lucide-animated/settings.js";
|
|
7
8
|
import "../../../../icons/lucide-animated/index.js";
|
|
@@ -29,6 +30,14 @@ const MAX_FONT_SIZE = 24;
|
|
|
29
30
|
* Renders a settings gear icon that opens a popover with terminal
|
|
30
31
|
* configuration options. Uses centralized tokens for all shared styles.
|
|
31
32
|
*
|
|
33
|
+
* **Side-effect warning**: every mutation persists to `localStorage` via
|
|
34
|
+
* `useTerminalSettings` and propagates to ALL other consumers of the same
|
|
35
|
+
* hook in the running app (cross-component sync via `useSyncExternalStore`).
|
|
36
|
+
* Renderer / fontSize / CRT / debug switches are global, not scoped to
|
|
37
|
+
* the panel that hosts the popover. If a consumer wants per-panel
|
|
38
|
+
* settings, do not use this popover — drive the setting from a local
|
|
39
|
+
* prop instead.
|
|
40
|
+
*
|
|
32
41
|
* @example
|
|
33
42
|
* ```tsx
|
|
34
43
|
* <TerminalSettingsPopover slots={{ trigger: 'h-10 w-10' }} />
|
|
@@ -66,21 +75,30 @@ function TerminalSettingsPopover({ slots } = {}) {
|
|
|
66
75
|
}), /* @__PURE__ */ jsxs("div", {
|
|
67
76
|
className: cn(terminalSettingsPopoverStyles.segmentedControl, slots?.segmentedControl),
|
|
68
77
|
children: [
|
|
69
|
-
/* @__PURE__ */ jsx(
|
|
78
|
+
/* @__PURE__ */ jsx(Button, {
|
|
79
|
+
variant: "bare",
|
|
80
|
+
size: "bare",
|
|
70
81
|
type: "button",
|
|
71
82
|
onClick: () => setRenderer("xterm"),
|
|
83
|
+
"aria-pressed": settings.renderer === "xterm",
|
|
72
84
|
className: cn(SEGMENTED_BUTTON_STYLES.base, terminalSettingsPopoverStyles.segmentedButton, slots?.segmentedButton, settings.renderer === "xterm" ? SEGMENTED_BUTTON_STYLES.active : SEGMENTED_BUTTON_STYLES.inactive),
|
|
73
85
|
children: "xterm"
|
|
74
86
|
}),
|
|
75
|
-
/* @__PURE__ */ jsx(
|
|
87
|
+
/* @__PURE__ */ jsx(Button, {
|
|
88
|
+
variant: "bare",
|
|
89
|
+
size: "bare",
|
|
76
90
|
type: "button",
|
|
77
91
|
onClick: () => setRenderer("restty"),
|
|
92
|
+
"aria-pressed": settings.renderer === "restty",
|
|
78
93
|
className: cn(SEGMENTED_BUTTON_STYLES.base, terminalSettingsPopoverStyles.segmentedButton, slots?.segmentedButton, settings.renderer === "restty" ? SEGMENTED_BUTTON_STYLES.active : SEGMENTED_BUTTON_STYLES.inactive),
|
|
79
94
|
children: "restty"
|
|
80
95
|
}),
|
|
81
|
-
/* @__PURE__ */ jsx(
|
|
96
|
+
/* @__PURE__ */ jsx(Button, {
|
|
97
|
+
variant: "bare",
|
|
98
|
+
size: "bare",
|
|
82
99
|
type: "button",
|
|
83
100
|
onClick: () => setRenderer("wterm"),
|
|
101
|
+
"aria-pressed": settings.renderer === "wterm",
|
|
84
102
|
className: cn(SEGMENTED_BUTTON_STYLES.base, terminalSettingsPopoverStyles.segmentedButton, slots?.segmentedButton, settings.renderer === "wterm" ? SEGMENTED_BUTTON_STYLES.active : SEGMENTED_BUTTON_STYLES.inactive),
|
|
85
103
|
children: "wterm"
|
|
86
104
|
})
|
|
@@ -105,14 +123,20 @@ function TerminalSettingsPopover({ slots } = {}) {
|
|
|
105
123
|
children: "PTY Backend"
|
|
106
124
|
}), /* @__PURE__ */ jsxs("div", {
|
|
107
125
|
className: cn(terminalSettingsPopoverStyles.segmentedControl, slots?.segmentedControl),
|
|
108
|
-
children: [/* @__PURE__ */ jsx(
|
|
126
|
+
children: [/* @__PURE__ */ jsx(Button, {
|
|
127
|
+
variant: "bare",
|
|
128
|
+
size: "bare",
|
|
109
129
|
type: "button",
|
|
110
130
|
onClick: () => setPtyBackend("nodepty"),
|
|
131
|
+
"aria-pressed": settings.ptyBackend === "nodepty",
|
|
111
132
|
className: cn(SEGMENTED_BUTTON_STYLES.base, terminalSettingsPopoverStyles.segmentedButton, slots?.segmentedButton, settings.ptyBackend === "nodepty" ? SEGMENTED_BUTTON_STYLES.active : SEGMENTED_BUTTON_STYLES.inactive),
|
|
112
133
|
children: "nodepty"
|
|
113
|
-
}), /* @__PURE__ */ jsx(
|
|
134
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
135
|
+
variant: "bare",
|
|
136
|
+
size: "bare",
|
|
114
137
|
type: "button",
|
|
115
138
|
onClick: () => setPtyBackend("webcontainer"),
|
|
139
|
+
"aria-pressed": settings.ptyBackend === "webcontainer",
|
|
116
140
|
className: cn(SEGMENTED_BUTTON_STYLES.base, terminalSettingsPopoverStyles.segmentedButton, slots?.segmentedButton, settings.ptyBackend === "webcontainer" ? SEGMENTED_BUTTON_STYLES.active : SEGMENTED_BUTTON_STYLES.inactive),
|
|
117
141
|
children: "webcontainer"
|
|
118
142
|
})]
|
|
@@ -127,27 +151,33 @@ function TerminalSettingsPopover({ slots } = {}) {
|
|
|
127
151
|
}), /* @__PURE__ */ jsxs("div", {
|
|
128
152
|
className: cn(terminalSettingsPopoverStyles.fontControls, slots?.fontControls),
|
|
129
153
|
children: [
|
|
130
|
-
/* @__PURE__ */ jsx(
|
|
154
|
+
/* @__PURE__ */ jsx(Button, {
|
|
155
|
+
variant: "bare",
|
|
156
|
+
size: "bare",
|
|
131
157
|
type: "button",
|
|
132
158
|
onClick: () => setFontSize(settings.fontSize - 1),
|
|
133
159
|
className: FONT_BUTTON_STYLES,
|
|
134
160
|
disabled: settings.fontSize <= MIN_FONT_SIZE,
|
|
135
161
|
title: "Decrease font size",
|
|
162
|
+
"aria-label": "Decrease font size",
|
|
136
163
|
children: /* @__PURE__ */ jsx("span", {
|
|
137
164
|
className: "text-sm font-bold",
|
|
138
165
|
children: "−"
|
|
139
166
|
})
|
|
140
167
|
}),
|
|
141
|
-
/* @__PURE__ */ jsx("
|
|
142
|
-
className: "text-sm font-mono text-foreground w-8 text-center",
|
|
168
|
+
/* @__PURE__ */ jsx("output", {
|
|
169
|
+
className: "text-sm font-mono text-foreground w-8 text-center [font-variant-numeric:tabular-nums]",
|
|
143
170
|
children: settings.fontSize
|
|
144
171
|
}),
|
|
145
|
-
/* @__PURE__ */ jsx(
|
|
172
|
+
/* @__PURE__ */ jsx(Button, {
|
|
173
|
+
variant: "bare",
|
|
174
|
+
size: "bare",
|
|
146
175
|
type: "button",
|
|
147
176
|
onClick: () => setFontSize(settings.fontSize + 1),
|
|
148
177
|
className: FONT_BUTTON_STYLES,
|
|
149
178
|
disabled: settings.fontSize >= MAX_FONT_SIZE,
|
|
150
179
|
title: "Increase font size",
|
|
180
|
+
"aria-label": "Increase font size",
|
|
151
181
|
children: /* @__PURE__ */ jsx("span", {
|
|
152
182
|
className: "text-sm font-bold",
|
|
153
183
|
children: "+"
|
|
@@ -171,9 +201,14 @@ function TerminalSettingsPopover({ slots } = {}) {
|
|
|
171
201
|
children: [/* @__PURE__ */ jsx("span", {
|
|
172
202
|
className: "text-xs text-muted-foreground",
|
|
173
203
|
children: "Scanlines, bloom & vignette"
|
|
174
|
-
}), /* @__PURE__ */ jsx(
|
|
204
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
205
|
+
variant: "bare",
|
|
206
|
+
size: "bare",
|
|
175
207
|
type: "button",
|
|
176
208
|
onClick: () => setCrtEffect(!settings.crtEffect),
|
|
209
|
+
role: "switch",
|
|
210
|
+
"aria-checked": settings.crtEffect,
|
|
211
|
+
"aria-label": "Toggle CRT effect",
|
|
177
212
|
className: cn(TOGGLE_SWITCH_STYLES.track.base, settings.crtEffect ? TOGGLE_SWITCH_STYLES.track.active : TOGGLE_SWITCH_STYLES.track.inactive),
|
|
178
213
|
children: /* @__PURE__ */ jsx("span", { className: cn(TOGGLE_SWITCH_STYLES.thumb.base, settings.crtEffect ? TOGGLE_SWITCH_STYLES.thumb.active : TOGGLE_SWITCH_STYLES.thumb.inactive) })
|
|
179
214
|
})]
|
|
@@ -190,9 +225,14 @@ function TerminalSettingsPopover({ slots } = {}) {
|
|
|
190
225
|
children: [/* @__PURE__ */ jsx("span", {
|
|
191
226
|
className: "text-xs text-muted-foreground",
|
|
192
227
|
children: "GPU, FPS, grid & connection info"
|
|
193
|
-
}), /* @__PURE__ */ jsx(
|
|
228
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
229
|
+
variant: "bare",
|
|
230
|
+
size: "bare",
|
|
194
231
|
type: "button",
|
|
195
232
|
onClick: () => setDebugPanel(!settings.debugPanel),
|
|
233
|
+
role: "switch",
|
|
234
|
+
"aria-checked": settings.debugPanel,
|
|
235
|
+
"aria-label": "Toggle debug panel",
|
|
196
236
|
className: cn(TOGGLE_SWITCH_STYLES.track.base, settings.debugPanel ? TOGGLE_SWITCH_STYLES.track.active : TOGGLE_SWITCH_STYLES.track.inactive),
|
|
197
237
|
children: /* @__PURE__ */ jsx("span", { className: cn(TOGGLE_SWITCH_STYLES.thumb.base, settings.debugPanel ? TOGGLE_SWITCH_STYLES.thumb.active : TOGGLE_SWITCH_STYLES.thumb.inactive) })
|
|
198
238
|
})]
|
|
@@ -201,7 +241,9 @@ function TerminalSettingsPopover({ slots } = {}) {
|
|
|
201
241
|
/* @__PURE__ */ jsx(Separator, { className: "bg-border/30" }),
|
|
202
242
|
/* @__PURE__ */ jsx("div", {
|
|
203
243
|
className: "px-4 py-3",
|
|
204
|
-
children: /* @__PURE__ */ jsx(
|
|
244
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
245
|
+
variant: "bare",
|
|
246
|
+
size: "bare",
|
|
205
247
|
type: "button",
|
|
206
248
|
onClick: resetToDefaults,
|
|
207
249
|
className: cn(terminalSettingsPopoverStyles.resetButton, slots?.resetButton),
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ResttyRenderer Component.
|
|
3
|
+
*
|
|
4
|
+
* Chrome-less restty renderer for maximum composability.
|
|
5
|
+
* Wraps @mks2508/restty ResttyTerminal component without any chrome,
|
|
6
|
+
* toolbar, or status bar. Use this when you want to build your own
|
|
7
|
+
* terminal shell or embed in custom layouts.
|
|
8
|
+
*
|
|
9
|
+
* Lazy-loads @mks2508/restty on first render. Returns null if
|
|
10
|
+
* the peer dependency is not installed.
|
|
11
|
+
*
|
|
12
|
+
* @module components/devenv/terminal/renderers/restty
|
|
13
|
+
*/
|
|
14
|
+
import type { ITerminalRendererProps, ITerminalRendererRef } from './types';
|
|
15
|
+
/**
|
|
16
|
+
* ResttyRenderer Component.
|
|
17
|
+
*
|
|
18
|
+
* Chrome-less restty renderer. Provides:
|
|
19
|
+
* - @mks2508/restty ResttyTerminal with WebGPU/WebGL2 rendering
|
|
20
|
+
* - Auto-resize on container resize
|
|
21
|
+
* - Font size from useTerminalSettings context (override via props)
|
|
22
|
+
* - Ref forwarding with focus, write, clear, resize methods
|
|
23
|
+
* - Lazy-loading with graceful fallback if @mks2508/restty is missing
|
|
24
|
+
*
|
|
25
|
+
* restty features:
|
|
26
|
+
* - GPU-accelerated rendering (WebGPU/WebGL2)
|
|
27
|
+
* - libghostty-vt WASM core (full VT100/VT220/xterm parser)
|
|
28
|
+
* - Built-in theme catalog (Dracula, Synthwave, etc.)
|
|
29
|
+
* - Multi-pane splits
|
|
30
|
+
* - Scrollback history
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* const termRef = useRef<ITerminalRendererRef>(null);
|
|
35
|
+
*
|
|
36
|
+
* <ResttyRenderer
|
|
37
|
+
* ref={termRef}
|
|
38
|
+
* sessionId="my-session"
|
|
39
|
+
* fontSize={16}
|
|
40
|
+
* resttyThemeName="Dracula"
|
|
41
|
+
* onReady={() => console.log('Terminal ready')}
|
|
42
|
+
* className="h-[600px]"
|
|
43
|
+
* />
|
|
44
|
+
* ```
|
|
45
|
+
*/
|
|
46
|
+
export declare const ResttyRenderer: import("react").ForwardRefExoticComponent<ITerminalRendererProps & {
|
|
47
|
+
/** Restty built-in theme name (default: from useTerminalSettings) */
|
|
48
|
+
readonly resttyThemeName?: string;
|
|
49
|
+
/** GPU renderer preference (default: "auto") */
|
|
50
|
+
readonly gpuRenderer?: "auto" | "webgpu" | "webgl2";
|
|
51
|
+
} & import("react").RefAttributes<ITerminalRendererRef>>;
|
|
52
|
+
//# sourceMappingURL=ResttyRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ResttyRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/react-ui/blocks/Terminal/renderers/ResttyRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAaH,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAyC5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,cAAc;IAGvB,qEAAqE;+BAC1C,MAAM;IAEjC,gDAAgD;2BACzB,MAAM,GAAG,QAAQ,GAAG,QAAQ;wDAuHtD,CAAC"}
|