@flyingrobots/bijou-tui 1.1.0 → 1.3.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 (44) hide show
  1. package/README.md +117 -4
  2. package/dist/app-frame.d.ts +127 -0
  3. package/dist/app-frame.d.ts.map +1 -0
  4. package/dist/app-frame.js +751 -0
  5. package/dist/app-frame.js.map +1 -0
  6. package/dist/driver.d.ts +18 -5
  7. package/dist/driver.d.ts.map +1 -1
  8. package/dist/driver.js +19 -2
  9. package/dist/driver.js.map +1 -1
  10. package/dist/eventbus.d.ts +7 -2
  11. package/dist/eventbus.d.ts.map +1 -1
  12. package/dist/eventbus.js +17 -4
  13. package/dist/eventbus.js.map +1 -1
  14. package/dist/grid.d.ts +42 -0
  15. package/dist/grid.d.ts.map +1 -0
  16. package/dist/grid.js +182 -0
  17. package/dist/grid.js.map +1 -0
  18. package/dist/index.d.ts +4 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +6 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/keys.d.ts.map +1 -1
  23. package/dist/keys.js +4 -0
  24. package/dist/keys.js.map +1 -1
  25. package/dist/layout-rect.d.ts +14 -0
  26. package/dist/layout-rect.d.ts.map +1 -0
  27. package/dist/layout-rect.js +2 -0
  28. package/dist/layout-rect.js.map +1 -0
  29. package/dist/layout-utils.d.ts +2 -0
  30. package/dist/layout-utils.d.ts.map +1 -0
  31. package/dist/layout-utils.js +15 -0
  32. package/dist/layout-utils.js.map +1 -0
  33. package/dist/overlay.d.ts +29 -7
  34. package/dist/overlay.d.ts.map +1 -1
  35. package/dist/overlay.js +80 -9
  36. package/dist/overlay.js.map +1 -1
  37. package/dist/runtime.d.ts.map +1 -1
  38. package/dist/runtime.js +30 -1
  39. package/dist/runtime.js.map +1 -1
  40. package/dist/split-pane.d.ts +89 -0
  41. package/dist/split-pane.d.ts.map +1 -0
  42. package/dist/split-pane.js +178 -0
  43. package/dist/split-pane.js.map +1 -0
  44. package/package.json +2 -2
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Split-pane layout primitive.
3
+ *
4
+ * Stateful ratio + focus model with pure reducers and deterministic layout
5
+ * solving for horizontal (`row`) and vertical (`column`) splits.
6
+ */
7
+ import { fitBlock } from './layout-utils.js';
8
+ import { graphemeClusterWidth, graphemeWidth, segmentGraphemes } from '@flyingrobots/bijou';
9
+ /**
10
+ * Create split-pane state.
11
+ */
12
+ export function createSplitPaneState(options) {
13
+ if (options?.ratio != null && !Number.isFinite(options.ratio)) {
14
+ warnInvalidRatio(options.ratio);
15
+ }
16
+ return {
17
+ ratio: clampRatio(options?.ratio ?? 0.5),
18
+ focused: options?.focused ?? 'a',
19
+ };
20
+ }
21
+ /**
22
+ * Update split ratio directly (clamped to `[0, 1]`).
23
+ */
24
+ export function splitPaneSetRatio(state, ratio) {
25
+ return { ...state, ratio: clampRatio(ratio) };
26
+ }
27
+ /**
28
+ * Resize pane A by `delta` main-axis units and derive the new ratio.
29
+ */
30
+ export function splitPaneResizeBy(state, delta, limits) {
31
+ const dividerSize = Math.max(0, limits.dividerSize ?? 1);
32
+ const available = Math.max(0, limits.total - dividerSize);
33
+ if (available <= 0)
34
+ return { ...state, ratio: 0 };
35
+ const minA = Math.max(0, limits.minA ?? 0);
36
+ const minB = Math.max(0, limits.minB ?? 0);
37
+ const [currA] = solveSplit(available, state.ratio, minA, minB);
38
+ const maxA = Math.max(0, available - Math.min(minB, available));
39
+ const clampedMinA = Math.min(minA, maxA);
40
+ const nextA = clamp(currA + delta, clampedMinA, maxA);
41
+ return { ...state, ratio: nextA / available };
42
+ }
43
+ /**
44
+ * Toggle focus between pane A and pane B.
45
+ */
46
+ export function splitPaneToggleFocus(state) {
47
+ return { ...state, focused: state.focused === 'a' ? 'b' : 'a' };
48
+ }
49
+ /**
50
+ * Focus the next pane (equivalent to toggle for a 2-pane split).
51
+ */
52
+ export function splitPaneFocusNext(state) {
53
+ return splitPaneToggleFocus(state);
54
+ }
55
+ /**
56
+ * Focus the previous pane (equivalent to toggle for a 2-pane split).
57
+ */
58
+ export function splitPaneFocusPrev(state) {
59
+ return splitPaneToggleFocus(state);
60
+ }
61
+ /**
62
+ * Solve split-pane geometry for the provided bounds.
63
+ */
64
+ export function splitPaneLayout(state, options) {
65
+ const direction = options.direction ?? 'row';
66
+ const width = Math.max(0, options.width);
67
+ const height = Math.max(0, options.height);
68
+ const dividerSize = Math.max(0, options.dividerSize ?? 1);
69
+ const minA = Math.max(0, options.minA ?? 0);
70
+ const minB = Math.max(0, options.minB ?? 0);
71
+ if (direction === 'row') {
72
+ const available = Math.max(0, width - dividerSize);
73
+ const [a, b] = solveSplit(available, state.ratio, minA, minB);
74
+ return {
75
+ paneA: { row: 0, col: 0, width: a, height },
76
+ divider: { row: 0, col: a, width: dividerSize, height },
77
+ paneB: { row: 0, col: a + dividerSize, width: b, height },
78
+ };
79
+ }
80
+ const available = Math.max(0, height - dividerSize);
81
+ const [a, b] = solveSplit(available, state.ratio, minA, minB);
82
+ return {
83
+ paneA: { row: 0, col: 0, width, height: a },
84
+ divider: { row: a, col: 0, width, height: dividerSize },
85
+ paneB: { row: a + dividerSize, col: 0, width, height: b },
86
+ };
87
+ }
88
+ /**
89
+ * Render a split-pane view string.
90
+ */
91
+ export function splitPane(state, options) {
92
+ const direction = options.direction ?? 'row';
93
+ const fallbackDividerChar = direction === 'row' ? '│' : '─';
94
+ const dividerUnit = resolveDividerChar(options.dividerChar, fallbackDividerChar);
95
+ const layout = splitPaneLayout(state, options);
96
+ const aLines = fitBlock(options.paneA(layout.paneA.width, layout.paneA.height), layout.paneA.width, layout.paneA.height);
97
+ const bLines = fitBlock(options.paneB(layout.paneB.width, layout.paneB.height), layout.paneB.width, layout.paneB.height);
98
+ if (direction === 'row') {
99
+ const dividerLine = repeatToWidth(dividerUnit, Math.max(0, layout.divider.width));
100
+ const lines = [];
101
+ for (let r = 0; r < layout.paneA.height; r++) {
102
+ lines.push((aLines[r] ?? '') + dividerLine + (bLines[r] ?? ''));
103
+ }
104
+ return lines.join('\n');
105
+ }
106
+ const dividerLines = Array.from({ length: layout.divider.height }, () => repeatToWidth(dividerUnit, Math.max(0, layout.divider.width)));
107
+ return [...aLines, ...dividerLines, ...bLines].join('\n');
108
+ }
109
+ function solveSplit(available, ratio, minA, minB) {
110
+ if (available <= 0)
111
+ return [0, 0];
112
+ // Priority: minB > minA when they conflict (B keeps its minimum first).
113
+ const maxAFromMinB = Math.max(0, available - Math.min(minB, available));
114
+ // A's minimum cannot exceed the maximum that still satisfies B's minimum.
115
+ const clampedMinA = Math.min(minA, maxAFromMinB);
116
+ // Ratio target is clamped to feasible bounds after applying constraints.
117
+ let desiredA = Math.round(clampRatio(ratio) * available);
118
+ desiredA = clamp(desiredA, clampedMinA, maxAFromMinB);
119
+ // Guardrail: if rounding drift undercuts B's minimum, pull A back into range.
120
+ const desiredB = available - desiredA;
121
+ if (desiredB < Math.min(minB, available)) {
122
+ desiredA = Math.max(clampedMinA, available - Math.min(minB, available));
123
+ }
124
+ const a = clamp(desiredA, 0, available);
125
+ const b = Math.max(0, available - a);
126
+ return [a, b];
127
+ }
128
+ function clampRatio(ratio) {
129
+ if (!Number.isFinite(ratio))
130
+ return 0.5;
131
+ return clamp(ratio, 0, 1);
132
+ }
133
+ function warnInvalidRatio(ratio) {
134
+ if (typeof process === 'undefined')
135
+ return;
136
+ const nodeEnv = process.env?.['NODE_ENV'];
137
+ if (nodeEnv === 'production' || nodeEnv === 'test')
138
+ return;
139
+ console.warn(`[bijou-tui] createSplitPaneState(): received non-finite ratio "${String(ratio)}"; falling back to 0.5.`);
140
+ }
141
+ function resolveDividerChar(dividerChar, fallback) {
142
+ if (dividerChar == null || dividerChar.length === 0)
143
+ return fallback;
144
+ const graphemes = segmentGraphemes(dividerChar);
145
+ if (graphemes.length === 0)
146
+ return fallback;
147
+ if (graphemes.length === 1 && graphemeClusterWidth(graphemes[0]) === 1) {
148
+ return graphemes[0];
149
+ }
150
+ for (const grapheme of graphemes) {
151
+ if (graphemeClusterWidth(grapheme) === 1)
152
+ return grapheme;
153
+ }
154
+ return fallback;
155
+ }
156
+ function repeatToWidth(unit, targetWidth) {
157
+ const width = Math.max(0, targetWidth);
158
+ if (width === 0)
159
+ return '';
160
+ const unitWidth = graphemeWidth(unit);
161
+ if (unitWidth <= 0)
162
+ return ' '.repeat(width);
163
+ if (unitWidth === 1)
164
+ return unit.repeat(width);
165
+ let out = '';
166
+ let remaining = width;
167
+ while (remaining >= unitWidth) {
168
+ out += unit;
169
+ remaining -= unitWidth;
170
+ }
171
+ if (remaining > 0)
172
+ out += ' '.repeat(remaining);
173
+ return out;
174
+ }
175
+ function clamp(value, min, max) {
176
+ return Math.max(min, Math.min(max, value));
177
+ }
178
+ //# sourceMappingURL=split-pane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-pane.js","sourceRoot":"","sources":["../src/split-pane.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyingrobots/bijou-tui",
3
- "version": "1.1.0",
3
+ "version": "1.3.0",
4
4
  "description": "TEA runtime for terminal UIs — model/update/view with keyboard input, alt screen, and layout helpers.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -24,7 +24,7 @@
24
24
  "lint": "tsc --noEmit"
25
25
  },
26
26
  "peerDependencies": {
27
- "@flyingrobots/bijou": "1.1.0"
27
+ "@flyingrobots/bijou": "1.3.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/node": "^22.0.0",