@valyrianjs/terminal 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -55
- package/dist/ansi.d.ts +20 -4
- package/dist/ansi.d.ts.map +1 -1
- package/dist/ansi.js +171 -47
- package/dist/ansi.js.map +1 -1
- package/dist/editor-state.d.ts +22 -0
- package/dist/editor-state.d.ts.map +1 -0
- package/dist/editor-state.js +110 -0
- package/dist/editor-state.js.map +1 -0
- package/dist/events.d.ts +1 -4
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +15 -38
- package/dist/events.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/keymap.d.ts +7 -0
- package/dist/keymap.d.ts.map +1 -0
- package/dist/keymap.js +133 -0
- package/dist/keymap.js.map +1 -0
- package/dist/layout.d.ts +10 -1
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +97 -7
- package/dist/layout.js.map +1 -1
- package/dist/mouse.d.ts +1 -0
- package/dist/mouse.d.ts.map +1 -1
- package/dist/mouse.js +24 -1
- package/dist/mouse.js.map +1 -1
- package/dist/output-writer.d.ts +9 -0
- package/dist/output-writer.d.ts.map +1 -0
- package/dist/output-writer.js +79 -0
- package/dist/output-writer.js.map +1 -0
- package/dist/paste.d.ts +7 -0
- package/dist/paste.d.ts.map +1 -0
- package/dist/paste.js +18 -0
- package/dist/paste.js.map +1 -0
- package/dist/primitives.d.ts +15 -3
- package/dist/primitives.d.ts.map +1 -1
- package/dist/primitives.js +9 -1
- package/dist/primitives.js.map +1 -1
- package/dist/render.d.ts +9 -4
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +923 -68
- package/dist/render.js.map +1 -1
- package/dist/runtime.d.ts +29 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +209 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scheduler.d.ts +8 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +24 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +858 -199
- package/dist/session.js.map +1 -1
- package/dist/stream-log.d.ts +40 -0
- package/dist/stream-log.d.ts.map +1 -0
- package/dist/stream-log.js +73 -0
- package/dist/stream-log.js.map +1 -0
- package/dist/text.d.ts +3 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +19 -0
- package/dist/text.js.map +1 -0
- package/dist/theme.d.ts +7 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +254 -0
- package/dist/theme.js.map +1 -0
- package/dist/tree.d.ts +2 -0
- package/dist/tree.d.ts.map +1 -1
- package/dist/tree.js +42 -1
- package/dist/tree.js.map +1 -1
- package/dist/types.d.ts +203 -24
- package/dist/types.d.ts.map +1 -1
- package/docs/api-reference.md +313 -142
- package/docs/assets/quick-note.svg +13 -0
- package/docs/cookbook.md +296 -201
- package/docs/core-concepts.md +143 -55
- package/docs/getting-started.md +209 -90
- package/docs/interaction-model.md +98 -54
- package/docs/primitive-gallery.md +370 -0
- package/docs/session-runtime.md +131 -362
- package/docs/valyrian-modules.md +3196 -0
- package/llms-full.txt +5377 -0
- package/package.json +21 -8
- package/src/ansi.ts +269 -0
- package/src/clipboard.ts +76 -0
- package/src/editor-state.ts +162 -0
- package/src/events.ts +163 -0
- package/src/index.ts +95 -0
- package/src/keymap.ts +151 -0
- package/src/layout.ts +282 -0
- package/src/mouse.ts +68 -0
- package/src/output-writer.ts +93 -0
- package/src/paste.ts +23 -0
- package/src/primitives.ts +55 -0
- package/src/render.ts +1204 -0
- package/src/runtime.ts +267 -0
- package/src/scheduler.ts +33 -0
- package/src/session.ts +1408 -0
- package/src/stream-log.ts +96 -0
- package/src/text.ts +20 -0
- package/src/theme.ts +263 -0
- package/src/tree.ts +169 -0
- package/src/types.ts +541 -0
- package/tsconfig.json +4 -7
- package/docs/local-demo.md +0 -28
package/README.md
CHANGED
|
@@ -1,71 +1,121 @@
|
|
|
1
|
-
#
|
|
1
|
+
# ValyrianJS Terminal
|
|
2
2
|
|
|
3
|
-
Terminal
|
|
3
|
+
Terminal UI primitives and runtime helpers for Valyrian.js. Use it to render terminal trees as plain text, or mount an interactive session that handles focus, keyboard input, mouse input, clipboard integration, and terminal output.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This package is for developers building text-based interfaces with Valyrian components. It focuses on terminal rendering and interaction, so your app can compose its own routing, commands, data loading, persistence, and application state around a clear terminal UI layer.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- interactive primitives with `Input`, `Button`, `List`, and `ScrollView`
|
|
9
|
-
- static text rendering with `renderTerminal()`
|
|
10
|
-
- interactive runtime with `mountTerminal()`
|
|
11
|
-
|
|
12
|
-
## Installation
|
|
7
|
+
## Install
|
|
13
8
|
|
|
14
9
|
```bash
|
|
15
|
-
npm install valyrianjs
|
|
10
|
+
npm install @valyrianjs/terminal valyrian.js
|
|
16
11
|
```
|
|
17
12
|
|
|
18
|
-
##
|
|
19
|
-
|
|
20
|
-
- Use `renderTerminal()` for snapshots, tests, or non-interactive output.
|
|
21
|
-
- Use `mountTerminal()` when you need focus, keyboard, mouse, clipboard, or writes to `stdout`.
|
|
22
|
-
|
|
23
|
-
## Minimal Example
|
|
24
|
-
|
|
25
|
-
```tsx
|
|
26
|
-
/** @jsx v */
|
|
27
|
-
/** @jsxFrag v.fragment */
|
|
28
|
-
|
|
29
|
-
import { v } from "valyrian.js";
|
|
30
|
-
import { Input, Screen, Text, mountTerminal } from "valyrianjs-terminal";
|
|
13
|
+
## JSX config
|
|
31
14
|
|
|
32
|
-
|
|
15
|
+
For TSX, use Valyrian's automatic JSX runtime:
|
|
33
16
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
state.value = event.value;
|
|
42
|
-
}}
|
|
43
|
-
/>
|
|
44
|
-
<Text>{state.value || "Nothing yet"}</Text>
|
|
45
|
-
</Screen>
|
|
46
|
-
));
|
|
47
|
-
|
|
48
|
-
session.focus("note");
|
|
17
|
+
```json
|
|
18
|
+
{
|
|
19
|
+
"compilerOptions": {
|
|
20
|
+
"jsx": "react-jsx",
|
|
21
|
+
"jsxImportSource": "valyrian.js"
|
|
22
|
+
}
|
|
23
|
+
}
|
|
49
24
|
```
|
|
50
25
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
- `docs/getting-started.md` - first complete flow, from static rendering to an interactive session
|
|
54
|
-
- `docs/core-concepts.md` - mental model: ids, focus, hitboxes, plain output, ANSI, and cleanup
|
|
55
|
-
- `docs/interaction-model.md` - behavior of each primitive and interaction events
|
|
56
|
-
- `docs/session-runtime.md` - session lifecycle, streams, clipboard, coordinates, and runtime
|
|
57
|
-
- `docs/cookbook.md` - short recipes for concrete tasks
|
|
58
|
-
- `docs/api-reference.md` - reference for the public surface and published subpaths
|
|
59
|
-
- `docs/local-demo.md` - repo-local demo, not part of the published package
|
|
26
|
+
## Smallest useful example
|
|
60
27
|
|
|
61
|
-
|
|
28
|
+
Full example: [`examples/docs/interactive-note.tsx`](./examples/docs/interactive-note.tsx)
|
|
62
29
|
|
|
63
|
-
|
|
30
|
+
```tsx
|
|
31
|
+
import { Input, Screen, Text, mountTerminal } from "@valyrianjs/terminal";
|
|
64
32
|
|
|
65
|
-
|
|
33
|
+
const state = { value: "" };
|
|
66
34
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
35
|
+
function App() {
|
|
36
|
+
return (
|
|
37
|
+
<Screen title="Quick note">
|
|
38
|
+
<Text>Type a note. Ctrl+C: exit.</Text>
|
|
39
|
+
<Input
|
|
40
|
+
id="note"
|
|
41
|
+
value={state.value}
|
|
42
|
+
placeholder="Write a note"
|
|
43
|
+
onchange={(event) => {
|
|
44
|
+
state.value = event.value;
|
|
45
|
+
}}
|
|
46
|
+
/>
|
|
47
|
+
<Text>{state.value ? `Draft: ${state.value}` : "Draft: empty"}</Text>
|
|
48
|
+
</Screen>
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (import.meta.main) {
|
|
53
|
+
const session = mountTerminal(<App />);
|
|
54
|
+
session.focus("note");
|
|
55
|
+
}
|
|
71
56
|
```
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
Use `renderTerminal()` for deterministic static output. Use `mountTerminal()` for interactive sessions with focus, keyboard input, lifecycle, and repeated renders. Use [Session Runtime](./docs/session-runtime.md) when streams, resize events, clipboard adapters, or mouse input are part of the host integration.
|
|
61
|
+
|
|
62
|
+
## Docs
|
|
63
|
+
|
|
64
|
+
- [Getting Started](./docs/getting-started.md) - build a first working terminal UI with `main.tsx`, `renderTerminal()`, and `mountTerminal()`.
|
|
65
|
+
- [Core Concepts](./docs/core-concepts.md) - mental model for primitives, state, ids, focus, output, and cleanup.
|
|
66
|
+
- [Cookbook](./docs/cookbook.md) - practical recipes for input, lists, state, Valyrian.js modules, overlays, logs, and full-terminal layout.
|
|
67
|
+
- [Primitive Gallery](./docs/primitive-gallery.md) - choose and compose `Screen`, layout, input, collection, activity, and overlay primitives with complete mini apps.
|
|
68
|
+
- [Interaction Model](./docs/interaction-model.md) - keyboard, focus, event payloads, mouse, and composed interaction behavior.
|
|
69
|
+
- [Session Runtime](./docs/session-runtime.md) - common runtime usage and advanced host integration details.
|
|
70
|
+
- [Valyrian Modules](./docs/valyrian-modules.md) - terminal app patterns for Valyrian.js state, request, query, tasks, forms, persistence, formatting, and utilities.
|
|
71
|
+
- [API Reference](./docs/api-reference.md) - public functions, props, payloads, and session methods.
|
|
72
|
+
|
|
73
|
+
Primitive Gallery maps every public terminal primitive to practical use and complete demos. Try these next:
|
|
74
|
+
|
|
75
|
+
- **Operations Workspace**: `bun examples/docs/primitive-layout-shell.tsx`
|
|
76
|
+
- **Ticket Intake**: `bun examples/docs/primitive-input-workbench.tsx`
|
|
77
|
+
- **Service Explorer**: `bun examples/docs/primitive-data-explorer.tsx`
|
|
78
|
+
- **Activity Console**: `bun examples/docs/primitive-activity-console.tsx`
|
|
79
|
+
- **Command Panel**: `bun examples/docs/primitive-command-panel.tsx`
|
|
80
|
+
|
|
81
|
+
Each example exits with `Ctrl+C`.
|
|
82
|
+
|
|
83
|
+
Valyrian.js modules can power complete terminal apps for state, forms, API calls, async work, formatting, i18n, persistence, and utilities while `@valyrianjs/terminal` renders the interface. See [Valyrian.js modules in terminal apps](./docs/valyrian-modules.md), then run **Operations Workbench** with `bun examples/docs/module-state-workbench.tsx`, **API Operations Dashboard** with `bun examples/docs/module-api-dashboard.tsx`, or **Billing/Settings Wizard** with `bun examples/docs/module-form-workflow.tsx`; each exits with `Ctrl+C`.
|
|
84
|
+
|
|
85
|
+
Core controls use app-like visual defaults from the bundled theme, so buttons, inputs, and lists do not need per-example ASCII chrome. Style examples: [`examples/docs/style-system.tsx`](./examples/docs/style-system.tsx) shows `theme.styles`, `style`, `styles`, and `state` in a runnable ANSI terminal app. Run it with `bun examples/docs/style-system.tsx`, use `Tab`, `Enter`, and `W` to change state, and quit with `Ctrl+C`. Layout examples: [`examples/docs/responsive-split.tsx`](./examples/docs/responsive-split.tsx) shows context-aware `Split` sizing, percent, `fr`, and local split breakpoints. For a full-screen pizza builder with responsive `Split` fractions and simulated checkout, run `bun examples/docs/pizza-builder.tsx`, try `Up/Down`, `Space`, `Enter`, `R`, and `C`, and quit with `Ctrl+C`; or open [`examples/docs/pizza-builder.tsx`](./examples/docs/pizza-builder.tsx).
|
|
86
|
+
|
|
87
|
+
## Run the docs examples
|
|
88
|
+
|
|
89
|
+
Each docs example runs directly as a small terminal app. Use the command shown, try the listed keys, and quit with `Ctrl+C`.
|
|
90
|
+
|
|
91
|
+
| Example | Run | Try |
|
|
92
|
+
| --- | --- | --- |
|
|
93
|
+
| [`examples/docs/hello.tsx`](./examples/docs/hello.tsx) | `bun examples/docs/hello.tsx` | `Enter`, `Ctrl+C` |
|
|
94
|
+
| [`examples/docs/interactive-note.tsx`](./examples/docs/interactive-note.tsx) | `bun examples/docs/interactive-note.tsx` | type a note, `Enter`, `Ctrl+C` |
|
|
95
|
+
| [`examples/docs/component-composition.tsx`](./examples/docs/component-composition.tsx) | `bun examples/docs/component-composition.tsx` | `N/P`, `Ctrl+C` |
|
|
96
|
+
| [`examples/docs/employees-list.tsx`](./examples/docs/employees-list.tsx) | `bun examples/docs/employees-list.tsx` | `J/K` or arrows, `Ctrl+C` |
|
|
97
|
+
| [`examples/docs/theme-colors.tsx`](./examples/docs/theme-colors.tsx) | `bun examples/docs/theme-colors.tsx` | `Tab`, `Ctrl+C` |
|
|
98
|
+
| [`examples/docs/style-system.tsx`](./examples/docs/style-system.tsx) | `bun examples/docs/style-system.tsx` | `Tab`, `Enter`, `W`, `Ctrl+C` |
|
|
99
|
+
| [`examples/docs/responsive-split.tsx`](./examples/docs/responsive-split.tsx) | `bun examples/docs/responsive-split.tsx` | resize terminal, `Ctrl+C` |
|
|
100
|
+
| [`examples/docs/pizza-builder.tsx`](./examples/docs/pizza-builder.tsx) | `bun examples/docs/pizza-builder.tsx` | `Up/Down`, `Space`, `Enter`, `R`, `C`, `Ctrl+C` |
|
|
101
|
+
| [`examples/docs/background-fill.tsx`](./examples/docs/background-fill.tsx) | `bun examples/docs/background-fill.tsx` | `B`, `Ctrl+C` |
|
|
102
|
+
| [`examples/docs/cursor.tsx`](./examples/docs/cursor.tsx) | `bun examples/docs/cursor.tsx` | type text, `C`, `Ctrl+C` |
|
|
103
|
+
| Operations Workspace ([`examples/docs/primitive-layout-shell.tsx`](./examples/docs/primitive-layout-shell.tsx)) | `bun examples/docs/primitive-layout-shell.tsx` | resize terminal, `Ctrl+C` |
|
|
104
|
+
| Ticket Intake ([`examples/docs/primitive-input-workbench.tsx`](./examples/docs/primitive-input-workbench.tsx)) | `bun examples/docs/primitive-input-workbench.tsx` | type summary, `Tab`, `Enter`, `Ctrl+C` |
|
|
105
|
+
| Service Explorer ([`examples/docs/primitive-data-explorer.tsx`](./examples/docs/primitive-data-explorer.tsx)) | `bun examples/docs/primitive-data-explorer.tsx` | `J/K`, `Ctrl+C` |
|
|
106
|
+
| Activity Console ([`examples/docs/primitive-activity-console.tsx`](./examples/docs/primitive-activity-console.tsx)) | `bun examples/docs/primitive-activity-console.tsx` | `Enter`, `Up/Down`, `Ctrl+C` |
|
|
107
|
+
| Command Panel ([`examples/docs/primitive-command-panel.tsx`](./examples/docs/primitive-command-panel.tsx)) | `bun examples/docs/primitive-command-panel.tsx` | type filter, `Up/Down`, `Enter`, `Ctrl+C` |
|
|
108
|
+
| Terminal Command Palette ([`examples/docs/module-valyrian-core.tsx`](./examples/docs/module-valyrian-core.tsx)) | `bun examples/docs/module-valyrian-core.tsx` | `J/K`, `Enter`, `R`, `Ctrl+C` |
|
|
109
|
+
| Live Shift/Ticket Counter ([`examples/docs/module-pulses.tsx`](./examples/docs/module-pulses.tsx)) | `bun examples/docs/module-pulses.tsx` | `A`, `D`, `P`, `R`, `Ctrl+C` |
|
|
110
|
+
| Operations Queue Manager ([`examples/docs/module-flux-store.tsx`](./examples/docs/module-flux-store.tsx)) | `bun examples/docs/module-flux-store.tsx` | `J/K`, `S`, `D`, `B`, `R`, `Ctrl+C` |
|
|
111
|
+
| Service Status Client ([`examples/docs/module-request.tsx`](./examples/docs/module-request.tsx)) | `bun examples/docs/module-request.tsx` | `R`, `E`, `Ctrl+C` |
|
|
112
|
+
| Cached Inventory Browser ([`examples/docs/module-query.tsx`](./examples/docs/module-query.tsx)) | `bun examples/docs/module-query.tsx` | `F`, `I`, `J/K`, `Ctrl+C` |
|
|
113
|
+
| Background Maintenance Runner ([`examples/docs/module-tasks.tsx`](./examples/docs/module-tasks.tsx)) | `bun examples/docs/module-tasks.tsx` | `R`, `C`, `X`, `Z`, `Ctrl+C` |
|
|
114
|
+
| Profile Editor ([`examples/docs/module-forms.tsx`](./examples/docs/module-forms.tsx)) | `bun examples/docs/module-forms.tsx` | type fields, `Enter`, `R`, `Ctrl+C` |
|
|
115
|
+
| Persistent Workspace Settings ([`examples/docs/module-native-store.tsx`](./examples/docs/module-native-store.tsx)) | `bun examples/docs/module-native-store.tsx` | type workspace, `Enter`, `R`, `Ctrl+C` |
|
|
116
|
+
| Bilingual Support Console ([`examples/docs/module-translate.tsx`](./examples/docs/module-translate.tsx)) | `bun examples/docs/module-translate.tsx` | `L`, `J/K`, `F`, `Ctrl+C` |
|
|
117
|
+
| Invoice Calculator ([`examples/docs/module-money.tsx`](./examples/docs/module-money.tsx)) | `bun examples/docs/module-money.tsx` | `J/K`, `+/-`, `D`, `L`, `Ctrl+C` |
|
|
118
|
+
| Account Data Inspector ([`examples/docs/module-utils.tsx`](./examples/docs/module-utils.tsx)) | `bun examples/docs/module-utils.tsx` | `J/K`, `F`, `R`, `Ctrl+C` |
|
|
119
|
+
| Operations Workbench ([`examples/docs/module-state-workbench.tsx`](./examples/docs/module-state-workbench.tsx)) | `bun examples/docs/module-state-workbench.tsx` | `J/K`, `Enter`, `D`, `B`, `R`, `Ctrl+C` |
|
|
120
|
+
| API Operations Dashboard ([`examples/docs/module-api-dashboard.tsx`](./examples/docs/module-api-dashboard.tsx)) | `bun examples/docs/module-api-dashboard.tsx` | `R`, `E`, `I`, `T`, `C`, `Ctrl+C` |
|
|
121
|
+
| Billing/Settings Wizard ([`examples/docs/module-form-workflow.tsx`](./examples/docs/module-form-workflow.tsx)) | `bun examples/docs/module-form-workflow.tsx` | `N`, `L`, `S/Enter`, `R`, `X`, `Ctrl+C` |
|
package/dist/ansi.d.ts
CHANGED
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
import type { CursorPosition, TerminalFrame, TerminalStyleSpan } from "./types.js";
|
|
1
|
+
import type { CursorPosition, TerminalFrame, TerminalStyleSpan, TerminalTheme } from "./types.js";
|
|
2
|
+
export declare const ANSI_ENTER_ALTERNATE_SCREEN = "\u001B[?1049h";
|
|
3
|
+
export declare const ANSI_EXIT_ALTERNATE_SCREEN = "\u001B[?1049l";
|
|
4
|
+
export declare const ANSI_HIDE_CURSOR = "\u001B[?25l";
|
|
5
|
+
export declare const ANSI_SHOW_CURSOR = "\u001B[?25h";
|
|
6
|
+
type AnsiFrameOptions = {
|
|
7
|
+
showCursor?: boolean;
|
|
8
|
+
showCursorWhenFrameHasCursor?: boolean;
|
|
9
|
+
theme?: TerminalTheme;
|
|
10
|
+
};
|
|
11
|
+
export type AnsiFrameDiffResult = {
|
|
12
|
+
changedLineIndexes: number[];
|
|
13
|
+
outputChunk: string;
|
|
14
|
+
restoresCursor: boolean;
|
|
15
|
+
};
|
|
2
16
|
export declare function stripCursorMarker(value: string): string;
|
|
3
|
-
export declare function formatPlainFrame(frame: TerminalFrame): string;
|
|
4
|
-
export declare function toAnsiFrame(lines: string[], cursor: CursorPosition | null, spans?: TerminalStyleSpan[]): string;
|
|
5
|
-
export declare function
|
|
17
|
+
export declare function formatPlainFrame(frame: TerminalFrame, options?: AnsiFrameOptions): string;
|
|
18
|
+
export declare function toAnsiFrame(lines: string[], cursor: CursorPosition | null, spans?: TerminalStyleSpan[], options?: AnsiFrameOptions): string;
|
|
19
|
+
export declare function createAnsiFrameDiff(previousAnsiLines: string[], nextAnsiLines: string[], cursor: CursorPosition | null, options?: AnsiFrameOptions): AnsiFrameDiffResult;
|
|
20
|
+
export declare function createAnsiDiffWriter(options?: AnsiFrameOptions): (lines: string[], cursor: CursorPosition | null, spans?: TerminalStyleSpan[]) => string;
|
|
21
|
+
export {};
|
|
6
22
|
//# sourceMappingURL=ansi.d.ts.map
|
package/dist/ansi.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../src/ansi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ansi.d.ts","sourceRoot":"","sources":["../src/ansi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAElG,eAAO,MAAM,2BAA2B,kBAAkB,CAAC;AAC3D,eAAO,MAAM,0BAA0B,kBAAkB,CAAC;AAC1D,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAE9C,KAAK,gBAAgB,GAAG;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,UAE9C;AAiMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,GAAE,gBAAqB,UAEpF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,EAAE,KAAK,GAAE,iBAAiB,EAAO,EAAE,OAAO,GAAE,gBAAqB,UAK1I;AAED,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EAAE,EAC3B,aAAa,EAAE,MAAM,EAAE,EACvB,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,OAAO,GAAE,gBAAqB,GAC7B,mBAAmB,CA0BrB;AAED,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,gBAAqB,IAGtC,OAAO,MAAM,EAAE,EAAE,QAAQ,cAAc,GAAG,IAAI,EAAE,QAAO,iBAAiB,EAAO,YAM3G"}
|
package/dist/ansi.js
CHANGED
|
@@ -1,41 +1,91 @@
|
|
|
1
|
+
import { resolveTerminalStyle, resolveTerminalStyleToken } from "./theme.js";
|
|
2
|
+
export const ANSI_ENTER_ALTERNATE_SCREEN = "\u001b[?1049h";
|
|
3
|
+
export const ANSI_EXIT_ALTERNATE_SCREEN = "\u001b[?1049l";
|
|
4
|
+
export const ANSI_HIDE_CURSOR = "\u001b[?25l";
|
|
5
|
+
export const ANSI_SHOW_CURSOR = "\u001b[?25h";
|
|
1
6
|
export function stripCursorMarker(value) {
|
|
2
7
|
return value.replaceAll("|", "");
|
|
3
8
|
}
|
|
9
|
+
function spanLayerPriority(span) {
|
|
10
|
+
return span.kind === "focus" ? 0 : 1;
|
|
11
|
+
}
|
|
4
12
|
function lineSpans(spans, y) {
|
|
5
|
-
return spans
|
|
13
|
+
return spans
|
|
14
|
+
.map((span, index) => ({ span, index }))
|
|
15
|
+
.filter(({ span }) => span.y === y)
|
|
16
|
+
.sort((a, b) => a.span.x1 - b.span.x1 || spanLayerPriority(a.span) - spanLayerPriority(b.span) || b.span.x2 - a.span.x2 || a.index - b.index)
|
|
17
|
+
.map(({ span }) => span);
|
|
6
18
|
}
|
|
7
|
-
function
|
|
8
|
-
if (
|
|
9
|
-
return
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
19
|
+
function tokenStyle(token) {
|
|
20
|
+
if (!token)
|
|
21
|
+
return undefined;
|
|
22
|
+
return token.style || token.color || token.background
|
|
23
|
+
? { ...token.style, color: token.color ?? token.style?.color, background: token.background ?? token.style?.background }
|
|
24
|
+
: undefined;
|
|
25
|
+
}
|
|
26
|
+
function styleAnsiOpen(style) {
|
|
27
|
+
return `${colorAnsi(style?.color, false)}${colorAnsi(style?.background, true)}`;
|
|
28
|
+
}
|
|
29
|
+
function styleAnsiClose(style) {
|
|
30
|
+
return `${style?.background ? "\u001b[49m" : ""}${style?.color ? "\u001b[39m" : ""}`;
|
|
31
|
+
}
|
|
32
|
+
function spanAnsiOpen(span, theme) {
|
|
33
|
+
const { kind, style } = span;
|
|
34
|
+
if (style)
|
|
35
|
+
return styleAnsiOpen(style);
|
|
36
|
+
const token = resolveTerminalStyleToken(kind, theme);
|
|
37
|
+
const resolvedTokenStyle = tokenStyle(token);
|
|
38
|
+
if (resolvedTokenStyle)
|
|
39
|
+
return styleAnsiOpen(resolvedTokenStyle);
|
|
40
|
+
if (token?.ansiOpen)
|
|
41
|
+
return token.ansiOpen;
|
|
42
|
+
try {
|
|
43
|
+
return styleAnsiOpen(resolveTerminalStyle(kind, theme));
|
|
13
44
|
}
|
|
14
|
-
|
|
15
|
-
return "
|
|
45
|
+
catch {
|
|
46
|
+
return "";
|
|
16
47
|
}
|
|
17
|
-
return "";
|
|
18
48
|
}
|
|
19
|
-
function spanAnsiClose(
|
|
20
|
-
|
|
21
|
-
|
|
49
|
+
function spanAnsiClose(span, theme) {
|
|
50
|
+
const { kind, style } = span;
|
|
51
|
+
if (style)
|
|
52
|
+
return styleAnsiClose(style);
|
|
53
|
+
const token = resolveTerminalStyleToken(kind, theme);
|
|
54
|
+
const resolvedTokenStyle = tokenStyle(token);
|
|
55
|
+
if (resolvedTokenStyle)
|
|
56
|
+
return styleAnsiClose(resolvedTokenStyle);
|
|
57
|
+
if (token?.ansiClose)
|
|
58
|
+
return token.ansiClose;
|
|
59
|
+
try {
|
|
60
|
+
return styleAnsiClose(resolveTerminalStyle(kind, theme));
|
|
22
61
|
}
|
|
23
|
-
|
|
24
|
-
return "
|
|
62
|
+
catch {
|
|
63
|
+
return "";
|
|
25
64
|
}
|
|
26
|
-
|
|
27
|
-
|
|
65
|
+
}
|
|
66
|
+
function colorAnsi(value, background) {
|
|
67
|
+
if (!value)
|
|
68
|
+
return "";
|
|
69
|
+
const hex = value.startsWith("#") ? value.slice(1) : "";
|
|
70
|
+
const full = hex.length === 3
|
|
71
|
+
? hex.split("").map((part) => part + part).join("")
|
|
72
|
+
: hex;
|
|
73
|
+
if (!/^[0-9a-fA-F]{6}$/.test(full)) {
|
|
74
|
+
throw new RangeError(`Unsupported terminal style color: ${value}`);
|
|
28
75
|
}
|
|
29
|
-
|
|
76
|
+
const red = Number.parseInt(full.slice(0, 2), 16);
|
|
77
|
+
const green = Number.parseInt(full.slice(2, 4), 16);
|
|
78
|
+
const blue = Number.parseInt(full.slice(4, 6), 16);
|
|
79
|
+
return `\u001b[${background ? 48 : 38};2;${red};${green};${blue}m`;
|
|
30
80
|
}
|
|
31
|
-
function renderAnsiLine(line, spans, y) {
|
|
81
|
+
function renderAnsiLine(line, spans, y, theme) {
|
|
32
82
|
let output = "";
|
|
33
83
|
let visibleColumn = 1;
|
|
34
84
|
const rowSpans = lineSpans(spans, y);
|
|
35
85
|
let activeSpanIndex = 0;
|
|
36
86
|
for (let i = 0; i < line.length; i += 1) {
|
|
37
87
|
while (rowSpans[activeSpanIndex]?.x1 === visibleColumn) {
|
|
38
|
-
output += spanAnsiOpen(rowSpans[activeSpanIndex]
|
|
88
|
+
output += spanAnsiOpen(rowSpans[activeSpanIndex], theme);
|
|
39
89
|
activeSpanIndex += 1;
|
|
40
90
|
}
|
|
41
91
|
const char = line[i];
|
|
@@ -46,60 +96,134 @@ function renderAnsiLine(line, spans, y) {
|
|
|
46
96
|
visibleColumn += 1;
|
|
47
97
|
for (const span of rowSpans) {
|
|
48
98
|
if (span.x2 === visibleColumn) {
|
|
49
|
-
|
|
99
|
+
if (span.kind !== "focus") {
|
|
100
|
+
output += spanAnsiClose(span, theme);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
for (const span of rowSpans) {
|
|
105
|
+
if (span.x2 === visibleColumn && span.kind === "focus") {
|
|
106
|
+
output += spanAnsiClose(span, theme);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
for (const span of rowSpans) {
|
|
111
|
+
if (span.x1 < visibleColumn && span.x2 > visibleColumn) {
|
|
112
|
+
if (span.kind !== "focus") {
|
|
113
|
+
output += spanAnsiClose(span, theme);
|
|
50
114
|
}
|
|
51
115
|
}
|
|
52
116
|
}
|
|
117
|
+
for (const span of rowSpans) {
|
|
118
|
+
if (span.x1 < visibleColumn && span.x2 > visibleColumn && span.kind === "focus") {
|
|
119
|
+
output += spanAnsiClose(span, theme);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
53
122
|
return output;
|
|
54
123
|
}
|
|
55
|
-
function
|
|
124
|
+
function hasPlainAffordance(token) {
|
|
125
|
+
return typeof token !== "undefined" && ("plainPrefix" in token || "plainSuffix" in token);
|
|
126
|
+
}
|
|
127
|
+
function formatPlainLine(line, spans, y, theme) {
|
|
56
128
|
let output = "";
|
|
57
129
|
let visibleColumn = 1;
|
|
58
|
-
const
|
|
130
|
+
const firstFallbackFocusY = lineSpans(spans, y).some((span) => {
|
|
131
|
+
const token = resolveTerminalStyleToken(span.kind, theme);
|
|
132
|
+
return span.kind === "focus" && !hasPlainAffordance(token) && span.x1 === 1;
|
|
133
|
+
})
|
|
134
|
+
? Math.min(...spans.filter((span) => span.kind === "focus" && span.x1 === 1).map((span) => span.y))
|
|
135
|
+
: null;
|
|
136
|
+
const rowSpans = lineSpans(spans, y).map((span) => {
|
|
137
|
+
const token = resolveTerminalStyleToken(span.kind, theme);
|
|
138
|
+
const fallbackFocusMarker = span.kind === "focus"
|
|
139
|
+
&& !token?.plainPrefix
|
|
140
|
+
&& !token?.plainSuffix
|
|
141
|
+
&& span.x1 === 1
|
|
142
|
+
&& y === firstFallbackFocusY
|
|
143
|
+
&& span.x2 <= line.length + 1
|
|
144
|
+
&& !line.trimStart().startsWith(">")
|
|
145
|
+
&& !line.includes("|")
|
|
146
|
+
&& !line.includes("[>");
|
|
147
|
+
return {
|
|
148
|
+
...span,
|
|
149
|
+
x2: fallbackFocusMarker ? Math.min(span.x2, line.trimEnd().length + 1) : span.x2,
|
|
150
|
+
plainPrefix: token?.plainPrefix ?? span.style?.plainPrefix ?? (fallbackFocusMarker ? ">" : ""),
|
|
151
|
+
plainSuffix: token?.plainSuffix ?? span.style?.plainSuffix ?? (fallbackFocusMarker ? "<" : "")
|
|
152
|
+
};
|
|
153
|
+
}).filter((span) => Boolean(span.plainPrefix || span.plainSuffix));
|
|
59
154
|
for (let i = 0; i < line.length; i += 1) {
|
|
60
155
|
const char = line[i];
|
|
61
156
|
if (char === "|") {
|
|
62
157
|
output += char;
|
|
63
158
|
continue;
|
|
64
159
|
}
|
|
65
|
-
|
|
66
|
-
|
|
160
|
+
for (const span of rowSpans) {
|
|
161
|
+
if (span.x1 === visibleColumn) {
|
|
162
|
+
output += span.plainPrefix;
|
|
163
|
+
}
|
|
67
164
|
}
|
|
68
165
|
output += char;
|
|
69
166
|
visibleColumn += 1;
|
|
70
|
-
|
|
71
|
-
|
|
167
|
+
for (const span of rowSpans) {
|
|
168
|
+
if (span.x2 === visibleColumn) {
|
|
169
|
+
if (span.kind !== "focus") {
|
|
170
|
+
output += span.plainSuffix;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
for (const span of rowSpans) {
|
|
175
|
+
if (span.x2 === visibleColumn && span.kind === "focus") {
|
|
176
|
+
output += span.plainSuffix;
|
|
177
|
+
}
|
|
72
178
|
}
|
|
73
179
|
}
|
|
74
|
-
|
|
75
|
-
|
|
180
|
+
for (const span of rowSpans) {
|
|
181
|
+
if (span.x1 === visibleColumn) {
|
|
182
|
+
output += span.plainPrefix + span.plainSuffix;
|
|
183
|
+
}
|
|
76
184
|
}
|
|
77
185
|
return output;
|
|
78
186
|
}
|
|
79
|
-
export function formatPlainFrame(frame) {
|
|
80
|
-
return frame.lines.map((line, index) => formatPlainLine(line, frame.spans, index + 1)).join("\n");
|
|
187
|
+
export function formatPlainFrame(frame, options = {}) {
|
|
188
|
+
return frame.lines.map((line, index) => formatPlainLine(line, frame.spans, index + 1, options.theme)).join("\n");
|
|
81
189
|
}
|
|
82
|
-
export function toAnsiFrame(lines, cursor, spans = []) {
|
|
83
|
-
const ansiLines = lines.map((line, index) => renderAnsiLine(line, spans, index + 1));
|
|
84
|
-
const
|
|
190
|
+
export function toAnsiFrame(lines, cursor, spans = [], options = {}) {
|
|
191
|
+
const ansiLines = lines.map((line, index) => `${renderAnsiLine(line, spans, index + 1, options.theme)}\u001b[K`);
|
|
192
|
+
const showCursor = options.showCursor !== false || (options.showCursorWhenFrameHasCursor === true && cursor);
|
|
193
|
+
const cursorCode = cursor ? `\u001b[${cursor.y};${cursor.x}H${showCursor ? ANSI_SHOW_CURSOR : ""}` : showCursor ? ANSI_SHOW_CURSOR : "";
|
|
85
194
|
return `\u001b[?25l\u001b[H${ansiLines.join("\n")}${cursorCode}`;
|
|
86
195
|
}
|
|
87
|
-
export function
|
|
196
|
+
export function createAnsiFrameDiff(previousAnsiLines, nextAnsiLines, cursor, options = {}) {
|
|
197
|
+
const changedLineIndexes = [];
|
|
198
|
+
const writes = ["\u001b[?25l"];
|
|
199
|
+
const maxLines = Math.max(previousAnsiLines.length, nextAnsiLines.length);
|
|
200
|
+
for (let i = 0; i < maxLines; i += 1) {
|
|
201
|
+
const nextLine = nextAnsiLines[i] || "";
|
|
202
|
+
const prevLine = previousAnsiLines[i] || "";
|
|
203
|
+
if (nextLine !== prevLine) {
|
|
204
|
+
changedLineIndexes.push(i);
|
|
205
|
+
writes.push(`\u001b[${i + 1};1H${nextLine}\u001b[0m\u001b[K`);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (cursor) {
|
|
209
|
+
writes.push(`\u001b[${cursor.y};${cursor.x}H`);
|
|
210
|
+
}
|
|
211
|
+
if (options.showCursor !== false || (options.showCursorWhenFrameHasCursor === true && cursor)) {
|
|
212
|
+
writes.push(ANSI_SHOW_CURSOR);
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
changedLineIndexes,
|
|
216
|
+
outputChunk: writes.join(""),
|
|
217
|
+
restoresCursor: Boolean(cursor)
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
export function createAnsiDiffWriter(options = {}) {
|
|
88
221
|
let previousAnsiLines = [];
|
|
89
222
|
return function toAnsiDiff(lines, cursor, spans = []) {
|
|
90
|
-
const ansiLines = lines.map((line, index) => renderAnsiLine(line, spans, index + 1));
|
|
91
|
-
const
|
|
92
|
-
const maxLines = Math.max(previousAnsiLines.length, ansiLines.length);
|
|
93
|
-
for (let i = 0; i < maxLines; i += 1) {
|
|
94
|
-
const nextLine = ansiLines[i] || "";
|
|
95
|
-
const prevLine = previousAnsiLines[i] || "";
|
|
96
|
-
if (nextLine !== prevLine) {
|
|
97
|
-
writes.push(`\u001b[${i + 1};1H${nextLine}\u001b[0m\u001b[K`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
writes.push(cursor ? `\u001b[${cursor.y};${cursor.x}H\u001b[?25h` : "\u001b[?25h");
|
|
223
|
+
const ansiLines = lines.map((line, index) => renderAnsiLine(line, spans, index + 1, options.theme));
|
|
224
|
+
const diff = createAnsiFrameDiff(previousAnsiLines, ansiLines, cursor, options);
|
|
101
225
|
previousAnsiLines = ansiLines.slice();
|
|
102
|
-
return
|
|
226
|
+
return diff.outputChunk;
|
|
103
227
|
};
|
|
104
228
|
}
|
|
105
229
|
//# sourceMappingURL=ansi.js.map
|
package/dist/ansi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../src/ansi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ansi.js","sourceRoot":"","sources":["../src/ansi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG7E,MAAM,CAAC,MAAM,2BAA2B,GAAG,eAAe,CAAC;AAC3D,MAAM,CAAC,MAAM,0BAA0B,GAAG,eAAe,CAAC;AAC1D,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAc9C,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAuB;IAChD,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,SAAS,CAAC,KAA0B,EAAE,CAAS;IACtD,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;SACvC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;SAClC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;SAC5I,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CAAC,KAAmD;IACrE,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU;QACnD,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE;QACvH,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,aAAa,CAAC,KAA0D;IAC/E,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,cAAc,CAAC,KAA0D;IAChF,OAAO,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvF,CAAC;AAED,SAAS,YAAY,CAAC,IAAuB,EAAE,KAAqB;IAClE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC7B,IAAI,KAAK;QAAE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,kBAAkB;QAAE,OAAO,aAAa,CAAC,kBAAkB,CAAC,CAAC;IACjE,IAAI,KAAK,EAAE,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC;IAC3C,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAuB,EAAE,KAAqB;IACnE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;IAC7B,IAAI,KAAK;QAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,MAAM,kBAAkB,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7C,IAAI,kBAAkB;QAAE,OAAO,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAClE,IAAI,KAAK,EAAE,SAAS;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,oBAAoB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB,EAAE,UAAmB;IAC/D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxD,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC;QAC3B,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,CAAC,CAAC,GAAG,CAAC;IACR,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,UAAU,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnD,OAAO,UAAU,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC;AACrE,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAA0B,EAAE,CAAS,EAAE,KAAqB;IAChG,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrC,IAAI,eAAe,GAAG,CAAC,CAAC;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,OAAO,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,aAAa,EAAE,CAAC;YACvD,MAAM,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC;YACzD,eAAe,IAAI,CAAC,CAAC;QACvB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;QACf,aAAa,IAAI,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACvD,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,CAAC,EAAE,GAAG,aAAa,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,CAAC,EAAE,GAAG,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAChF,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAmD;IAC7E,OAAO,OAAO,KAAK,KAAK,WAAW,IAAI,CAAC,aAAa,IAAI,KAAK,IAAI,aAAa,IAAI,KAAK,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAA0B,EAAE,CAAS,EAAE,KAAqB;IACjG,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,MAAM,mBAAmB,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9E,CAAC,CAAC;QACA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnG,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChD,MAAM,KAAK,GAAG,yBAAyB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1D,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO;eAC5C,CAAC,KAAK,EAAE,WAAW;eACnB,CAAC,KAAK,EAAE,WAAW;eACnB,IAAI,CAAC,EAAE,KAAK,CAAC;eACb,CAAC,KAAK,mBAAmB;eACzB,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;eAC1B,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;eACjC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;eACnB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO;YACL,GAAG,IAAI;YACP,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAChF,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;SAC/F,CAAC;IACJ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,IAAI,IAAI,CAAC;YACf,SAAS;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;gBAC9B,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,IAAI,IAAI,CAAC;QACf,aAAa,IAAI,CAAC,CAAC;QAEnB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;gBAC9B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC1B,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACvD,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,EAAE,KAAK,aAAa,EAAE,CAAC;YAC9B,MAAM,IAAI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAoB,EAAE,UAA4B,EAAE;IACnF,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe,EAAE,MAA6B,EAAE,QAA6B,EAAE,EAAE,UAA4B,EAAE;IACzI,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjH,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,4BAA4B,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC;IAC7G,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;IACxI,OAAO,sBAAsB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,iBAA2B,EAC3B,aAAuB,EACvB,MAA6B,EAC7B,UAA4B,EAAE;IAE9B,MAAM,kBAAkB,GAAa,EAAE,CAAC;IACxC,MAAM,MAAM,GAAa,CAAC,aAAa,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAE1E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,QAAQ,mBAAmB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,4BAA4B,KAAK,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC;QAC9F,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC;IAED,OAAO;QACL,kBAAkB;QAClB,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,UAA4B,EAAE;IACjE,IAAI,iBAAiB,GAAa,EAAE,CAAC;IAErC,OAAO,SAAS,UAAU,CAAC,KAAe,EAAE,MAA6B,EAAE,QAA6B,EAAE;QACxG,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACpG,MAAM,IAAI,GAAG,mBAAmB,CAAC,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAChF,iBAAiB,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface EditorCursor {
|
|
2
|
+
line: number;
|
|
3
|
+
column: number;
|
|
4
|
+
}
|
|
5
|
+
export interface EditorState {
|
|
6
|
+
value: string;
|
|
7
|
+
lines: string[];
|
|
8
|
+
cursor: EditorCursor;
|
|
9
|
+
desiredColumn?: number;
|
|
10
|
+
}
|
|
11
|
+
export type EditorCursorDirection = "left" | "right" | "up" | "down" | "home" | "end";
|
|
12
|
+
export interface EditorOperationResult {
|
|
13
|
+
value: string;
|
|
14
|
+
state: EditorState;
|
|
15
|
+
}
|
|
16
|
+
export declare function createEditorState(value: string, cursor?: EditorCursor, desiredColumn?: number): EditorState;
|
|
17
|
+
export declare function normalizeEditorState(value: string, cursor?: EditorCursor, desiredColumn?: number): EditorState;
|
|
18
|
+
export declare function insertEditorText(value: string, state: EditorState, text: string): EditorOperationResult;
|
|
19
|
+
export declare function removeEditorBackward(value: string, state: EditorState): EditorOperationResult;
|
|
20
|
+
export declare function removeEditorForward(value: string, state: EditorState): EditorOperationResult;
|
|
21
|
+
export declare function moveEditorCursor(value: string, state: EditorState, direction: EditorCursorDirection): EditorState;
|
|
22
|
+
//# sourceMappingURL=editor-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-state.d.ts","sourceRoot":"","sources":["../src/editor-state.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAEtF,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAE3G;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,WAAW,CAY9G;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAgBvG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,qBAAqB,CAmB7F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,qBAAqB,CAY5F;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,qBAAqB,GAAG,WAAW,CAiDjH"}
|