@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.
Files changed (203) hide show
  1. package/AGENTS.md +65 -0
  2. package/README.md +145 -34
  3. package/dist/cli.d.ts +44 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +147 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/colors.d.ts +144 -0
  8. package/dist/colors.d.ts.map +1 -0
  9. package/dist/colors.js +426 -0
  10. package/dist/colors.js.map +1 -0
  11. package/dist/components/Box.d.ts +11 -0
  12. package/dist/components/Box.d.ts.map +1 -0
  13. package/dist/components/Box.js +9 -0
  14. package/dist/components/Box.js.map +1 -0
  15. package/dist/components/Button.d.ts +24 -0
  16. package/dist/components/Button.d.ts.map +1 -0
  17. package/dist/components/Button.js +102 -0
  18. package/dist/components/Button.js.map +1 -0
  19. package/dist/components/Card.d.ts +33 -0
  20. package/dist/components/Card.d.ts.map +1 -0
  21. package/dist/components/Card.js +79 -0
  22. package/dist/components/Card.js.map +1 -0
  23. package/dist/components/Header.d.ts +23 -0
  24. package/dist/components/Header.d.ts.map +1 -0
  25. package/dist/components/Header.js +58 -0
  26. package/dist/components/Header.js.map +1 -0
  27. package/dist/components/Input.d.ts +25 -0
  28. package/dist/components/Input.d.ts.map +1 -0
  29. package/dist/components/Input.js +232 -0
  30. package/dist/components/Input.js.map +1 -0
  31. package/dist/components/Link.d.ts +21 -0
  32. package/dist/components/Link.d.ts.map +1 -0
  33. package/dist/components/Link.js +29 -0
  34. package/dist/components/Link.js.map +1 -0
  35. package/dist/components/Modal.d.ts +38 -0
  36. package/dist/components/Modal.d.ts.map +1 -0
  37. package/dist/components/Modal.js +87 -0
  38. package/dist/components/Modal.js.map +1 -0
  39. package/dist/components/Progress.d.ts +27 -0
  40. package/dist/components/Progress.d.ts.map +1 -0
  41. package/dist/components/Progress.js +39 -0
  42. package/dist/components/Progress.js.map +1 -0
  43. package/dist/components/Spinner.d.ts +19 -0
  44. package/dist/components/Spinner.d.ts.map +1 -0
  45. package/dist/components/Spinner.js +27 -0
  46. package/dist/components/Spinner.js.map +1 -0
  47. package/dist/components/index.d.ts +10 -0
  48. package/dist/components/index.d.ts.map +1 -0
  49. package/dist/components/index.js +10 -0
  50. package/dist/components/index.js.map +1 -0
  51. package/dist/data/nf-glyphs.d.ts +11 -0
  52. package/dist/data/nf-glyphs.d.ts.map +1 -0
  53. package/dist/data/nf-glyphs.js +535 -0
  54. package/dist/data/nf-glyphs.js.map +1 -0
  55. package/dist/data/nf-names.d.ts +8 -0
  56. package/dist/data/nf-names.d.ts.map +1 -0
  57. package/dist/data/nf-names.js +2 -0
  58. package/dist/data/nf-names.js.map +1 -0
  59. package/dist/demo-registry.d.ts +27 -0
  60. package/dist/demo-registry.d.ts.map +1 -0
  61. package/dist/demo-registry.js +57 -0
  62. package/dist/demo-registry.js.map +1 -0
  63. package/dist/demos/2048.ts +743 -0
  64. package/dist/demos/animation.ts +246 -0
  65. package/dist/demos/demo-layout.ts +124 -0
  66. package/dist/demos/engine.ts +374 -0
  67. package/dist/demos/interaction.ts +91 -0
  68. package/dist/demos/login.ts +203 -0
  69. package/dist/demos/mission-control.ts +558 -0
  70. package/dist/demos/showcase.ts +224 -0
  71. package/dist/detect.d.ts +104 -0
  72. package/dist/detect.d.ts.map +1 -0
  73. package/dist/detect.js +227 -0
  74. package/dist/detect.js.map +1 -0
  75. package/dist/diagnostics.d.ts +73 -0
  76. package/dist/diagnostics.d.ts.map +1 -0
  77. package/dist/diagnostics.js +225 -0
  78. package/dist/diagnostics.js.map +1 -0
  79. package/dist/dsl/context.d.ts +11 -0
  80. package/dist/dsl/context.d.ts.map +1 -0
  81. package/dist/dsl/context.js +563 -0
  82. package/dist/dsl/context.js.map +1 -0
  83. package/dist/dsl/hooks.d.ts +12 -0
  84. package/dist/dsl/hooks.d.ts.map +1 -0
  85. package/dist/dsl/hooks.js +148 -0
  86. package/dist/dsl/hooks.js.map +1 -0
  87. package/dist/dsl/interaction.d.ts +16 -0
  88. package/dist/dsl/interaction.d.ts.map +1 -0
  89. package/dist/dsl/interaction.js +101 -0
  90. package/dist/dsl/interaction.js.map +1 -0
  91. package/dist/dsl/layers.d.ts +14 -0
  92. package/dist/dsl/layers.d.ts.map +1 -0
  93. package/dist/dsl/layers.js +87 -0
  94. package/dist/dsl/layers.js.map +1 -0
  95. package/dist/dsl/motion.d.ts +10 -0
  96. package/dist/dsl/motion.d.ts.map +1 -0
  97. package/dist/dsl/motion.js +150 -0
  98. package/dist/dsl/motion.js.map +1 -0
  99. package/dist/dsl/render.d.ts +22 -0
  100. package/dist/dsl/render.d.ts.map +1 -0
  101. package/dist/dsl/render.js +69 -0
  102. package/dist/dsl/render.js.map +1 -0
  103. package/dist/dsl/types.d.ts +510 -0
  104. package/dist/dsl/types.d.ts.map +1 -0
  105. package/dist/dsl/types.js +33 -0
  106. package/dist/dsl/types.js.map +1 -0
  107. package/dist/dsl.d.ts +18 -0
  108. package/dist/dsl.d.ts.map +1 -0
  109. package/dist/dsl.js +17 -0
  110. package/dist/dsl.js.map +1 -0
  111. package/dist/easing.d.ts +45 -0
  112. package/dist/easing.d.ts.map +1 -0
  113. package/dist/easing.js +121 -0
  114. package/dist/easing.js.map +1 -0
  115. package/dist/geometry.d.ts +77 -0
  116. package/dist/geometry.d.ts.map +1 -0
  117. package/dist/geometry.js +130 -0
  118. package/dist/geometry.js.map +1 -0
  119. package/dist/icons-full.d.ts +5 -0
  120. package/dist/icons-full.d.ts.map +1 -0
  121. package/dist/icons-full.js +31 -0
  122. package/dist/icons-full.js.map +1 -0
  123. package/dist/icons.d.ts +442 -0
  124. package/dist/icons.d.ts.map +1 -0
  125. package/dist/icons.js +314 -0
  126. package/dist/icons.js.map +1 -0
  127. package/dist/index.d.ts +228 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +46 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/input.d.ts +177 -0
  132. package/dist/input.d.ts.map +1 -0
  133. package/dist/input.js +533 -0
  134. package/dist/input.js.map +1 -0
  135. package/dist/layout.d.ts +194 -0
  136. package/dist/layout.d.ts.map +1 -0
  137. package/dist/layout.js +673 -0
  138. package/dist/layout.js.map +1 -0
  139. package/dist/render.d.ts +49 -0
  140. package/dist/render.d.ts.map +1 -0
  141. package/dist/render.js +650 -0
  142. package/dist/render.js.map +1 -0
  143. package/dist/state.d.ts +226 -0
  144. package/dist/state.d.ts.map +1 -0
  145. package/dist/state.js +130 -0
  146. package/dist/state.js.map +1 -0
  147. package/dist/theme.d.ts +129 -0
  148. package/dist/theme.d.ts.map +1 -0
  149. package/dist/theme.js +167 -0
  150. package/dist/theme.js.map +1 -0
  151. package/dist/themes/catppuccin-mocha.d.ts +19 -0
  152. package/dist/themes/catppuccin-mocha.d.ts.map +1 -0
  153. package/dist/themes/catppuccin-mocha.js +36 -0
  154. package/dist/themes/catppuccin-mocha.js.map +1 -0
  155. package/dist/themes/dracula.d.ts +21 -0
  156. package/dist/themes/dracula.d.ts.map +1 -0
  157. package/dist/themes/dracula.js +37 -0
  158. package/dist/themes/dracula.js.map +1 -0
  159. package/dist/themes/github-light.d.ts +21 -0
  160. package/dist/themes/github-light.d.ts.map +1 -0
  161. package/dist/themes/github-light.js +36 -0
  162. package/dist/themes/github-light.js.map +1 -0
  163. package/dist/themes/index.d.ts +19 -0
  164. package/dist/themes/index.d.ts.map +1 -0
  165. package/dist/themes/index.js +17 -0
  166. package/dist/themes/index.js.map +1 -0
  167. package/dist/themes/nord.d.ts +23 -0
  168. package/dist/themes/nord.d.ts.map +1 -0
  169. package/dist/themes/nord.js +38 -0
  170. package/dist/themes/nord.js.map +1 -0
  171. package/dist/themes/one-dark-pro.d.ts +21 -0
  172. package/dist/themes/one-dark-pro.d.ts.map +1 -0
  173. package/dist/themes/one-dark-pro.js +36 -0
  174. package/dist/themes/one-dark-pro.js.map +1 -0
  175. package/dist/themes/tokyo-night.d.ts +20 -0
  176. package/dist/themes/tokyo-night.d.ts.map +1 -0
  177. package/dist/themes/tokyo-night.js +37 -0
  178. package/dist/themes/tokyo-night.js.map +1 -0
  179. package/dist/utils.d.ts +28 -0
  180. package/dist/utils.d.ts.map +1 -0
  181. package/dist/utils.js +158 -0
  182. package/dist/utils.js.map +1 -0
  183. package/dist/vendor/colors.d.ts +45 -0
  184. package/dist/vendor/colors.d.ts.map +1 -0
  185. package/dist/vendor/colors.js +72 -0
  186. package/dist/vendor/colors.js.map +1 -0
  187. package/llms.txt +79 -0
  188. package/package.json +52 -11
  189. package/src/colors.ts +0 -255
  190. package/src/components/Button.ts +0 -104
  191. package/src/components/Card.ts +0 -53
  192. package/src/components/Header.ts +0 -65
  193. package/src/components/Input.ts +0 -124
  194. package/src/components/index.ts +0 -4
  195. package/src/data/glyphs.ts +0 -30
  196. package/src/detect.ts +0 -60
  197. package/src/dsl.ts +0 -661
  198. package/src/icons.ts +0 -186
  199. package/src/index.ts +0 -72
  200. package/src/layout.ts +0 -640
  201. package/src/render.ts +0 -302
  202. package/src/state.ts +0 -148
  203. package/src/utils.ts +0 -165
@@ -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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"}