@jrichman/ink 6.4.11 → 6.4.12
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/build/components/App.d.ts +6 -0
- package/build/components/App.js +5 -0
- package/build/components/App.js.map +1 -1
- package/build/components/AppContext.d.ts +36 -1
- package/build/components/AppContext.js +7 -2
- package/build/components/AppContext.js.map +1 -1
- package/build/components/Box.d.ts +26 -2
- package/build/components/Box.js +3 -2
- package/build/components/Box.js.map +1 -1
- package/build/components/StaticRender.d.ts +8 -0
- package/build/components/StaticRender.js +11 -0
- package/build/components/StaticRender.js.map +1 -0
- package/build/debug-log.d.ts +2 -0
- package/build/debug-log.js +44 -0
- package/build/debug-log.js.map +1 -0
- package/build/dom.d.ts +37 -3
- package/build/dom.js +19 -3
- package/build/dom.js.map +1 -1
- package/build/index.d.ts +4 -1
- package/build/index.js +3 -1
- package/build/index.js.map +1 -1
- package/build/ink.d.ts +29 -2
- package/build/ink.js +215 -102
- package/build/ink.js.map +1 -1
- package/build/measure-element.d.ts +20 -1
- package/build/measure-element.js +201 -51
- package/build/measure-element.js.map +1 -1
- package/build/output.d.ts +195 -10
- package/build/output.js +494 -160
- package/build/output.js.map +1 -1
- package/build/reconciler.js +19 -3
- package/build/reconciler.js.map +1 -1
- package/build/render-background.js +1 -1
- package/build/render-background.js.map +1 -1
- package/build/render-cached.d.ts +17 -0
- package/build/render-cached.js +62 -0
- package/build/render-cached.js.map +1 -0
- package/build/render-container.d.ts +24 -0
- package/build/render-container.js +169 -0
- package/build/render-container.js.map +1 -0
- package/build/render-node-to-output.d.ts +15 -7
- package/build/render-node-to-output.js +123 -485
- package/build/render-node-to-output.js.map +1 -1
- package/build/render-screen-reader.d.ts +5 -0
- package/build/render-screen-reader.js +54 -0
- package/build/render-screen-reader.js.map +1 -0
- package/build/render-scrollbar.d.ts +22 -0
- package/build/render-scrollbar.js +77 -0
- package/build/render-scrollbar.js.map +1 -0
- package/build/render-sticky.d.ts +56 -0
- package/build/render-sticky.js +314 -0
- package/build/render-sticky.js.map +1 -0
- package/build/render-text-node.d.ts +24 -0
- package/build/render-text-node.js +133 -0
- package/build/render-text-node.js.map +1 -0
- package/build/render.d.ts +39 -0
- package/build/render.js +5 -0
- package/build/render.js.map +1 -1
- package/build/renderer.d.ts +10 -2
- package/build/renderer.js +103 -7
- package/build/renderer.js.map +1 -1
- package/build/replay.d.ts +60 -0
- package/build/replay.js +138 -0
- package/build/replay.js.map +1 -0
- package/build/scroll.js +20 -1
- package/build/scroll.js.map +1 -1
- package/build/selection.d.ts +9 -0
- package/build/selection.js +47 -0
- package/build/selection.js.map +1 -1
- package/build/serialization.d.ts +28 -0
- package/build/serialization.js +267 -0
- package/build/serialization.js.map +1 -0
- package/build/styles.d.ts +18 -0
- package/build/styles.js.map +1 -1
- package/build/terminal-buffer.d.ts +53 -0
- package/build/terminal-buffer.js +441 -0
- package/build/terminal-buffer.js.map +1 -0
- package/build/worker/animation-controller.d.ts +72 -0
- package/build/worker/animation-controller.js +128 -0
- package/build/worker/animation-controller.js.map +1 -0
- package/build/worker/ansi-utils.d.ts +16 -0
- package/build/worker/ansi-utils.js +40 -0
- package/build/worker/ansi-utils.js.map +1 -0
- package/build/worker/canvas.d.ts +47 -0
- package/build/worker/canvas.js +94 -0
- package/build/worker/canvas.js.map +1 -0
- package/build/worker/compositor.d.ts +33 -0
- package/build/worker/compositor.js +314 -0
- package/build/worker/compositor.js.map +1 -0
- package/build/worker/platform.d.ts +15 -0
- package/build/worker/platform.js +19 -0
- package/build/worker/platform.js.map +1 -0
- package/build/worker/render-worker.d.ts +112 -0
- package/build/worker/render-worker.js +936 -0
- package/build/worker/render-worker.js.map +1 -0
- package/build/worker/scene-manager.d.ts +26 -0
- package/build/worker/scene-manager.js +99 -0
- package/build/worker/scene-manager.js.map +1 -0
- package/build/worker/scroll-optimizer.d.ts +32 -0
- package/build/worker/scroll-optimizer.js +110 -0
- package/build/worker/scroll-optimizer.js.map +1 -0
- package/build/worker/terminal-writer.d.ts +116 -0
- package/build/worker/terminal-writer.js +722 -0
- package/build/worker/terminal-writer.js.map +1 -0
- package/build/worker/worker-entry.d.ts +6 -0
- package/build/worker/worker-entry.js +130 -0
- package/build/worker/worker-entry.js.map +1 -0
- package/build/wrap-text.d.ts +6 -0
- package/build/wrap-text.js +120 -0
- package/build/wrap-text.js.map +1 -0
- package/package.json +3 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
import React, { PureComponent, type ReactNode } from 'react';
|
|
3
3
|
import { type Selection } from '../selection.js';
|
|
4
|
+
import { type InkOptions } from './AppContext.js';
|
|
4
5
|
type Props = {
|
|
5
6
|
readonly children: ReactNode;
|
|
6
7
|
readonly stdin: NodeJS.ReadStream;
|
|
@@ -12,6 +13,11 @@ type Props = {
|
|
|
12
13
|
readonly onExit: (error?: Error) => void;
|
|
13
14
|
readonly onRerender: () => void;
|
|
14
15
|
readonly selection?: Selection;
|
|
16
|
+
readonly options: InkOptions;
|
|
17
|
+
readonly setOptions: (options: Partial<InkOptions>) => void;
|
|
18
|
+
readonly dumpCurrentFrame: (filename: string) => void;
|
|
19
|
+
readonly startRecording: (filename: string) => void;
|
|
20
|
+
readonly stopRecording: () => void;
|
|
15
21
|
};
|
|
16
22
|
type State = {
|
|
17
23
|
readonly isFocusEnabled: boolean;
|
package/build/components/App.js
CHANGED
|
@@ -43,6 +43,11 @@ export default class App extends PureComponent {
|
|
|
43
43
|
exit: this.handleExit,
|
|
44
44
|
rerender: this.props.onRerender,
|
|
45
45
|
selection: this.props.selection,
|
|
46
|
+
options: this.props.options,
|
|
47
|
+
setOptions: this.props.setOptions,
|
|
48
|
+
dumpCurrentFrame: this.props.dumpCurrentFrame,
|
|
49
|
+
startRecording: this.props.startRecording,
|
|
50
|
+
stopRecording: this.props.stopRecording,
|
|
46
51
|
} },
|
|
47
52
|
React.createElement(StdinContext.Provider
|
|
48
53
|
// eslint-disable-next-line react/jsx-no-constructed-context-values
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/components/App.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,KAAK,EAAE,EAAC,aAAa,EAAiB,MAAM,OAAO,CAAC;AAC3D,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,OAAO,
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../src/components/App.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
import { type Selection } from '../selection.js';
|
|
2
|
+
export type InkOptions = {
|
|
3
|
+
readonly isAlternateBufferEnabled?: boolean;
|
|
4
|
+
readonly stickyHeadersInBackbuffer?: boolean;
|
|
5
|
+
readonly animatedScroll?: boolean;
|
|
6
|
+
readonly animationInterval?: number;
|
|
7
|
+
readonly backbufferUpdateDelay?: number;
|
|
8
|
+
readonly maxScrollbackLength?: number;
|
|
9
|
+
/**
|
|
10
|
+
* When set to true, Ink will attempt to force the terminal to scroll to the bottom
|
|
11
|
+
* when performing a full re-render (e.g. when the backbuffer is refreshed).
|
|
12
|
+
*
|
|
13
|
+
* Currently this is only supported in VS Code due to lack of robust APIs in other
|
|
14
|
+
* terminals to force scrolling to the bottom.
|
|
15
|
+
*/
|
|
16
|
+
readonly forceScrollToBottomOnBackbufferRefresh?: boolean;
|
|
17
|
+
};
|
|
2
18
|
export type Props = {
|
|
3
19
|
/**
|
|
4
20
|
Exit (unmount) the whole Ink app.
|
|
@@ -9,9 +25,28 @@ export type Props = {
|
|
|
9
25
|
*/
|
|
10
26
|
readonly rerender: () => void;
|
|
11
27
|
readonly selection?: Selection;
|
|
28
|
+
readonly options: InkOptions;
|
|
29
|
+
readonly setOptions: (options: Partial<InkOptions>) => void;
|
|
30
|
+
/**
|
|
31
|
+
* Exports the current internal rendering state to a JSON file and a human-readable text dump.
|
|
32
|
+
* Only supported when `terminalBuffer` is enabled.
|
|
33
|
+
* @param filename The path/name for the JSON file (e.g., 'snapshot.json').
|
|
34
|
+
*/
|
|
35
|
+
readonly dumpCurrentFrame: (filename: string) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Starts recording internal rendering states (frames) to a sequence.
|
|
38
|
+
* Only supported when `terminalBuffer` is enabled.
|
|
39
|
+
* @param filename The path/name for the JSON file where the sequence will be saved when stopped.
|
|
40
|
+
*/
|
|
41
|
+
readonly startRecording: (filename: string) => void;
|
|
42
|
+
/**
|
|
43
|
+
* Stops recording and saves the collected frames to the filename specified in `startRecording`.
|
|
44
|
+
* Only supported when `terminalBuffer` is enabled.
|
|
45
|
+
*/
|
|
46
|
+
readonly stopRecording: () => void;
|
|
12
47
|
};
|
|
13
48
|
/**
|
|
14
49
|
`AppContext` is a React context that exposes a method to manually exit the app (unmount).
|
|
15
50
|
*/
|
|
16
|
-
declare const AppContext: import("react").Context<Props>;
|
|
51
|
+
export declare const AppContext: import("react").Context<Props>;
|
|
17
52
|
export default AppContext;
|
|
@@ -3,10 +3,15 @@ import { createContext } from 'react';
|
|
|
3
3
|
`AppContext` is a React context that exposes a method to manually exit the app (unmount).
|
|
4
4
|
*/
|
|
5
5
|
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
6
|
-
const AppContext = createContext({
|
|
6
|
+
export const AppContext = createContext({
|
|
7
7
|
exit() { },
|
|
8
8
|
rerender() { },
|
|
9
|
+
options: {},
|
|
10
|
+
setOptions() { },
|
|
11
|
+
dumpCurrentFrame() { },
|
|
12
|
+
startRecording() { },
|
|
13
|
+
stopRecording() { },
|
|
9
14
|
});
|
|
10
|
-
AppContext.displayName = '
|
|
15
|
+
AppContext.displayName = 'AppContext';
|
|
11
16
|
export default AppContext;
|
|
12
17
|
//# sourceMappingURL=AppContext.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppContext.js","sourceRoot":"","sources":["../../src/components/AppContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AppContext.js","sourceRoot":"","sources":["../../src/components/AppContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,OAAO,CAAC;AAwDpC;;EAEE;AACF,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAQ;IAC9C,IAAI,KAAI,CAAC;IACT,QAAQ,KAAI,CAAC;IACb,OAAO,EAAE,EAAE;IACX,UAAU,KAAI,CAAC;IACf,gBAAgB,KAAI,CAAC;IACrB,cAAc,KAAI,CAAC;IACnB,aAAa,KAAI,CAAC;CAClB,CAAC,CAAC;AAEH,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC;AAEtC,eAAe,UAAU,CAAC"}
|
|
@@ -36,11 +36,22 @@ export type Props = Except<Styles, 'textWrap'> & {
|
|
|
36
36
|
/**
|
|
37
37
|
* Make the element sticky.
|
|
38
38
|
*/
|
|
39
|
-
readonly sticky?: boolean;
|
|
39
|
+
readonly sticky?: boolean | 'top' | 'bottom';
|
|
40
40
|
/**
|
|
41
41
|
* Content to render when the element is sticky.
|
|
42
42
|
*/
|
|
43
43
|
readonly stickyChildren?: ReactNode;
|
|
44
|
+
/**
|
|
45
|
+
* Whether to render scrollbars if the element is scrollable.
|
|
46
|
+
* @default true
|
|
47
|
+
*/
|
|
48
|
+
readonly scrollbar?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Keep the scrollback history stable when content shrinks.
|
|
51
|
+
* Only applies when `overflowToBackbuffer` is also enabled.
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
readonly stableScrollback?: boolean;
|
|
44
55
|
};
|
|
45
56
|
/**
|
|
46
57
|
`<Box>` is an essential Ink component to build your layout. It's like `<div style="display: flex">` in the browser.
|
|
@@ -97,6 +108,8 @@ declare const Box: React.ForwardRefExoticComponent<{
|
|
|
97
108
|
readonly overflow?: "visible" | "hidden" | "scroll" | undefined;
|
|
98
109
|
readonly overflowX?: "visible" | "hidden" | "scroll" | undefined;
|
|
99
110
|
readonly overflowY?: "visible" | "hidden" | "scroll" | undefined;
|
|
111
|
+
readonly overflowToBackbuffer?: boolean | undefined;
|
|
112
|
+
readonly stableScrollback?: boolean | undefined;
|
|
100
113
|
readonly backgroundColor?: import("type-fest").LiteralUnion<import("ansi-styles").ForegroundColorName, string> | undefined;
|
|
101
114
|
readonly scrollTop?: number | undefined;
|
|
102
115
|
readonly scrollLeft?: number | undefined;
|
|
@@ -136,11 +149,22 @@ declare const Box: React.ForwardRefExoticComponent<{
|
|
|
136
149
|
/**
|
|
137
150
|
* Make the element sticky.
|
|
138
151
|
*/
|
|
139
|
-
readonly sticky?: boolean;
|
|
152
|
+
readonly sticky?: boolean | "top" | "bottom";
|
|
140
153
|
/**
|
|
141
154
|
* Content to render when the element is sticky.
|
|
142
155
|
*/
|
|
143
156
|
readonly stickyChildren?: ReactNode;
|
|
157
|
+
/**
|
|
158
|
+
* Whether to render scrollbars if the element is scrollable.
|
|
159
|
+
* @default true
|
|
160
|
+
*/
|
|
161
|
+
readonly scrollbar?: boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Keep the scrollback history stable when content shrinks.
|
|
164
|
+
* Only applies when `overflowToBackbuffer` is also enabled.
|
|
165
|
+
* @default false
|
|
166
|
+
*/
|
|
167
|
+
readonly stableScrollback?: boolean;
|
|
144
168
|
} & {
|
|
145
169
|
children?: ReactNode | undefined;
|
|
146
170
|
} & React.RefAttributes<DOMElement>>;
|
package/build/components/Box.js
CHANGED
|
@@ -4,7 +4,7 @@ import { backgroundContext } from './BackgroundContext.js';
|
|
|
4
4
|
/**
|
|
5
5
|
`<Box>` is an essential Ink component to build your layout. It's like `<div style="display: flex">` in the browser.
|
|
6
6
|
*/
|
|
7
|
-
const Box = forwardRef(({ children, stickyChildren, backgroundColor, 'aria-label': ariaLabel, 'aria-hidden': ariaHidden, 'aria-role': role, 'aria-state': ariaState, sticky, opaque, ...style }, ref) => {
|
|
7
|
+
const Box = forwardRef(({ children, stickyChildren, backgroundColor, 'aria-label': ariaLabel, 'aria-hidden': ariaHidden, 'aria-role': role, 'aria-state': ariaState, sticky, opaque, scrollbar = true, stableScrollback = false, ...style }, ref) => {
|
|
8
8
|
const { isScreenReaderEnabled } = useContext(accessibilityContext);
|
|
9
9
|
const label = ariaLabel ? React.createElement("ink-text", null, ariaLabel) : undefined;
|
|
10
10
|
if (isScreenReaderEnabled && ariaHidden) {
|
|
@@ -17,12 +17,13 @@ const Box = forwardRef(({ children, stickyChildren, backgroundColor, 'aria-label
|
|
|
17
17
|
flexShrink: 1,
|
|
18
18
|
...style,
|
|
19
19
|
backgroundColor,
|
|
20
|
+
stableScrollback,
|
|
20
21
|
overflowX: style.overflowX ?? style.overflow ?? 'visible',
|
|
21
22
|
overflowY: style.overflowY ?? style.overflow ?? 'visible',
|
|
22
23
|
}, internal_accessibility: {
|
|
23
24
|
role,
|
|
24
25
|
state: ariaState,
|
|
25
|
-
}, sticky: sticky, opaque: opaque },
|
|
26
|
+
}, sticky: sticky, opaque: opaque, scrollbar: scrollbar, stableScrollback: stableScrollback },
|
|
26
27
|
isScreenReaderEnabled && label ? label : children,
|
|
27
28
|
sticky && stickyChildren && !isScreenReaderEnabled && (React.createElement("ink-box", { internalStickyAlternate: true, style: {
|
|
28
29
|
position: 'absolute',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../src/components/Box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACb,UAAU,EACV,UAAU,GAGV,MAAM,OAAO,CAAC;AAIf,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"Box.js","sourceRoot":"","sources":["../../src/components/Box.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACb,UAAU,EACV,UAAU,GAGV,MAAM,OAAO,CAAC;AAIf,OAAO,EAAC,oBAAoB,EAAC,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAC,iBAAiB,EAAC,MAAM,wBAAwB,CAAC;AAgFzD;;EAEE;AACF,MAAM,GAAG,GAAG,UAAU,CACrB,CACC,EACC,QAAQ,EACR,cAAc,EACd,eAAe,EACf,YAAY,EAAE,SAAS,EACvB,aAAa,EAAE,UAAU,EACzB,WAAW,EAAE,IAAI,EACjB,YAAY,EAAE,SAAS,EACvB,MAAM,EACN,MAAM,EACN,SAAS,GAAG,IAAI,EAChB,gBAAgB,GAAG,KAAK,EACxB,GAAG,KAAK,EACR,EACD,GAAG,EACF,EAAE;IACH,MAAM,EAAC,qBAAqB,EAAC,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,sCAAW,SAAS,CAAY,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,IAAI,qBAAqB,IAAI,UAAU,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,UAAU,GAAG,CAClB,iCACC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE;YACN,QAAQ,EAAE,QAAQ;YAClB,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,CAAC;YACX,UAAU,EAAE,CAAC;YACb,GAAG,KAAK;YACR,eAAe;YACf,gBAAgB;YAChB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS;YACzD,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,QAAQ,IAAI,SAAS;SACzD,EACD,sBAAsB,EAAE;YACvB,IAAI;YACJ,KAAK,EAAE,SAAS;SAChB,EACD,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,gBAAgB,EAAE,gBAAgB;QAEjC,qBAAqB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;QACjD,MAAM,IAAI,cAAc,IAAI,CAAC,qBAAqB,IAAI,CACtD,iCACC,uBAAuB,QACvB,KAAK,EAAE;gBACN,QAAQ,EAAE,UAAU;gBACpB,GAAG,KAAK;aACR,IAEA,cAAc,CACN,CACV,CACQ,CACV,CAAC;IAEF,yEAAyE;IACzE,IAAI,eAAe,EAAE,CAAC;QACrB,OAAO,CACN,oBAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,EAAE,eAAe,IAChD,UAAU,CACiB,CAC7B,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACnB,CAAC,CACD,CAAC;AAEF,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;AAExB,eAAe,GAAG,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React, { type ReactNode } from 'react';
|
|
2
|
+
import { type Styles } from '../styles.js';
|
|
3
|
+
export type Props = {
|
|
4
|
+
readonly children: ReactNode;
|
|
5
|
+
readonly width: number;
|
|
6
|
+
readonly style?: Styles;
|
|
7
|
+
};
|
|
8
|
+
export default function StaticRender({ children, width, style }: Props): React.JSX.Element;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React, { useRef } from 'react';
|
|
2
|
+
import { renderToStatic } from '../render-node-to-output.js';
|
|
3
|
+
export default function StaticRender({ children, width, style }) {
|
|
4
|
+
const ref = useRef(null);
|
|
5
|
+
return (React.createElement("ink-static-render", { ref: ref, style: { ...style, width }, internalOnBeforeRender: (node) => {
|
|
6
|
+
if (node && !node.cachedRender) {
|
|
7
|
+
renderToStatic(node);
|
|
8
|
+
}
|
|
9
|
+
} }, children));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=StaticRender.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StaticRender.js","sourceRoot":"","sources":["../../src/components/StaticRender.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,MAAM,EAAiB,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAS3D,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAQ;IACnE,MAAM,GAAG,GAAG,MAAM,CAAa,IAAI,CAAC,CAAC;IAErC,OAAO,CACN,2CACC,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,EAAC,GAAG,KAAK,EAAE,KAAK,EAAC,EACxB,sBAAsB,EAAE,CAAC,IAAgB,EAAE,EAAE;YAC5C,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChC,cAAc,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;QACF,CAAC,IAEA,QAAQ,CACU,CACpB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import process from 'node:process';
|
|
4
|
+
const debugLogEnabled = false;
|
|
5
|
+
let isFirstRun = true;
|
|
6
|
+
const logFilePath = path.join(process.cwd(), 'debug.log');
|
|
7
|
+
let logStream;
|
|
8
|
+
export const debugLog = (message) => {
|
|
9
|
+
if (!debugLogEnabled) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
if (isFirstRun) {
|
|
13
|
+
try {
|
|
14
|
+
logStream = fs.createWriteStream(logFilePath, { flags: 'w' });
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
process.stderr.write(`[debug-log] Failed to start writing to debug file ${logFilePath} in debugLog: ${String(error)}\n`);
|
|
18
|
+
}
|
|
19
|
+
isFirstRun = false;
|
|
20
|
+
}
|
|
21
|
+
if (logStream) {
|
|
22
|
+
try {
|
|
23
|
+
logStream.write(message + '\n');
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
process.stderr.write(`[debug-log] Failed to write to debug file ${logFilePath} in debugLog: ${String(error)}\n`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export const clearDebugLog = () => {
|
|
31
|
+
if (!debugLogEnabled) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (logStream) {
|
|
35
|
+
logStream.end();
|
|
36
|
+
}
|
|
37
|
+
try {
|
|
38
|
+
logStream = fs.createWriteStream(logFilePath, { flags: 'w' });
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
process.stderr.write(`[debug-log] Failed to start writing to debug file ${logFilePath} in clearDebugLog: ${String(error)}\n`);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=debug-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug-log.js","sourceRoot":"","sources":["../src/debug-log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,eAAe,GAAG,KAAK,CAAC;AAC9B,IAAI,UAAU,GAAG,IAAI,CAAC;AACtB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAC1D,IAAI,SAAqC,CAAC;AAE1C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAe,EAAE,EAAE;IAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACtB,OAAO;IACR,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QAChB,IAAI,CAAC;YACJ,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,qDAAqD,WAAW,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,CAClG,CAAC;QACH,CAAC;QAED,UAAU,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACf,IAAI,CAAC;YACJ,SAAS,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,6CAA6C,WAAW,iBAAiB,MAAM,CAAC,KAAK,CAAC,IAAI,CAC1F,CAAC;QACH,CAAC;IACF,CAAC;AACF,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IACjC,IAAI,CAAC,eAAe,EAAE,CAAC;QACtB,OAAO;IACR,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACf,SAAS,CAAC,GAAG,EAAE,CAAC;IACjB,CAAC;IAED,IAAI,CAAC;QACJ,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAC,KAAK,EAAE,GAAG,EAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,MAAM,CAAC,KAAK,CACnB,qDAAqD,WAAW,sBAAsB,MAAM,CAAC,KAAK,CAAC,IAAI,CACvG,CAAC;IACH,CAAC;AACF,CAAC,CAAC"}
|
package/build/dom.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
import { type StyledChar } from '@alcalzone/ansi-tokenize';
|
|
1
2
|
import { type Node as YogaNode } from 'yoga-layout';
|
|
2
3
|
import { type Styles } from './styles.js';
|
|
3
4
|
import { type OutputTransformer } from './render-node-to-output.js';
|
|
4
5
|
import type ResizeObserver from './resize-observer.js';
|
|
6
|
+
import { type Region } from './output.js';
|
|
5
7
|
type InkNode = {
|
|
6
8
|
parentNode: DOMElement | undefined;
|
|
7
9
|
yogaNode?: YogaNode;
|
|
@@ -9,8 +11,32 @@ type InkNode = {
|
|
|
9
11
|
style: Styles;
|
|
10
12
|
};
|
|
11
13
|
export type TextName = '#text';
|
|
12
|
-
export type ElementNames = 'ink-root' | 'ink-box' | 'ink-text' | 'ink-virtual-text';
|
|
14
|
+
export type ElementNames = 'ink-root' | 'ink-box' | 'ink-text' | 'ink-virtual-text' | 'ink-static-render';
|
|
13
15
|
export type NodeNames = ElementNames | TextName;
|
|
16
|
+
export type StickyHeader = {
|
|
17
|
+
nodeId: number;
|
|
18
|
+
lines: StyledChar[][];
|
|
19
|
+
stuckLines?: StyledChar[][];
|
|
20
|
+
styledOutput: StyledChar[][];
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
naturalRow: number;
|
|
24
|
+
startRow: number;
|
|
25
|
+
endRow: number;
|
|
26
|
+
scrollContainerId: number | string;
|
|
27
|
+
isStuckOnly: boolean;
|
|
28
|
+
relativeX?: number;
|
|
29
|
+
relativeY?: number;
|
|
30
|
+
height?: number;
|
|
31
|
+
parentRelativeTop?: number;
|
|
32
|
+
parentHeight?: number;
|
|
33
|
+
parentBorderTop?: number;
|
|
34
|
+
parentBorderBottom?: number;
|
|
35
|
+
type?: 'top' | 'bottom';
|
|
36
|
+
node?: DOMElement;
|
|
37
|
+
maxStuckY?: number;
|
|
38
|
+
minStuckY?: number;
|
|
39
|
+
};
|
|
14
40
|
export type DOMElement = {
|
|
15
41
|
nodeName: ElementNames;
|
|
16
42
|
attributes: Record<string, DOMNodeAttribute>;
|
|
@@ -18,6 +44,8 @@ export type DOMElement = {
|
|
|
18
44
|
internal_transform?: OutputTransformer;
|
|
19
45
|
internal_terminalCursorFocus?: boolean;
|
|
20
46
|
internal_terminalCursorPosition?: number;
|
|
47
|
+
internalOnBeforeRender?: (node: DOMElement) => void;
|
|
48
|
+
cachedRender?: Region;
|
|
21
49
|
internal_accessibility?: {
|
|
22
50
|
role?: 'button' | 'checkbox' | 'combobox' | 'list' | 'listbox' | 'listitem' | 'menu' | 'menuitem' | 'option' | 'progressbar' | 'radio' | 'radiogroup' | 'tab' | 'tablist' | 'table' | 'textbox' | 'timer' | 'toolbar';
|
|
23
51
|
state?: {
|
|
@@ -38,19 +66,24 @@ export type DOMElement = {
|
|
|
38
66
|
onRender?: () => void;
|
|
39
67
|
onImmediateRender?: () => void;
|
|
40
68
|
internal_scrollState?: ScrollState;
|
|
41
|
-
internalSticky?: boolean;
|
|
69
|
+
internalSticky?: boolean | 'top' | 'bottom';
|
|
42
70
|
internalStickyAlternate?: boolean;
|
|
43
|
-
|
|
71
|
+
internalOpaque?: boolean;
|
|
72
|
+
internalScrollbar?: boolean;
|
|
44
73
|
resizeObservers?: Set<ResizeObserver>;
|
|
45
74
|
internal_lastMeasuredSize?: {
|
|
46
75
|
width: number;
|
|
47
76
|
height: number;
|
|
48
77
|
};
|
|
78
|
+
internalMaxScrollTop?: number;
|
|
79
|
+
internalIsScrollbackDirty?: boolean;
|
|
80
|
+
internalId: number;
|
|
49
81
|
} & InkNode;
|
|
50
82
|
export type ScrollState = {
|
|
51
83
|
scrollTop: number;
|
|
52
84
|
scrollLeft: number;
|
|
53
85
|
scrollHeight: number;
|
|
86
|
+
actualScrollHeight: number;
|
|
54
87
|
scrollWidth: number;
|
|
55
88
|
clientHeight: number;
|
|
56
89
|
clientWidth: number;
|
|
@@ -72,6 +105,7 @@ export declare const removeChildNode: (node: DOMElement, removeNode: DOMNode) =>
|
|
|
72
105
|
export declare const setAttribute: (node: DOMElement, key: string, value: DOMNodeAttribute) => void;
|
|
73
106
|
export declare const setStyle: (node: DOMNode, style: Styles) => void;
|
|
74
107
|
export declare const createTextNode: (text: string) => TextNode;
|
|
108
|
+
export declare const setCachedRender: (node: DOMElement, cachedRender: Region) => void;
|
|
75
109
|
export declare const setTextNodeValue: (node: TextNode, text: string) => void;
|
|
76
110
|
export declare const getPathToRoot: (node: DOMNode) => DOMNode[];
|
|
77
111
|
export declare const isNodeSelectable: (node: DOMElement) => boolean;
|
package/build/dom.js
CHANGED
|
@@ -2,6 +2,7 @@ import Yoga from 'yoga-layout';
|
|
|
2
2
|
import { measureStyledChars, toStyledCharacters, widestLineFromStyledChars, } from './measure-text.js';
|
|
3
3
|
import { wrapOrTruncateStyledChars } from './text-wrap.js';
|
|
4
4
|
import squashTextNodes from './squash-text-nodes.js';
|
|
5
|
+
let idCounter = 0;
|
|
5
6
|
export const createNode = (nodeName) => {
|
|
6
7
|
const node = {
|
|
7
8
|
nodeName,
|
|
@@ -14,6 +15,11 @@ export const createNode = (nodeName) => {
|
|
|
14
15
|
internal_accessibility: {},
|
|
15
16
|
internalSticky: false,
|
|
16
17
|
internalStickyAlternate: false,
|
|
18
|
+
internalOpaque: false,
|
|
19
|
+
internalScrollbar: true,
|
|
20
|
+
internalMaxScrollTop: 0,
|
|
21
|
+
internalIsScrollbackDirty: false,
|
|
22
|
+
internalId: idCounter++,
|
|
17
23
|
};
|
|
18
24
|
if (nodeName === 'ink-text') {
|
|
19
25
|
node.yogaNode?.setMeasureFunc(measureTextNode.bind(null, node));
|
|
@@ -59,13 +65,13 @@ export const removeChildNode = (node, removeNode) => {
|
|
|
59
65
|
removeNode.parentNode?.yogaNode?.removeChild(removeNode.yogaNode);
|
|
60
66
|
}
|
|
61
67
|
removeNode.parentNode = undefined;
|
|
68
|
+
if (node.nodeName === 'ink-text' || node.nodeName === 'ink-virtual-text') {
|
|
69
|
+
markNodeAsDirty(node);
|
|
70
|
+
}
|
|
62
71
|
const index = node.childNodes.indexOf(removeNode);
|
|
63
72
|
if (index >= 0) {
|
|
64
73
|
node.childNodes.splice(index, 1);
|
|
65
74
|
}
|
|
66
|
-
if (node.nodeName === 'ink-text' || node.nodeName === 'ink-virtual-text') {
|
|
67
|
-
markNodeAsDirty(node);
|
|
68
|
-
}
|
|
69
75
|
};
|
|
70
76
|
export const setAttribute = (node, key, value) => {
|
|
71
77
|
if (key === 'internal_accessibility') {
|
|
@@ -113,6 +119,16 @@ const findClosestYogaNode = (node) => {
|
|
|
113
119
|
}
|
|
114
120
|
return node.yogaNode ?? findClosestYogaNode(node.parentNode);
|
|
115
121
|
};
|
|
122
|
+
export const setCachedRender = (node, cachedRender) => {
|
|
123
|
+
node.cachedRender = cachedRender;
|
|
124
|
+
if (node.yogaNode) {
|
|
125
|
+
node.yogaNode.setWidth(cachedRender.width);
|
|
126
|
+
node.yogaNode.setHeight(cachedRender.height);
|
|
127
|
+
while (node.yogaNode.getChildCount() > 0) {
|
|
128
|
+
node.yogaNode.removeChild(node.yogaNode.getChild(0));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
116
132
|
const markNodeAsDirty = (node) => {
|
|
117
133
|
// Mark closest Yoga node as dirty to measure text dimensions again
|
|
118
134
|
const yogaNode = findClosestYogaNode(node);
|
package/build/dom.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../src/dom.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
CHANGED
|
@@ -5,11 +5,14 @@ export { default as Box } from './components/Box.js';
|
|
|
5
5
|
export type { Props as TextProps } from './components/Text.js';
|
|
6
6
|
export { default as Text } from './components/Text.js';
|
|
7
7
|
export type { Props as AppProps } from './components/AppContext.js';
|
|
8
|
+
export { default as AppContext } from './components/AppContext.js';
|
|
8
9
|
export type { Props as StdinProps } from './components/StdinContext.js';
|
|
9
10
|
export type { Props as StdoutProps } from './components/StdoutContext.js';
|
|
10
11
|
export type { Props as StderrProps } from './components/StderrContext.js';
|
|
11
12
|
export type { Props as StaticProps } from './components/Static.js';
|
|
12
13
|
export { default as Static } from './components/Static.js';
|
|
14
|
+
export type { Props as StaticRenderProps } from './components/StaticRender.js';
|
|
15
|
+
export { default as StaticRender } from './components/StaticRender.js';
|
|
13
16
|
export type { Props as TransformProps } from './components/Transform.js';
|
|
14
17
|
export { default as Transform } from './components/Transform.js';
|
|
15
18
|
export type { Props as NewlineProps } from './components/Newline.js';
|
|
@@ -24,7 +27,7 @@ export { default as useStderr } from './hooks/use-stderr.js';
|
|
|
24
27
|
export { default as useFocus } from './hooks/use-focus.js';
|
|
25
28
|
export { default as useFocusManager } from './hooks/use-focus-manager.js';
|
|
26
29
|
export { default as useIsScreenReaderEnabled } from './hooks/use-is-screen-reader-enabled.js';
|
|
27
|
-
export { default as measureElement, getBoundingBox, getInnerWidth, getInnerHeight, getVerticalScrollbarBoundingBox, getHorizontalScrollbarBoundingBox, getText, getTextOffset, hitTest, findNodeAtOffset, type ScrollbarBoundingBox, } from './measure-element.js';
|
|
30
|
+
export { default as measureElement, getBoundingBox, getInnerWidth, getInnerHeight, getVerticalScrollbarBoundingBox, getHorizontalScrollbarBoundingBox, getAddedScrollHeight, getText, getTextOffset, hitTest, findNodeAtOffset, type ScrollbarBoundingBox, } from './measure-element.js';
|
|
28
31
|
export { getScrollHeight, getScrollWidth } from './scroll.js';
|
|
29
32
|
export { clearStringWidthCache, setStringWidthFunction, styledCharsWidth, widestLineFromStyledChars, toStyledCharacters, styledCharsToString, wordBreakStyledChars, } from './measure-text.js';
|
|
30
33
|
export { type DOMElement, type DOMNode, getPathToRoot } from './dom.js';
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export { default as render } from './render.js';
|
|
2
2
|
export { default as Box } from './components/Box.js';
|
|
3
3
|
export { default as Text } from './components/Text.js';
|
|
4
|
+
export { default as AppContext } from './components/AppContext.js';
|
|
4
5
|
export { default as Static } from './components/Static.js';
|
|
6
|
+
export { default as StaticRender } from './components/StaticRender.js';
|
|
5
7
|
export { default as Transform } from './components/Transform.js';
|
|
6
8
|
export { default as Newline } from './components/Newline.js';
|
|
7
9
|
export { default as Spacer } from './components/Spacer.js';
|
|
@@ -13,7 +15,7 @@ export { default as useStderr } from './hooks/use-stderr.js';
|
|
|
13
15
|
export { default as useFocus } from './hooks/use-focus.js';
|
|
14
16
|
export { default as useFocusManager } from './hooks/use-focus-manager.js';
|
|
15
17
|
export { default as useIsScreenReaderEnabled } from './hooks/use-is-screen-reader-enabled.js';
|
|
16
|
-
export { default as measureElement, getBoundingBox, getInnerWidth, getInnerHeight, getVerticalScrollbarBoundingBox, getHorizontalScrollbarBoundingBox, getText, getTextOffset, hitTest, findNodeAtOffset, } from './measure-element.js';
|
|
18
|
+
export { default as measureElement, getBoundingBox, getInnerWidth, getInnerHeight, getVerticalScrollbarBoundingBox, getHorizontalScrollbarBoundingBox, getAddedScrollHeight, getText, getTextOffset, hitTest, findNodeAtOffset, } from './measure-element.js';
|
|
17
19
|
export { getScrollHeight, getScrollWidth } from './scroll.js';
|
|
18
20
|
export { clearStringWidthCache, setStringWidthFunction, styledCharsWidth, widestLineFromStyledChars, toStyledCharacters, styledCharsToString, wordBreakStyledChars, } from './measure-text.js';
|
|
19
21
|
export { getPathToRoot } from './dom.js';
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAC,OAAO,IAAI,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAC,OAAO,IAAI,GAAG,EAAC,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAC,OAAO,IAAI,UAAU,EAAC,MAAM,4BAA4B,CAAC;AAKjE,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,8BAA8B,CAAC;AAErE,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAC,OAAO,IAAI,OAAO,EAAC,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,MAAM,EAAC,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,SAAS,EAAC,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAC,OAAO,IAAI,QAAQ,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAC,OAAO,IAAI,wBAAwB,EAAC,MAAM,yCAAyC,CAAC;AAC5F,OAAO,EACN,OAAO,IAAI,cAAc,EACzB,cAAc,EACd,aAAa,EACb,cAAc,EACd,+BAA+B,EAC/B,iCAAiC,EACjC,oBAAoB,EACpB,OAAO,EACP,aAAa,EACb,OAAO,EACP,gBAAgB,GAEhB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,eAAe,EAAE,cAAc,EAAC,MAAM,aAAa,CAAC;AAC5D,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EACtB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAgC,aAAa,EAAC,MAAM,UAAU,CAAC;AAEtE,OAAO,EACN,OAAO,IAAI,cAAc,EACzB,mBAAmB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC"}
|
package/build/ink.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type ReactNode } from 'react';
|
|
2
2
|
import { type StyledChar } from '@alcalzone/ansi-tokenize';
|
|
3
3
|
import * as dom from './dom.js';
|
|
4
|
+
import { type InkOptions } from './components/AppContext.js';
|
|
4
5
|
import ResizeObserver, { ResizeObserverEntry } from './resize-observer.js';
|
|
5
6
|
import { Selection } from './selection.js';
|
|
6
7
|
/**
|
|
@@ -33,23 +34,35 @@ export type Options = {
|
|
|
33
34
|
maxFps?: number;
|
|
34
35
|
alternateBuffer?: boolean;
|
|
35
36
|
alternateBufferAlreadyActive?: boolean;
|
|
37
|
+
isAlternateBufferEnabled?: boolean;
|
|
38
|
+
stickyHeadersInBackbuffer?: boolean;
|
|
36
39
|
incrementalRendering?: boolean;
|
|
37
40
|
debugRainbow?: boolean;
|
|
41
|
+
animatedScroll?: boolean;
|
|
42
|
+
animationInterval?: number;
|
|
43
|
+
backbufferUpdateDelay?: number;
|
|
44
|
+
maxScrollbackLength?: number;
|
|
45
|
+
forceScrollToBottomOnBackbufferRefresh?: boolean;
|
|
38
46
|
selectionStyle?: (char: StyledChar) => StyledChar;
|
|
39
47
|
standardReactLayoutTiming?: boolean;
|
|
48
|
+
renderProcess?: boolean;
|
|
49
|
+
terminalBuffer?: boolean;
|
|
40
50
|
};
|
|
41
51
|
export default class Ink {
|
|
52
|
+
readonly rootNode: dom.DOMElement;
|
|
42
53
|
private readonly options;
|
|
43
54
|
private readonly log;
|
|
44
55
|
private readonly throttledLog;
|
|
45
56
|
private readonly isScreenReaderEnabled;
|
|
46
57
|
private readonly selection;
|
|
58
|
+
private readonly terminalBuffer?;
|
|
59
|
+
private optionsState;
|
|
47
60
|
private isUnmounted;
|
|
48
61
|
private lastOutput;
|
|
49
62
|
private lastOutputHeight;
|
|
50
63
|
private lastCursorPosition?;
|
|
51
64
|
private readonly container;
|
|
52
|
-
private
|
|
65
|
+
private node;
|
|
53
66
|
private fullStaticOutput;
|
|
54
67
|
private exitPromise?;
|
|
55
68
|
private restoreConsole?;
|
|
@@ -64,16 +77,30 @@ export default class Ink {
|
|
|
64
77
|
unsubscribeExit: () => void;
|
|
65
78
|
calculateLayout: () => void;
|
|
66
79
|
calculateLayoutAndTriggerObservers(node: dom.DOMElement, observerEntries: Map<ResizeObserver, ResizeObserverEntry[]>): void;
|
|
67
|
-
onRender: () => void
|
|
80
|
+
onRender: () => Promise<void>;
|
|
68
81
|
recalculateLayout(): void;
|
|
69
82
|
onRerender: () => void;
|
|
83
|
+
setOptions: (options: Partial<InkOptions>) => void;
|
|
70
84
|
render(node: ReactNode): void;
|
|
71
85
|
writeToStdout(data: string): void;
|
|
72
86
|
writeToStderr(data: string): void;
|
|
73
87
|
unmount(error?: Error | number | null): void;
|
|
74
88
|
waitUntilExit(): Promise<void>;
|
|
89
|
+
dumpCurrentFrame(filename: string): void;
|
|
90
|
+
startRecording(filename: string): void;
|
|
91
|
+
stopRecording(): void;
|
|
75
92
|
clear(): void;
|
|
76
93
|
patchConsole(): void;
|
|
94
|
+
private renderWithTerminalBuffer;
|
|
95
|
+
private renderDebug;
|
|
96
|
+
private renderCi;
|
|
97
|
+
private renderAlternateBuffer;
|
|
98
|
+
private renderScreenReader;
|
|
99
|
+
private renderFullTerminal;
|
|
100
|
+
/**
|
|
101
|
+
* The goal is to remove this method making terminal buffer required.
|
|
102
|
+
*/
|
|
103
|
+
private renderLegacy;
|
|
77
104
|
private markAllTextNodesDirty;
|
|
78
105
|
private callOnRender;
|
|
79
106
|
}
|