@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,563 @@
1
+ /**
2
+ * Bunti DSL context factories: the common per-closure context, the direct
3
+ * (screen-buffer) box renderer, and the top-level screen context.
4
+ */
5
+ import { bg, contrastText, createGradient, darken, fade, fg, lighten, rgb, } from '../colors';
6
+ import { identifyTerminal } from '../detect';
7
+ import { beginHookFrame, hintInputReadWithoutKeyboard, hintOverlappingBoxes, } from '../diagnostics';
8
+ import { resolveRect as resolveGeometryRect, resolvePlacedRect, splitRect as splitGeometryRect, } from '../geometry';
9
+ import { icon, replaceEmojis } from '../icons';
10
+ import { dimRect, getWindow, joinHorizontal, joinVertical, blit as layoutBlit, box as layoutBox, gradient as layoutGradient, list as layoutList, table as layoutTable, viewport as layoutViewport, wallpaper as layoutWallpaper, rect, resolveSize, } from '../layout';
11
+ import { darkTheme, resolveTheme, } from '../theme';
12
+ import { visibleWidth } from '../utils';
13
+ import { colors } from '../vendor/colors';
14
+ import { createHooks } from './hooks';
15
+ import { createInteraction } from './interaction';
16
+ import { compositeLayer, createLayerScreenState, layerContentBounds, } from './layers';
17
+ import { createMotion } from './motion';
18
+ import { KEYS, } from './types';
19
+ /** Luminance scale applied by layer drop shadows at composite time. */
20
+ const LAYER_SHADOW_DIM = 0.45;
21
+ function boxBorderInset(options) {
22
+ return options.border === 'none' || !options.border ? 0 : 1;
23
+ }
24
+ /**
25
+ * Resolves the effective foreground for a box's `color` option. 'blank'
26
+ * auto-picks pure black or pure white text by WCAG luminance of the box
27
+ * background (gradients sample their middle stop).
28
+ */
29
+ function resolveBoxFg(options) {
30
+ if (options.color !== 'blank')
31
+ return options.color;
32
+ const bgColor = options.bgColor;
33
+ if (bgColor === undefined)
34
+ return undefined;
35
+ if (typeof bgColor === 'object' && 'colors' in bgColor) {
36
+ const stops = bgColor.colors;
37
+ if (stops.length === 0)
38
+ return undefined;
39
+ return contrastText(stops[Math.floor(stops.length / 2)]);
40
+ }
41
+ return contrastText(bgColor);
42
+ }
43
+ function activeTheme(dslState, state) {
44
+ // options is shared by reference with layer screen-state copies, so
45
+ // options.theme always reflects the latest setTheme() call.
46
+ return (dslState.themeStack[dslState.themeStack.length - 1] ??
47
+ state.options.theme ??
48
+ state.theme ??
49
+ darkTheme);
50
+ }
51
+ function resolveBoxArea(parent, options, contentWidth, contentHeight) {
52
+ return resolvePlacedRect(parent, {
53
+ x: options.x,
54
+ y: options.y,
55
+ width: options.anchor === 'top' || options.anchor === 'bottom'
56
+ ? parent.width
57
+ : options.width,
58
+ height: options.height,
59
+ anchor: options.anchor,
60
+ contentWidth,
61
+ contentHeight,
62
+ });
63
+ }
64
+ function resolveBoxInnerArea(area, options) {
65
+ const borderInset = boxBorderInset(options);
66
+ const px = options.padding?.[1] ?? 0;
67
+ const py = options.padding?.[0] ?? 0;
68
+ return {
69
+ x: area.x + borderInset + px,
70
+ y: area.y + borderInset + py,
71
+ width: Math.max(0, area.width - borderInset * 2 - px * 2),
72
+ height: Math.max(0, area.height - borderInset * 2 - py * 2),
73
+ };
74
+ }
75
+ /**
76
+ * Redefines ctx.lastKey / ctx.keys as live getters that also feed the
77
+ * "input read without { keyboard: true }" dev hint. Non-enumerable so the
78
+ * screen-context spread of the base context can never trigger a spurious
79
+ * read — only real user reads do.
80
+ */
81
+ function defineInputAccessors(ctx, state) {
82
+ Object.defineProperty(ctx, 'lastKey', {
83
+ configurable: true,
84
+ enumerable: false,
85
+ get: () => {
86
+ hintInputReadWithoutKeyboard(state.options);
87
+ return state.lastKey;
88
+ },
89
+ });
90
+ Object.defineProperty(ctx, 'keys', {
91
+ configurable: true,
92
+ enumerable: false,
93
+ get: () => {
94
+ hintInputReadWithoutKeyboard(state.options);
95
+ return state.keys ?? [];
96
+ },
97
+ });
98
+ }
99
+ const buntiColor = {
100
+ ...colors,
101
+ darken,
102
+ lighten,
103
+ rgb,
104
+ fg,
105
+ bg,
106
+ dim: (text) => fg({ r: 96, g: 102, b: 118 }, text),
107
+ };
108
+ /**
109
+ * Common Context Factory: Provided to every closure.
110
+ */
111
+ function createDSLContext(state, dslState, availableW, availableH, offsetX = 0, offsetY = 0, isRoot = false) {
112
+ const hooks = createHooks(state);
113
+ const motion = createMotion(state, hooks.useState);
114
+ const interaction = createInteraction(state, (bounds) => ctx.resolveRect(bounds));
115
+ const ctx = {
116
+ color: buntiColor,
117
+ state,
118
+ width: availableW,
119
+ height: availableH,
120
+ area: { x: offsetX, y: offsetY, width: availableW, height: availableH },
121
+ isRoot,
122
+ offsetX,
123
+ offsetY,
124
+ get cursorX() {
125
+ const currentFlow = dslState.activeContents.join('');
126
+ const lines = currentFlow.split('\n');
127
+ return visibleWidth(lines[lines.length - 1]);
128
+ },
129
+ get cursorY() {
130
+ const currentFlow = dslState.activeContents.join('');
131
+ return Math.max(0, currentFlow.split('\n').length - 1);
132
+ },
133
+ mouseX: state.mouseX,
134
+ mouseY: state.mouseY,
135
+ mouseButton: state.mouseButton,
136
+ isMouseDown: state.isMouseDown,
137
+ lastKey: state.lastKey,
138
+ keys: state.keys ?? [],
139
+ focusedId: state.focusedId,
140
+ elapsedTime: Date.now() - state.startTime,
141
+ terminal: (state.terminal ??= identifyTerminal()),
142
+ get theme() {
143
+ return activeTheme(dslState, state);
144
+ },
145
+ setTheme(theme) {
146
+ const resolved = resolveTheme(theme);
147
+ state.theme = resolved;
148
+ state.options.theme = resolved;
149
+ state.requestTick?.();
150
+ },
151
+ themed(theme, callback) {
152
+ const next = resolveTheme(theme, activeTheme(dslState, state));
153
+ dslState.themeStack.push(next);
154
+ try {
155
+ callback(ctx);
156
+ }
157
+ finally {
158
+ dslState.themeStack.pop();
159
+ }
160
+ return ctx;
161
+ },
162
+ keyPressed(name) {
163
+ hintInputReadWithoutKeyboard(state.options);
164
+ return (state.keys?.some((e) => e.key === name && e.kind !== 'release') ?? false);
165
+ },
166
+ isKeyHeld(name) {
167
+ hintInputReadWithoutKeyboard(state.options);
168
+ return state.heldKeys?.isHeld(name) ?? false;
169
+ },
170
+ text(str) {
171
+ dslState.activeContents.push(replaceEmojis(String(str)));
172
+ return ctx;
173
+ },
174
+ ...motion,
175
+ ...hooks,
176
+ ...interaction,
177
+ resolveRect(bounds) {
178
+ return resolveGeometryRect({ x: offsetX, y: offsetY, width: availableW, height: availableH }, {
179
+ ...bounds,
180
+ y: bounds.y ?? ctx.cursorY,
181
+ });
182
+ },
183
+ resolveLocalRect(bounds, options) {
184
+ return resolvePlacedRect({ x: 0, y: 0, width: availableW, height: availableH }, bounds, options);
185
+ },
186
+ split(options) {
187
+ return splitGeometryRect({ x: 0, y: 0, width: availableW, height: availableH }, options);
188
+ },
189
+ list(id, items, options = {}) {
190
+ const [selectedIndex, setSelectedIndex] = ctx.useState(`${id}_index`, 0);
191
+ const isFocused = ctx.focusable(id);
192
+ if (isFocused && options.interactive !== false) {
193
+ if (state.lastKey === KEYS.UP)
194
+ setSelectedIndex(Math.max(0, selectedIndex - 1));
195
+ if (state.lastKey === KEYS.DOWN)
196
+ setSelectedIndex(Math.min(items.length - 1, selectedIndex + 1));
197
+ }
198
+ // Mouse: each visible row registers a `${id}:row:${index}` hitbox.
199
+ // Clicking a row selects it (and focuses the list so the selection is
200
+ // visible); the hovered row gets a soft selection wash. Keyboard
201
+ // behavior is unchanged.
202
+ let hoveredIndex;
203
+ if (state.options.mouse && options.interactive !== false) {
204
+ const startY = ctx.cursorY;
205
+ let visibleItems = items;
206
+ let offset = 0;
207
+ let hasMoreAbove = false;
208
+ if (options.maxVisible && items.length > options.maxVisible) {
209
+ const win = getWindow(items, selectedIndex, options.maxVisible);
210
+ visibleItems = win.visible;
211
+ offset = win.start;
212
+ hasMoreAbove = win.hasMoreAbove;
213
+ }
214
+ const resolvedW = resolveSize(options.width, availableW, 0);
215
+ const rowW = resolvedW > 0 ? resolvedW : availableW;
216
+ for (let i = 0; i < visibleItems.length; i++) {
217
+ const actualIdx = offset + i;
218
+ const row = ctx.hitbox(`${id}:row:${actualIdx}`, {
219
+ x: 0,
220
+ y: startY + (hasMoreAbove ? 1 : 0) + i,
221
+ width: rowW,
222
+ height: 1,
223
+ });
224
+ if (row.hovered)
225
+ hoveredIndex = actualIdx;
226
+ if (row.clicked) {
227
+ setSelectedIndex(actualIdx);
228
+ ctx.focus(id);
229
+ }
230
+ }
231
+ }
232
+ // Theme-token fallbacks: focused rows highlight with theme.selection /
233
+ // theme.focus, unfocused lists mute their selected row via theme.muted.
234
+ // Explicit options always win.
235
+ const theme = activeTheme(dslState, state);
236
+ const content = layoutList(items, {
237
+ ...options,
238
+ focusedIndex: selectedIndex,
239
+ focusStyle: isFocused
240
+ ? (options.focusStyle ?? ((s) => theme.focus(s)))
241
+ : (s) => theme.muted(s),
242
+ selectedBg: isFocused
243
+ ? (options.selectedBg ?? theme.selection)
244
+ : undefined,
245
+ hoveredIndex: options.hoveredIndex ?? hoveredIndex,
246
+ hoverBg: options.hoverBg ??
247
+ fade(theme.selection.rgb, theme.background.rgb, 0.55),
248
+ }, availableW);
249
+ dslState.activeContents.push(content);
250
+ return ctx;
251
+ },
252
+ table(rows, options = {}) {
253
+ const content = layoutTable(rows, options, availableW);
254
+ dslState.activeContents.push(content);
255
+ return ctx;
256
+ },
257
+ icon(name) {
258
+ return icon(name);
259
+ },
260
+ blit(x, y, content, style = {}) {
261
+ layoutBlit(state, x, y, content, style);
262
+ return ctx;
263
+ },
264
+ rect(x, y, w, h, style) {
265
+ rect(state, x, y, w, h, style);
266
+ return ctx;
267
+ },
268
+ viewport(content, width, height, scrollY = 0) {
269
+ return layoutViewport(content, width, height, scrollY);
270
+ },
271
+ span(options, callback) {
272
+ const subContents = [];
273
+ dslState.stack.push(dslState.activeContents);
274
+ dslState.activeContents = subContents;
275
+ callback(ctx);
276
+ dslState.activeContents = dslState.stack.pop();
277
+ const combined = subContents.join('');
278
+ let styled = combined;
279
+ if (typeof options.color === 'function') {
280
+ styled = options.color(combined);
281
+ }
282
+ else if (options.color !== undefined) {
283
+ styled = fg(options.color, combined);
284
+ }
285
+ dslState.activeContents.push(styled);
286
+ return styled;
287
+ },
288
+ box(options, callback) {
289
+ if (options.zIndex !== undefined) {
290
+ const { zIndex, ...layeredOptions } = options;
291
+ ctx.layer(zIndex, (layerCtx) => {
292
+ layerCtx.box(layeredOptions, callback);
293
+ });
294
+ return '';
295
+ }
296
+ const preContentW = options.width === undefined ? availableW : 0;
297
+ const preContentH = options.height === undefined ? availableH : 0;
298
+ const preArea = resolveBoxArea(ctx.area, options, preContentW, preContentH);
299
+ const innerArea = resolveBoxInnerArea(preArea, options);
300
+ const subContents = [];
301
+ dslState.stack.push(dslState.activeContents);
302
+ dslState.activeContents = subContents;
303
+ const subCtx = createDSLContext(state, dslState, innerArea.width, innerArea.height, innerArea.x, innerArea.y);
304
+ callback(subCtx);
305
+ dslState.activeContents = dslState.stack.pop();
306
+ const innerContent = subContents.join('');
307
+ const styledBox = layoutBox(innerContent, options, availableW, availableH);
308
+ if (!options.detach) {
309
+ dslState.activeContents.push(styledBox);
310
+ }
311
+ return styledBox;
312
+ },
313
+ layer(zIndexOrOptions, maybeCallback) {
314
+ const callback = typeof zIndexOrOptions === 'function' ? zIndexOrOptions : maybeCallback;
315
+ if (!callback)
316
+ return ctx;
317
+ const layerOptions = typeof zIndexOrOptions === 'number'
318
+ ? { zIndex: zIndexOrOptions }
319
+ : typeof zIndexOrOptions === 'object'
320
+ ? zIndexOrOptions
321
+ : {};
322
+ const zIndex = layerOptions.zIndex ?? 0;
323
+ const layerState = createLayerScreenState(state);
324
+ const layerDslState = {
325
+ activeContents: [],
326
+ stack: [],
327
+ layers: dslState.layers,
328
+ layerOrder: dslState.layerOrder,
329
+ themeStack: dslState.themeStack,
330
+ };
331
+ const layerCtx = createDSLContext(layerState, layerDslState, availableW, availableH, offsetX, offsetY, isRoot);
332
+ layerCtx.box = createDirectBoxRenderer(layerState, layerDslState, layerCtx);
333
+ callback(layerCtx);
334
+ const flow = layerDslState.activeContents.join('');
335
+ if (flow)
336
+ layoutBlit(layerState, offsetX, offsetY, flow);
337
+ dslState.layerOrder = layerDslState.layerOrder + 1;
338
+ dslState.layers.push({
339
+ zIndex,
340
+ order: layerDslState.layerOrder,
341
+ buffer: layerState.backBuffer,
342
+ shadow: layerOptions.shadow,
343
+ backdrop: layerOptions.backdrop,
344
+ bounds: layerContentBounds(layerState.backBuffer, state.width),
345
+ });
346
+ return ctx;
347
+ },
348
+ joinHorizontal(...blocks) {
349
+ return joinHorizontal(...blocks);
350
+ },
351
+ joinVertical(...blocks) {
352
+ return joinVertical(...blocks);
353
+ },
354
+ wallpaper(input) {
355
+ if (typeof input === 'object' && 'colors' in input) {
356
+ layoutGradient(state, input.colors, { direction: input.direction });
357
+ }
358
+ else if (Array.isArray(input)) {
359
+ layoutGradient(state, input);
360
+ }
361
+ else if (typeof input === 'object' && 'color' in input) {
362
+ ctx.wallpaper(input.color);
363
+ }
364
+ else {
365
+ layoutWallpaper(state, { bg: input });
366
+ }
367
+ },
368
+ gradient: (opts) => ({
369
+ colors: createGradient(opts.colors, opts.steps || 10),
370
+ direction: opts.direction || 'vertical',
371
+ steps: opts.steps || 10,
372
+ }),
373
+ rgb,
374
+ requestStop() {
375
+ state.requestStop?.();
376
+ },
377
+ flushFlow() { },
378
+ };
379
+ // Live input accessors (also feed the keyboard-not-enabled dev hint).
380
+ defineInputAccessors(ctx, state);
381
+ return ctx;
382
+ }
383
+ function createDirectBoxRenderer(state, dslState, base) {
384
+ // Dev diagnostics: remember where direct boxes painted this frame
385
+ // (root screen context only — layer states never set boxRects).
386
+ // Anchored boxes are exempt: top/bottom bars are deliberate full-width
387
+ // chrome, and their "overlaps" are almost always small-screen clipping
388
+ // rather than missing-layer bugs.
389
+ const trackBoxRect = (area, options) => {
390
+ if (options.anchor !== undefined)
391
+ return;
392
+ const rects = dslState.boxRects;
393
+ if (rects && rects.length < 50)
394
+ rects.push(area);
395
+ };
396
+ return (options, callback) => {
397
+ if (options.zIndex !== undefined) {
398
+ const { zIndex, ...layeredOptions } = options;
399
+ base.layer(zIndex, (layerCtx) => {
400
+ layerCtx.box(layeredOptions, callback);
401
+ });
402
+ return '';
403
+ }
404
+ const boxOptions = options.anchor === 'top' || options.anchor === 'bottom'
405
+ ? { ...options, width: base.width }
406
+ : options;
407
+ const hasFixedSize = boxOptions.width !== undefined &&
408
+ boxOptions.width !== 'auto' &&
409
+ boxOptions.height !== undefined &&
410
+ boxOptions.height !== 'auto';
411
+ // 'blank' resolves to WCAG auto-contrast black/white vs the box bg.
412
+ const boxFg = resolveBoxFg(boxOptions);
413
+ const fgStyle = boxFg !== undefined ? { fg: boxFg } : {};
414
+ if (hasFixedSize) {
415
+ const preArea = resolveBoxArea(base.area, boxOptions, 0, 0);
416
+ const innerArea = resolveBoxInnerArea(preArea, boxOptions);
417
+ trackBoxRect(preArea, boxOptions);
418
+ if (boxOptions.bgColor || boxOptions.color) {
419
+ rect(state, preArea.x, preArea.y, preArea.width, preArea.height, {
420
+ char: ' ',
421
+ bg: boxOptions.bgColor,
422
+ fg: boxFg,
423
+ });
424
+ }
425
+ const styledBox = layoutBox('', boxOptions, base.width, base.height);
426
+ layoutBlit(state, preArea.x, preArea.y, styledBox, fgStyle);
427
+ const subContents = [];
428
+ dslState.stack.push(dslState.activeContents);
429
+ dslState.activeContents = subContents;
430
+ const subCtx = createDSLContext(state, dslState, innerArea.width, innerArea.height, innerArea.x, innerArea.y);
431
+ callback(subCtx);
432
+ dslState.activeContents = dslState.stack.pop();
433
+ const contentStr = subContents.join('');
434
+ if (contentStr) {
435
+ const styledContent = layoutBox(contentStr, {
436
+ width: innerArea.width,
437
+ height: innerArea.height,
438
+ align: boxOptions.align,
439
+ valign: boxOptions.valign,
440
+ wrap: boxOptions.wrap,
441
+ border: 'none',
442
+ padding: [0, 0],
443
+ }, innerArea.width, innerArea.height);
444
+ layoutBlit(state, innerArea.x, innerArea.y, styledContent, fgStyle);
445
+ }
446
+ return styledBox;
447
+ }
448
+ const subContents = [];
449
+ dslState.stack.push(dslState.activeContents);
450
+ dslState.activeContents = subContents;
451
+ const preAreaTemp = resolveBoxArea(base.area, boxOptions, base.width, base.height);
452
+ const innerAreaTemp = resolveBoxInnerArea(preAreaTemp, boxOptions);
453
+ const subCtx = createDSLContext(state, dslState, innerAreaTemp.width, innerAreaTemp.height, innerAreaTemp.x, innerAreaTemp.y);
454
+ callback(subCtx);
455
+ dslState.activeContents = dslState.stack.pop();
456
+ const contentStr = subContents.join('');
457
+ const styledBox = layoutBox(contentStr, boxOptions, base.width, base.height);
458
+ const lines = styledBox.split('\n');
459
+ const lineWidths = lines.map(visibleWidth);
460
+ const boxArea = resolveBoxArea(base.area, boxOptions, lineWidths.length > 0 ? Math.max(...lineWidths) : 0, lines.length);
461
+ trackBoxRect(boxArea, boxOptions);
462
+ if (boxOptions.bgColor || boxOptions.color) {
463
+ rect(state, boxArea.x, boxArea.y, boxArea.width, boxArea.height, {
464
+ char: ' ',
465
+ bg: boxOptions.bgColor,
466
+ fg: boxFg,
467
+ });
468
+ }
469
+ layoutBlit(state, boxArea.x, boxArea.y, styledBox, fgStyle);
470
+ return styledBox;
471
+ };
472
+ }
473
+ /**
474
+ * Top-level Screen Context
475
+ */
476
+ export function createScreenContext(state) {
477
+ state.hookCounter = 0;
478
+ // Dev diagnostics: frame boundary for keyless hook-drift tracking.
479
+ beginHookFrame(state);
480
+ const previousFocusableIds = state.focusableIds;
481
+ if (state.lastKey === KEYS.TAB && previousFocusableIds.length > 0) {
482
+ const idx = previousFocusableIds.indexOf(state.focusedId || '');
483
+ const nextIdx = (idx + 1) % previousFocusableIds.length;
484
+ state.focusedId = previousFocusableIds[nextIdx];
485
+ }
486
+ state.focusableIds = []; // Rebuild from this frame's rendered focusables.
487
+ state.hitboxes = new Map(); // Rebuild from this frame's interactive geometry.
488
+ // Hover enter/leave events last one frame; hitbox() refills them as this
489
+ // frame's hitboxes register (mutated, not reassigned: layers share them).
490
+ state.hoverEntered?.clear();
491
+ state.hoverLeft?.clear();
492
+ const dslState = {
493
+ activeContents: [],
494
+ stack: [],
495
+ layers: [],
496
+ layerOrder: 0,
497
+ themeStack: [],
498
+ boxRects: [],
499
+ };
500
+ const base = createDSLContext(state, dslState, state.width, state.height, 0, 0, true);
501
+ const flushFlow = () => {
502
+ const flow = dslState.activeContents.join('');
503
+ if (flow)
504
+ layoutBlit(state, 0, 0, flow);
505
+ // Dev diagnostics: direct boxes that painted over each other this
506
+ // frame with nothing controlling the stacking (hints once).
507
+ hintOverlappingBoxes(dslState.boxRects);
508
+ // Layers composite in ascending z-order. Right before each layer lands,
509
+ // its backdrop dims the whole screen and its shadow dims an offset rect
510
+ // (+2 cols, +1 row) under its painted bounds — both darken everything
511
+ // already composited, lower layers included.
512
+ const screenRect = { x: 0, y: 0, width: state.width, height: state.height };
513
+ dslState.layers
514
+ .sort((a, b) => a.zIndex - b.zIndex || a.order - b.order)
515
+ .forEach((layer) => {
516
+ if (layer.backdrop)
517
+ dimRect(state, screenRect, layer.backdrop);
518
+ if (layer.shadow && layer.bounds) {
519
+ dimRect(state, {
520
+ x: layer.bounds.x + 2,
521
+ y: layer.bounds.y + 1,
522
+ width: layer.bounds.width,
523
+ height: layer.bounds.height,
524
+ }, LAYER_SHADOW_DIM);
525
+ }
526
+ compositeLayer(state, layer.buffer);
527
+ });
528
+ };
529
+ const boxOverride = createDirectBoxRenderer(state, dslState, base);
530
+ const screenCtx = {
531
+ ...base,
532
+ box: boxOverride,
533
+ flushFlow,
534
+ requestStop: () => {
535
+ state.requestStop?.();
536
+ },
537
+ // Rebound so callbacks receive the screen context (direct box renderer),
538
+ // not the flow-mode base it was originally defined against.
539
+ themed(theme, callback) {
540
+ const next = resolveTheme(theme, activeTheme(dslState, state));
541
+ dslState.themeStack.push(next);
542
+ try {
543
+ callback(screenCtx);
544
+ }
545
+ finally {
546
+ dslState.themeStack.pop();
547
+ }
548
+ return screenCtx;
549
+ },
550
+ };
551
+ // Spreading `base` snapshots getter values; re-declare theme as a live
552
+ // getter so themed() overrides are visible on the screen context too.
553
+ Object.defineProperty(screenCtx, 'theme', {
554
+ configurable: true,
555
+ enumerable: true,
556
+ get: () => activeTheme(dslState, state),
557
+ });
558
+ // lastKey/keys are non-enumerable on `base` (so the spread above cannot
559
+ // fake an input read); re-declare them on the screen context.
560
+ defineInputAccessors(screenCtx, state);
561
+ return screenCtx;
562
+ }
563
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/dsl/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Bunti DSL state hooks: useState, useAsync, usePersistentState.
3
+ *
4
+ * Implementations close over the ScreenState only, so they are shared
5
+ * unchanged by every context created for that screen.
6
+ */
7
+ import type { ScreenState } from '../state';
8
+ import type { BuntiContext } from './types';
9
+ type Hooks = Pick<BuntiContext, 'useState' | 'useAsync' | 'usePersistentState'>;
10
+ export declare function createHooks(state: ScreenState): Hooks;
11
+ export {};
12
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/dsl/hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,KAAK,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,UAAU,GAAG,oBAAoB,CAAC,CAAC;AAEhF,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CA8JrD"}