@zakmandhro/bunti 0.1.4 → 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/AGENTS.md +65 -0
- package/README.md +145 -34
- package/dist/cli.d.ts +44 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +147 -0
- package/dist/cli.js.map +1 -0
- package/dist/colors.d.ts +144 -0
- package/dist/colors.d.ts.map +1 -0
- package/dist/colors.js +426 -0
- package/dist/colors.js.map +1 -0
- package/dist/components/Box.d.ts +11 -0
- package/dist/components/Box.d.ts.map +1 -0
- package/dist/components/Box.js +9 -0
- package/dist/components/Box.js.map +1 -0
- package/dist/components/Button.d.ts +24 -0
- package/dist/components/Button.d.ts.map +1 -0
- package/dist/components/Button.js +102 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Card.d.ts +33 -0
- package/dist/components/Card.d.ts.map +1 -0
- package/dist/components/Card.js +79 -0
- package/dist/components/Card.js.map +1 -0
- package/dist/components/Header.d.ts +23 -0
- package/dist/components/Header.d.ts.map +1 -0
- package/dist/components/Header.js +58 -0
- package/dist/components/Header.js.map +1 -0
- package/dist/components/Input.d.ts +25 -0
- package/dist/components/Input.d.ts.map +1 -0
- package/dist/components/Input.js +232 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/Link.d.ts +21 -0
- package/dist/components/Link.d.ts.map +1 -0
- package/dist/components/Link.js +29 -0
- package/dist/components/Link.js.map +1 -0
- package/dist/components/Modal.d.ts +38 -0
- package/dist/components/Modal.d.ts.map +1 -0
- package/dist/components/Modal.js +87 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/Progress.d.ts +27 -0
- package/dist/components/Progress.d.ts.map +1 -0
- package/dist/components/Progress.js +39 -0
- package/dist/components/Progress.js.map +1 -0
- package/dist/components/Spinner.d.ts +19 -0
- package/dist/components/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner.js +27 -0
- package/dist/components/Spinner.js.map +1 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +10 -0
- package/dist/components/index.js.map +1 -0
- package/dist/data/nf-glyphs.d.ts +11 -0
- package/dist/data/nf-glyphs.d.ts.map +1 -0
- package/dist/data/nf-glyphs.js +535 -0
- package/dist/data/nf-glyphs.js.map +1 -0
- package/dist/data/nf-names.d.ts +8 -0
- package/dist/data/nf-names.d.ts.map +1 -0
- package/dist/data/nf-names.js +2 -0
- package/dist/data/nf-names.js.map +1 -0
- package/dist/demo-registry.d.ts +27 -0
- package/dist/demo-registry.d.ts.map +1 -0
- package/dist/demo-registry.js +57 -0
- package/dist/demo-registry.js.map +1 -0
- package/dist/demos/2048.ts +743 -0
- package/dist/demos/animation.ts +246 -0
- package/dist/demos/demo-layout.ts +124 -0
- package/dist/demos/engine.ts +374 -0
- package/dist/demos/interaction.ts +91 -0
- package/dist/demos/login.ts +203 -0
- package/dist/demos/mission-control.ts +558 -0
- package/dist/demos/showcase.ts +224 -0
- package/dist/detect.d.ts +104 -0
- package/dist/detect.d.ts.map +1 -0
- package/dist/detect.js +227 -0
- package/dist/detect.js.map +1 -0
- package/dist/diagnostics.d.ts +73 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +225 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dsl/context.d.ts +11 -0
- package/dist/dsl/context.d.ts.map +1 -0
- package/dist/dsl/context.js +563 -0
- package/dist/dsl/context.js.map +1 -0
- package/dist/dsl/hooks.d.ts +12 -0
- package/dist/dsl/hooks.d.ts.map +1 -0
- package/dist/dsl/hooks.js +148 -0
- package/dist/dsl/hooks.js.map +1 -0
- package/dist/dsl/interaction.d.ts +16 -0
- package/dist/dsl/interaction.d.ts.map +1 -0
- package/dist/dsl/interaction.js +101 -0
- package/dist/dsl/interaction.js.map +1 -0
- package/dist/dsl/layers.d.ts +14 -0
- package/dist/dsl/layers.d.ts.map +1 -0
- package/dist/dsl/layers.js +87 -0
- package/dist/dsl/layers.js.map +1 -0
- package/dist/dsl/motion.d.ts +10 -0
- package/dist/dsl/motion.d.ts.map +1 -0
- package/dist/dsl/motion.js +150 -0
- package/dist/dsl/motion.js.map +1 -0
- package/dist/dsl/render.d.ts +22 -0
- package/dist/dsl/render.d.ts.map +1 -0
- package/dist/dsl/render.js +69 -0
- package/dist/dsl/render.js.map +1 -0
- package/dist/dsl/types.d.ts +510 -0
- package/dist/dsl/types.d.ts.map +1 -0
- package/dist/dsl/types.js +33 -0
- package/dist/dsl/types.js.map +1 -0
- package/dist/dsl.d.ts +18 -0
- package/dist/dsl.d.ts.map +1 -0
- package/dist/dsl.js +17 -0
- package/dist/dsl.js.map +1 -0
- package/dist/easing.d.ts +45 -0
- package/dist/easing.d.ts.map +1 -0
- package/dist/easing.js +121 -0
- package/dist/easing.js.map +1 -0
- package/dist/geometry.d.ts +77 -0
- package/dist/geometry.d.ts.map +1 -0
- package/dist/geometry.js +130 -0
- package/dist/geometry.js.map +1 -0
- package/dist/icons-full.d.ts +5 -0
- package/dist/icons-full.d.ts.map +1 -0
- package/dist/icons-full.js +31 -0
- package/dist/icons-full.js.map +1 -0
- package/dist/icons.d.ts +442 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +314 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +228 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +46 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +177 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +533 -0
- package/dist/input.js.map +1 -0
- package/dist/layout.d.ts +194 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +673 -0
- package/dist/layout.js.map +1 -0
- package/dist/render.d.ts +49 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +650 -0
- package/dist/render.js.map +1 -0
- package/dist/state.d.ts +226 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +130 -0
- package/dist/state.js.map +1 -0
- package/dist/theme.d.ts +129 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +167 -0
- package/dist/theme.js.map +1 -0
- package/dist/themes/catppuccin-mocha.d.ts +19 -0
- package/dist/themes/catppuccin-mocha.d.ts.map +1 -0
- package/dist/themes/catppuccin-mocha.js +36 -0
- package/dist/themes/catppuccin-mocha.js.map +1 -0
- package/dist/themes/dracula.d.ts +21 -0
- package/dist/themes/dracula.d.ts.map +1 -0
- package/dist/themes/dracula.js +37 -0
- package/dist/themes/dracula.js.map +1 -0
- package/dist/themes/github-light.d.ts +21 -0
- package/dist/themes/github-light.d.ts.map +1 -0
- package/dist/themes/github-light.js +36 -0
- package/dist/themes/github-light.js.map +1 -0
- package/dist/themes/index.d.ts +19 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +17 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/themes/nord.d.ts +23 -0
- package/dist/themes/nord.d.ts.map +1 -0
- package/dist/themes/nord.js +38 -0
- package/dist/themes/nord.js.map +1 -0
- package/dist/themes/one-dark-pro.d.ts +21 -0
- package/dist/themes/one-dark-pro.d.ts.map +1 -0
- package/dist/themes/one-dark-pro.js +36 -0
- package/dist/themes/one-dark-pro.js.map +1 -0
- package/dist/themes/tokyo-night.d.ts +20 -0
- package/dist/themes/tokyo-night.d.ts.map +1 -0
- package/dist/themes/tokyo-night.js +37 -0
- package/dist/themes/tokyo-night.js.map +1 -0
- package/dist/utils.d.ts +28 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +158 -0
- package/dist/utils.js.map +1 -0
- package/dist/vendor/colors.d.ts +45 -0
- package/dist/vendor/colors.d.ts.map +1 -0
- package/dist/vendor/colors.js +72 -0
- package/dist/vendor/colors.js.map +1 -0
- package/llms.txt +79 -0
- package/package.json +52 -11
- package/src/colors.ts +0 -255
- package/src/components/Button.ts +0 -104
- package/src/components/Card.ts +0 -53
- package/src/components/Header.ts +0 -65
- package/src/components/Input.ts +0 -124
- package/src/components/index.ts +0 -4
- package/src/data/glyphs.ts +0 -30
- package/src/detect.ts +0 -60
- package/src/dsl.ts +0 -661
- package/src/icons.ts +0 -186
- package/src/index.ts +0 -72
- package/src/layout.ts +0 -640
- package/src/render.ts +0 -302
- package/src/state.ts +0 -148
- package/src/utils.ts +0 -165
package/dist/input.d.ts
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bunti Input Tokenizer & Key Event Model
|
|
3
|
+
*
|
|
4
|
+
* A stateful tokenizer that turns raw stdin chunks into discrete input
|
|
5
|
+
* tokens. It handles the realities of terminal input that a naive
|
|
6
|
+
* chunk-per-key parser gets wrong:
|
|
7
|
+
*
|
|
8
|
+
* - Escape sequences split across stdin chunks (the tail is carried until
|
|
9
|
+
* the sequence completes or the ESC-disambiguation timeout fires).
|
|
10
|
+
* - Multiple key/mouse events packed into a single chunk (each one becomes
|
|
11
|
+
* its own token, including every SGR mouse event in the chunk).
|
|
12
|
+
* - CSI modifier parameters (xterm encoding: 2=shift 3=alt 5=ctrl ...),
|
|
13
|
+
* SS3 sequences, navigation keys, ctrl bytes (\x01-\x1a), and
|
|
14
|
+
* alt-prefixed ESC+char.
|
|
15
|
+
* - Terminal RESPONSES (cursor position reports, DA1/DA2, DECRQM, DCS
|
|
16
|
+
* replies like XTVERSION) are routed to a separate response channel and
|
|
17
|
+
* never enter the key stream — capability-detection probes depend on this.
|
|
18
|
+
* - Printable text is segmented per grapheme (Intl.Segmenter), so emoji
|
|
19
|
+
* arrive as whole key events.
|
|
20
|
+
*
|
|
21
|
+
* The KeyEvent shape below is FROZEN for launch. Post-launch protocol work
|
|
22
|
+
* (kitty keyboard protocol, bracketed paste) must slot into this shape
|
|
23
|
+
* without breaking it:
|
|
24
|
+
* - `kind: 'release'` is currently only synthesized by the HeldKeyTracker
|
|
25
|
+
* when a held key's repeat stream expires (legacy terminals never report
|
|
26
|
+
* releases). The kitty protocol will later produce real release events.
|
|
27
|
+
* - `kind: 'repeat'` is classified by the HeldKeyTracker heuristic, not by
|
|
28
|
+
* the terminal.
|
|
29
|
+
*/
|
|
30
|
+
/** Frozen key event shape. See module docs for the evolution contract. */
|
|
31
|
+
export interface KeyEvent {
|
|
32
|
+
/**
|
|
33
|
+
* Normalized key name. Printable keys are the literal grapheme
|
|
34
|
+
* ('a', 'A', ' ', 'é', emoji); specials are lowercase names ('up',
|
|
35
|
+
* 'enter', 'escape', 'tab', 'backspace', 'f1'..'f12'); mouse events
|
|
36
|
+
* arrive as 'click' / 'wheel_up' / 'wheel_down'.
|
|
37
|
+
*/
|
|
38
|
+
key: string;
|
|
39
|
+
/**
|
|
40
|
+
* 'press' on first arrival, 'repeat' while auto-repeating within the
|
|
41
|
+
* hold window, 'release' when a held key's repeat stream expires
|
|
42
|
+
* (synthesized — legacy terminals report no real releases).
|
|
43
|
+
*/
|
|
44
|
+
kind: 'press' | 'repeat' | 'release';
|
|
45
|
+
/** Ctrl was held (e.g. ctrl+a arrives as { key: 'a', ctrl: true }). */
|
|
46
|
+
ctrl: boolean;
|
|
47
|
+
/** Alt/meta was held (ESC-prefixed input). */
|
|
48
|
+
alt: boolean;
|
|
49
|
+
/** Shift was held (CSI-modifier encoded; plain 'A' stays shift: false). */
|
|
50
|
+
shift: boolean;
|
|
51
|
+
/** The raw byte sequence that produced this event ('' for synthesized). */
|
|
52
|
+
raw: string;
|
|
53
|
+
}
|
|
54
|
+
export type TerminalResponseKind = 'cursor-position' | 'device-attributes' | 'device-attributes-secondary' | 'mode-report' | 'terminal-version' | 'osc' | 'unknown';
|
|
55
|
+
/**
|
|
56
|
+
* A reply from the terminal to a capability/status probe. These are routed
|
|
57
|
+
* to `state.terminalResponses` (consumers drain the array) and NEVER into
|
|
58
|
+
* the key queue.
|
|
59
|
+
*/
|
|
60
|
+
export interface TerminalResponse {
|
|
61
|
+
kind: TerminalResponseKind;
|
|
62
|
+
raw: string;
|
|
63
|
+
/** Parsed cursor row (1-based), cursor-position responses only. */
|
|
64
|
+
row?: number;
|
|
65
|
+
/** Parsed cursor column (1-based), cursor-position responses only. */
|
|
66
|
+
col?: number;
|
|
67
|
+
}
|
|
68
|
+
/** A discrete unit of parsed input. */
|
|
69
|
+
export type InputToken = {
|
|
70
|
+
type: 'key';
|
|
71
|
+
event: KeyEvent;
|
|
72
|
+
}
|
|
73
|
+
/** SGR mouse report. x/y are the raw 1-based protocol coordinates.
|
|
74
|
+
* action mirrors the final byte: 'M' = press/motion/wheel, 'm' = release.
|
|
75
|
+
* Wheel and motion states are encoded in the button bits (64 / 32). */
|
|
76
|
+
| {
|
|
77
|
+
type: 'mouse';
|
|
78
|
+
button: number;
|
|
79
|
+
x: number;
|
|
80
|
+
y: number;
|
|
81
|
+
action: 'press' | 'release';
|
|
82
|
+
raw: string;
|
|
83
|
+
} | {
|
|
84
|
+
type: 'focus';
|
|
85
|
+
focused: boolean;
|
|
86
|
+
raw: string;
|
|
87
|
+
} | {
|
|
88
|
+
type: 'response';
|
|
89
|
+
response: TerminalResponse;
|
|
90
|
+
};
|
|
91
|
+
export interface InputTokenizerOptions {
|
|
92
|
+
/** How long a bare ESC waits for a follow-up before flushing as the
|
|
93
|
+
* 'escape' key. Default 30ms. */
|
|
94
|
+
escTimeoutMs?: number;
|
|
95
|
+
/** Called with tokens produced by the ESC-disambiguation timer. */
|
|
96
|
+
onFlush?: (tokens: InputToken[]) => void;
|
|
97
|
+
/** Injectable timer for tests. Defaults to setTimeout. */
|
|
98
|
+
schedule?: (callback: () => void, ms: number) => unknown;
|
|
99
|
+
/** Injectable timer cancel for tests. Defaults to clearTimeout. */
|
|
100
|
+
cancel?: (handle: unknown) => void;
|
|
101
|
+
}
|
|
102
|
+
/** Creates a KeyEvent with press semantics and explicit defaults. */
|
|
103
|
+
export declare function createKeyEvent(key: string, raw?: string, mods?: Partial<Pick<KeyEvent, 'ctrl' | 'alt' | 'shift' | 'kind'>>): KeyEvent;
|
|
104
|
+
/**
|
|
105
|
+
* Stateful input tokenizer. Feed it stdin chunks via push(); it returns the
|
|
106
|
+
* tokens completed by that chunk and carries any trailing partial escape
|
|
107
|
+
* sequence into the next call. A bare ESC (or unfinished sequence) is only
|
|
108
|
+
* flushed as the 'escape' key after `escTimeoutMs` with no follow-up bytes
|
|
109
|
+
* (tokens produced that way arrive via `onFlush`).
|
|
110
|
+
*/
|
|
111
|
+
export declare class InputTokenizer {
|
|
112
|
+
private options;
|
|
113
|
+
private pending;
|
|
114
|
+
private timer;
|
|
115
|
+
onFlush?: (tokens: InputToken[]) => void;
|
|
116
|
+
constructor(options?: InputTokenizerOptions);
|
|
117
|
+
/** Parses a chunk. Returns completed tokens; partial tails are carried. */
|
|
118
|
+
push(chunk: string): InputToken[];
|
|
119
|
+
/** True if a partial sequence is being carried. */
|
|
120
|
+
hasPending(): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Force-resolves the carried partial sequence (what the ESC timer does):
|
|
123
|
+
* a bare ESC becomes the 'escape' key; a partial DCS/OSC becomes a
|
|
124
|
+
* response; anything else becomes 'escape' plus its remainder as text.
|
|
125
|
+
*/
|
|
126
|
+
flushPending(): InputToken[];
|
|
127
|
+
/** Cancels the ESC-disambiguation timer (loop teardown). */
|
|
128
|
+
dispose(): void;
|
|
129
|
+
private scheduleTimer;
|
|
130
|
+
private cancelTimer;
|
|
131
|
+
private parse;
|
|
132
|
+
/**
|
|
133
|
+
* Parses one escape sequence starting at buffer[i] (=== ESC).
|
|
134
|
+
* Returns the number of chars consumed, or -1 if incomplete.
|
|
135
|
+
*/
|
|
136
|
+
private parseEscape;
|
|
137
|
+
/**
|
|
138
|
+
* Parses a CSI sequence starting at buffer[i] (=== ESC, buffer[i+1] === '[').
|
|
139
|
+
* Returns chars consumed or -1 if the final byte hasn't arrived yet.
|
|
140
|
+
*/
|
|
141
|
+
private parseCsi;
|
|
142
|
+
/** Tokenizes a run of non-ESC text: control bytes + printable graphemes. */
|
|
143
|
+
private tokenizeText;
|
|
144
|
+
}
|
|
145
|
+
export interface HeldKeyOptions {
|
|
146
|
+
/** A key is considered held until this long passes without a repeat.
|
|
147
|
+
* Default 150ms. */
|
|
148
|
+
holdWindowMs?: number;
|
|
149
|
+
/** Injectable clock for tests. Defaults to Date.now. */
|
|
150
|
+
now?: () => number;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Held-key heuristic for legacy terminals (which report no key releases):
|
|
154
|
+
* a key is "held" from its first press until no repeat arrives within the
|
|
155
|
+
* hold window. On expiry a synthetic kind:'release' KeyEvent is emitted.
|
|
156
|
+
* Good enough for platformer-style movement pre-kitty-protocol.
|
|
157
|
+
*/
|
|
158
|
+
export declare class HeldKeyTracker {
|
|
159
|
+
private options;
|
|
160
|
+
private held;
|
|
161
|
+
constructor(options?: HeldKeyOptions);
|
|
162
|
+
private get window();
|
|
163
|
+
private now;
|
|
164
|
+
/**
|
|
165
|
+
* Records a press-stream event and classifies it: a key seen again within
|
|
166
|
+
* the hold window becomes kind:'repeat'. Release events pass through.
|
|
167
|
+
*/
|
|
168
|
+
record(event: KeyEvent): KeyEvent;
|
|
169
|
+
/** True while the key's repeat stream is inside the hold window. */
|
|
170
|
+
isHeld(key: string): boolean;
|
|
171
|
+
/**
|
|
172
|
+
* Expires held keys whose repeat stream went silent and synthesizes a
|
|
173
|
+
* kind:'release' KeyEvent for each (raw '' — there were no real bytes).
|
|
174
|
+
*/
|
|
175
|
+
collectReleases(): KeyEvent[];
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
|