@flyingrobots/bijou-tui 0.10.0 → 1.1.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 (118) hide show
  1. package/README.md +25 -0
  2. package/dist/accordion.d.ts +46 -5
  3. package/dist/accordion.d.ts.map +1 -1
  4. package/dist/accordion.js +41 -5
  5. package/dist/accordion.js.map +1 -1
  6. package/dist/animate.d.ts +30 -0
  7. package/dist/animate.d.ts.map +1 -1
  8. package/dist/animate.js +33 -0
  9. package/dist/animate.js.map +1 -1
  10. package/dist/browsable-list.d.ts +67 -4
  11. package/dist/browsable-list.d.ts.map +1 -1
  12. package/dist/browsable-list.js +49 -4
  13. package/dist/browsable-list.js.map +1 -1
  14. package/dist/canvas.d.ts +13 -4
  15. package/dist/canvas.d.ts.map +1 -1
  16. package/dist/canvas.js +9 -3
  17. package/dist/canvas.js.map +1 -1
  18. package/dist/command-palette.d.ts +67 -6
  19. package/dist/command-palette.d.ts.map +1 -1
  20. package/dist/command-palette.js +67 -6
  21. package/dist/command-palette.js.map +1 -1
  22. package/dist/commands.d.ts +32 -3
  23. package/dist/commands.d.ts.map +1 -1
  24. package/dist/commands.js +32 -3
  25. package/dist/commands.js.map +1 -1
  26. package/dist/dag-pane.d.ts +225 -0
  27. package/dist/dag-pane.d.ts.map +1 -0
  28. package/dist/dag-pane.js +510 -0
  29. package/dist/dag-pane.js.map +1 -0
  30. package/dist/driver.d.ts +14 -0
  31. package/dist/driver.d.ts.map +1 -1
  32. package/dist/driver.js +7 -0
  33. package/dist/driver.js.map +1 -1
  34. package/dist/eventbus.d.ts +43 -6
  35. package/dist/eventbus.d.ts.map +1 -1
  36. package/dist/eventbus.js +9 -0
  37. package/dist/eventbus.js.map +1 -1
  38. package/dist/file-picker.d.ts +56 -4
  39. package/dist/file-picker.d.ts.map +1 -1
  40. package/dist/file-picker.js +52 -4
  41. package/dist/file-picker.js.map +1 -1
  42. package/dist/flex.d.ts +17 -0
  43. package/dist/flex.d.ts.map +1 -1
  44. package/dist/flex.js +106 -12
  45. package/dist/flex.js.map +1 -1
  46. package/dist/focus-area.d.ts +179 -0
  47. package/dist/focus-area.d.ts.map +1 -0
  48. package/dist/focus-area.js +261 -0
  49. package/dist/focus-area.js.map +1 -0
  50. package/dist/help.d.ts +16 -1
  51. package/dist/help.d.ts.map +1 -1
  52. package/dist/help.js +13 -0
  53. package/dist/help.js.map +1 -1
  54. package/dist/index.d.ts +10 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +12 -0
  57. package/dist/index.js.map +1 -1
  58. package/dist/inputstack.d.ts +32 -4
  59. package/dist/inputstack.d.ts.map +1 -1
  60. package/dist/inputstack.js +11 -0
  61. package/dist/inputstack.js.map +1 -1
  62. package/dist/keybindings.d.ts +106 -14
  63. package/dist/keybindings.d.ts.map +1 -1
  64. package/dist/keybindings.js +28 -2
  65. package/dist/keybindings.js.map +1 -1
  66. package/dist/keys.d.ts +24 -8
  67. package/dist/keys.d.ts.map +1 -1
  68. package/dist/keys.js +34 -9
  69. package/dist/keys.js.map +1 -1
  70. package/dist/layout.d.ts +26 -0
  71. package/dist/layout.d.ts.map +1 -1
  72. package/dist/layout.js +25 -1
  73. package/dist/layout.js.map +1 -1
  74. package/dist/navigable-table.d.ts +48 -4
  75. package/dist/navigable-table.d.ts.map +1 -1
  76. package/dist/navigable-table.js +44 -4
  77. package/dist/navigable-table.js.map +1 -1
  78. package/dist/overlay.d.ts +110 -3
  79. package/dist/overlay.d.ts.map +1 -1
  80. package/dist/overlay.js +87 -7
  81. package/dist/overlay.js.map +1 -1
  82. package/dist/pager.d.ts +66 -7
  83. package/dist/pager.d.ts.map +1 -1
  84. package/dist/pager.js +56 -7
  85. package/dist/pager.js.map +1 -1
  86. package/dist/panels.d.ts +55 -0
  87. package/dist/panels.d.ts.map +1 -1
  88. package/dist/panels.js +11 -0
  89. package/dist/panels.js.map +1 -1
  90. package/dist/runtime.d.ts +6 -0
  91. package/dist/runtime.d.ts.map +1 -1
  92. package/dist/runtime.js +6 -0
  93. package/dist/runtime.js.map +1 -1
  94. package/dist/screen.d.ts +37 -3
  95. package/dist/screen.d.ts.map +1 -1
  96. package/dist/screen.js +37 -3
  97. package/dist/screen.js.map +1 -1
  98. package/dist/spring.d.ts +56 -7
  99. package/dist/spring.d.ts.map +1 -1
  100. package/dist/spring.js +44 -7
  101. package/dist/spring.js.map +1 -1
  102. package/dist/status-bar.d.ts +15 -2
  103. package/dist/status-bar.d.ts.map +1 -1
  104. package/dist/status-bar.js +9 -0
  105. package/dist/status-bar.js.map +1 -1
  106. package/dist/timeline.d.ts +68 -5
  107. package/dist/timeline.d.ts.map +1 -1
  108. package/dist/timeline.js +33 -0
  109. package/dist/timeline.js.map +1 -1
  110. package/dist/types.d.ts +86 -5
  111. package/dist/types.d.ts.map +1 -1
  112. package/dist/types.js +27 -3
  113. package/dist/types.js.map +1 -1
  114. package/dist/viewport.d.ts +71 -11
  115. package/dist/viewport.d.ts.map +1 -1
  116. package/dist/viewport.js +79 -11
  117. package/dist/viewport.js.map +1 -1
  118. package/package.json +2 -2
package/dist/flex.js CHANGED
@@ -12,13 +12,33 @@
12
12
  * )
13
13
  * ```
14
14
  */
15
+ import { makeBgFill } from '@flyingrobots/bijou';
15
16
  import { visibleLength, clipToWidth } from './viewport.js';
16
17
  // ---------------------------------------------------------------------------
17
18
  // ANSI helpers
18
19
  // ---------------------------------------------------------------------------
20
+ /**
21
+ * Compute the terminal display width of a string.
22
+ *
23
+ * @param s - Input string possibly containing ANSI escapes.
24
+ * @returns Number of visible terminal columns.
25
+ */
19
26
  function visualWidth(s) {
20
27
  return visibleLength(s);
21
28
  }
29
+ /**
30
+ * Distribute available main-axis space among children.
31
+ *
32
+ * Fixed-size children (basis or auto-measured) consume space first,
33
+ * then remaining space is divided proportionally among flex children.
34
+ *
35
+ * @param children - Child descriptors to allocate sizes for.
36
+ * @param mainAxisTotal - Total available size along the main axis.
37
+ * @param crossAxisTotal - Total available size along the cross axis.
38
+ * @param gap - Gap size between children on the main axis.
39
+ * @param isRow - True for row direction (main axis = width), false for column.
40
+ * @returns Resolved children with allocated sizes.
41
+ */
22
42
  function computeSizes(children, mainAxisTotal, crossAxisTotal, gap, isRow) {
23
43
  if (children.length === 0)
24
44
  return [];
@@ -62,6 +82,14 @@ function computeSizes(children, mainAxisTotal, crossAxisTotal, gap, isRow) {
62
82
  child,
63
83
  }));
64
84
  }
85
+ /**
86
+ * Clamp a size value within optional min/max bounds, flooring at 0.
87
+ *
88
+ * @param size - Raw size value.
89
+ * @param min - Minimum allowed size (inclusive).
90
+ * @param max - Maximum allowed size (inclusive).
91
+ * @returns Clamped size, never negative.
92
+ */
65
93
  function clampSize(size, min, max) {
66
94
  let result = size;
67
95
  if (min !== undefined)
@@ -70,6 +98,15 @@ function clampSize(size, min, max) {
70
98
  result = Math.min(result, max);
71
99
  return Math.max(0, result);
72
100
  }
101
+ /**
102
+ * Measure the intrinsic size of static content along the main axis.
103
+ *
104
+ * Return 0 for render functions (they must use flex or basis).
105
+ *
106
+ * @param content - Static string or render function.
107
+ * @param isRow - True to measure width, false to measure height.
108
+ * @returns Measured size in the main-axis direction.
109
+ */
73
110
  function measureContent(content, isRow) {
74
111
  if (typeof content === 'function') {
75
112
  // Can't measure a render function — treat as 0 (must use flex or basis)
@@ -86,6 +123,14 @@ function measureContent(content, isRow) {
86
123
  // ---------------------------------------------------------------------------
87
124
  // Rendering
88
125
  // ---------------------------------------------------------------------------
126
+ /**
127
+ * Render a child's content, invoking its render function if applicable.
128
+ *
129
+ * @param child - Child descriptor whose content to render.
130
+ * @param width - Allocated width in columns.
131
+ * @param height - Allocated height in rows.
132
+ * @returns Rendered content string.
133
+ */
89
134
  function renderContent(child, width, height) {
90
135
  if (typeof child.content === 'function') {
91
136
  return child.content(width, height);
@@ -93,8 +138,14 @@ function renderContent(child, width, height) {
93
138
  return child.content;
94
139
  }
95
140
  /**
96
- * Clip/pad each content line to exact width. Does NOT pad height —
97
- * that's handled by alignCross.
141
+ * Clip or pad each content line to an exact visible width.
142
+ *
143
+ * Does NOT pad height — that is handled by {@link alignCross}.
144
+ *
145
+ * @param content - Rendered content string (newline-delimited).
146
+ * @param width - Target visible width in columns.
147
+ * @param align - Horizontal alignment for lines shorter than width. Default: 'start'.
148
+ * @returns Array of lines, each exactly `width` visible columns wide.
98
149
  */
99
150
  function fitWidth(content, width, align = 'start') {
100
151
  const lines = content.split('\n');
@@ -122,7 +173,15 @@ function fitWidth(content, width, align = 'start') {
122
173
  });
123
174
  }
124
175
  /**
125
- * Align content lines along the cross axis.
176
+ * Align content lines along the cross axis by padding with empty lines.
177
+ *
178
+ * Truncate if content exceeds `totalCrossSize`; pad otherwise.
179
+ *
180
+ * @param lines - Rendered lines to align.
181
+ * @param totalCrossSize - Total cross-axis size in lines (height for row layout, character width for column layout).
182
+ * @param align - Cross-axis alignment ('start', 'center', or 'end').
183
+ * @param width - Width of each empty padding line.
184
+ * @returns Array of exactly `totalCrossSize` lines.
126
185
  */
127
186
  function alignCross(lines, totalCrossSize, align, width) {
128
187
  if (lines.length >= totalCrossSize)
@@ -168,6 +227,10 @@ function alignCross(lines, totalCrossSize, align, width) {
168
227
  * { basis: 1, content: statusLine },
169
228
  * )
170
229
  * ```
230
+ *
231
+ * @param options - Layout container configuration (direction, dimensions, gap).
232
+ * @param children - Child descriptors with content, flex factors, and constraints.
233
+ * @returns Composed layout string with lines joined by newlines. Empty string if no children.
171
234
  */
172
235
  export function flex(options, ...children) {
173
236
  const { direction = 'row' } = options;
@@ -175,17 +238,28 @@ export function flex(options, ...children) {
175
238
  const height = Math.max(0, Math.floor(options.height));
176
239
  const gap = Math.max(0, Math.floor(options.gap ?? 0));
177
240
  const isRow = direction === 'row';
241
+ const containerBg = makeBgFill(options.bgToken, options.ctx);
178
242
  const mainAxisTotal = isRow ? width : height;
179
243
  const crossAxisTotal = isRow ? height : width;
180
244
  if (children.length === 0)
181
245
  return '';
182
246
  const resolved = computeSizes(children, mainAxisTotal, crossAxisTotal, gap, isRow);
183
247
  if (isRow) {
184
- return renderRow(resolved, height, gap);
248
+ return renderRow(resolved, height, gap, containerBg, options.ctx);
185
249
  }
186
- return renderColumn(resolved, width, height, gap);
250
+ return renderColumn(resolved, width, height, gap, containerBg, options.ctx);
187
251
  }
188
- function renderRow(items, totalHeight, gap) {
252
+ /**
253
+ * Compose resolved children side-by-side in a horizontal row layout.
254
+ *
255
+ * @param items - Resolved children with allocated widths.
256
+ * @param totalHeight - Total available height in rows.
257
+ * @param gap - Horizontal gap between children in columns.
258
+ * @param containerBg - Optional background fill function for container regions (gaps, padding).
259
+ * @param ctx - Bijou context, used to resolve per-child bgToken fills.
260
+ * @returns Composed row string with lines joined by newlines.
261
+ */
262
+ function renderRow(items, totalHeight, gap, containerBg, ctx) {
189
263
  // Render each child into a column of lines
190
264
  const columns = [];
191
265
  for (const item of items) {
@@ -194,10 +268,14 @@ function renderRow(items, totalHeight, gap) {
194
268
  // In row mode, fitWidth always uses 'start' — align controls cross-axis (vertical) only
195
269
  const widthFitted = fitWidth(rendered, childWidth);
196
270
  const aligned = alignCross(widthFitted, totalHeight, item.child.align ?? 'start', childWidth);
197
- columns.push(aligned);
271
+ // Apply per-child bg fill (overrides container bg for this region)
272
+ const childBg = makeBgFill(item.child.bgToken, ctx) ?? containerBg;
273
+ const filled = childBg ? aligned.map(childBg) : aligned;
274
+ columns.push(filled);
198
275
  }
199
276
  // Compose columns side-by-side
200
- const spacer = ' '.repeat(Math.max(0, gap));
277
+ const rawSpacer = ' '.repeat(Math.max(0, gap));
278
+ const spacer = containerBg && gap > 0 ? containerBg(rawSpacer) : rawSpacer;
201
279
  const rows = [];
202
280
  for (let r = 0; r < totalHeight; r++) {
203
281
  const parts = [];
@@ -208,7 +286,18 @@ function renderRow(items, totalHeight, gap) {
208
286
  }
209
287
  return rows.join('\n');
210
288
  }
211
- function renderColumn(items, totalWidth, totalHeight, gap) {
289
+ /**
290
+ * Stack resolved children vertically in a column layout.
291
+ *
292
+ * @param items - Resolved children with allocated heights.
293
+ * @param totalWidth - Total available width in columns.
294
+ * @param totalHeight - Total available height in rows.
295
+ * @param gap - Vertical gap between children in rows.
296
+ * @param containerBg - Optional background fill function for container regions (gaps, padding).
297
+ * @param ctx - Bijou context, used to resolve per-child bgToken fills.
298
+ * @returns Composed column string with lines joined by newlines.
299
+ */
300
+ function renderColumn(items, totalWidth, totalHeight, gap, containerBg, ctx) {
212
301
  const lines = [];
213
302
  for (let i = 0; i < items.length; i++) {
214
303
  const item = items[i];
@@ -216,17 +305,22 @@ function renderColumn(items, totalWidth, totalHeight, gap) {
216
305
  const rendered = renderContent(item.child, totalWidth, childHeight);
217
306
  const widthFitted = fitWidth(rendered, totalWidth, item.child.align ?? 'start');
218
307
  const aligned = alignCross(widthFitted, childHeight, 'start', totalWidth);
219
- lines.push(...aligned);
308
+ // Apply per-child bg fill
309
+ const childBg = makeBgFill(item.child.bgToken, ctx) ?? containerBg;
310
+ const filled = childBg ? aligned.map(childBg) : aligned;
311
+ lines.push(...filled);
220
312
  // Add gap between items
221
313
  if (i < items.length - 1 && gap > 0) {
222
- const spacer = ' '.repeat(Math.max(0, totalWidth));
314
+ const rawSpacer = ' '.repeat(Math.max(0, totalWidth));
315
+ const spacer = containerBg ? containerBg(rawSpacer) : rawSpacer;
223
316
  for (let g = 0; g < gap; g++) {
224
317
  lines.push(spacer);
225
318
  }
226
319
  }
227
320
  }
228
321
  // Pad to fill totalHeight if needed
229
- const emptyLine = ' '.repeat(Math.max(0, totalWidth));
322
+ const rawEmpty = ' '.repeat(Math.max(0, totalWidth));
323
+ const emptyLine = containerBg ? containerBg(rawEmpty) : rawEmpty;
230
324
  while (lines.length < totalHeight) {
231
325
  lines.push(emptyLine);
232
326
  }
package/dist/flex.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"flex.js","sourceRoot":"","sources":["../src/flex.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"flex.js","sourceRoot":"","sources":["../src/flex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Focus area building block — a scrollable pane with a colored left gutter.
3
+ *
4
+ * Wraps `viewport()` and prepends a styled gutter character (`▎`) to each
5
+ * line indicating focus state: bright accent when focused, muted when unfocused.
6
+ *
7
+ * Follows the building block pattern: immutable state + pure transformers +
8
+ * pure render + convenience keymap factory.
9
+ *
10
+ * ```ts
11
+ * // In TEA init:
12
+ * const fa = createFocusAreaState({ content, width: 60, height: 20 });
13
+ *
14
+ * // In TEA view:
15
+ * const output = focusArea(fa, { focused: true, ctx });
16
+ *
17
+ * // In TEA update:
18
+ * case 'scroll-down':
19
+ * return [{ ...model, fa: focusAreaScrollBy(model.fa, 1) }, []];
20
+ * ```
21
+ */
22
+ import type { BijouContext, TokenValue } from '@flyingrobots/bijou';
23
+ import { type ScrollState } from './viewport.js';
24
+ import { type KeyMap } from './keybindings.js';
25
+ /** Horizontal overflow behavior. */
26
+ export type OverflowX = 'scroll' | 'hidden';
27
+ /** Immutable state for the focus area widget. */
28
+ export interface FocusAreaState {
29
+ /** Full text content displayed in the focus area. */
30
+ readonly content: string;
31
+ /** Underlying scroll position state. */
32
+ readonly scroll: ScrollState;
33
+ /** Total width in columns (including gutter). */
34
+ readonly width: number;
35
+ /** Total height in rows. */
36
+ readonly height: number;
37
+ /** Horizontal overflow behavior. */
38
+ readonly overflowX: OverflowX;
39
+ }
40
+ /** Options for creating a new focus area state. */
41
+ export interface FocusAreaOptions {
42
+ /** Full text content to display. */
43
+ readonly content: string;
44
+ /** Total width in columns (including gutter). */
45
+ readonly width: number;
46
+ /** Total height in rows. */
47
+ readonly height: number;
48
+ /** Horizontal overflow behavior. Default: `'hidden'`. */
49
+ readonly overflowX?: OverflowX;
50
+ }
51
+ /** Options for rendering the focus area view. */
52
+ export interface FocusAreaRenderOptions {
53
+ /** Whether the pane is currently focused. Default: `true`. */
54
+ readonly focused?: boolean;
55
+ /** Token for the focused gutter. Default: `theme.semantic.accent`. */
56
+ readonly focusedGutterToken?: TokenValue;
57
+ /** Token for the unfocused gutter. Default: `theme.semantic.muted`. */
58
+ readonly unfocusedGutterToken?: TokenValue;
59
+ /** Show a scrollbar track on the right edge. Default: `true`. */
60
+ readonly showScrollbar?: boolean;
61
+ /** Bijou context for styling and mode detection. */
62
+ readonly ctx?: BijouContext;
63
+ }
64
+ /**
65
+ * Create initial focus area state for the given content and dimensions.
66
+ *
67
+ * The viewport width is `width - 1` to account for the gutter column.
68
+ * When `overflowX` is `'scroll'`, horizontal scroll bounds are computed
69
+ * from the widest content line.
70
+ *
71
+ * @param options - Content, width, height, and overflow for the focus area.
72
+ * @returns Fresh focus area state with scroll at the top-left.
73
+ */
74
+ export declare function createFocusAreaState(options: FocusAreaOptions): FocusAreaState;
75
+ /**
76
+ * Scroll vertically by a relative amount.
77
+ *
78
+ * @param state - Current focus area state.
79
+ * @param dy - Relative vertical offset (positive = down).
80
+ * @returns Updated state with new scroll position.
81
+ */
82
+ export declare function focusAreaScrollBy(state: FocusAreaState, dy: number): FocusAreaState;
83
+ /**
84
+ * Scroll vertically to an absolute position.
85
+ *
86
+ * @param state - Current focus area state.
87
+ * @param y - Absolute vertical offset (0-based).
88
+ * @returns Updated state with new scroll position.
89
+ */
90
+ export declare function focusAreaScrollTo(state: FocusAreaState, y: number): FocusAreaState;
91
+ /**
92
+ * Scroll to the first line.
93
+ *
94
+ * @param state - Current focus area state.
95
+ * @returns Updated state scrolled to the top.
96
+ */
97
+ export declare function focusAreaScrollToTop(state: FocusAreaState): FocusAreaState;
98
+ /**
99
+ * Scroll to the last line.
100
+ *
101
+ * @param state - Current focus area state.
102
+ * @returns Updated state scrolled to the bottom.
103
+ */
104
+ export declare function focusAreaScrollToBottom(state: FocusAreaState): FocusAreaState;
105
+ /**
106
+ * Page down (one viewport height).
107
+ *
108
+ * @param state - Current focus area state.
109
+ * @returns Updated state advanced by one page.
110
+ */
111
+ export declare function focusAreaPageDown(state: FocusAreaState): FocusAreaState;
112
+ /**
113
+ * Page up (one viewport height).
114
+ *
115
+ * @param state - Current focus area state.
116
+ * @returns Updated state moved back by one page.
117
+ */
118
+ export declare function focusAreaPageUp(state: FocusAreaState): FocusAreaState;
119
+ /**
120
+ * Scroll horizontally by a relative amount.
121
+ * No-op when `overflowX` is `'hidden'`.
122
+ *
123
+ * @param state - Current focus area state.
124
+ * @param dx - Relative horizontal offset (positive = right).
125
+ * @returns Updated state with new horizontal scroll position.
126
+ */
127
+ export declare function focusAreaScrollByX(state: FocusAreaState, dx: number): FocusAreaState;
128
+ /**
129
+ * Scroll horizontally to an absolute position.
130
+ * No-op when `overflowX` is `'hidden'`.
131
+ *
132
+ * @param state - Current focus area state.
133
+ * @param x - Absolute horizontal offset (0-based).
134
+ * @returns Updated state with new horizontal scroll position.
135
+ */
136
+ export declare function focusAreaScrollToX(state: FocusAreaState, x: number): FocusAreaState;
137
+ /**
138
+ * Update content while preserving scroll position (clamped).
139
+ *
140
+ * @param state - Current focus area state.
141
+ * @param content - New text content to display.
142
+ * @returns Updated state with new content and clamped scroll position.
143
+ */
144
+ export declare function focusAreaSetContent(state: FocusAreaState, content: string): FocusAreaState;
145
+ /**
146
+ * Render the focus area — viewport content with a colored left gutter.
147
+ *
148
+ * The gutter character (`▎`) is styled based on focus state:
149
+ * - Focused: `focusedGutterToken` (default: `theme.semantic.accent`)
150
+ * - Unfocused: `unfocusedGutterToken` (default: `theme.semantic.muted`)
151
+ * - Static mode: unstyled gutter
152
+ * - Pipe / accessible mode: no gutter (full width to content)
153
+ *
154
+ * @param state - Current focus area state.
155
+ * @param options - Rendering options (focus, tokens, scrollbar, ctx).
156
+ * @returns Rendered focus area string.
157
+ */
158
+ export declare function focusArea(state: FocusAreaState, options?: FocusAreaRenderOptions): string;
159
+ /**
160
+ * Create a preconfigured KeyMap for focus area navigation.
161
+ *
162
+ * Arrow keys are intentionally excluded — reserved for content-specific
163
+ * navigation (e.g., DAG node selection).
164
+ *
165
+ * @template Msg - Application message type dispatched by key bindings.
166
+ * @param actions - Map of navigation actions to message values.
167
+ * @returns Preconfigured key map with vim-style scroll bindings.
168
+ */
169
+ export declare function focusAreaKeyMap<Msg>(actions: {
170
+ scrollUp: Msg;
171
+ scrollDown: Msg;
172
+ pageUp: Msg;
173
+ pageDown: Msg;
174
+ top: Msg;
175
+ bottom: Msg;
176
+ scrollLeft?: Msg;
177
+ scrollRight?: Msg;
178
+ }): KeyMap<Msg>;
179
+ //# sourceMappingURL=focus-area.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-area.d.ts","sourceRoot":"","sources":["../src/focus-area.ts"],"names":[],"mappings":"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"}