@flyingrobots/bijou-tui 1.8.0 → 3.0.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 (132) hide show
  1. package/README.md +64 -21
  2. package/dist/animate.d.ts +0 -2
  3. package/dist/animate.d.ts.map +1 -1
  4. package/dist/animate.js +17 -26
  5. package/dist/animate.js.map +1 -1
  6. package/dist/app-frame-actions.d.ts +37 -0
  7. package/dist/app-frame-actions.d.ts.map +1 -0
  8. package/dist/app-frame-actions.js +313 -0
  9. package/dist/app-frame-actions.js.map +1 -0
  10. package/dist/app-frame-palette.d.ts +16 -0
  11. package/dist/app-frame-palette.d.ts.map +1 -0
  12. package/dist/app-frame-palette.js +158 -0
  13. package/dist/app-frame-palette.js.map +1 -0
  14. package/dist/app-frame-render.d.ts +39 -0
  15. package/dist/app-frame-render.d.ts.map +1 -0
  16. package/dist/app-frame-render.js +319 -0
  17. package/dist/app-frame-render.js.map +1 -0
  18. package/dist/app-frame-types.d.ts +135 -0
  19. package/dist/app-frame-types.d.ts.map +1 -0
  20. package/dist/app-frame-types.js +72 -0
  21. package/dist/app-frame-types.js.map +1 -0
  22. package/dist/app-frame-utils.d.ts +37 -0
  23. package/dist/app-frame-utils.d.ts.map +1 -0
  24. package/dist/app-frame-utils.js +141 -0
  25. package/dist/app-frame-utils.js.map +1 -0
  26. package/dist/app-frame.d.ts +13 -8
  27. package/dist/app-frame.d.ts.map +1 -1
  28. package/dist/app-frame.js +80 -906
  29. package/dist/app-frame.js.map +1 -1
  30. package/dist/canvas.d.ts +37 -25
  31. package/dist/canvas.d.ts.map +1 -1
  32. package/dist/canvas.js +116 -30
  33. package/dist/canvas.js.map +1 -1
  34. package/dist/commands.js +2 -2
  35. package/dist/commands.js.map +1 -1
  36. package/dist/css/install.d.ts +4 -0
  37. package/dist/css/install.d.ts.map +1 -0
  38. package/dist/css/install.js +24 -0
  39. package/dist/css/install.js.map +1 -0
  40. package/dist/css/parser.d.ts +14 -0
  41. package/dist/css/parser.d.ts.map +1 -0
  42. package/dist/css/parser.js +92 -0
  43. package/dist/css/parser.js.map +1 -0
  44. package/dist/css/resolver.d.ts +36 -0
  45. package/dist/css/resolver.d.ts.map +1 -0
  46. package/dist/css/resolver.js +130 -0
  47. package/dist/css/resolver.js.map +1 -0
  48. package/dist/css/text-style.d.ts +17 -0
  49. package/dist/css/text-style.d.ts.map +1 -0
  50. package/dist/css/text-style.js +59 -0
  51. package/dist/css/text-style.js.map +1 -0
  52. package/dist/css/types.d.ts +27 -0
  53. package/dist/css/types.d.ts.map +1 -0
  54. package/dist/css/types.js +5 -0
  55. package/dist/css/types.js.map +1 -0
  56. package/dist/driver.d.ts +10 -2
  57. package/dist/driver.d.ts.map +1 -1
  58. package/dist/driver.js +25 -2
  59. package/dist/driver.js.map +1 -1
  60. package/dist/eventbus.d.ts +42 -3
  61. package/dist/eventbus.d.ts.map +1 -1
  62. package/dist/eventbus.js +108 -7
  63. package/dist/eventbus.js.map +1 -1
  64. package/dist/focus-area.d.ts +4 -0
  65. package/dist/focus-area.d.ts.map +1 -1
  66. package/dist/focus-area.js +11 -1
  67. package/dist/focus-area.js.map +1 -1
  68. package/dist/index.d.ts +11 -1
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +18 -1
  71. package/dist/index.js.map +1 -1
  72. package/dist/layout-v3.d.ts +10 -0
  73. package/dist/layout-v3.d.ts.map +1 -0
  74. package/dist/layout-v3.js +35 -0
  75. package/dist/layout-v3.js.map +1 -0
  76. package/dist/motion/motion.d.ts +14 -0
  77. package/dist/motion/motion.d.ts.map +1 -0
  78. package/dist/motion/motion.js +31 -0
  79. package/dist/motion/motion.js.map +1 -0
  80. package/dist/motion/reconciler.d.ts +15 -0
  81. package/dist/motion/reconciler.d.ts.map +1 -0
  82. package/dist/motion/reconciler.js +109 -0
  83. package/dist/motion/reconciler.js.map +1 -0
  84. package/dist/motion/types.d.ts +52 -0
  85. package/dist/motion/types.d.ts.map +1 -0
  86. package/dist/motion/types.js +2 -0
  87. package/dist/motion/types.js.map +1 -0
  88. package/dist/pipeline/middleware/css.d.ts +20 -0
  89. package/dist/pipeline/middleware/css.d.ts.map +1 -0
  90. package/dist/pipeline/middleware/css.js +41 -0
  91. package/dist/pipeline/middleware/css.js.map +1 -0
  92. package/dist/pipeline/middleware/grayscale.d.ts +9 -0
  93. package/dist/pipeline/middleware/grayscale.d.ts.map +1 -0
  94. package/dist/pipeline/middleware/grayscale.js +39 -0
  95. package/dist/pipeline/middleware/grayscale.js.map +1 -0
  96. package/dist/pipeline/middleware/motion.d.ts +6 -0
  97. package/dist/pipeline/middleware/motion.d.ts.map +1 -0
  98. package/dist/pipeline/middleware/motion.js +19 -0
  99. package/dist/pipeline/middleware/motion.js.map +1 -0
  100. package/dist/pipeline/middleware/paint.d.ts +6 -0
  101. package/dist/pipeline/middleware/paint.d.ts.map +1 -0
  102. package/dist/pipeline/middleware/paint.js +21 -0
  103. package/dist/pipeline/middleware/paint.js.map +1 -0
  104. package/dist/pipeline/pipeline.d.ts +56 -0
  105. package/dist/pipeline/pipeline.d.ts.map +1 -0
  106. package/dist/pipeline/pipeline.js +45 -0
  107. package/dist/pipeline/pipeline.js.map +1 -0
  108. package/dist/runtime.d.ts +1 -1
  109. package/dist/runtime.d.ts.map +1 -1
  110. package/dist/runtime.js +153 -8
  111. package/dist/runtime.js.map +1 -1
  112. package/dist/screen.d.ts +12 -1
  113. package/dist/screen.d.ts.map +1 -1
  114. package/dist/screen.js +14 -1
  115. package/dist/screen.js.map +1 -1
  116. package/dist/subapp/mount.d.ts +67 -0
  117. package/dist/subapp/mount.d.ts.map +1 -0
  118. package/dist/subapp/mount.js +60 -0
  119. package/dist/subapp/mount.js.map +1 -0
  120. package/dist/transition-shaders.d.ts +101 -3
  121. package/dist/transition-shaders.d.ts.map +1 -1
  122. package/dist/transition-shaders.js +281 -6
  123. package/dist/transition-shaders.js.map +1 -1
  124. package/dist/types.d.ts +45 -8
  125. package/dist/types.d.ts.map +1 -1
  126. package/dist/types.js +9 -0
  127. package/dist/types.js.map +1 -1
  128. package/dist/view-output.d.ts +15 -0
  129. package/dist/view-output.d.ts.map +1 -0
  130. package/dist/view-output.js +53 -0
  131. package/dist/view-output.js.map +1 -0
  132. package/package.json +3 -3
@@ -1,9 +1,41 @@
1
1
  /**
2
2
  * Transition shader system — composable pure functions for page transitions.
3
3
  *
4
- * Each shader receives cell metadata (position, dimensions, progress, random)
5
- * and returns whether to show the next page or optionally override the character.
4
+ * Each shader receives cell metadata (position, dimensions, progress, random,
5
+ * frame counter) and returns whether to show the next page or optionally
6
+ * override the character.
7
+ *
8
+ * ## Shader types
9
+ *
10
+ * - **Instances** (`wipeShader`, `dissolveShader`, …) — zero-config, ready to use.
11
+ * - **Factories** (`wipe()`, `radial()`, `blinds()`, …) — parameterized, return a shader.
12
+ * - **Combinators** (`reverse()`, `chain()`, `overlay()`) — transform or compose shaders.
6
13
  */
14
+ // ---------------------------------------------------------------------------
15
+ // Pseudo-random helpers
16
+ // ---------------------------------------------------------------------------
17
+ /** Hash-based pseudo-random that incorporates spatial + temporal seeds. */
18
+ function noise(x, y, seed) {
19
+ // Constant offset (7.31) breaks the degenerate fixed point at (0, 0, 0).
20
+ const v = Math.sin(x * 12.9898 + y * 78.233 + seed * 43.7585 + 7.31) * 43758.5453;
21
+ return v - Math.floor(v);
22
+ }
23
+ /** Compute normalized coordinates, aspect-corrected deltas, and distance metrics. */
24
+ function computeOriginMetrics(x, y, width, height, originX, originY) {
25
+ const nx = x / width;
26
+ const ny = y / height;
27
+ const aspect = width / Math.max(1, height) * 0.5; // chars are ~2:1 tall
28
+ const dx = (nx - originX) * aspect;
29
+ const dy = ny - originY;
30
+ const dist = Math.sqrt(dx * dx + dy * dy);
31
+ const maxDist = Math.sqrt(Math.max(originX, 1 - originX) ** 2 * aspect * aspect
32
+ + Math.max(originY, 1 - originY) ** 2);
33
+ const normDist = maxDist > 0 ? dist / maxDist : 0;
34
+ return { nx, ny, aspect, dx, dy, dist, maxDist, normDist };
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Original shaders (backward-compatible instances)
38
+ // ---------------------------------------------------------------------------
7
39
  /** Left-to-right wipe. */
8
40
  export const wipeShader = ({ x, width, progress }) => ({
9
41
  showNext: x / width < progress,
@@ -37,8 +69,8 @@ export const matrixShader = ({ rand, progress, ctx }) => {
37
69
  }
38
70
  if (rand < threshold + edge) {
39
71
  const chars = '01$#@%&*';
40
- const char = chars[Math.floor(rand * 100) % chars.length];
41
- return { showNext: false, char: ctx.style.styled(ctx.status('success'), char) };
72
+ const char = chars[Math.min(Math.floor(rand * 100) % chars.length, chars.length - 1)];
73
+ return { showNext: false, char: ctx.style.styled(ctx.status('success'), char), charRole: 'decoration' };
42
74
  }
43
75
  return { showNext: false };
44
76
  };
@@ -47,11 +79,245 @@ export const scrambleShader = ({ rand, progress, ctx }) => {
47
79
  const scrambleAmount = 1 - Math.abs(progress - 0.5) * 2;
48
80
  if (rand < scrambleAmount * 0.8) {
49
81
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()';
50
- const char = chars[Math.floor(rand * 1000) % chars.length];
51
- return { showNext: false, char: ctx.style.styled(ctx.semantic('muted'), char) };
82
+ const char = chars[Math.min(Math.floor(rand * 1000) % chars.length, chars.length - 1)];
83
+ return { showNext: false, char: ctx.style.styled(ctx.semantic('muted'), char), charRole: 'decoration' };
52
84
  }
53
85
  return { showNext: progress > 0.5 };
54
86
  };
87
+ // ---------------------------------------------------------------------------
88
+ // Shader factories
89
+ // ---------------------------------------------------------------------------
90
+ /** Directional wipe factory. Default: left-to-right. */
91
+ export function wipe(direction = 'right') {
92
+ return ({ x, y, width, height, progress }) => {
93
+ const t = direction === 'right' ? x / width
94
+ : direction === 'left' ? 1 - x / width
95
+ : direction === 'down' ? y / height
96
+ : 1 - y / height;
97
+ return { showNext: t < progress };
98
+ };
99
+ }
100
+ /** Circle expanding from an origin point. Default: center. */
101
+ export function radial(originX = 0.5, originY = 0.5) {
102
+ return ({ x, y, width, height, progress }) => {
103
+ const m = computeOriginMetrics(x, y, width, height, originX, originY);
104
+ return { showNext: progress >= 1 || m.normDist < progress };
105
+ };
106
+ }
107
+ /** Diamond/rhombus shape expanding from center. */
108
+ export function diamond(originX = 0.5, originY = 0.5) {
109
+ return ({ x, y, width, height, progress }) => {
110
+ const m = computeOriginMetrics(x, y, width, height, originX, originY);
111
+ // Manhattan distance uses absolute deltas
112
+ const dist = Math.abs(m.dx) + Math.abs(m.dy);
113
+ const maxDist = Math.max(originX, 1 - originX) * m.aspect
114
+ + Math.max(originY, 1 - originY);
115
+ const normDist = maxDist > 0 ? dist / maxDist : 0;
116
+ return { showNext: progress >= 1 || normDist < progress };
117
+ };
118
+ }
119
+ /** Angular sweep that spirals outward from center. */
120
+ export function spiral(turns = 3, originX = 0.5, originY = 0.5) {
121
+ return ({ x, y, width, height, progress }) => {
122
+ const m = computeOriginMetrics(x, y, width, height, originX, originY);
123
+ const angle = (Math.atan2(m.dy, m.dx) / (2 * Math.PI) + 0.5) % 1; // [0, 1]
124
+ // Combine angle + distance into a spiral threshold
125
+ const spiralT = (angle + m.normDist * turns) % 1;
126
+ return { showNext: spiralT < progress };
127
+ };
128
+ }
129
+ /** Venetian blinds (horizontal or vertical bands). */
130
+ export function blinds(count = 8, direction = 'horizontal') {
131
+ return ({ x, y, width, height, progress }) => {
132
+ const pos = direction === 'horizontal' ? y / height : x / width;
133
+ const band = (pos * count) % 1;
134
+ return { showNext: band < progress };
135
+ };
136
+ }
137
+ /** Two halves sliding apart from center (vertical split). */
138
+ export function curtain(direction = 'vertical') {
139
+ return ({ x, y, width, height, progress }) => {
140
+ const pos = direction === 'vertical' ? x / width : y / height;
141
+ const distFromCenter = Math.abs(pos - 0.5) * 2; // 0 at center, 1 at edges
142
+ return { showNext: progress >= 1 || distFromCenter < progress };
143
+ };
144
+ }
145
+ /** Progressively shrinking block pixelation that resolves to the next page. */
146
+ export function pixelate(maxBlockSize = 16) {
147
+ return ({ x, y, progress, rand }) => {
148
+ // Phase 1 (0–0.5): pixelate the previous page with growing blocks
149
+ // Phase 2 (0.5–1): de-pixelate to reveal next page with shrinking blocks
150
+ const showNext = progress > 0.5;
151
+ const phase = showNext ? 1 - (progress - 0.5) * 2 : progress * 2;
152
+ const blockSize = Math.max(1, Math.round(phase * maxBlockSize));
153
+ const bx = Math.floor(x / blockSize);
154
+ const by = Math.floor(y / blockSize);
155
+ // Stable random per block
156
+ const blockRand = noise(bx, by, 0);
157
+ // Within each block, either all show or all hide (pixelation effect)
158
+ if (blockSize <= 1)
159
+ return { showNext };
160
+ const scramble = phase > 0.3 && blockRand < phase * 0.6;
161
+ if (scramble) {
162
+ const chars = '░▒▓█';
163
+ const char = chars[Math.min(Math.floor(rand * chars.length), chars.length - 1)];
164
+ return { showNext: false, char, charRole: 'decoration' };
165
+ }
166
+ return { showNext };
167
+ };
168
+ }
169
+ /**
170
+ * Left-to-right, top-to-bottom typewriter reveal.
171
+ * Shows a cursor character at the leading edge.
172
+ */
173
+ export function typewriter(cursor = '▌') {
174
+ return ({ x, y, width, height, progress, ctx }) => {
175
+ const totalCells = width * height;
176
+ const revealed = Math.floor(progress * totalCells);
177
+ const cellIndex = y * width + x;
178
+ if (cellIndex < revealed)
179
+ return { showNext: true };
180
+ if (cellIndex === revealed) {
181
+ return { showNext: false, char: ctx.style.styled(ctx.status('info'), cursor), charRole: 'marker' };
182
+ }
183
+ return { showNext: false };
184
+ };
185
+ }
186
+ /**
187
+ * Horizontal glitch displacement with RGB-split-style character noise.
188
+ * Uses the frame counter for temporal variation.
189
+ */
190
+ export function glitch(intensity = 0.5) {
191
+ return ({ x, y, progress, frame, ctx }) => {
192
+ // Glitch peaks at midpoint, ramps up then down
193
+ const glitchAmount = (1 - Math.abs(progress - 0.5) * 2) * intensity;
194
+ const rowNoise = noise(0, y, frame * 0.3);
195
+ // Selected rows show block-char corruption across all their cells
196
+ if (rowNoise < glitchAmount * 0.6) {
197
+ const glitchChars = '▓░▒█▄▀';
198
+ const n = noise(x, y, frame);
199
+ const char = glitchChars[Math.min(Math.floor(n * glitchChars.length), glitchChars.length - 1)];
200
+ return { showNext: false, char: ctx.style.styled(ctx.status('error'), char), charRole: 'decoration' };
201
+ }
202
+ // Scattered cells get individual scramble
203
+ const cellNoise = noise(x, y, frame * 0.5);
204
+ if (cellNoise < glitchAmount * 0.3) {
205
+ const glitchChars = '▓░▒█▄▀╪╫╬';
206
+ const char = glitchChars[Math.min(Math.floor(cellNoise * 100) % glitchChars.length, glitchChars.length - 1)];
207
+ return { showNext: false, char: ctx.style.styled(ctx.status('warning'), char), charRole: 'decoration' };
208
+ }
209
+ return { showNext: progress > 0.5 };
210
+ };
211
+ }
212
+ /**
213
+ * TV static noise that clears to reveal the next page.
214
+ * Uses the frame counter for flickering.
215
+ */
216
+ export function tvStatic(density = 0.7) {
217
+ return ({ x, y, progress, frame, ctx }) => {
218
+ // Static covers the screen then clears to reveal next page
219
+ // Phase 1 (0–0.3): static fades in over previous page
220
+ // Phase 2 (0.3–0.7): full static
221
+ // Phase 3 (0.7–1): static clears to reveal next page
222
+ const staticAmount = progress < 0.3
223
+ ? progress / 0.3
224
+ : progress > 0.7
225
+ ? (1 - progress) / 0.3
226
+ : 1;
227
+ const cellNoise = noise(x, y, frame);
228
+ if (cellNoise < staticAmount * density) {
229
+ const intensity = noise(x + 1, y + 1, frame);
230
+ const chars = ' ░▒▓█';
231
+ const char = chars[Math.min(Math.floor(intensity * chars.length), chars.length - 1)];
232
+ return { showNext: false, char: ctx.style.styled(ctx.semantic('muted'), char), charRole: 'decoration' };
233
+ }
234
+ return { showNext: progress > 0.5 };
235
+ };
236
+ }
237
+ // ---------------------------------------------------------------------------
238
+ // Default instances for the new shaders (zero-config)
239
+ // ---------------------------------------------------------------------------
240
+ /** Circle expanding from center. */
241
+ export const radialShader = radial();
242
+ /** Diamond expanding from center. */
243
+ export const diamondShader = diamond();
244
+ /** Spiral sweep from center. */
245
+ export const spiralShader = spiral();
246
+ /** 8-band horizontal blinds. */
247
+ export const blindsShader = blinds();
248
+ /** Vertical curtain split from center. */
249
+ export const curtainShader = curtain();
250
+ /** Block pixelation with 16px max block size. */
251
+ export const pixelateShader = pixelate();
252
+ /** Typewriter reveal with ▌ cursor. */
253
+ export const typewriterShader = typewriter();
254
+ /** Horizontal glitch at 50% intensity. */
255
+ export const glitchShader = glitch();
256
+ /** TV static noise at 70% density. */
257
+ export const staticShader = tvStatic();
258
+ // ---------------------------------------------------------------------------
259
+ // Combinators
260
+ // ---------------------------------------------------------------------------
261
+ /**
262
+ * Reverse a shader's spatial reveal order.
263
+ *
264
+ * Cells that would be revealed last are revealed first, and vice versa.
265
+ * At progress=0 nothing is revealed; at progress=1 everything is revealed.
266
+ */
267
+ export function reverse(shader) {
268
+ return (cell) => {
269
+ const result = shader({ ...cell, progress: 1 - cell.progress });
270
+ // Marker chars (e.g., typewriter cursor) are positional — they become
271
+ // stale when progress is remapped. Decoration chars (glitch noise,
272
+ // static blocks) are ambient and survive the reversal.
273
+ const keepChar = result.char !== undefined && result.charRole !== 'marker';
274
+ return keepChar
275
+ ? { showNext: !result.showNext, char: result.char, charRole: result.charRole }
276
+ : { showNext: !result.showNext };
277
+ };
278
+ }
279
+ /**
280
+ * Chain two shaders sequentially: `a` runs during progress [0, 0.5],
281
+ * `b` runs during (0.5, 1]. Each sub-shader receives a normalized 0→1
282
+ * progress for its half.
283
+ *
284
+ * **Note:** There is a hard cut at the midpoint — shader `a` completes
285
+ * (all cells revealed) then shader `b` starts from scratch (no cells
286
+ * revealed). This is intentional for effects like "dissolve out → wipe in"
287
+ * but will flash if both shaders reveal in the same direction.
288
+ */
289
+ export function chain(a, b) {
290
+ return (cell) => {
291
+ if (cell.progress <= 0.5) {
292
+ return a({ ...cell, progress: cell.progress * 2 });
293
+ }
294
+ return b({ ...cell, progress: (cell.progress - 0.5) * 2 });
295
+ };
296
+ }
297
+ /**
298
+ * Overlay two shaders: `top` shader's char override wins when present,
299
+ * otherwise falls through to `base` shader's result.
300
+ *
301
+ * `showNext` uses OR semantics — the composite reveals a cell if *either*
302
+ * shader reveals it. This means the composite always reveals at least as
303
+ * much as either shader alone.
304
+ */
305
+ export function overlay(base, top) {
306
+ return (cell) => {
307
+ const topResult = top(cell);
308
+ if (topResult.char !== undefined)
309
+ return topResult;
310
+ const baseResult = base(cell);
311
+ return {
312
+ showNext: topResult.showNext || baseResult.showNext,
313
+ char: baseResult.char,
314
+ charRole: baseResult.charRole,
315
+ };
316
+ };
317
+ }
318
+ // ---------------------------------------------------------------------------
319
+ // Registry
320
+ // ---------------------------------------------------------------------------
55
321
  /** Registry mapping built-in transition names to shader functions. `none` maps to `undefined`. */
56
322
  export const TRANSITION_SHADERS = {
57
323
  none: undefined,
@@ -62,5 +328,14 @@ export const TRANSITION_SHADERS = {
62
328
  melt: meltShader,
63
329
  matrix: matrixShader,
64
330
  scramble: scrambleShader,
331
+ radial: radialShader,
332
+ diamond: diamondShader,
333
+ spiral: spiralShader,
334
+ blinds: blindsShader,
335
+ curtain: curtainShader,
336
+ pixelate: pixelateShader,
337
+ typewriter: typewriterShader,
338
+ glitch: glitchShader,
339
+ static: staticShader,
65
340
  };
66
341
  //# sourceMappingURL=transition-shaders.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transition-shaders.js","sourceRoot":"","sources":["../src/transition-shaders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transition-shaders.js","sourceRoot":"","sources":["../src/transition-shaders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAmEH,8EAA8E;AAC9E,wBAAwB;AACxB,8EAA8E;AAE9E,2EAA2E;AAC3E,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY;IAC/C,yEAAyE;IACzE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC,GAAG,UAAU,CAAC;IAClF,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC;AAcD,qFAAqF;AACrF,SAAS,oBAAoB,CAC3B,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EACnD,OAAe,EAAE,OAAe;IAEhC,MAAM,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;IACrB,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC;IACtB,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,sBAAsB;IACxE,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,MAAM,CAAC;IACnC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM;UACnD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CACtC,CAAC;IACF,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAC7D,CAAC;AAED,8EAA8E;AAC9E,mDAAmD;AACnD,8EAA8E;AAE9E,0BAA0B;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAuB,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACzE,QAAQ,EAAE,CAAC,GAAG,KAAK,GAAG,QAAQ;CAC/B,CAAC,CAAC;AAEH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,cAAc,GAAuB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IACzE,QAAQ,EAAE,IAAI,GAAG,QAAQ;CAC1B,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,CAAC,MAAM,UAAU,GAAuB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IACnE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7B,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF,4BAA4B;AAC5B,MAAM,CAAC,MAAM,UAAU,GAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,QAAQ,EAAE,QAAQ,GAAG,GAAG;CACzB,CAAC,CAAC;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAuB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC3E,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC1D,MAAM,SAAS,GAAG,QAAQ,GAAG,GAAG,GAAG,WAAW,CAAC;IAC/C,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,GAAG,SAAS,EAAE,CAAC;AAC9C,CAAC,CAAC;AAEF,qDAAqD;AACrD,MAAM,CAAC,MAAM,YAAY,GAAuB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;IAC1E,MAAM,SAAS,GAAG,QAAQ,CAAC;IAC3B,MAAM,IAAI,GAAG,GAAG,CAAC;IACjB,IAAI,IAAI,GAAG,SAAS,EAAE,CAAC;QACrB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IACD,IAAI,IAAI,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,UAAU,CAAC;QACzB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;QACvF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAqB,EAAE,CAAC;IACnH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC,CAAC;AAEF,gDAAgD;AAChD,MAAM,CAAC,MAAM,cAAc,GAAuB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;IAC5E,MAAM,cAAc,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACxD,IAAI,IAAI,GAAG,cAAc,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,0EAA0E,CAAC;QACzF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;QACxF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAqB,EAAE,CAAC;IACnH,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC;AACtC,CAAC,CAAC;AAEF,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,wDAAwD;AACxD,MAAM,UAAU,IAAI,CAAC,YAA2B,OAAO;IACrD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;YACzC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK;gBACpC,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM;oBACjC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACvB,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC;IACpC,CAAC,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IACjD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAC9D,CAAC,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,OAAO,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IAClD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,0CAA0C;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM;cACrD,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC,IAAI,QAAQ,GAAG,QAAQ,EAAE,CAAC;IAC5D,CAAC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,OAAO,GAAG,GAAG;IAC5D,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtE,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS;QAC3E,mDAAmD;QACnD,MAAM,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACjD,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC;IAC1C,CAAC,CAAC;AACJ,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,MAAM,CACpB,KAAK,GAAG,CAAC,EACT,YAAuC,YAAY;IAEnD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,SAAS,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAChE,MAAM,IAAI,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,EAAE,QAAQ,EAAE,IAAI,GAAG,QAAQ,EAAE,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,OAAO,CAAC,YAAuC,UAAU;IACvE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B;QAC1E,OAAO,EAAE,QAAQ,EAAE,QAAQ,IAAI,CAAC,IAAI,cAAc,GAAG,QAAQ,EAAE,CAAC;IAClE,CAAC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,QAAQ,CAAC,YAAY,GAAG,EAAE;IACxC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;QAClC,kEAAkE;QAClE,yEAAyE;QACzE,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC;QAChE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACrC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;QACrC,0BAA0B;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACnC,qEAAqE;QACrE,IAAI,SAAS,IAAI,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,GAAG,IAAI,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC;QACxD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,MAAM,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;YACjF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,YAAqB,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,MAAM,GAAG,GAAG;IACrC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE;QAChD,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAChC,IAAI,SAAS,GAAG,QAAQ;YAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACpD,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YAC3B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACrG,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAC,SAAS,GAAG,GAAG;IACpC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;QACxC,+CAA+C;QAC/C,MAAM,YAAY,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;QACpE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;QAE1C,kEAAkE;QAClE,IAAI,QAAQ,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,QAAQ,CAAC;YAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;YAChG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAqB,EAAE,CAAC;QACjH,CAAC;QAED,0CAA0C;QAC1C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG,GAAG,CAAC,CAAC;QAC3C,IAAI,SAAS,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;YACnC,MAAM,WAAW,GAAG,WAAW,CAAC;YAChC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;YAC9G,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAqB,EAAE,CAAC;QACnH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAO,GAAG,GAAG;IACpC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE;QACxC,2DAA2D;QAC3D,sDAAsD;QACtD,iCAAiC;QACjC,qDAAqD;QACrD,MAAM,YAAY,GAAG,QAAQ,GAAG,GAAG;YACjC,CAAC,CAAC,QAAQ,GAAG,GAAG;YAChB,CAAC,CAAC,QAAQ,GAAG,GAAG;gBACd,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,GAAG;gBACtB,CAAC,CAAC,CAAC,CAAC;QAER,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACrC,IAAI,SAAS,GAAG,YAAY,GAAG,OAAO,EAAE,CAAC;YACvC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC;YACtB,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC;YACtF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,YAAqB,EAAE,CAAC;QACnH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,GAAG,GAAG,EAAE,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,oCAAoC;AACpC,MAAM,CAAC,MAAM,YAAY,GAAuB,MAAM,EAAE,CAAC;AAEzD,qCAAqC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAuB,OAAO,EAAE,CAAC;AAE3D,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAuB,MAAM,EAAE,CAAC;AAEzD,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAuB,MAAM,EAAE,CAAC;AAEzD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,aAAa,GAAuB,OAAO,EAAE,CAAC;AAE3D,iDAAiD;AACjD,MAAM,CAAC,MAAM,cAAc,GAAuB,QAAQ,EAAE,CAAC;AAE7D,uCAAuC;AACvC,MAAM,CAAC,MAAM,gBAAgB,GAAuB,UAAU,EAAE,CAAC;AAEjE,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAuB,MAAM,EAAE,CAAC;AAEzD,sCAAsC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAuB,QAAQ,EAAE,CAAC;AAE3D,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,MAA0B;IAChD,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,sEAAsE;QACtE,mEAAmE;QACnE,uDAAuD;QACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAC3E,OAAO,QAAQ;YACb,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;YAC9E,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,KAAK,CAAC,CAAqB,EAAE,CAAqB;IAChE,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC;YACzB,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAAC,IAAwB,EAAE,GAAuB;IACvE,OAAO,CAAC,IAAI,EAAE,EAAE;QACd,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,SAAS,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,SAAS,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ;YACnD,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;SAC9B,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,kGAAkG;AAClG,MAAM,CAAC,MAAM,kBAAkB,GAA8D;IAC3F,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,QAAQ,EAAE,cAAc;IACxB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,YAAY;IACpB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,YAAY;IACpB,MAAM,EAAE,YAAY;CACrB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -7,6 +7,9 @@
7
7
  * @module
8
8
  */
9
9
  import type { BijouContext } from '@flyingrobots/bijou';
10
+ import type { Middleware } from './eventbus.js';
11
+ import type { RenderPipeline } from './pipeline/pipeline.js';
12
+ import type { ViewOutput } from './view-output.js';
10
13
  /** Represent a keyboard input event with key name and modifier flags. */
11
14
  export interface KeyMsg {
12
15
  /** Discriminant tag identifying this as a keyboard message. */
@@ -29,6 +32,13 @@ export interface ResizeMsg {
29
32
  /** New terminal height in rows. */
30
33
  readonly rows: number;
31
34
  }
35
+ /** Represent a system animation pulse event. */
36
+ export interface PulseMsg {
37
+ /** Discriminant tag identifying this as a pulse message. */
38
+ readonly type: 'pulse';
39
+ /** Time delta in seconds since the last pulse. */
40
+ readonly dt: number;
41
+ }
32
42
  /** Mouse button identifier. `"none"` is used for scroll and motion events without a button. */
33
43
  export type MouseButton = 'left' | 'middle' | 'right' | 'none';
34
44
  /** Mouse action type including press, release, move, and scroll directions. */
@@ -66,6 +76,13 @@ export declare function isKeyMsg(msg: unknown): msg is KeyMsg;
66
76
  * @returns `true` if `msg` is a `ResizeMsg`.
67
77
  */
68
78
  export declare function isResizeMsg(msg: unknown): msg is ResizeMsg;
79
+ /**
80
+ * Narrow an unknown message to {@link PulseMsg}.
81
+ *
82
+ * @param msg - Value to test.
83
+ * @returns `true` if `msg` is a `PulseMsg`.
84
+ */
85
+ export declare function isPulseMsg(msg: unknown): msg is PulseMsg;
69
86
  /**
70
87
  * Narrow an unknown message to {@link MouseMsg}.
71
88
  *
@@ -85,7 +102,17 @@ export type QuitSignal = typeof QUIT;
85
102
  *
86
103
  * @template M - Application message type.
87
104
  */
88
- export type Cmd<M> = (emit: (msg: M) => void) => Promise<M | QuitSignal | void>;
105
+ export type Cmd<M> = (emit: (msg: M) => void, capabilities: CmdCapabilities) => Promise<M | QuitSignal | void>;
106
+ /** Capabilities provided to commands by the runtime. */
107
+ export interface CmdCapabilities {
108
+ /**
109
+ * Subscribe to the system animation pulse.
110
+ * Returns a dispose function.
111
+ */
112
+ onPulse(handler: (dt: number) => void): {
113
+ dispose(): void;
114
+ };
115
+ }
89
116
  /**
90
117
  * TEA (The Elm Architecture) application interface.
91
118
  *
@@ -105,21 +132,25 @@ export interface App<Model, M = never> {
105
132
  /**
106
133
  * Handle a message and return the updated model with commands.
107
134
  *
108
- * @param msg - Incoming message (key, resize, mouse, or custom).
135
+ * @param msg - Incoming message (key, resize, mouse, pulse, or custom).
109
136
  * @param model - Current application state.
110
137
  * @returns A tuple of `[updatedModel, commands]`.
111
138
  */
112
- update(msg: KeyMsg | ResizeMsg | MouseMsg | M, model: Model): [Model, Cmd<M>[]];
139
+ update(msg: KeyMsg | ResizeMsg | MouseMsg | PulseMsg | M, model: Model): [Model, Cmd<M>[]];
113
140
  /**
114
- * Render the current model as a string for terminal display.
141
+ * Render the current model as a Surface, LayoutNode, or legacy string view.
115
142
  *
116
143
  * @param model - Current application state.
117
- * @returns Rendered string output.
144
+ * @returns Rendered Surface, Layout tree, or legacy string output.
118
145
  */
119
- view(model: Model): string;
146
+ view(model: Model): ViewOutput;
120
147
  }
121
- /** Configuration options for the TEA runtime. */
122
- export interface RunOptions {
148
+ /**
149
+ * Configuration options for the TEA runtime.
150
+ *
151
+ * @template M - Custom application message type.
152
+ */
153
+ export interface RunOptions<M = any> {
123
154
  /** Enter the alternate screen buffer on startup. */
124
155
  altScreen?: boolean;
125
156
  /** Hide the cursor on startup. */
@@ -128,5 +159,11 @@ export interface RunOptions {
128
159
  mouse?: boolean;
129
160
  /** Bijou context providing I/O and runtime ports. */
130
161
  ctx?: BijouContext;
162
+ /** Optional middleware to intercept or modify messages. */
163
+ middlewares?: Middleware<M>[];
164
+ /** Optional hook to extend the render pipeline with custom middleware. */
165
+ configurePipeline?: (pipeline: RenderPipeline) => void;
166
+ /** Optional BCSS stylesheet string. */
167
+ css?: string;
131
168
  }
132
169
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js CHANGED
@@ -25,6 +25,15 @@ export function isKeyMsg(msg) {
25
25
  export function isResizeMsg(msg) {
26
26
  return typeof msg === 'object' && msg !== null && 'type' in msg && msg.type === 'resize';
27
27
  }
28
+ /**
29
+ * Narrow an unknown message to {@link PulseMsg}.
30
+ *
31
+ * @param msg - Value to test.
32
+ * @returns `true` if `msg` is a `PulseMsg`.
33
+ */
34
+ export function isPulseMsg(msg) {
35
+ return typeof msg === 'object' && msg !== null && 'type' in msg && msg.type === 'pulse';
36
+ }
28
37
  /**
29
38
  * Narrow an unknown message to {@link MouseMsg}.
30
39
  *
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0DH,sBAAsB;AAEtB;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAc,CAAC,IAAI,KAAK,KAAK,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAiB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAgB,CAAC,IAAI,KAAK,OAAO,CAAC;AACxG,CAAC;AAED,mBAAmB;AAEnB,kEAAkE;AAClE,MAAM,CAAC,MAAM,IAAI,GAAkB,MAAM,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqEH,sBAAsB;AAEtB;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAc,CAAC,IAAI,KAAK,KAAK,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAiB,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC1G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAgB,CAAC,IAAI,KAAK,OAAO,CAAC;AACxG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,GAAY;IACrC,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAK,GAAgB,CAAC,IAAI,KAAK,OAAO,CAAC;AACxG,CAAC;AAED,mBAAmB;AAEnB,kEAAkE;AAClE,MAAM,CAAC,MAAM,IAAI,GAAkB,MAAM,CAAC,MAAM,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type LayoutNode, type Surface } from '@flyingrobots/bijou';
2
+ export type ViewOutput = Surface | LayoutNode | string;
3
+ export interface ViewportSize {
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export interface NormalizedViewOutput {
8
+ kind: 'surface' | 'layout' | 'string';
9
+ legacyString: boolean;
10
+ surface: Surface;
11
+ }
12
+ export declare function isSurfaceView(value: unknown): value is Surface;
13
+ export declare function normalizeViewOutput(output: ViewOutput, size: ViewportSize): NormalizedViewOutput;
14
+ export declare function wrapViewOutputAsLayoutRoot(output: ViewOutput, size: ViewportSize): LayoutNode;
15
+ //# sourceMappingURL=view-output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-output.d.ts","sourceRoot":"","sources":["../src/view-output.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,UAAU,EACf,KAAK,OAAO,EACb,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE9D;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,YAAY,GACjB,oBAAoB,CAsBtB;AAED,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,YAAY,GACjB,UAAU,CAqBZ"}
@@ -0,0 +1,53 @@
1
+ import { createSurface, paintLayoutNode, parseAnsiToSurface, } from '@flyingrobots/bijou';
2
+ export function isSurfaceView(value) {
3
+ return typeof value === 'object' && value !== null && 'cells' in value;
4
+ }
5
+ export function normalizeViewOutput(output, size) {
6
+ if (typeof output === 'string') {
7
+ return {
8
+ kind: 'string',
9
+ legacyString: true,
10
+ surface: parseAnsiToSurface(output, size.width, size.height),
11
+ };
12
+ }
13
+ if (isSurfaceView(output)) {
14
+ return {
15
+ kind: 'surface',
16
+ legacyString: false,
17
+ surface: output,
18
+ };
19
+ }
20
+ return {
21
+ kind: 'layout',
22
+ legacyString: false,
23
+ surface: paintViewLayout(output, size),
24
+ };
25
+ }
26
+ export function wrapViewOutputAsLayoutRoot(output, size) {
27
+ if (typeof output === 'string') {
28
+ return {
29
+ type: 'LegacyTextView',
30
+ classes: ['legacy-view'],
31
+ rect: { x: 0, y: 0, width: size.width, height: size.height },
32
+ children: [],
33
+ surface: parseAnsiToSurface(output, size.width, size.height),
34
+ };
35
+ }
36
+ if (isSurfaceView(output)) {
37
+ return {
38
+ type: 'SurfaceView',
39
+ rect: { x: 0, y: 0, width: output.width, height: output.height },
40
+ children: [],
41
+ surface: output,
42
+ };
43
+ }
44
+ return output;
45
+ }
46
+ function paintViewLayout(node, size) {
47
+ const width = Math.max(size.width, node.rect.x + node.rect.width, 0);
48
+ const height = Math.max(size.height, node.rect.y + node.rect.height, 0);
49
+ const surface = createSurface(width, height);
50
+ paintLayoutNode(surface, node);
51
+ return surface;
52
+ }
53
+ //# sourceMappingURL=view-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-output.js","sourceRoot":"","sources":["../src/view-output.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,eAAe,EACf,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAe7B,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,IAAkB;IAElB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,IAAI;YAClB,OAAO,EAAE,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,SAAS;YACf,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,MAAM;SAChB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,KAAK;QACnB,OAAO,EAAE,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAkB,EAClB,IAAkB;IAElB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,CAAC,aAAa,CAAC;YACxB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;YAC5D,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;SAC7D,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,OAAO;YACL,IAAI,EAAE,aAAa;YACnB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAChE,QAAQ,EAAE,EAAE;YACZ,OAAO,EAAE,MAAM;SAChB,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,IAAgB,EAAE,IAAkB;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC7C,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@flyingrobots/bijou-tui",
3
- "version": "1.8.0",
4
- "description": "TEA runtime for terminal UIs model/update/view with keyboard input, alt screen, and layout helpers.",
3
+ "version": "3.0.0",
4
+ "description": "TEA runtime for terminal UIs \u2014 model/update/view with keyboard input, alt screen, and layout helpers.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "main": "./dist/index.js",
@@ -24,7 +24,7 @@
24
24
  "lint": "tsc --noEmit"
25
25
  },
26
26
  "peerDependencies": {
27
- "@flyingrobots/bijou": "1.8.0"
27
+ "@flyingrobots/bijou": "3.0.0"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/node": "^22.0.0",