@flyingrobots/bijou 2.1.0 → 3.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 (157) hide show
  1. package/README.md +28 -20
  2. package/dist/adapters/test/clock.d.ts +36 -0
  3. package/dist/adapters/test/clock.d.ts.map +1 -0
  4. package/dist/adapters/test/clock.js +132 -0
  5. package/dist/adapters/test/clock.js.map +1 -0
  6. package/dist/adapters/test/index.d.ts +8 -1
  7. package/dist/adapters/test/index.d.ts.map +1 -1
  8. package/dist/adapters/test/index.js +24 -2
  9. package/dist/adapters/test/index.js.map +1 -1
  10. package/dist/adapters/test/io.d.ts +3 -0
  11. package/dist/adapters/test/io.d.ts.map +1 -1
  12. package/dist/adapters/test/io.js +5 -4
  13. package/dist/adapters/test/io.js.map +1 -1
  14. package/dist/adapters/test/runtime.d.ts +2 -0
  15. package/dist/adapters/test/runtime.d.ts.map +1 -1
  16. package/dist/adapters/test/runtime.js +1 -0
  17. package/dist/adapters/test/runtime.js.map +1 -1
  18. package/dist/core/ansi.d.ts +2 -0
  19. package/dist/core/ansi.d.ts.map +1 -1
  20. package/dist/core/ansi.js +2 -0
  21. package/dist/core/ansi.js.map +1 -1
  22. package/dist/core/clock.d.ts +12 -0
  23. package/dist/core/clock.d.ts.map +1 -0
  24. package/dist/core/clock.js +59 -0
  25. package/dist/core/clock.js.map +1 -0
  26. package/dist/core/components/alert-v3.d.ts +7 -0
  27. package/dist/core/components/alert-v3.d.ts.map +1 -0
  28. package/dist/core/components/alert-v3.js +37 -0
  29. package/dist/core/components/alert-v3.js.map +1 -0
  30. package/dist/core/components/alert.d.ts +4 -4
  31. package/dist/core/components/alert.d.ts.map +1 -1
  32. package/dist/core/components/alert.js +1 -1
  33. package/dist/core/components/alert.js.map +1 -1
  34. package/dist/core/components/badge.d.ts +6 -12
  35. package/dist/core/components/badge.d.ts.map +1 -1
  36. package/dist/core/components/badge.js +39 -24
  37. package/dist/core/components/badge.js.map +1 -1
  38. package/dist/core/components/bcss-style.d.ts +6 -0
  39. package/dist/core/components/bcss-style.d.ts.map +1 -0
  40. package/dist/core/components/bcss-style.js +44 -0
  41. package/dist/core/components/bcss-style.js.map +1 -0
  42. package/dist/core/components/box-v3.d.ts +17 -0
  43. package/dist/core/components/box-v3.d.ts.map +1 -0
  44. package/dist/core/components/box-v3.js +149 -0
  45. package/dist/core/components/box-v3.js.map +1 -0
  46. package/dist/core/components/box.d.ts +11 -4
  47. package/dist/core/components/box.d.ts.map +1 -1
  48. package/dist/core/components/box.js +37 -9
  49. package/dist/core/components/box.js.map +1 -1
  50. package/dist/core/components/index.d.ts +6 -0
  51. package/dist/core/components/index.d.ts.map +1 -1
  52. package/dist/core/components/index.js +4 -0
  53. package/dist/core/components/index.js.map +1 -1
  54. package/dist/core/components/log.d.ts.map +1 -1
  55. package/dist/core/components/log.js +6 -4
  56. package/dist/core/components/log.js.map +1 -1
  57. package/dist/core/components/overflow.d.ts +3 -0
  58. package/dist/core/components/overflow.d.ts.map +1 -0
  59. package/dist/core/components/overflow.js +33 -0
  60. package/dist/core/components/overflow.js.map +1 -0
  61. package/dist/core/components/progress.d.ts.map +1 -1
  62. package/dist/core/components/progress.js +3 -1
  63. package/dist/core/components/progress.js.map +1 -1
  64. package/dist/core/components/separator-v3.d.ts +7 -0
  65. package/dist/core/components/separator-v3.d.ts.map +1 -0
  66. package/dist/core/components/separator-v3.js +46 -0
  67. package/dist/core/components/separator-v3.js.map +1 -0
  68. package/dist/core/components/separator.d.ts +2 -4
  69. package/dist/core/components/separator.d.ts.map +1 -1
  70. package/dist/core/components/separator.js.map +1 -1
  71. package/dist/core/components/spinner.d.ts.map +1 -1
  72. package/dist/core/components/spinner.js +3 -1
  73. package/dist/core/components/spinner.js.map +1 -1
  74. package/dist/core/components/surface-text.d.ts +14 -0
  75. package/dist/core/components/surface-text.d.ts.map +1 -0
  76. package/dist/core/components/surface-text.js +95 -0
  77. package/dist/core/components/surface-text.js.map +1 -0
  78. package/dist/core/components/table-v3.d.ts +11 -0
  79. package/dist/core/components/table-v3.d.ts.map +1 -0
  80. package/dist/core/components/table-v3.js +148 -0
  81. package/dist/core/components/table-v3.js.map +1 -0
  82. package/dist/core/components/table.d.ts +2 -1
  83. package/dist/core/components/table.d.ts.map +1 -1
  84. package/dist/core/components/table.js +40 -11
  85. package/dist/core/components/table.js.map +1 -1
  86. package/dist/core/components/timer.d.ts.map +1 -1
  87. package/dist/core/components/timer.js +11 -9
  88. package/dist/core/components/timer.js.map +1 -1
  89. package/dist/core/components/types.d.ts +19 -0
  90. package/dist/core/components/types.d.ts.map +1 -0
  91. package/dist/core/components/types.js +2 -0
  92. package/dist/core/components/types.js.map +1 -0
  93. package/dist/core/layout/flex.d.ts +28 -0
  94. package/dist/core/layout/flex.d.ts.map +1 -0
  95. package/dist/core/layout/flex.js +126 -0
  96. package/dist/core/layout/flex.js.map +1 -0
  97. package/dist/core/render/differ.d.ts +49 -0
  98. package/dist/core/render/differ.d.ts.map +1 -0
  99. package/dist/core/render/differ.js +271 -0
  100. package/dist/core/render/differ.js.map +1 -0
  101. package/dist/core/runtime-viewport.d.ts +34 -0
  102. package/dist/core/runtime-viewport.d.ts.map +1 -0
  103. package/dist/core/runtime-viewport.js +74 -0
  104. package/dist/core/runtime-viewport.js.map +1 -0
  105. package/dist/core/text/index.d.ts +1 -0
  106. package/dist/core/text/index.d.ts.map +1 -1
  107. package/dist/core/text/index.js +1 -0
  108. package/dist/core/text/index.js.map +1 -1
  109. package/dist/core/text/wrap.d.ts +11 -0
  110. package/dist/core/text/wrap.d.ts.map +1 -0
  111. package/dist/core/text/wrap.js +90 -0
  112. package/dist/core/text/wrap.js.map +1 -0
  113. package/dist/core/theme/accessors.d.ts.map +1 -1
  114. package/dist/core/theme/accessors.js +21 -5
  115. package/dist/core/theme/accessors.js.map +1 -1
  116. package/dist/core/theme/graph-types.d.ts +58 -0
  117. package/dist/core/theme/graph-types.d.ts.map +1 -0
  118. package/dist/core/theme/graph-types.js +2 -0
  119. package/dist/core/theme/graph-types.js.map +1 -0
  120. package/dist/core/theme/graph.d.ts +27 -0
  121. package/dist/core/theme/graph.d.ts.map +1 -0
  122. package/dist/core/theme/graph.js +155 -0
  123. package/dist/core/theme/graph.js.map +1 -0
  124. package/dist/core/theme/index.d.ts +3 -0
  125. package/dist/core/theme/index.d.ts.map +1 -1
  126. package/dist/core/theme/index.js +2 -0
  127. package/dist/core/theme/index.js.map +1 -1
  128. package/dist/core/theme/resolve.d.ts +3 -0
  129. package/dist/core/theme/resolve.d.ts.map +1 -1
  130. package/dist/core/theme/resolve.js +3 -0
  131. package/dist/core/theme/resolve.js.map +1 -1
  132. package/dist/factory.d.ts +3 -0
  133. package/dist/factory.d.ts.map +1 -1
  134. package/dist/factory.js +8 -0
  135. package/dist/factory.js.map +1 -1
  136. package/dist/index.d.ts +10 -4
  137. package/dist/index.d.ts.map +1 -1
  138. package/dist/index.js +11 -3
  139. package/dist/index.js.map +1 -1
  140. package/dist/ports/clock.d.ts +29 -0
  141. package/dist/ports/clock.d.ts.map +1 -0
  142. package/dist/ports/clock.js +2 -0
  143. package/dist/ports/clock.js.map +1 -0
  144. package/dist/ports/context.d.ts +12 -0
  145. package/dist/ports/context.d.ts.map +1 -1
  146. package/dist/ports/index.d.ts +1 -0
  147. package/dist/ports/index.d.ts.map +1 -1
  148. package/dist/ports/index.js.map +1 -1
  149. package/dist/ports/io.d.ts +6 -0
  150. package/dist/ports/io.d.ts.map +1 -1
  151. package/dist/ports/runtime.d.ts +5 -0
  152. package/dist/ports/runtime.d.ts.map +1 -1
  153. package/dist/ports/surface.d.ts +152 -0
  154. package/dist/ports/surface.d.ts.map +1 -0
  155. package/dist/ports/surface.js +199 -0
  156. package/dist/ports/surface.js.map +1 -0
  157. package/package.json +2 -2
@@ -0,0 +1,49 @@
1
+ import { type Surface, type Cell, type LayoutNode } from '../../ports/surface.js';
2
+ import type { WritePort, StylePort } from '../../ports/index.js';
3
+ /**
4
+ * Convert a multi-line string into a Surface.
5
+ *
6
+ * Note: This is a legacy migration helper. It currently strips ANSI
7
+ * and treats all characters as the default style.
8
+ */
9
+ export declare function stringToSurface(text: string, width: number, height: number): Surface;
10
+ /**
11
+ * Robust ANSI-aware string to Surface conversion.
12
+ */
13
+ export declare function parseAnsiToSurface(text: string, width: number, height: number): Surface;
14
+ /**
15
+ * Convert a Surface into a multi-line string with ANSI escape codes.
16
+ *
17
+ * Note: This is a legacy migration helper.
18
+ *
19
+ * @param surface - The surface to convert.
20
+ * @param style - The style port to use for color resolution.
21
+ * @returns A string representation of the surface.
22
+ */
23
+ export declare function surfaceToString(surface: Surface, style: StylePort): string;
24
+ /**
25
+ * Paint a LayoutNode tree onto a Surface.
26
+ *
27
+ * @param target - The surface to paint onto.
28
+ * @param node - The root layout node to paint.
29
+ */
30
+ export declare function paintLayoutNode(target: Surface, node: LayoutNode): void;
31
+ /**
32
+ * Compare two cells for equality (content and style).
33
+ */
34
+ export declare function isSameCell(a: Cell, b: Cell): boolean;
35
+ /**
36
+ * Diff two surfaces and write the minimal set of changes to the WritePort.
37
+ *
38
+ * Optimizations:
39
+ * 1. Skips identical cells.
40
+ * 2. Minimizes CUP (move cursor) commands by detecting contiguous changes.
41
+ * 3. Batches cells with identical styles to minimize SGR codes and keep strings contiguous.
42
+ *
43
+ * @param current - The surface currently on the terminal.
44
+ * @param target - The desired surface state.
45
+ * @param io - The port to write ANSI codes to.
46
+ * @param style - The port to resolve cell styling.
47
+ */
48
+ export declare function renderDiff(current: Surface, target: Surface, io: WritePort, style: StylePort): void;
49
+ //# sourceMappingURL=differ.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"differ.d.ts","sourceRoot":"","sources":["../../../src/core/render/differ.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACjG,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGjE;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAcpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAiFvF;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,MAAM,CAgB1E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CAQvE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,OAAO,CAcpD;AAUD;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,EACf,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,SAAS,GACf,IAAI,CAmEN"}
@@ -0,0 +1,271 @@
1
+ import { createSurface } from '../../ports/surface.js';
2
+ import { stripAnsi, segmentGraphemes } from '../text/index.js';
3
+ /**
4
+ * Convert a multi-line string into a Surface.
5
+ *
6
+ * Note: This is a legacy migration helper. It currently strips ANSI
7
+ * and treats all characters as the default style.
8
+ */
9
+ export function stringToSurface(text, width, height) {
10
+ const surface = createSurface(width, height);
11
+ const plainText = stripAnsi(text);
12
+ const lines = plainText.split(/\r?\n/);
13
+ for (let y = 0; y < Math.min(height, lines.length); y++) {
14
+ const line = lines[y];
15
+ const gs = segmentGraphemes(line);
16
+ for (let x = 0; x < Math.min(width, gs.length); x++) {
17
+ surface.set(x, y, { char: gs[x], empty: false });
18
+ }
19
+ }
20
+ return surface;
21
+ }
22
+ /**
23
+ * Robust ANSI-aware string to Surface conversion.
24
+ */
25
+ export function parseAnsiToSurface(text, width, height) {
26
+ const surface = createSurface(width, height);
27
+ const lines = text.split(/\r?\n/);
28
+ const ANSI_RE = /\x1b\[([0-9;]*)m/g;
29
+ for (let y = 0; y < Math.min(height, lines.length); y++) {
30
+ const line = lines[y];
31
+ let x = 0;
32
+ let currentFg;
33
+ let currentBg;
34
+ let currentMods = new Set();
35
+ const matches = Array.from(line.matchAll(ANSI_RE));
36
+ let lastIndex = 0;
37
+ for (const match of matches) {
38
+ const matchIndex = match.index;
39
+ const part = line.slice(lastIndex, matchIndex);
40
+ const gs = segmentGraphemes(part);
41
+ for (const char of gs) {
42
+ if (x < width) {
43
+ surface.set(x, y, { char, fg: currentFg, bg: currentBg, modifiers: Array.from(currentMods) });
44
+ x++;
45
+ }
46
+ }
47
+ const codeStr = match[1];
48
+ if (codeStr === '0' || codeStr === '') {
49
+ currentFg = undefined;
50
+ currentBg = undefined;
51
+ currentMods.clear();
52
+ }
53
+ else {
54
+ const parts = codeStr.split(';');
55
+ let i = 0;
56
+ while (i < parts.length) {
57
+ const code = parts[i];
58
+ if (code === '1')
59
+ currentMods.add('bold');
60
+ else if (code === '2')
61
+ currentMods.add('dim');
62
+ else if (code === '3')
63
+ currentMods.add('italic');
64
+ else if (code === '4')
65
+ currentMods.add('underline');
66
+ else if (code === '7')
67
+ currentMods.add('inverse');
68
+ else if (code === '9')
69
+ currentMods.add('strike');
70
+ else if (code === '22') {
71
+ currentMods.delete('bold');
72
+ currentMods.delete('dim');
73
+ }
74
+ else if (code === '23')
75
+ currentMods.delete('italic');
76
+ else if (code === '24')
77
+ currentMods.delete('underline');
78
+ else if (code === '27')
79
+ currentMods.delete('inverse');
80
+ else if (code === '29')
81
+ currentMods.delete('strike');
82
+ else if (code === '38' && parts[i + 1] === '2') {
83
+ // Truecolor FG: 38;2;R;G;B
84
+ const r = parseInt(parts[i + 2], 10).toString(16).padStart(2, '0');
85
+ const g = parseInt(parts[i + 3], 10).toString(16).padStart(2, '0');
86
+ const b = parseInt(parts[i + 4], 10).toString(16).padStart(2, '0');
87
+ currentFg = '#' + r + g + b;
88
+ i += 4;
89
+ }
90
+ else if (code === '48' && parts[i + 1] === '2') {
91
+ // Truecolor BG: 48;2;R;G;B
92
+ const r = parseInt(parts[i + 2], 10).toString(16).padStart(2, '0');
93
+ const g = parseInt(parts[i + 3], 10).toString(16).padStart(2, '0');
94
+ const b = parseInt(parts[i + 4], 10).toString(16).padStart(2, '0');
95
+ currentBg = '#' + r + g + b;
96
+ i += 4;
97
+ }
98
+ i++;
99
+ }
100
+ }
101
+ lastIndex = matchIndex + match[0].length;
102
+ }
103
+ const remaining = line.slice(lastIndex);
104
+ const gs = segmentGraphemes(remaining);
105
+ for (const char of gs) {
106
+ if (x < width) {
107
+ surface.set(x, y, { char, fg: currentFg, bg: currentBg, modifiers: Array.from(currentMods) });
108
+ x++;
109
+ }
110
+ }
111
+ }
112
+ return surface;
113
+ }
114
+ /**
115
+ * Convert a Surface into a multi-line string with ANSI escape codes.
116
+ *
117
+ * Note: This is a legacy migration helper.
118
+ *
119
+ * @param surface - The surface to convert.
120
+ * @param style - The style port to use for color resolution.
121
+ * @returns A string representation of the surface.
122
+ */
123
+ export function surfaceToString(surface, style) {
124
+ const lines = [];
125
+ for (let y = 0; y < surface.height; y++) {
126
+ let line = '';
127
+ for (let x = 0; x < surface.width; x++) {
128
+ const cell = surface.get(x, y);
129
+ const token = {
130
+ hex: cell.fg,
131
+ bg: cell.bg,
132
+ modifiers: cell.modifiers,
133
+ };
134
+ line += style.styled(token, cell.char);
135
+ }
136
+ lines.push(line);
137
+ }
138
+ return lines.join('\n');
139
+ }
140
+ /**
141
+ * Paint a LayoutNode tree onto a Surface.
142
+ *
143
+ * @param target - The surface to paint onto.
144
+ * @param node - The root layout node to paint.
145
+ */
146
+ export function paintLayoutNode(target, node) {
147
+ if (node.surface) {
148
+ target.blit(node.surface, node.rect.x, node.rect.y);
149
+ }
150
+ for (const child of node.children) {
151
+ paintLayoutNode(target, child);
152
+ }
153
+ }
154
+ /**
155
+ * Compare two cells for equality (content and style).
156
+ */
157
+ export function isSameCell(a, b) {
158
+ if (a.char !== b.char)
159
+ return false;
160
+ if (a.fg !== b.fg)
161
+ return false;
162
+ if (a.bg !== b.bg)
163
+ return false;
164
+ if (a.empty !== b.empty)
165
+ return false;
166
+ const aMods = a.modifiers ?? [];
167
+ const bMods = b.modifiers ?? [];
168
+ if (aMods.length !== bMods.length)
169
+ return false;
170
+ for (let i = 0; i < aMods.length; i++) {
171
+ if (aMods[i] !== bMods[i])
172
+ return false;
173
+ }
174
+ return true;
175
+ }
176
+ /**
177
+ * Move the terminal cursor to (x, y) using CUP (Cursor Position) escape code.
178
+ * Coordinates are 0-based in Bijou, but 1-based in ANSI.
179
+ */
180
+ function moveCursor(x, y) {
181
+ return `\x1b[${y + 1};${x + 1}H`;
182
+ }
183
+ /**
184
+ * Diff two surfaces and write the minimal set of changes to the WritePort.
185
+ *
186
+ * Optimizations:
187
+ * 1. Skips identical cells.
188
+ * 2. Minimizes CUP (move cursor) commands by detecting contiguous changes.
189
+ * 3. Batches cells with identical styles to minimize SGR codes and keep strings contiguous.
190
+ *
191
+ * @param current - The surface currently on the terminal.
192
+ * @param target - The desired surface state.
193
+ * @param io - The port to write ANSI codes to.
194
+ * @param style - The port to resolve cell styling.
195
+ */
196
+ export function renderDiff(current, target, io, style) {
197
+ const width = target.width;
198
+ const height = target.height;
199
+ let output = '';
200
+ let cursorX = -1;
201
+ let cursorY = -1;
202
+ for (let y = 0; y < height; y++) {
203
+ let x = 0;
204
+ while (x < width) {
205
+ const targetCell = target.get(x, y);
206
+ const currentCell = current.get(x, y);
207
+ if (isSameCell(targetCell, currentCell)) {
208
+ x++;
209
+ continue;
210
+ }
211
+ // If we are not at the expected cursor position, move it
212
+ if (x !== cursorX || y !== cursorY) {
213
+ output += moveCursor(x, y);
214
+ }
215
+ // Find how many contiguous cells have the SAME style as this one
216
+ // and also NEED to be updated.
217
+ let batchX = x;
218
+ let batchText = '';
219
+ while (batchX < width) {
220
+ const c = target.get(batchX, y);
221
+ const curr = current.get(batchX, y);
222
+ if (batchX > x && !isSameStyle(c, targetCell))
223
+ break;
224
+ if (isSameCell(c, curr))
225
+ break;
226
+ batchText += c.char;
227
+ batchX++;
228
+ }
229
+ // Render the batch
230
+ const token = {
231
+ hex: targetCell.fg,
232
+ bg: targetCell.bg,
233
+ modifiers: targetCell.modifiers,
234
+ };
235
+ output += style.styled(token, batchText);
236
+ // Advance our internal cursor tracking
237
+ const batchWidth = batchX - x;
238
+ cursorX = x + batchWidth;
239
+ cursorY = y;
240
+ // Advance loop index
241
+ x = batchX;
242
+ // Flush if the buffer is getting large
243
+ if (output.length > 4096) {
244
+ io.write(output);
245
+ output = '';
246
+ }
247
+ }
248
+ }
249
+ if (output.length > 0) {
250
+ io.write(output);
251
+ }
252
+ }
253
+ /**
254
+ * Compare two cells for style equality only.
255
+ */
256
+ function isSameStyle(a, b) {
257
+ if (a.fg !== b.fg)
258
+ return false;
259
+ if (a.bg !== b.bg)
260
+ return false;
261
+ const aMods = a.modifiers ?? [];
262
+ const bMods = b.modifiers ?? [];
263
+ if (aMods.length !== bMods.length)
264
+ return false;
265
+ for (let i = 0; i < aMods.length; i++) {
266
+ if (aMods[i] !== bMods[i])
267
+ return false;
268
+ }
269
+ return true;
270
+ }
271
+ //# sourceMappingURL=differ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"differ.js","sourceRoot":"","sources":["../../../src/core/render/differ.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import type { RuntimePort } from '../ports/runtime.js';
2
+ /** Sanitized terminal viewport dimensions. */
3
+ export interface RuntimeViewport {
4
+ readonly columns: number;
5
+ readonly rows: number;
6
+ }
7
+ /**
8
+ * Clamp a terminal dimension to a non-negative integer.
9
+ *
10
+ * Runtime adapters may surface fractional, negative, or non-finite values
11
+ * transiently during resize flows. The TUI runtime only operates on whole,
12
+ * non-negative cell counts.
13
+ */
14
+ export declare function sanitizeRuntimeDimension(value: number): number;
15
+ /** Read the current runtime viewport using Bijou's shared dimension rules. */
16
+ export declare function readRuntimeViewport(runtime: RuntimePort): RuntimeViewport;
17
+ /**
18
+ * Install a mutable viewport overlay on top of an existing runtime port.
19
+ *
20
+ * This gives runtimes backed by immutable globals (for example Node's
21
+ * `process.stdout.columns`) a stable, writable source of truth for scripted
22
+ * resizes and worker-proxy synchronization.
23
+ */
24
+ export declare function installRuntimeViewportOverlay<T extends {
25
+ runtime: RuntimePort;
26
+ }>(host: T): RuntimePort;
27
+ /**
28
+ * Update a mutable runtime overlay with sanitized viewport dimensions.
29
+ *
30
+ * Use this after {@link installRuntimeViewportOverlay} when resize events or
31
+ * worker messages need to advance the current runtime viewport source of truth.
32
+ */
33
+ export declare function updateRuntimeViewport(runtime: RuntimePort, columns: number, rows: number): RuntimeViewport;
34
+ //# sourceMappingURL=runtime-viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-viewport.d.ts","sourceRoot":"","sources":["../../src/core/runtime-viewport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,8CAA8C;AAC9C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9D;AAED,8EAA8E;AAC9E,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,GAAG,eAAe,CAKzE;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS;IAAE,OAAO,EAAE,WAAW,CAAA;CAAE,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAoCtG;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,eAAe,CAIjB"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Clamp a terminal dimension to a non-negative integer.
3
+ *
4
+ * Runtime adapters may surface fractional, negative, or non-finite values
5
+ * transiently during resize flows. The TUI runtime only operates on whole,
6
+ * non-negative cell counts.
7
+ */
8
+ export function sanitizeRuntimeDimension(value) {
9
+ if (!Number.isFinite(value))
10
+ return 0;
11
+ return Math.max(0, Math.floor(value));
12
+ }
13
+ /** Read the current runtime viewport using Bijou's shared dimension rules. */
14
+ export function readRuntimeViewport(runtime) {
15
+ return {
16
+ columns: sanitizeRuntimeDimension(runtime.columns),
17
+ rows: sanitizeRuntimeDimension(runtime.rows),
18
+ };
19
+ }
20
+ /**
21
+ * Install a mutable viewport overlay on top of an existing runtime port.
22
+ *
23
+ * This gives runtimes backed by immutable globals (for example Node's
24
+ * `process.stdout.columns`) a stable, writable source of truth for scripted
25
+ * resizes and worker-proxy synchronization.
26
+ */
27
+ export function installRuntimeViewportOverlay(host) {
28
+ const baseRuntime = host.runtime;
29
+ const viewport = readRuntimeViewport(baseRuntime);
30
+ const state = {
31
+ columns: viewport.columns,
32
+ rows: viewport.rows,
33
+ };
34
+ const runtime = {
35
+ env(key) {
36
+ return baseRuntime.env(key);
37
+ },
38
+ get stdoutIsTTY() {
39
+ return baseRuntime.stdoutIsTTY;
40
+ },
41
+ get stdinIsTTY() {
42
+ return baseRuntime.stdinIsTTY;
43
+ },
44
+ get columns() {
45
+ return state.columns;
46
+ },
47
+ set columns(value) {
48
+ state.columns = sanitizeRuntimeDimension(value);
49
+ },
50
+ get rows() {
51
+ return state.rows;
52
+ },
53
+ set rows(value) {
54
+ state.rows = sanitizeRuntimeDimension(value);
55
+ },
56
+ get refreshRate() {
57
+ return baseRuntime.refreshRate;
58
+ },
59
+ };
60
+ host.runtime = runtime;
61
+ return runtime;
62
+ }
63
+ /**
64
+ * Update a mutable runtime overlay with sanitized viewport dimensions.
65
+ *
66
+ * Use this after {@link installRuntimeViewportOverlay} when resize events or
67
+ * worker messages need to advance the current runtime viewport source of truth.
68
+ */
69
+ export function updateRuntimeViewport(runtime, columns, rows) {
70
+ runtime.columns = columns;
71
+ runtime.rows = rows;
72
+ return readRuntimeViewport(runtime);
73
+ }
74
+ //# sourceMappingURL=runtime-viewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-viewport.js","sourceRoot":"","sources":["../../src/core/runtime-viewport.ts"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,mBAAmB,CAAC,OAAoB;IACtD,OAAO;QACL,OAAO,EAAE,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC;QAClD,IAAI,EAAE,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,6BAA6B,CAAqC,IAAO;IACvF,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;IACjC,MAAM,QAAQ,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG;QACZ,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;KACpB,CAAC;IACF,MAAM,OAAO,GAAgB;QAC3B,GAAG,CAAC,GAAW;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,WAAW;YACb,OAAO,WAAW,CAAC,WAAW,CAAC;QACjC,CAAC;QACD,IAAI,UAAU;YACZ,OAAO,WAAW,CAAC,UAAU,CAAC;QAChC,CAAC;QACD,IAAI,OAAO;YACT,OAAO,KAAK,CAAC,OAAO,CAAC;QACvB,CAAC;QACD,IAAI,OAAO,CAAC,KAAa;YACvB,KAAK,CAAC,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,KAAK,CAAC,IAAI,CAAC;QACpB,CAAC;QACD,IAAI,IAAI,CAAC,KAAa;YACpB,KAAK,CAAC,IAAI,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,WAAW;YACb,OAAO,WAAW,CAAC,WAAW,CAAC;QACjC,CAAC;KACF,CAAC;IAEF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAoB,EACpB,OAAe,EACf,IAAY;IAEZ,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC;IAC1B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
@@ -7,4 +7,5 @@
7
7
  */
8
8
  export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, ANSI_SGR_RE, stripAnsi, } from './grapheme.js';
9
9
  export { clipToWidth } from './clip.js';
10
+ export { wrapToWidth } from './wrap.js';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -7,4 +7,5 @@
7
7
  */
8
8
  export { isWideChar, segmentGraphemes, graphemeClusterWidth, graphemeWidth, ANSI_SGR_RE, stripAnsi, } from './grapheme.js';
9
9
  export { clipToWidth } from './clip.js';
10
+ export { wrapToWidth } from './wrap.js';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/text/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Wrap a string to the requested display width while preserving ANSI styling.
3
+ *
4
+ * Wrapping is grapheme-aware and hard-wraps long lines without adding ellipses.
5
+ *
6
+ * @param str - Input string, possibly containing ANSI SGR escapes.
7
+ * @param maxWidth - Maximum display width in columns.
8
+ * @returns Wrapped lines.
9
+ */
10
+ export declare function wrapToWidth(str: string, maxWidth: number): string[];
11
+ //# sourceMappingURL=wrap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.d.ts","sourceRoot":"","sources":["../../../src/core/text/wrap.ts"],"names":[],"mappings":"AA2FA;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAInE"}
@@ -0,0 +1,90 @@
1
+ import { RESET_SGR } from '../ansi.js';
2
+ import { ANSI_SGR_RE, graphemeClusterWidth, segmentGraphemes } from './grapheme.js';
3
+ function tokenizeAnsiText(str) {
4
+ const regex = new RegExp(ANSI_SGR_RE.source, 'g');
5
+ const tokens = [];
6
+ let lastIndex = 0;
7
+ for (const match of str.matchAll(regex)) {
8
+ const index = match.index ?? 0;
9
+ if (index > lastIndex) {
10
+ const raw = str.slice(lastIndex, index);
11
+ for (const grapheme of segmentGraphemes(raw)) {
12
+ tokens.push({
13
+ kind: 'grapheme',
14
+ raw: grapheme,
15
+ width: graphemeClusterWidth(grapheme),
16
+ });
17
+ }
18
+ }
19
+ tokens.push({ kind: 'ansi', raw: match[0] });
20
+ lastIndex = index + match[0].length;
21
+ }
22
+ if (lastIndex < str.length) {
23
+ const raw = str.slice(lastIndex);
24
+ for (const grapheme of segmentGraphemes(raw)) {
25
+ tokens.push({
26
+ kind: 'grapheme',
27
+ raw: grapheme,
28
+ width: graphemeClusterWidth(grapheme),
29
+ });
30
+ }
31
+ }
32
+ return tokens;
33
+ }
34
+ function isResetEscape(raw) {
35
+ return raw === RESET_SGR;
36
+ }
37
+ function finalizeWrappedLine(raw, activeStyle) {
38
+ if (activeStyle.length === 0 || raw.endsWith(RESET_SGR))
39
+ return raw;
40
+ return raw + RESET_SGR;
41
+ }
42
+ function wrapSingleLine(str, maxWidth) {
43
+ if (str.length === 0)
44
+ return [''];
45
+ if (maxWidth <= 0)
46
+ return [''];
47
+ const tokens = tokenizeAnsiText(str);
48
+ const lines = [];
49
+ let currentRaw = '';
50
+ let currentWidth = 0;
51
+ let activeStyle = '';
52
+ const pushLine = () => {
53
+ if (currentWidth <= 0)
54
+ return;
55
+ lines.push(finalizeWrappedLine(currentRaw, activeStyle));
56
+ currentRaw = activeStyle;
57
+ currentWidth = 0;
58
+ };
59
+ for (const token of tokens) {
60
+ if (token.kind === 'ansi') {
61
+ currentRaw += token.raw;
62
+ activeStyle = isResetEscape(token.raw) ? '' : activeStyle + token.raw;
63
+ continue;
64
+ }
65
+ if (currentWidth > 0 && currentWidth + token.width > maxWidth) {
66
+ pushLine();
67
+ }
68
+ currentRaw += token.raw;
69
+ currentWidth += token.width;
70
+ }
71
+ if (currentWidth > 0) {
72
+ lines.push(finalizeWrappedLine(currentRaw, activeStyle));
73
+ }
74
+ return lines.length > 0 ? lines : [''];
75
+ }
76
+ /**
77
+ * Wrap a string to the requested display width while preserving ANSI styling.
78
+ *
79
+ * Wrapping is grapheme-aware and hard-wraps long lines without adding ellipses.
80
+ *
81
+ * @param str - Input string, possibly containing ANSI SGR escapes.
82
+ * @param maxWidth - Maximum display width in columns.
83
+ * @returns Wrapped lines.
84
+ */
85
+ export function wrapToWidth(str, maxWidth) {
86
+ const source = str ?? '';
87
+ const rawLines = source.split('\n');
88
+ return rawLines.flatMap((line) => wrapSingleLine(line, maxWidth));
89
+ }
90
+ //# sourceMappingURL=wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap.js","sourceRoot":"","sources":["../../../src/core/text/wrap.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"accessors.d.ts","sourceRoot":"","sources":["../../../src/core/theme/accessors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IACnD,oCAAoC;IACpC,MAAM,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;IAC/C,qCAAqC;IACrC,OAAO,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;IACjD,+DAA+D;IAC/D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,4EAA4E;IAC5E,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CASzE"}
1
+ {"version":3,"file":"accessors.d.ts","sourceRoot":"","sources":["../../../src/core/theme/accessors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,QAAQ,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC;IACnD,oCAAoC;IACpC,MAAM,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,UAAU,CAAC;IAC/C,qCAAqC;IACrC,OAAO,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;IACjD,+DAA+D;IAC/D,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAChC,4EAA4E;IAC5E,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,iFAAiF;IACjF,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CACvC;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAwBzE"}
@@ -9,12 +9,28 @@
9
9
  * @returns An object whose properties can be spread into a {@link BijouContext}.
10
10
  */
11
11
  export function createThemeAccessors(theme) {
12
+ const { tokenGraph, colorScheme } = theme;
13
+ const mode = colorScheme === 'light' ? 'light' : 'dark';
12
14
  return {
13
- semantic: (key) => theme.theme.semantic[key],
14
- border: (key) => theme.theme.border[key],
15
- surface: (key) => theme.theme.surface[key],
16
- status: (key) => theme.theme.status[key] ?? theme.theme.status['muted'],
17
- ui: (key) => theme.theme.ui[key] ?? theme.theme.semantic.primary,
15
+ semantic: (key) => tokenGraph.get(`semantic.${key}`, mode),
16
+ border: (key) => tokenGraph.get(`border.${key}`, mode),
17
+ surface: (key) => tokenGraph.get(`surface.${key}`, mode),
18
+ status: (key) => {
19
+ try {
20
+ return tokenGraph.get(`status.${key}`, mode);
21
+ }
22
+ catch {
23
+ return tokenGraph.get('status.muted', mode);
24
+ }
25
+ },
26
+ ui: (key) => {
27
+ try {
28
+ return tokenGraph.get(`ui.${key}`, mode);
29
+ }
30
+ catch {
31
+ return tokenGraph.get('semantic.primary', mode);
32
+ }
33
+ },
18
34
  gradient: (key) => theme.theme.gradient[key] ?? [],
19
35
  };
20
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"accessors.js","sourceRoot":"","sources":["../../../src/core/theme/accessors.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,OAAO;QACL,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC5C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;QACxC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1C,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAE,KAAK,CAAC,KAAK,CAAC,MAAqC,CAAC,GAAG,CAAC,IAAK,KAAK,CAAC,KAAK,CAAC,MAAqC,CAAC,OAAO,CAAE;QACxI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAE,KAAK,CAAC,KAAK,CAAC,EAAiC,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO;QAChG,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAE,KAAK,CAAC,KAAK,CAAC,QAA2C,CAAC,GAAG,CAAC,IAAI,EAAE;KACvF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"accessors.js","sourceRoot":"","sources":["../../../src/core/theme/accessors.ts"],"names":[],"mappings":"AAuBA;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAoB;IACvD,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC1C,MAAM,IAAI,GAAG,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAExD,OAAO;QACL,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,GAAG,EAAE,EAAE,IAAI,CAAC;QAC1D,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC;QACtD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,EAAE,IAAI,CAAC;QACxD,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YACd,IAAI,CAAC;gBACH,OAAO,UAAU,CAAC,GAAG,CAAC,UAAU,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,UAAU,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE;YACV,IAAI,CAAC;gBACH,OAAO,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,UAAU,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAE,KAAK,CAAC,KAAK,CAAC,QAA2C,CAAC,GAAG,CAAC,IAAI,EAAE;KACvF,CAAC;AACJ,CAAC"}