@mnmal-ai/surface-core 0.15.0 → 0.17.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/app.d.ts +10 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/compose.d.ts.map +1 -1
- package/dist/fullscreen.d.ts +19 -0
- package/dist/fullscreen.d.ts.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +782 -179
- package/dist/keys.d.ts +14 -0
- package/dist/keys.d.ts.map +1 -1
- package/dist/list-pager-state.d.ts +76 -0
- package/dist/list-pager-state.d.ts.map +1 -0
- package/dist/list-pager.d.ts +24 -0
- package/dist/list-pager.d.ts.map +1 -0
- package/dist/module.d.ts +19 -3
- package/dist/module.d.ts.map +1 -1
- package/dist/{overlay-DMjCbsaC.js → overlay-5s8slC38.js} +216 -9
- package/dist/pure.d.ts +3 -1
- package/dist/pure.d.ts.map +1 -1
- package/dist/pure.js +2 -2
- package/dist/terminal.d.ts +12 -2
- package/dist/terminal.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/keys.d.ts
CHANGED
|
@@ -10,6 +10,8 @@ export interface KeyState {
|
|
|
10
10
|
readonly draftEmpty: boolean;
|
|
11
11
|
/** The focused panel's armed confirm key, set only while the draft is exactly it. */
|
|
12
12
|
readonly armed?: string | null;
|
|
13
|
+
/** Full-screen's transcript viewport: following the bottom, or held. Absent inline. */
|
|
14
|
+
readonly viewport?: 'following' | 'held';
|
|
13
15
|
}
|
|
14
16
|
export type Route = {
|
|
15
17
|
readonly kind: 'exit-chord';
|
|
@@ -38,8 +40,20 @@ export type Route = {
|
|
|
38
40
|
readonly kind: 'global';
|
|
39
41
|
readonly module: string;
|
|
40
42
|
readonly key: KeySpec;
|
|
43
|
+
}
|
|
44
|
+
/** Typed text for a focused panel's `text` hook: a key its keymap does not bind, or a chunk. */
|
|
45
|
+
| {
|
|
46
|
+
readonly kind: 'panel-text';
|
|
47
|
+
readonly module: string;
|
|
48
|
+
readonly panel: string;
|
|
49
|
+
readonly text: string;
|
|
41
50
|
} | {
|
|
42
51
|
readonly kind: 'cancel-turn';
|
|
52
|
+
}
|
|
53
|
+
/** Full-screen: move the transcript viewport. */
|
|
54
|
+
| {
|
|
55
|
+
readonly kind: 'scroll';
|
|
56
|
+
readonly act: 'page-up' | 'page-down' | 'bottom';
|
|
43
57
|
} | {
|
|
44
58
|
readonly kind: 'history';
|
|
45
59
|
readonly dir: 'up' | 'down';
|
package/dist/keys.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEhD,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,GAAG,IAAI,CAiBhD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { type ListRow, type ListSpec } from '@mnmal-ai/surface-kit/list';
|
|
2
|
+
/** One row in full, as an app's `open` hook describes it. */
|
|
3
|
+
export interface ListDetail {
|
|
4
|
+
readonly title: string;
|
|
5
|
+
/** A dim line under the title: status, area, when. */
|
|
6
|
+
readonly meta?: string;
|
|
7
|
+
/** Wrapped to the panel's width and scrolled with ↑↓. */
|
|
8
|
+
readonly body?: string;
|
|
9
|
+
}
|
|
10
|
+
/** What the app does with a row. Either may be left out, and its key then does nothing. */
|
|
11
|
+
export interface ListHooks {
|
|
12
|
+
readonly open?: (row: ListRow) => ListDetail | Promise<ListDetail>;
|
|
13
|
+
readonly related?: (row: ListRow) => ListSpec | Promise<ListSpec>;
|
|
14
|
+
}
|
|
15
|
+
export interface ListStep {
|
|
16
|
+
readonly kind: 'list';
|
|
17
|
+
readonly list: ListSpec;
|
|
18
|
+
readonly hooks: ListHooks;
|
|
19
|
+
readonly page: number;
|
|
20
|
+
readonly cursor: number;
|
|
21
|
+
readonly filter: string;
|
|
22
|
+
readonly filtering: boolean;
|
|
23
|
+
/** The page size it was last moved with: `page` and `cursor` are measured in it. */
|
|
24
|
+
readonly size: number;
|
|
25
|
+
}
|
|
26
|
+
export interface DetailStep {
|
|
27
|
+
readonly kind: 'detail';
|
|
28
|
+
readonly row: ListRow;
|
|
29
|
+
readonly hooks: ListHooks;
|
|
30
|
+
readonly detail: ListDetail | 'loading' | {
|
|
31
|
+
readonly error: string;
|
|
32
|
+
};
|
|
33
|
+
readonly scroll: number;
|
|
34
|
+
}
|
|
35
|
+
export interface RelatedLoadingStep {
|
|
36
|
+
readonly kind: 'loading-related';
|
|
37
|
+
readonly row: ListRow;
|
|
38
|
+
/** Set when the related list could not be found. */
|
|
39
|
+
readonly error?: string;
|
|
40
|
+
}
|
|
41
|
+
export type Step = ListStep | DetailStep | RelatedLoadingStep;
|
|
42
|
+
export interface PagerState {
|
|
43
|
+
readonly steps: readonly Step[];
|
|
44
|
+
/** Bumped on every push and pop, so an async result can tell the step it was for is gone. */
|
|
45
|
+
readonly token: number;
|
|
46
|
+
}
|
|
47
|
+
export declare const listStep: (list: ListSpec, hooks: ListHooks) => ListStep;
|
|
48
|
+
export declare const pagerAt: (list: ListSpec, hooks: ListHooks) => PagerState;
|
|
49
|
+
export declare const push: (s: PagerState, step: Step) => PagerState;
|
|
50
|
+
/** Where the cursor's row falls at page size `per`, whatever size it was last moved with. */
|
|
51
|
+
export declare function placement(l: ListStep, per: number): {
|
|
52
|
+
page: number;
|
|
53
|
+
cursor: number;
|
|
54
|
+
};
|
|
55
|
+
/** The list's rows as the filter leaves them. */
|
|
56
|
+
export declare const visibleRows: (l: ListStep) => ListRow[];
|
|
57
|
+
/** The highlighted row, or the open detail's row; undefined when the filter matches nothing. */
|
|
58
|
+
export declare function cursorRow(s: PagerState): ListRow | undefined;
|
|
59
|
+
/** ↑↓: one row, walking onto the next or previous page at an edge; stops at either end. */
|
|
60
|
+
export declare function move(s: PagerState, delta: -1 | 1, pageSize: number): PagerState;
|
|
61
|
+
/** ←→: a page, the cursor on its first row; stays on the first or last page. */
|
|
62
|
+
export declare function turn(s: PagerState, delta: -1 | 1, pageSize: number): PagerState;
|
|
63
|
+
export declare const startFilter: (s: PagerState) => PagerState;
|
|
64
|
+
/** While filtering: the character joins the filter, and the list starts again from its top. */
|
|
65
|
+
export declare const typeChar: (s: PagerState, ch: string) => PagerState;
|
|
66
|
+
export declare const backspace: (s: PagerState) => PagerState;
|
|
67
|
+
/** Enter while filtering: keep the filter, stop typing into it. */
|
|
68
|
+
export declare const endFilter: (s: PagerState) => PagerState;
|
|
69
|
+
/**
|
|
70
|
+
* Esc: filtering → the filter cleared; a detail or a related list → the step before it, where it
|
|
71
|
+
* was left; the first list with a filter kept → the filter cleared; otherwise undefined (close).
|
|
72
|
+
*/
|
|
73
|
+
export declare function back(s: PagerState): PagerState | undefined;
|
|
74
|
+
/** ↑↓ on a detail: scroll between 0 and `maxScroll`. */
|
|
75
|
+
export declare function scrollDetail(s: PagerState, delta: -1 | 1, maxScroll: number): PagerState;
|
|
76
|
+
//# sourceMappingURL=list-pager-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-pager-state.d.ts","sourceRoot":"","sources":["../src/list-pager-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type ListSpec } from '@mnmal-ai/surface-kit/list';
|
|
2
|
+
import { type ListHooks, type PagerState } from './list-pager-state.js';
|
|
3
|
+
import { type Reply, type TuiModule } from './module.js';
|
|
4
|
+
/** A list longer than this is paged rather than printed. */
|
|
5
|
+
export declare const INLINE_LIST_ROWS = 10;
|
|
6
|
+
export declare const LIST_REPLY_KIND = "surface.list";
|
|
7
|
+
type Panels = {
|
|
8
|
+
pager: PagerState;
|
|
9
|
+
};
|
|
10
|
+
/** Rows a page holds in a panel `rows` tall: the heading, filter and hint lines take the rest. */
|
|
11
|
+
export declare const pageSizeFor: (rows: number) => number;
|
|
12
|
+
/**
|
|
13
|
+
* The pager module and `present`, which a turn handler yields as its reply:
|
|
14
|
+
* `yield { phase: 'final', reply: pager.present(list, { open, related }) }`. A list of up to
|
|
15
|
+
* `INLINE_LIST_ROWS` prints inline. A longer one opens the pager when no panel is open, and the
|
|
16
|
+
* transcript then carries only its heading and a pointer; otherwise its first rows print inline.
|
|
17
|
+
* `/list` reopens the last long list where it was left.
|
|
18
|
+
*/
|
|
19
|
+
export declare function listPager(): {
|
|
20
|
+
module: TuiModule<Panels>;
|
|
21
|
+
present(list: ListSpec, hooks?: ListHooks): Reply;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=list-pager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-pager.d.ts","sourceRoot":"","sources":["../src/list-pager.tsx"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,QAAQ,EAGd,MAAM,4BAA4B,CAAC;AAIpC,OAAO,EAOL,KAAK,SAAS,EAId,KAAK,UAAU,EAUhB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAgC,KAAK,KAAK,EAAa,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlG,4DAA4D;AAC5D,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAE9C,KAAK,MAAM,GAAG;IAAE,KAAK,EAAE,UAAU,CAAA;CAAE,CAAC;AAMpC,kGAAkG;AAClG,eAAO,MAAM,WAAW,SAAU,MAAM,KAAG,MAA+B,CAAC;AAmN3E;;;;;;GAMG;AACH,wBAAgB,SAAS,IAAI;IAC3B,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;CACnD,CAqKA"}
|
package/dist/module.d.ts
CHANGED
|
@@ -99,6 +99,8 @@ export interface ModuleCtx<P> {
|
|
|
99
99
|
open<K extends keyof P & string>(panel: K, state: P[K], opts?: {
|
|
100
100
|
readonly ifNoneOpen?: boolean;
|
|
101
101
|
}): void;
|
|
102
|
+
/** Whether any panel is open now, this module's or another's: what `ifNoneOpen` checks. */
|
|
103
|
+
panelOpen(): boolean;
|
|
102
104
|
update<K extends keyof P & string>(panel: K, fn: (state: P[K]) => P[K]): void;
|
|
103
105
|
close(): void;
|
|
104
106
|
print(text: string, tone?: Tone): void;
|
|
@@ -170,6 +172,14 @@ export interface PanelDef<S, P = unknown> {
|
|
|
170
172
|
/** The room the panel has: the columns left beside the rail, and `AppOptions.panelRows`. */
|
|
171
173
|
readonly size: Size;
|
|
172
174
|
}) => ReactNode;
|
|
175
|
+
/** Columns each side and rows top and bottom between the panel's edge and its view. Defaults
|
|
176
|
+
* to 4 and 1; the insets come out of the `size` the view is handed. */
|
|
177
|
+
readonly inset?: {
|
|
178
|
+
readonly x: number;
|
|
179
|
+
readonly y: number;
|
|
180
|
+
};
|
|
181
|
+
/** The panel's background colour. Defaults to `theme.color.raised`; `''` paints none. */
|
|
182
|
+
readonly ground?: string;
|
|
173
183
|
readonly keymap?: readonly {
|
|
174
184
|
readonly key: KeySpec;
|
|
175
185
|
readonly act: string;
|
|
@@ -189,9 +199,9 @@ export interface PanelDef<S, P = unknown> {
|
|
|
189
199
|
*/
|
|
190
200
|
readonly submit?: (state: S, line: string, ctx: ModuleCtx<P>) => S | undefined;
|
|
191
201
|
/**
|
|
192
|
-
* Escape
|
|
193
|
-
*
|
|
194
|
-
*
|
|
202
|
+
* Escape: return a state to stay open with it (abandoning an edit, or stepping back), or
|
|
203
|
+
* undefined to close as usual. A different panel opened here with `ctx.open` replaces this one
|
|
204
|
+
* rather than being closed with it.
|
|
195
205
|
*/
|
|
196
206
|
readonly escape?: (state: S, ctx: ModuleCtx<P>) => S | undefined;
|
|
197
207
|
/**
|
|
@@ -204,6 +214,12 @@ export interface PanelDef<S, P = unknown> {
|
|
|
204
214
|
* printable single-character key in `keymap`.
|
|
205
215
|
*/
|
|
206
216
|
readonly mask?: boolean;
|
|
217
|
+
/**
|
|
218
|
+
* Typed text the keymap does not bind: a printable key, or a pasted chunk whole. Without it such
|
|
219
|
+
* keys are ignored. Not for a panel that keeps the draft live (`confirm`, `submit`), where they
|
|
220
|
+
* edit the line. Return the next state, or undefined to keep it.
|
|
221
|
+
*/
|
|
222
|
+
readonly text?: (state: S, text: string, ctx: ModuleCtx<P>) => S | undefined;
|
|
207
223
|
/** act -> handler. Returning a state replaces the panel's state. */
|
|
208
224
|
readonly on?: Readonly<Record<string, (state: S, ctx: ModuleCtx<P>) => S | undefined>>;
|
|
209
225
|
}
|
package/dist/module.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_GROUND } from "@mnmal-ai/surface-theme";
|
|
2
|
+
import { filterRows } from "@mnmal-ai/surface-kit/list";
|
|
2
3
|
|
|
3
4
|
//#region src/complete.ts
|
|
4
5
|
const TIMEOUT_MS = 150;
|
|
@@ -179,7 +180,6 @@ function composeModules(modules) {
|
|
|
179
180
|
confirmed.add(c.key);
|
|
180
181
|
if (def.on?.[c.act] === void 0) problems.push(`${key} confirms '${c.key}' with act '${c.act}', which it has no handler for`);
|
|
181
182
|
}
|
|
182
|
-
if (def.escape !== void 0 && def.submit === void 0) problems.push(`${key} handles escape without submit, which only an input panel may`);
|
|
183
183
|
if (def.mask === true && def.submit === void 0) problems.push(`${key} masks its input without submit, which only an input panel may`);
|
|
184
184
|
if (def.mask === true && (def.confirm?.length ?? 0) > 0) problems.push(`${key} masks its input but declares confirm keys, which would arm on a secret's characters`);
|
|
185
185
|
if (def.mask === true) {
|
|
@@ -448,6 +448,47 @@ function ctrlC(armedAt, now, windowMs = CTRL_C_WINDOW_MS) {
|
|
|
448
448
|
return armedAt !== null && now - armedAt <= windowMs ? "exit" : "arm";
|
|
449
449
|
}
|
|
450
450
|
|
|
451
|
+
//#endregion
|
|
452
|
+
//#region src/fullscreen.ts
|
|
453
|
+
/** Whether full-screen is on: `SURFACE_FULLSCREEN` (`on` / `off`) over the app's option over on. */
|
|
454
|
+
function resolveFullscreen(option, env) {
|
|
455
|
+
const fallback = option ?? true;
|
|
456
|
+
const v = env?.trim().toLowerCase() ?? "";
|
|
457
|
+
if (v === "on") return {
|
|
458
|
+
on: true,
|
|
459
|
+
invalid: null
|
|
460
|
+
};
|
|
461
|
+
if (v === "off") return {
|
|
462
|
+
on: false,
|
|
463
|
+
invalid: null
|
|
464
|
+
};
|
|
465
|
+
return {
|
|
466
|
+
on: fallback,
|
|
467
|
+
invalid: v === "" ? null : env ?? null
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
const FOLLOWING = { held: null };
|
|
471
|
+
const bottomTop = (content, viewport) => Math.max(0, content - viewport);
|
|
472
|
+
/** The first content row shown. A held top past the end (the terminal grew) is clamped. */
|
|
473
|
+
function viewTop(s, content, viewport) {
|
|
474
|
+
const bottom = bottomTop(content, viewport);
|
|
475
|
+
return s.held === null ? bottom : Math.min(Math.max(0, s.held), bottom);
|
|
476
|
+
}
|
|
477
|
+
/** Content rows below the viewport. */
|
|
478
|
+
function linesBelow(s, content, viewport) {
|
|
479
|
+
return bottomTop(content, viewport) - viewTop(s, content, viewport);
|
|
480
|
+
}
|
|
481
|
+
/** Scrolls by `delta` rows (negative is up). Reaching the bottom follows again. */
|
|
482
|
+
function scrollBy(s, delta, content, viewport) {
|
|
483
|
+
const bottom = bottomTop(content, viewport);
|
|
484
|
+
const top = Math.min(Math.max(0, viewTop(s, content, viewport) + delta), bottom);
|
|
485
|
+
return top >= bottom ? FOLLOWING : { held: top };
|
|
486
|
+
}
|
|
487
|
+
/** A PgUp/PgDn step: a viewport less one row of overlap, never under one. */
|
|
488
|
+
function pageStep(viewport) {
|
|
489
|
+
return Math.max(1, viewport - 1);
|
|
490
|
+
}
|
|
491
|
+
|
|
451
492
|
//#endregion
|
|
452
493
|
//#region src/history.ts
|
|
453
494
|
/**
|
|
@@ -564,7 +605,16 @@ function resolveKey(state, key, registry) {
|
|
|
564
605
|
const spec = keySpecOf(key);
|
|
565
606
|
const focused = state.overlay === null ? void 0 : registry.panels.get(`${state.overlay.module}/${state.overlay.panel}`);
|
|
566
607
|
const live = (focused?.def.confirm?.length ?? 0) > 0 || focused?.def.submit !== void 0;
|
|
567
|
-
|
|
608
|
+
const takesText = (text) => state.overlay !== null && !live && focused?.def.text !== void 0 ? {
|
|
609
|
+
kind: "panel-text",
|
|
610
|
+
module: state.overlay.module,
|
|
611
|
+
panel: state.overlay.panel,
|
|
612
|
+
text
|
|
613
|
+
} : null;
|
|
614
|
+
if (spec === null) {
|
|
615
|
+
if (state.menu !== null || state.overlay === null || live) return { kind: "edit" };
|
|
616
|
+
return takesText(key.input) ?? { kind: "ignore" };
|
|
617
|
+
}
|
|
568
618
|
if (spec === "ctrl+c") return { kind: "exit-chord" };
|
|
569
619
|
if (state.menu !== null) {
|
|
570
620
|
if (spec === "up") return {
|
|
@@ -606,7 +656,7 @@ function resolveKey(state, key, registry) {
|
|
|
606
656
|
module: g.module,
|
|
607
657
|
key: spec
|
|
608
658
|
};
|
|
609
|
-
if (!live) return { kind: "ignore" };
|
|
659
|
+
if (!live) return ([...spec].length === 1 ? takesText(key.input) : null) ?? { kind: "ignore" };
|
|
610
660
|
if (spec === "enter") {
|
|
611
661
|
const armed = focused?.def.confirm?.find((c) => c.key === state.armed);
|
|
612
662
|
return armed === void 0 ? { kind: "submit" } : {
|
|
@@ -623,6 +673,20 @@ function resolveKey(state, key, registry) {
|
|
|
623
673
|
module: global.module,
|
|
624
674
|
key: spec
|
|
625
675
|
};
|
|
676
|
+
if (state.viewport !== void 0 && state.overlay === null) {
|
|
677
|
+
if (spec === "pageup") return {
|
|
678
|
+
kind: "scroll",
|
|
679
|
+
act: "page-up"
|
|
680
|
+
};
|
|
681
|
+
if (spec === "pagedown") return {
|
|
682
|
+
kind: "scroll",
|
|
683
|
+
act: "page-down"
|
|
684
|
+
};
|
|
685
|
+
if (spec === "end" && state.viewport === "held") return {
|
|
686
|
+
kind: "scroll",
|
|
687
|
+
act: "bottom"
|
|
688
|
+
};
|
|
689
|
+
}
|
|
626
690
|
if (spec === "escape") return state.draftEmpty ? { kind: "cancel-turn" } : { kind: "ignore" };
|
|
627
691
|
if (spec === "up") return {
|
|
628
692
|
kind: "history",
|
|
@@ -862,13 +926,23 @@ function reprintStart(heights, budget) {
|
|
|
862
926
|
}
|
|
863
927
|
return 0;
|
|
864
928
|
}
|
|
929
|
+
/**
|
|
930
|
+
* DEC private mode 1007 ("alternate scroll"): off, a terminal stops turning the mouse wheel into
|
|
931
|
+
* Up/Down in the alternate screen, which would walk input history. No mouse reporting is enabled,
|
|
932
|
+
* so drag-select stays the terminal's.
|
|
933
|
+
*/
|
|
934
|
+
const WHEEL_ARROWS_OFF = "\x1B[?1007l";
|
|
935
|
+
/** Restores 1007. shortcut: assumes it was on (most terminals' default; xterm's is off); query it with DECRQM if that bites. */
|
|
936
|
+
const WHEEL_ARROWS_ON = "\x1B[?1007h";
|
|
865
937
|
/** The bytes {@link prepareTerminal} writes, in order. */
|
|
866
938
|
function prepareSequence(rows, opts = {}) {
|
|
867
|
-
|
|
939
|
+
const ground = groundSequence(opts.ground) ?? "";
|
|
940
|
+
if (opts.fullscreen === true) return ground + WHEEL_ARROWS_OFF;
|
|
941
|
+
return ground + (opts.clear === false ? "" : CLEAR_PANE) + (opts.anchor === false ? "" : anchorPadding(rows));
|
|
868
942
|
}
|
|
869
943
|
/**
|
|
870
|
-
* Ground, clear and anchor the terminal before `render
|
|
871
|
-
* terminal's background back. It is also registered on `exit`, and SIGHUP / SIGTERM / SIGINT exit
|
|
944
|
+
* Ground, clear and anchor the terminal before `render` (in full-screen: ground and the wheel).
|
|
945
|
+
* Returns a restore function that puts the terminal's background and wheel back. It is also registered on `exit`, and SIGHUP / SIGTERM / SIGINT exit
|
|
872
946
|
* through it, since their default action kills the process with no `exit` event (under Ink's raw
|
|
873
947
|
* mode ctrl+c is input, so SIGINT only arrives from outside: `kill -INT`, a supervisor, tmux).
|
|
874
948
|
* A terminal left black is worse than any rendering bug. A no-op off a TTY.
|
|
@@ -876,12 +950,13 @@ function prepareSequence(rows, opts = {}) {
|
|
|
876
950
|
function prepareTerminal(out, opts = {}, proc = process) {
|
|
877
951
|
if (out.isTTY !== true) return () => {};
|
|
878
952
|
out.write(prepareSequence(out.rows, opts));
|
|
879
|
-
|
|
953
|
+
const back = (groundSequence(opts.ground) === null ? "" : RESET_GROUND) + (opts.fullscreen === true ? WHEEL_ARROWS_ON : "");
|
|
954
|
+
if (back === "") return () => {};
|
|
880
955
|
let restored = false;
|
|
881
956
|
const restore = () => {
|
|
882
957
|
if (restored) return;
|
|
883
958
|
restored = true;
|
|
884
|
-
out.write(
|
|
959
|
+
out.write(back);
|
|
885
960
|
};
|
|
886
961
|
proc.once("exit", restore);
|
|
887
962
|
proc.once("SIGHUP", () => proc.exit(129));
|
|
@@ -994,6 +1069,138 @@ function dropGaps(t) {
|
|
|
994
1069
|
};
|
|
995
1070
|
}
|
|
996
1071
|
|
|
1072
|
+
//#endregion
|
|
1073
|
+
//#region src/list-pager-state.ts
|
|
1074
|
+
const listStep = (list, hooks) => ({
|
|
1075
|
+
kind: "list",
|
|
1076
|
+
list,
|
|
1077
|
+
hooks,
|
|
1078
|
+
page: 0,
|
|
1079
|
+
cursor: 0,
|
|
1080
|
+
filter: "",
|
|
1081
|
+
filtering: false,
|
|
1082
|
+
size: 1
|
|
1083
|
+
});
|
|
1084
|
+
let tokens = 0;
|
|
1085
|
+
const fresh = () => {
|
|
1086
|
+
tokens += 1;
|
|
1087
|
+
return tokens;
|
|
1088
|
+
};
|
|
1089
|
+
const pagerAt = (list, hooks) => ({
|
|
1090
|
+
steps: [listStep(list, hooks)],
|
|
1091
|
+
token: fresh()
|
|
1092
|
+
});
|
|
1093
|
+
const top = (s) => s.steps[s.steps.length - 1];
|
|
1094
|
+
const withTop = (s, step) => ({
|
|
1095
|
+
...s,
|
|
1096
|
+
steps: [...s.steps.slice(0, -1), step]
|
|
1097
|
+
});
|
|
1098
|
+
const onList = (s, fn) => {
|
|
1099
|
+
const t = top(s);
|
|
1100
|
+
return t?.kind === "list" ? withTop(s, fn(t)) : s;
|
|
1101
|
+
};
|
|
1102
|
+
const push = (s, step) => ({
|
|
1103
|
+
steps: [...s.steps, step],
|
|
1104
|
+
token: fresh()
|
|
1105
|
+
});
|
|
1106
|
+
/** Where the cursor's row falls at page size `per`, whatever size it was last moved with. */
|
|
1107
|
+
function placement(l, per) {
|
|
1108
|
+
const at = l.page * l.size + l.cursor;
|
|
1109
|
+
return {
|
|
1110
|
+
page: Math.floor(at / per),
|
|
1111
|
+
cursor: at % per
|
|
1112
|
+
};
|
|
1113
|
+
}
|
|
1114
|
+
/** The list's rows as the filter leaves them. */
|
|
1115
|
+
const visibleRows = (l) => filterRows(l.list.rows, l.filter);
|
|
1116
|
+
/** The highlighted row, or the open detail's row; undefined when the filter matches nothing. */
|
|
1117
|
+
function cursorRow(s) {
|
|
1118
|
+
const t = top(s);
|
|
1119
|
+
if (t === void 0) return void 0;
|
|
1120
|
+
if (t.kind !== "list") return t.row;
|
|
1121
|
+
return visibleRows(t)[t.page * t.size + t.cursor];
|
|
1122
|
+
}
|
|
1123
|
+
/** ↑↓: one row, walking onto the next or previous page at an edge; stops at either end. */
|
|
1124
|
+
function move(s, delta, pageSize) {
|
|
1125
|
+
return onList(s, (l) => {
|
|
1126
|
+
const n = visibleRows(l).length;
|
|
1127
|
+
if (n === 0) return {
|
|
1128
|
+
...l,
|
|
1129
|
+
size: pageSize
|
|
1130
|
+
};
|
|
1131
|
+
const at = Math.min(Math.max(0, l.page * l.size + l.cursor + delta), n - 1);
|
|
1132
|
+
return {
|
|
1133
|
+
...l,
|
|
1134
|
+
page: Math.floor(at / pageSize),
|
|
1135
|
+
cursor: at % pageSize,
|
|
1136
|
+
size: pageSize
|
|
1137
|
+
};
|
|
1138
|
+
});
|
|
1139
|
+
}
|
|
1140
|
+
/** ←→: a page, the cursor on its first row; stays on the first or last page. */
|
|
1141
|
+
function turn(s, delta, pageSize) {
|
|
1142
|
+
return onList(s, (l) => {
|
|
1143
|
+
const pages = Math.max(1, Math.ceil(visibleRows(l).length / pageSize));
|
|
1144
|
+
const { page } = placement(l, pageSize);
|
|
1145
|
+
return {
|
|
1146
|
+
...l,
|
|
1147
|
+
page: Math.min(Math.max(0, page + delta), pages - 1),
|
|
1148
|
+
cursor: 0,
|
|
1149
|
+
size: pageSize
|
|
1150
|
+
};
|
|
1151
|
+
});
|
|
1152
|
+
}
|
|
1153
|
+
const startFilter = (s) => onList(s, (l) => ({
|
|
1154
|
+
...l,
|
|
1155
|
+
filtering: true
|
|
1156
|
+
}));
|
|
1157
|
+
/** While filtering: the character joins the filter, and the list starts again from its top. */
|
|
1158
|
+
const typeChar = (s, ch) => onList(s, (l) => l.filtering ? {
|
|
1159
|
+
...l,
|
|
1160
|
+
filter: l.filter + ch,
|
|
1161
|
+
page: 0,
|
|
1162
|
+
cursor: 0
|
|
1163
|
+
} : l);
|
|
1164
|
+
const backspace = (s) => onList(s, (l) => l.filtering ? {
|
|
1165
|
+
...l,
|
|
1166
|
+
filter: [...l.filter].slice(0, -1).join(""),
|
|
1167
|
+
page: 0,
|
|
1168
|
+
cursor: 0
|
|
1169
|
+
} : l);
|
|
1170
|
+
/** Enter while filtering: keep the filter, stop typing into it. */
|
|
1171
|
+
const endFilter = (s) => onList(s, (l) => ({
|
|
1172
|
+
...l,
|
|
1173
|
+
filtering: false
|
|
1174
|
+
}));
|
|
1175
|
+
/**
|
|
1176
|
+
* Esc: filtering → the filter cleared; a detail or a related list → the step before it, where it
|
|
1177
|
+
* was left; the first list with a filter kept → the filter cleared; otherwise undefined (close).
|
|
1178
|
+
*/
|
|
1179
|
+
function back(s) {
|
|
1180
|
+
const t = top(s);
|
|
1181
|
+
if (t === void 0) return void 0;
|
|
1182
|
+
if (t.kind === "list" && (t.filtering || t.filter !== "")) return withTop(s, {
|
|
1183
|
+
...t,
|
|
1184
|
+
filter: "",
|
|
1185
|
+
filtering: false,
|
|
1186
|
+
page: 0,
|
|
1187
|
+
cursor: 0
|
|
1188
|
+
});
|
|
1189
|
+
if (s.steps.length > 1) return {
|
|
1190
|
+
steps: s.steps.slice(0, -1),
|
|
1191
|
+
token: fresh()
|
|
1192
|
+
};
|
|
1193
|
+
}
|
|
1194
|
+
/** ↑↓ on a detail: scroll between 0 and `maxScroll`. */
|
|
1195
|
+
function scrollDetail(s, delta, maxScroll) {
|
|
1196
|
+
const t = top(s);
|
|
1197
|
+
if (t?.kind !== "detail") return s;
|
|
1198
|
+
return withTop(s, {
|
|
1199
|
+
...t,
|
|
1200
|
+
scroll: Math.min(Math.max(0, t.scroll + delta), Math.max(0, maxScroll))
|
|
1201
|
+
});
|
|
1202
|
+
}
|
|
1203
|
+
|
|
997
1204
|
//#endregion
|
|
998
1205
|
//#region src/module.ts
|
|
999
1206
|
const MODULE_ID = /^[a-z][a-z0-9-]*(\.[a-z][a-z0-9-]*)*$/;
|
|
@@ -1033,4 +1240,4 @@ function setPanel(o, kind, next) {
|
|
|
1033
1240
|
}
|
|
1034
1241
|
|
|
1035
1242
|
//#endregion
|
|
1036
|
-
export {
|
|
1243
|
+
export { parseCommandLine as $, RESET_GROUND as A, normaliseKeySpec as At, sanitise as B, emptyTranscript as C, wordLeft as Ct, CLEAR_PANE as D, RESERVED_GLOBAL_KEYS as Dt, sendTurn as E, CompositionError as Et, liveShrink as F, commandUsage as G, unavailableReason as H, prepareSequence as I, menuWindow as J, completeDraft as K, prepareTerminal as L, WHEEL_ARROWS_ON as M, mergeCompletions as Mt, anchorPadding as N, DEFAULT_GROUND as O, assertComposes as Ot, groundSequence as P, paletteRows as Q, reflowSequence as R, dropGaps as S, pasteToLine as St, markedFlights as T, applyInput as Tt, MENU_NAME_WIDTH as U, routeInput as V, clampSelection as W, paletteMatches as X, moveSelection as Y, paletteQuery as Z, visibleRows as _, atEnd as _t, backspace as a, remember as at, arriveTurn as b, insertChunk as bt, listStep as c, FOLLOWING as ct, placement as d, resolveFullscreen as dt, keySpecOf as et, push as f, scrollBy as ft, typeChar as g, EMPTY_DRAFT as gt, turn as h, ctrlC as ht, back as i, mayWalk as it, WHEEL_ARROWS_OFF as j, applySuggestion as jt, REPRINT_LINES as k, composeModules as kt, move as l, linesBelow as lt, startFilter as m, CTRL_C_WINDOW_MS as mt, setPanel as n, EMPTY_HISTORY as nt, cursorRow as o, settle as ot, scrollDetail as p, viewTop as pt, enterRuns as q, defineModule as r, HISTORY_MAX as rt, endFilter as s, walk as st, panelOf as t, resolveKey as tt, pagerAt as u, pageStep as ut, addGap as v, editKey as vt, heldAsks as w, wordRight as wt, commitEntry as x, maskDraft as xt, answerEntry as y, graphemeAt as yt, reprintStart as z };
|
package/dist/pure.d.ts
CHANGED
|
@@ -3,14 +3,16 @@ export { applySuggestion, mergeCompletions } from './complete.js';
|
|
|
3
3
|
export { assertComposes, CompositionError, composeModules, RESERVED_GLOBAL_KEYS, type Registry } from './compose.js';
|
|
4
4
|
export { atEnd, type Draft, type EditKeys, EMPTY_DRAFT, editKey, insertChunk, maskDraft, pasteToLine, wordLeft, wordRight } from './editor.js';
|
|
5
5
|
export { CTRL_C_WINDOW_MS, ctrlC } from './exit-chord.js';
|
|
6
|
+
export { FOLLOWING, linesBelow, pageStep, resolveFullscreen, type Scroll, scrollBy, viewTop } from './fullscreen.js';
|
|
6
7
|
export { EMPTY_HISTORY, HISTORY_MAX, type HistoryState, mayWalk, remember, settle, walk } from './history.js';
|
|
7
8
|
export { normaliseKeySpec } from './key-spec.js';
|
|
8
9
|
export { type KeyState, keySpecOf, type Route, resolveKey } from './keys.js';
|
|
10
|
+
export { back, backspace, cursorRow, type DetailStep, endFilter, type ListDetail, type ListHooks, type ListStep, listStep, move, type PagerState, pagerAt, placement, push, type RelatedLoadingStep, type Step, scrollDetail, startFilter, turn, typeChar, visibleRows } from './list-pager-state.js';
|
|
9
11
|
export { type ArgSpec, type Armed, type Chip, type CommandSpec, type Completer, type ConfirmBinding, defineModule, type GlobalBinding, type Key, type KeySpec, type ModuleCtx, type ModuleSpec, type PanelDef, type PresenceSpec, type RailItem, type Renderer, type Reply, type Size, type SubmitOptions, type Suggestion, type TuiEvents, type TuiModule, type TurnContext, type TurnHandler, type TurnPhase, type TurnUpdate } from './module.js';
|
|
10
12
|
export { type Overlay, panelOf, setPanel } from './overlay.js';
|
|
11
13
|
export { clampSelection, commandUsage, completeDraft, enterRuns, MENU_NAME_WIDTH, menuWindow, moveSelection, type PaletteRow, paletteMatches, paletteQuery, paletteRows, parseCommandLine } from './palette.js';
|
|
12
14
|
export { type InputRoute, routeInput } from './route-input.js';
|
|
13
15
|
export { sanitise } from './sanitise.js';
|
|
14
|
-
export { anchorPadding, CLEAR_PANE, DEFAULT_GROUND, groundSequence, type LiveMeasure, liveShrink, type PrepareTerminalOptions, prepareSequence, prepareTerminal, RESET_GROUND, reflowSequence, type TerminalOut, type TerminalProcess } from './terminal.js';
|
|
16
|
+
export { anchorPadding, CLEAR_PANE, DEFAULT_GROUND, groundSequence, type LiveMeasure, liveShrink, type PrepareTerminalOptions, prepareSequence, prepareTerminal, RESET_GROUND, reflowSequence, type TerminalOut, type TerminalProcess, WHEEL_ARROWS_OFF, WHEEL_ARROWS_ON } from './terminal.js';
|
|
15
17
|
export { type AnswerEntry, type AppEntry, type AskEntry, addGap, answerEntry, arriveTurn, commitEntry, type Entry, emptyTranscript, type Flight, type GapEntry, heldAsks, markedFlights, type NoteEntry, sendTurn, type Transcript } from './transcript.js';
|
|
16
18
|
//# sourceMappingURL=pure.d.ts.map
|
package/dist/pure.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pure.d.ts","sourceRoot":"","sources":["../src/pure.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,EACL,KAAK,KAAK,EACV,KAAK,QAAQ,EACb,WAAW,EACX,OAAO,EACP,WAAW,EACX,SAAS,EACT,WAAW,EACX,QAAQ,EACR,SAAS,EACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EACL,aAAa,EACb,WAAW,EACX,KAAK,YAAY,EACjB,OAAO,EACP,QAAQ,EACR,MAAM,EACN,IAAI,EACL,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,KAAK,QAAQ,EAAE,SAAS,EAAE,KAAK,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC7E,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,YAAY,EACZ,KAAK,aAAa,EAClB,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,SAAS,EACd,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,KAAK,EACV,KAAK,IAAI,EACT,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACV,aAAa,EACb,KAAK,UAAU,EACf,cAAc,EACd,YAAY,EACZ,WAAW,EACX,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EACL,aAAa,EACb,UAAU,EACV,cAAc,EACd,cAAc,EACd,KAAK,WAAW,EAChB,UAAU,EACV,KAAK,sBAAsB,EAC3B,eAAe,EACf,eAAe,EACf,YAAY,EACZ,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,
|
|
1
|
+
{"version":3,"file":"pure.d.ts","sourceRoot":"","sources":["../src/pure.ts"],"names":[],"mappings":"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"}
|
package/dist/pure.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { $ as
|
|
1
|
+
import { $ as parseCommandLine, A as RESET_GROUND, At as normaliseKeySpec, B as sanitise, C as emptyTranscript, Ct as wordLeft, D as CLEAR_PANE, Dt as RESERVED_GLOBAL_KEYS, E as sendTurn, Et as CompositionError, F as liveShrink, G as commandUsage, I as prepareSequence, J as menuWindow, K as completeDraft, L as prepareTerminal, M as WHEEL_ARROWS_ON, Mt as mergeCompletions, N as anchorPadding, O as DEFAULT_GROUND, Ot as assertComposes, P as groundSequence, Q as paletteRows, R as reflowSequence, St as pasteToLine, T as markedFlights, Tt as applyInput, U as MENU_NAME_WIDTH, V as routeInput, W as clampSelection, X as paletteMatches, Y as moveSelection, Z as paletteQuery, _ as visibleRows, _t as atEnd, a as backspace, at as remember, b as arriveTurn, bt as insertChunk, c as listStep, ct as FOLLOWING, d as placement, dt as resolveFullscreen, et as keySpecOf, f as push, ft as scrollBy, g as typeChar, gt as EMPTY_DRAFT, h as turn, ht as ctrlC, i as back, it as mayWalk, j as WHEEL_ARROWS_OFF, jt as applySuggestion, kt as composeModules, l as move, lt as linesBelow, m as startFilter, mt as CTRL_C_WINDOW_MS, n as setPanel, nt as EMPTY_HISTORY, o as cursorRow, ot as settle, p as scrollDetail, pt as viewTop, q as enterRuns, r as defineModule, rt as HISTORY_MAX, s as endFilter, st as walk, t as panelOf, tt as resolveKey, u as pagerAt, ut as pageStep, v as addGap, vt as editKey, w as heldAsks, wt as wordRight, x as commitEntry, xt as maskDraft, y as answerEntry } from "./overlay-5s8slC38.js";
|
|
2
2
|
|
|
3
|
-
export { CLEAR_PANE, CTRL_C_WINDOW_MS, CompositionError, DEFAULT_GROUND, EMPTY_DRAFT, EMPTY_HISTORY, HISTORY_MAX, MENU_NAME_WIDTH, RESERVED_GLOBAL_KEYS, RESET_GROUND, addGap, anchorPadding, answerEntry, applyInput, applySuggestion, arriveTurn, assertComposes, atEnd, clampSelection, commandUsage, commitEntry, completeDraft, composeModules, ctrlC, defineModule, editKey, emptyTranscript, enterRuns, groundSequence, heldAsks, insertChunk, keySpecOf, liveShrink, markedFlights, maskDraft, mayWalk, menuWindow, mergeCompletions, moveSelection, normaliseKeySpec, paletteMatches, paletteQuery, paletteRows, panelOf, parseCommandLine, pasteToLine, prepareSequence, prepareTerminal, reflowSequence, remember, resolveKey, routeInput, sanitise, sendTurn, setPanel, settle, walk, wordLeft, wordRight };
|
|
3
|
+
export { CLEAR_PANE, CTRL_C_WINDOW_MS, CompositionError, DEFAULT_GROUND, EMPTY_DRAFT, EMPTY_HISTORY, FOLLOWING, HISTORY_MAX, MENU_NAME_WIDTH, RESERVED_GLOBAL_KEYS, RESET_GROUND, WHEEL_ARROWS_OFF, WHEEL_ARROWS_ON, addGap, anchorPadding, answerEntry, applyInput, applySuggestion, arriveTurn, assertComposes, atEnd, back, backspace, clampSelection, commandUsage, commitEntry, completeDraft, composeModules, ctrlC, cursorRow, defineModule, editKey, emptyTranscript, endFilter, enterRuns, groundSequence, heldAsks, insertChunk, keySpecOf, linesBelow, listStep, liveShrink, markedFlights, maskDraft, mayWalk, menuWindow, mergeCompletions, move, moveSelection, normaliseKeySpec, pageStep, pagerAt, paletteMatches, paletteQuery, paletteRows, panelOf, parseCommandLine, pasteToLine, placement, prepareSequence, prepareTerminal, push, reflowSequence, remember, resolveFullscreen, resolveKey, routeInput, sanitise, scrollBy, scrollDetail, sendTurn, setPanel, settle, startFilter, turn, typeChar, viewTop, visibleRows, walk, wordLeft, wordRight };
|
package/dist/terminal.d.ts
CHANGED
|
@@ -48,6 +48,14 @@ export declare const REPRINT_LINES = 1000;
|
|
|
48
48
|
* fit `budget` lines, and always the newest one, however tall.
|
|
49
49
|
*/
|
|
50
50
|
export declare function reprintStart(heights: readonly number[], budget: number): number;
|
|
51
|
+
/**
|
|
52
|
+
* DEC private mode 1007 ("alternate scroll"): off, a terminal stops turning the mouse wheel into
|
|
53
|
+
* Up/Down in the alternate screen, which would walk input history. No mouse reporting is enabled,
|
|
54
|
+
* so drag-select stays the terminal's.
|
|
55
|
+
*/
|
|
56
|
+
export declare const WHEEL_ARROWS_OFF = "\u001B[?1007l";
|
|
57
|
+
/** Restores 1007. shortcut: assumes it was on (most terminals' default; xterm's is off); query it with DECRQM if that bites. */
|
|
58
|
+
export declare const WHEEL_ARROWS_ON = "\u001B[?1007h";
|
|
51
59
|
export interface PrepareTerminalOptions {
|
|
52
60
|
/** `#rrggbb`, or `none` to leave the background alone. Default {@link DEFAULT_GROUND}. */
|
|
53
61
|
readonly ground?: string | undefined;
|
|
@@ -55,6 +63,8 @@ export interface PrepareTerminalOptions {
|
|
|
55
63
|
readonly clear?: boolean;
|
|
56
64
|
/** Bottom-anchor the input. Default true. */
|
|
57
65
|
readonly anchor?: boolean;
|
|
66
|
+
/** Full-screen: turn the wheel's arrow keys off (restored on exit), and never clear or anchor. */
|
|
67
|
+
readonly fullscreen?: boolean;
|
|
58
68
|
}
|
|
59
69
|
export interface TerminalOut {
|
|
60
70
|
readonly isTTY?: boolean;
|
|
@@ -70,8 +80,8 @@ export interface TerminalProcess {
|
|
|
70
80
|
exit(code: number): never;
|
|
71
81
|
}
|
|
72
82
|
/**
|
|
73
|
-
* Ground, clear and anchor the terminal before `render
|
|
74
|
-
* terminal's background back. It is also registered on `exit`, and SIGHUP / SIGTERM / SIGINT exit
|
|
83
|
+
* Ground, clear and anchor the terminal before `render` (in full-screen: ground and the wheel).
|
|
84
|
+
* Returns a restore function that puts the terminal's background and wheel back. It is also registered on `exit`, and SIGHUP / SIGTERM / SIGINT exit
|
|
75
85
|
* through it, since their default action kills the process with no `exit` event (under Ink's raw
|
|
76
86
|
* mode ctrl+c is input, so SIGINT only arrives from outside: `kill -INT`, a supervisor, tmux).
|
|
77
87
|
* A terminal left black is worse than any rendering bug. A no-op off a TTY.
|