@flyingrobots/bijou-node 7.2.0 → 8.0.0-rc.1

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 (52) hide show
  1. package/dist/chalk-token-styler.d.ts +4 -0
  2. package/dist/chalk-token-styler.d.ts.map +1 -0
  3. package/dist/chalk-token-styler.js +79 -0
  4. package/dist/chalk-token-styler.js.map +1 -0
  5. package/dist/index.d.ts +1 -11
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -108
  8. package/dist/index.js.map +1 -1
  9. package/dist/node-context-selection.d.ts +11 -0
  10. package/dist/node-context-selection.d.ts.map +1 -0
  11. package/dist/node-context-selection.js +77 -0
  12. package/dist/node-context-selection.js.map +1 -0
  13. package/dist/node-context.d.ts +14 -0
  14. package/dist/node-context.d.ts.map +1 -0
  15. package/dist/node-context.js +30 -0
  16. package/dist/node-context.js.map +1 -0
  17. package/dist/recorder.d.ts +2 -40
  18. package/dist/recorder.d.ts.map +1 -1
  19. package/dist/recorder.js +1 -239
  20. package/dist/recorder.js.map +1 -1
  21. package/dist/recorder.part01.d.ts +56 -0
  22. package/dist/recorder.part01.d.ts.map +1 -0
  23. package/dist/recorder.part01.js +76 -0
  24. package/dist/recorder.part01.js.map +1 -0
  25. package/dist/recorder.part02.d.ts +5 -0
  26. package/dist/recorder.part02.d.ts.map +1 -0
  27. package/dist/recorder.part02.js +54 -0
  28. package/dist/recorder.part02.js.map +1 -0
  29. package/dist/recorder.part03.d.ts +6 -0
  30. package/dist/recorder.part03.d.ts.map +1 -0
  31. package/dist/recorder.part03.js +118 -0
  32. package/dist/recorder.part03.js.map +1 -0
  33. package/dist/style.d.ts.map +1 -1
  34. package/dist/style.js +4 -97
  35. package/dist/style.js.map +1 -1
  36. package/dist/worker/worker.d.ts +4 -76
  37. package/dist/worker/worker.d.ts.map +1 -1
  38. package/dist/worker/worker.js +3 -240
  39. package/dist/worker/worker.js.map +1 -1
  40. package/dist/worker/worker.part01.d.ts +59 -0
  41. package/dist/worker/worker.part01.d.ts.map +1 -0
  42. package/dist/worker/worker.part01.js +40 -0
  43. package/dist/worker/worker.part01.js.map +1 -0
  44. package/dist/worker/worker.part02.d.ts +12 -0
  45. package/dist/worker/worker.part02.d.ts.map +1 -0
  46. package/dist/worker/worker.part02.js +121 -0
  47. package/dist/worker/worker.part02.js.map +1 -0
  48. package/dist/worker/worker.part03.d.ts +13 -0
  49. package/dist/worker/worker.part03.d.ts.map +1 -0
  50. package/dist/worker/worker.part03.js +106 -0
  51. package/dist/worker/worker.part03.js.map +1 -0
  52. package/package.json +3 -3
package/dist/recorder.js CHANGED
@@ -1,240 +1,2 @@
1
- import { mkdirSync, writeFileSync } from 'node:fs';
2
- import { dirname } from 'node:path';
3
- import { createSurface, sanitizePositiveInt } from '@flyingrobots/bijou';
4
- import { runScript } from '@flyingrobots/bijou-tui';
5
- import { applyGifPalette, createGifEncoder, quantizeColors } from './gifenc-runtime.js';
6
- import { loadOledFont } from './oled-font.js';
7
- const FONT = loadOledFont();
8
- const GLYPH_MAP = new Map(FONT.lookup.map((char, index) => [char, index]));
9
- const DEFAULT_FOREGROUND = '#f5f7ff';
10
- const DEFAULT_BACKGROUND = '#0b1020';
11
- function isRecord(value) { return typeof value === 'object' && value !== null; }
12
- function isRgbTuple(value) {
13
- return Array.isArray(value) && value.length === 3 && value.every((item) => typeof item === 'number');
14
- }
15
- function resolvedColorRgb(ref) {
16
- if (!isRecord(ref) || ref['kind'] !== 'resolved-color' || !isRgbTuple(ref['rgb'])) {
17
- return undefined;
18
- }
19
- const [r, g, b] = ref['rgb'];
20
- return { r, g, b };
21
- }
22
- function normalizeRgb(rgb) {
23
- if (isRgbTuple(rgb)) {
24
- const [r, g, b] = rgb;
25
- return { r, g, b };
26
- }
27
- return rgb;
28
- }
29
- function resolvedColorHex(ref) {
30
- if (typeof ref === 'string')
31
- return ref;
32
- if (!isRecord(ref) || ref['kind'] !== 'resolved-color' || typeof ref['hex'] !== 'string') {
33
- return undefined;
34
- }
35
- return ref['hex'];
36
- }
37
- export async function recordDemoGif(spec) {
38
- const result = await runScript(spec.app, spec.steps, {
39
- ctx: spec.ctx,
40
- css: spec.css,
41
- });
42
- return writeSurfaceGif({
43
- outputPath: spec.outputPath,
44
- frames: result.frames,
45
- frameDelayMs: spec.frameDelayMs,
46
- cellWidth: spec.cellWidth,
47
- cellHeight: spec.cellHeight,
48
- foreground: spec.foreground,
49
- background: spec.background,
50
- });
51
- }
52
- export function writeSurfaceGif(options) {
53
- if (options.frames.length === 0) {
54
- throw new Error('writeSurfaceGif() requires at least one frame');
55
- }
56
- const rasterOptions = {
57
- cellWidth: sanitizePositiveInt(options.cellWidth, 8),
58
- cellHeight: sanitizePositiveInt(options.cellHeight, 10),
59
- foreground: options.foreground ?? DEFAULT_FOREGROUND,
60
- background: options.background ?? DEFAULT_BACKGROUND,
61
- };
62
- const width = Math.max(...options.frames.map((frame) => frame.width));
63
- const height = Math.max(...options.frames.map((frame) => frame.height));
64
- const frames = options.frames
65
- .map((frame) => normalizeSurfaceFrame(frame, width, height))
66
- .map((frame) => rasterizeSurface(frame, rasterOptions));
67
- const palette = quantizeColors(joinFrames(frames), 256, { format: 'rgb565' });
68
- const gif = createGifEncoder();
69
- const delay = Math.max(2, Math.round(sanitizePositiveInt(options.frameDelayMs, 90) / 10));
70
- for (const frame of frames) {
71
- const indexed = applyGifPalette(frame, palette);
72
- gif.writeFrame(indexed, width * rasterOptions.cellWidth, height * rasterOptions.cellHeight, {
73
- palette,
74
- delay,
75
- });
76
- }
77
- gif.finish();
78
- mkdirSync(dirname(options.outputPath), { recursive: true });
79
- writeFileSync(options.outputPath, Buffer.from(gif.bytes()));
80
- return {
81
- outputPath: options.outputPath,
82
- frames: frames.length,
83
- width: width * rasterOptions.cellWidth,
84
- height: height * rasterOptions.cellHeight,
85
- };
86
- }
87
- export function rasterizeSurface(surface, options) {
88
- const cellWidth = sanitizePositiveInt(options?.cellWidth, 8);
89
- const cellHeight = sanitizePositiveInt(options?.cellHeight, 10);
90
- const foreground = options?.foreground ?? DEFAULT_FOREGROUND;
91
- const background = options?.background ?? DEFAULT_BACKGROUND;
92
- const width = surface.width * cellWidth;
93
- const height = surface.height * cellHeight;
94
- const rgba = new Uint8Array(width * height * 4);
95
- for (let y = 0; y < surface.height; y++) {
96
- for (let x = 0; x < surface.width; x++) {
97
- drawCell(rgba, width, height, x, y, cellWidth, cellHeight, surface.get(x, y), foreground, background);
98
- }
99
- }
100
- return rgba;
101
- }
102
- function drawCell(rgba, width, height, cellX, cellY, cellWidth, cellHeight, cell, fallbackForeground, fallbackBackground) {
103
- const modifiers = new Set(cell.modifiers ?? []);
104
- const fgHex = resolvedColorHex(cell.fg);
105
- const bgHex = resolvedColorHex(cell.bg);
106
- let fg = normalizeRgb(cell.fgRGB ?? resolvedColorRgb(cell.fg) ?? parseHex(fgHex ?? fallbackForeground));
107
- let bg = normalizeRgb(cell.bgRGB ?? resolvedColorRgb(cell.bg) ?? parseHex(bgHex ?? fallbackBackground));
108
- if (modifiers.has('inverse')) {
109
- [fg, bg] = [bg, fg];
110
- }
111
- if (modifiers.has('dim')) {
112
- fg = mixRgb(fg, bg, 0.45);
113
- }
114
- const pixelX = cellX * cellWidth;
115
- const pixelY = cellY * cellHeight;
116
- fillRect(rgba, width, height, pixelX, pixelY, cellWidth, cellHeight, bg);
117
- if (cell.empty || cell.char === ' ') {
118
- return;
119
- }
120
- const drawn = drawSpecialGlyph(rgba, width, height, pixelX, pixelY, cellWidth, cellHeight, cell.char, fg);
121
- if (!drawn) {
122
- drawBitmapGlyph(rgba, width, height, pixelX + 1, pixelY + 1, cell.char, fg);
123
- }
124
- if (modifiers.has('bold')) {
125
- const boldDrawn = drawSpecialGlyph(rgba, width, height, pixelX + 1, pixelY, cellWidth, cellHeight, cell.char, fg);
126
- if (!boldDrawn) {
127
- drawBitmapGlyph(rgba, width, height, pixelX + 2, pixelY + 1, cell.char, fg);
128
- }
129
- }
130
- if (modifiers.has('underline')) {
131
- fillRect(rgba, width, height, pixelX + 1, pixelY + cellHeight - 2, cellWidth - 2, 1, fg);
132
- }
133
- if (modifiers.has('strike')) {
134
- fillRect(rgba, width, height, pixelX + 1, pixelY + Math.floor(cellHeight / 2), cellWidth - 2, 1, fg);
135
- }
136
- }
137
- function drawBitmapGlyph(rgba, width, height, x, y, char, color) {
138
- const glyphIndex = GLYPH_MAP.get(char);
139
- if (glyphIndex == null) {
140
- fillRect(rgba, width, height, x + 1, y + 2, 3, 3, color);
141
- return;
142
- }
143
- const offset = glyphIndex * FONT.width;
144
- for (let col = 0; col < FONT.width; col++) {
145
- const bits = FONT.fontData[offset + col] ?? 0;
146
- for (let row = 0; row < FONT.height; row++) {
147
- if (((bits >> row) & 1) === 1) {
148
- setPixel(rgba, width, height, x + col, y + row, color);
149
- }
150
- }
151
- }
152
- }
153
- function drawSpecialGlyph(rgba, width, height, x, y, cellWidth, cellHeight, char, color) {
154
- const midX = x + Math.floor(cellWidth / 2);
155
- const midY = y + Math.floor(cellHeight / 2);
156
- const right = x + cellWidth - 2;
157
- const bottom = y + cellHeight - 2;
158
- switch (char) {
159
- case '─':
160
- fillRect(rgba, width, height, x + 1, midY, cellWidth - 2, 1, color);
161
- return true;
162
- case '│':
163
- fillRect(rgba, width, height, midX, y + 1, 1, cellHeight - 2, color);
164
- return true;
165
- case '┌':
166
- fillRect(rgba, width, height, midX, midY, right - midX + 1, 1, color);
167
- fillRect(rgba, width, height, midX, midY, 1, bottom - midY + 1, color);
168
- return true;
169
- case '┐':
170
- fillRect(rgba, width, height, x + 1, midY, midX - x, 1, color);
171
- fillRect(rgba, width, height, midX, midY, 1, bottom - midY + 1, color);
172
- return true;
173
- case '└':
174
- fillRect(rgba, width, height, midX, y + 1, 1, midY - y, color);
175
- fillRect(rgba, width, height, midX, midY, right - midX + 1, 1, color);
176
- return true;
177
- case '┘':
178
- fillRect(rgba, width, height, x + 1, midY, midX - x, 1, color);
179
- fillRect(rgba, width, height, midX, y + 1, 1, midY - y, color);
180
- return true;
181
- case '▎':
182
- fillRect(rgba, width, height, x + 1, y + 1, 1, cellHeight - 2, color);
183
- return true;
184
- default:
185
- return false;
186
- }
187
- }
188
- function fillRect(rgba, width, height, x, y, w, h, color) {
189
- for (let row = 0; row < h; row++) {
190
- for (let col = 0; col < w; col++) {
191
- setPixel(rgba, width, height, x + col, y + row, color);
192
- }
193
- }
194
- }
195
- function setPixel(rgba, width, height, x, y, color) {
196
- if (x < 0 || y < 0 || x >= width || y >= height)
197
- return;
198
- const idx = (y * width + x) * 4;
199
- rgba[idx] = color.r;
200
- rgba[idx + 1] = color.g;
201
- rgba[idx + 2] = color.b;
202
- rgba[idx + 3] = 255;
203
- }
204
- function joinFrames(frames) {
205
- const total = frames.reduce((sum, frame) => sum + frame.length, 0);
206
- const joined = new Uint8Array(total);
207
- let offset = 0;
208
- for (const frame of frames) {
209
- joined.set(frame, offset);
210
- offset += frame.length;
211
- }
212
- return joined;
213
- }
214
- function normalizeSurfaceFrame(surface, width, height) {
215
- if (surface.width === width && surface.height === height) {
216
- return surface;
217
- }
218
- const normalized = createSurface(width, height);
219
- normalized.blit(surface, 0, 0);
220
- return normalized;
221
- }
222
- function parseHex(hex) {
223
- const normalized = hex.replace('#', '');
224
- if (normalized.length !== 6)
225
- return { r: 255, g: 255, b: 255 };
226
- return {
227
- r: parseInt(normalized.slice(0, 2), 16),
228
- g: parseInt(normalized.slice(2, 4), 16),
229
- b: parseInt(normalized.slice(4, 6), 16),
230
- };
231
- }
232
- function mixRgb(a, b, ratio) {
233
- const t = Math.max(0, Math.min(1, ratio));
234
- return {
235
- r: Math.round(a.r * (1 - t) + b.r * t),
236
- g: Math.round(a.g * (1 - t) + b.g * t),
237
- b: Math.round(a.b * (1 - t) + b.b * t),
238
- };
239
- }
1
+ export { rasterizeSurface, recordDemoGif, writeSurfaceGif } from './recorder.part03.js';
240
2
  //# sourceMappingURL=recorder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { type BijouContext, type Surface } from '@flyingrobots/bijou';
2
+ import type { App, ScriptStep } from '@flyingrobots/bijou-tui';
3
+ declare const FONT: import("./oled-font.js").OledFont;
4
+ declare const GLYPH_MAP: Map<string, number>;
5
+ declare const DEFAULT_FOREGROUND = "#f5f7ff";
6
+ declare const DEFAULT_BACKGROUND = "#0b1020";
7
+ interface Rgb {
8
+ r: number;
9
+ g: number;
10
+ b: number;
11
+ }
12
+ declare function resolvedColorRgb(ref: unknown): Rgb | undefined;
13
+ declare function normalizeRgb(rgb: Rgb | readonly [number, number, number]): Rgb;
14
+ declare function resolvedColorHex(ref: unknown): string | undefined;
15
+ export interface NativeDemoSpec<Model, M = never> {
16
+ name: string;
17
+ app: App<Model, M>;
18
+ steps: ScriptStep<M>[];
19
+ outputPath: string;
20
+ ctx?: BijouContext;
21
+ css?: string;
22
+ frameDelayMs?: number;
23
+ cellWidth?: number;
24
+ cellHeight?: number;
25
+ foreground?: string;
26
+ background?: string;
27
+ }
28
+ export interface RecorderResult {
29
+ outputPath: string;
30
+ frames: number;
31
+ width: number;
32
+ height: number;
33
+ }
34
+ export interface SurfaceGifOptions {
35
+ outputPath: string;
36
+ frames: Surface[];
37
+ frameDelayMs?: number;
38
+ cellWidth?: number;
39
+ cellHeight?: number;
40
+ foreground?: string;
41
+ background?: string;
42
+ }
43
+ interface RasterizeOptions {
44
+ cellWidth: number;
45
+ cellHeight: number;
46
+ foreground: string;
47
+ background: string;
48
+ }
49
+ declare function normalizeSurfaceFrame(surface: Surface, width: number, height: number): Surface;
50
+ declare function parseHex(hex: string): Rgb;
51
+ declare function mixRgb(a: Rgb, b: Rgb, ratio: number): Rgb;
52
+ declare function setPixel(rgba: Uint8Array, width: number, height: number, x: number, y: number, color: Rgb): void;
53
+ declare function fillRect(rgba: Uint8Array, width: number, height: number, x: number, y: number, w: number, h: number, color: Rgb): void;
54
+ export type { RasterizeOptions, Rgb };
55
+ export { DEFAULT_BACKGROUND, DEFAULT_FOREGROUND, FONT, GLYPH_MAP, fillRect, mixRgb, normalizeRgb, normalizeSurfaceFrame, parseHex, resolvedColorHex, resolvedColorRgb, setPixel };
56
+ //# sourceMappingURL=recorder.part01.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.part01.d.ts","sourceRoot":"","sources":["../src/recorder.part01.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { createSurface } from '@flyingrobots/bijou';
2
+ import { loadOledFont } from './oled-font.js';
3
+ const FONT = loadOledFont();
4
+ const GLYPH_MAP = new Map(FONT.lookup.map((char, index) => [char, index]));
5
+ const DEFAULT_FOREGROUND = '#f5f7ff';
6
+ const DEFAULT_BACKGROUND = '#0b1020';
7
+ function isRecord(value) { return typeof value === 'object' && value !== null; }
8
+ function isRgbTuple(value) {
9
+ return Array.isArray(value) && value.length === 3 && value.every((item) => typeof item === 'number');
10
+ }
11
+ function resolvedColorRgb(ref) {
12
+ if (!isRecord(ref) || ref['kind'] !== 'resolved-color' || !isRgbTuple(ref['rgb'])) {
13
+ return undefined;
14
+ }
15
+ const [r, g, b] = ref['rgb'];
16
+ return { r, g, b };
17
+ }
18
+ function normalizeRgb(rgb) {
19
+ if (isRgbTuple(rgb)) {
20
+ const [r, g, b] = rgb;
21
+ return { r, g, b };
22
+ }
23
+ return rgb;
24
+ }
25
+ function resolvedColorHex(ref) {
26
+ if (typeof ref === 'string')
27
+ return ref;
28
+ if (!isRecord(ref) || ref['kind'] !== 'resolved-color' || typeof ref['hex'] !== 'string') {
29
+ return undefined;
30
+ }
31
+ return ref['hex'];
32
+ }
33
+ function normalizeSurfaceFrame(surface, width, height) {
34
+ if (surface.width === width && surface.height === height) {
35
+ return surface;
36
+ }
37
+ const normalized = createSurface(width, height);
38
+ normalized.blit(surface, 0, 0);
39
+ return normalized;
40
+ }
41
+ function parseHex(hex) {
42
+ const normalized = hex.replace('#', '');
43
+ if (normalized.length !== 6)
44
+ return { r: 255, g: 255, b: 255 };
45
+ return {
46
+ r: parseInt(normalized.slice(0, 2), 16),
47
+ g: parseInt(normalized.slice(2, 4), 16),
48
+ b: parseInt(normalized.slice(4, 6), 16),
49
+ };
50
+ }
51
+ function mixRgb(a, b, ratio) {
52
+ const t = Math.max(0, Math.min(1, ratio));
53
+ return {
54
+ r: Math.round(a.r * (1 - t) + b.r * t),
55
+ g: Math.round(a.g * (1 - t) + b.g * t),
56
+ b: Math.round(a.b * (1 - t) + b.b * t),
57
+ };
58
+ }
59
+ function setPixel(rgba, width, height, x, y, color) {
60
+ if (x < 0 || y < 0 || x >= width || y >= height)
61
+ return;
62
+ const idx = (y * width + x) * 4;
63
+ rgba[idx] = color.r;
64
+ rgba[idx + 1] = color.g;
65
+ rgba[idx + 2] = color.b;
66
+ rgba[idx + 3] = 255;
67
+ }
68
+ function fillRect(rgba, width, height, x, y, w, h, color) {
69
+ for (let row = 0; row < h; row++) {
70
+ for (let col = 0; col < w; col++) {
71
+ setPixel(rgba, width, height, x + col, y + row, color);
72
+ }
73
+ }
74
+ }
75
+ export { DEFAULT_BACKGROUND, DEFAULT_FOREGROUND, FONT, GLYPH_MAP, fillRect, mixRgb, normalizeRgb, normalizeSurfaceFrame, parseHex, resolvedColorHex, resolvedColorRgb, setPixel };
76
+ //# sourceMappingURL=recorder.part01.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.part01.js","sourceRoot":"","sources":["../src/recorder.part01.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Rgb } from './recorder.part01.js';
2
+ declare function drawSpecialGlyph(rgba: Uint8Array, width: number, height: number, x: number, y: number, cellWidth: number, cellHeight: number, char: string, color: Rgb): boolean;
3
+ declare function drawBitmapGlyph(rgba: Uint8Array, width: number, height: number, x: number, y: number, char: string, color: Rgb): void;
4
+ export { drawBitmapGlyph, drawSpecialGlyph };
5
+ //# sourceMappingURL=recorder.part02.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.part02.d.ts","sourceRoot":"","sources":["../src/recorder.part02.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAEhD,iBAAS,gBAAgB,CACvB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,GACT,OAAO,CAmCT;AAED,iBAAS,eAAe,CACtB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,GACT,IAAI,CAgBN;AAED,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,54 @@
1
+ import { FONT, GLYPH_MAP, fillRect, setPixel } from './recorder.part01.js';
2
+ function drawSpecialGlyph(rgba, width, height, x, y, cellWidth, cellHeight, char, color) {
3
+ const midX = x + Math.floor(cellWidth / 2);
4
+ const midY = y + Math.floor(cellHeight / 2);
5
+ const right = x + cellWidth - 2;
6
+ const bottom = y + cellHeight - 2;
7
+ switch (char) {
8
+ case '─':
9
+ fillRect(rgba, width, height, x + 1, midY, cellWidth - 2, 1, color);
10
+ return true;
11
+ case '│':
12
+ fillRect(rgba, width, height, midX, y + 1, 1, cellHeight - 2, color);
13
+ return true;
14
+ case '┌':
15
+ fillRect(rgba, width, height, midX, midY, right - midX + 1, 1, color);
16
+ fillRect(rgba, width, height, midX, midY, 1, bottom - midY + 1, color);
17
+ return true;
18
+ case '┐':
19
+ fillRect(rgba, width, height, x + 1, midY, midX - x, 1, color);
20
+ fillRect(rgba, width, height, midX, midY, 1, bottom - midY + 1, color);
21
+ return true;
22
+ case '└':
23
+ fillRect(rgba, width, height, midX, y + 1, 1, midY - y, color);
24
+ fillRect(rgba, width, height, midX, midY, right - midX + 1, 1, color);
25
+ return true;
26
+ case '┘':
27
+ fillRect(rgba, width, height, x + 1, midY, midX - x, 1, color);
28
+ fillRect(rgba, width, height, midX, y + 1, 1, midY - y, color);
29
+ return true;
30
+ case '▎':
31
+ fillRect(rgba, width, height, x + 1, y + 1, 1, cellHeight - 2, color);
32
+ return true;
33
+ default:
34
+ return false;
35
+ }
36
+ }
37
+ function drawBitmapGlyph(rgba, width, height, x, y, char, color) {
38
+ const glyphIndex = GLYPH_MAP.get(char);
39
+ if (glyphIndex == null) {
40
+ fillRect(rgba, width, height, x + 1, y + 2, 3, 3, color);
41
+ return;
42
+ }
43
+ const offset = glyphIndex * FONT.width;
44
+ for (let col = 0; col < FONT.width; col++) {
45
+ const bits = FONT.fontData[offset + col] ?? 0;
46
+ for (let row = 0; row < FONT.height; row++) {
47
+ if (((bits >> row) & 1) === 1) {
48
+ setPixel(rgba, width, height, x + col, y + row, color);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ export { drawBitmapGlyph, drawSpecialGlyph };
54
+ //# sourceMappingURL=recorder.part02.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.part02.js","sourceRoot":"","sources":["../src/recorder.part02.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type Surface } from '@flyingrobots/bijou';
2
+ import type { NativeDemoSpec, RasterizeOptions, RecorderResult, SurfaceGifOptions } from './recorder.part01.js';
3
+ export declare function rasterizeSurface(surface: Surface, options?: Partial<RasterizeOptions>): Uint8Array;
4
+ export declare function writeSurfaceGif(options: SurfaceGifOptions): RecorderResult;
5
+ export declare function recordDemoGif<Model, M = never>(spec: NativeDemoSpec<Model, M>): Promise<RecorderResult>;
6
+ //# sourceMappingURL=recorder.part03.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.part03.d.ts","sourceRoot":"","sources":["../src/recorder.part03.ts"],"names":[],"mappings":"AAEA,OAAO,EAAuB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAIxE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAuDhH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAgBlG;AAaD,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAuC1E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,EAClD,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7B,OAAO,CAAC,cAAc,CAAC,CAezB"}
@@ -0,0 +1,118 @@
1
+ import { mkdirSync, writeFileSync } from 'node:fs';
2
+ import { dirname } from 'node:path';
3
+ import { sanitizePositiveInt } from '@flyingrobots/bijou';
4
+ import { runScript } from '@flyingrobots/bijou-tui';
5
+ import { applyGifPalette, createGifEncoder, quantizeColors } from './gifenc-runtime.js';
6
+ import { DEFAULT_BACKGROUND, DEFAULT_FOREGROUND, fillRect, mixRgb, normalizeRgb, normalizeSurfaceFrame, parseHex, resolvedColorHex, resolvedColorRgb } from './recorder.part01.js';
7
+ import { drawBitmapGlyph, drawSpecialGlyph } from './recorder.part02.js';
8
+ function drawCell(rgba, width, height, cellX, cellY, cellWidth, cellHeight, cell, fallbackForeground, fallbackBackground) {
9
+ const modifiers = new Set(cell.modifiers ?? []);
10
+ const fgHex = resolvedColorHex(cell.fg);
11
+ const bgHex = resolvedColorHex(cell.bg);
12
+ let fg = normalizeRgb(cell.fgRGB ?? resolvedColorRgb(cell.fg) ?? parseHex(fgHex ?? fallbackForeground));
13
+ let bg = normalizeRgb(cell.bgRGB ?? resolvedColorRgb(cell.bg) ?? parseHex(bgHex ?? fallbackBackground));
14
+ if (modifiers.has('inverse')) {
15
+ [fg, bg] = [bg, fg];
16
+ }
17
+ if (modifiers.has('dim')) {
18
+ fg = mixRgb(fg, bg, 0.45);
19
+ }
20
+ const pixelX = cellX * cellWidth;
21
+ const pixelY = cellY * cellHeight;
22
+ fillRect(rgba, width, height, pixelX, pixelY, cellWidth, cellHeight, bg);
23
+ if (cell.empty || cell.char === ' ') {
24
+ return;
25
+ }
26
+ const drawn = drawSpecialGlyph(rgba, width, height, pixelX, pixelY, cellWidth, cellHeight, cell.char, fg);
27
+ if (!drawn) {
28
+ drawBitmapGlyph(rgba, width, height, pixelX + 1, pixelY + 1, cell.char, fg);
29
+ }
30
+ if (modifiers.has('bold')) {
31
+ const boldDrawn = drawSpecialGlyph(rgba, width, height, pixelX + 1, pixelY, cellWidth, cellHeight, cell.char, fg);
32
+ if (!boldDrawn) {
33
+ drawBitmapGlyph(rgba, width, height, pixelX + 2, pixelY + 1, cell.char, fg);
34
+ }
35
+ }
36
+ if (modifiers.has('underline')) {
37
+ fillRect(rgba, width, height, pixelX + 1, pixelY + cellHeight - 2, cellWidth - 2, 1, fg);
38
+ }
39
+ if (modifiers.has('strike')) {
40
+ fillRect(rgba, width, height, pixelX + 1, pixelY + Math.floor(cellHeight / 2), cellWidth - 2, 1, fg);
41
+ }
42
+ }
43
+ export function rasterizeSurface(surface, options) {
44
+ const cellWidth = sanitizePositiveInt(options?.cellWidth, 8);
45
+ const cellHeight = sanitizePositiveInt(options?.cellHeight, 10);
46
+ const foreground = options?.foreground ?? DEFAULT_FOREGROUND;
47
+ const background = options?.background ?? DEFAULT_BACKGROUND;
48
+ const width = surface.width * cellWidth;
49
+ const height = surface.height * cellHeight;
50
+ const rgba = new Uint8Array(width * height * 4);
51
+ for (let y = 0; y < surface.height; y++) {
52
+ for (let x = 0; x < surface.width; x++) {
53
+ drawCell(rgba, width, height, x, y, cellWidth, cellHeight, surface.get(x, y), foreground, background);
54
+ }
55
+ }
56
+ return rgba;
57
+ }
58
+ function joinFrames(frames) {
59
+ const total = frames.reduce((sum, frame) => sum + frame.length, 0);
60
+ const joined = new Uint8Array(total);
61
+ let offset = 0;
62
+ for (const frame of frames) {
63
+ joined.set(frame, offset);
64
+ offset += frame.length;
65
+ }
66
+ return joined;
67
+ }
68
+ export function writeSurfaceGif(options) {
69
+ if (options.frames.length === 0) {
70
+ throw new Error('writeSurfaceGif() requires at least one frame');
71
+ }
72
+ const rasterOptions = {
73
+ cellWidth: sanitizePositiveInt(options.cellWidth, 8),
74
+ cellHeight: sanitizePositiveInt(options.cellHeight, 10),
75
+ foreground: options.foreground ?? DEFAULT_FOREGROUND,
76
+ background: options.background ?? DEFAULT_BACKGROUND,
77
+ };
78
+ const width = Math.max(...options.frames.map((frame) => frame.width));
79
+ const height = Math.max(...options.frames.map((frame) => frame.height));
80
+ const frames = options.frames
81
+ .map((frame) => normalizeSurfaceFrame(frame, width, height))
82
+ .map((frame) => rasterizeSurface(frame, rasterOptions));
83
+ const palette = quantizeColors(joinFrames(frames), 256, { format: 'rgb565' });
84
+ const gif = createGifEncoder();
85
+ const delay = Math.max(2, Math.round(sanitizePositiveInt(options.frameDelayMs, 90) / 10));
86
+ for (const frame of frames) {
87
+ const indexed = applyGifPalette(frame, palette);
88
+ gif.writeFrame(indexed, width * rasterOptions.cellWidth, height * rasterOptions.cellHeight, {
89
+ palette,
90
+ delay,
91
+ });
92
+ }
93
+ gif.finish();
94
+ mkdirSync(dirname(options.outputPath), { recursive: true });
95
+ writeFileSync(options.outputPath, Buffer.from(gif.bytes()));
96
+ return {
97
+ outputPath: options.outputPath,
98
+ frames: frames.length,
99
+ width: width * rasterOptions.cellWidth,
100
+ height: height * rasterOptions.cellHeight,
101
+ };
102
+ }
103
+ export async function recordDemoGif(spec) {
104
+ const result = await runScript(spec.app, spec.steps, {
105
+ ctx: spec.ctx,
106
+ css: spec.css,
107
+ });
108
+ return writeSurfaceGif({
109
+ outputPath: spec.outputPath,
110
+ frames: result.frames,
111
+ frameDelayMs: spec.frameDelayMs,
112
+ cellWidth: spec.cellWidth,
113
+ cellHeight: spec.cellHeight,
114
+ foreground: spec.foreground,
115
+ background: spec.background,
116
+ });
117
+ }
118
+ //# sourceMappingURL=recorder.part03.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recorder.part03.js","sourceRoot":"","sources":["../src/recorder.part03.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,qBAAqB,CAAC;AAEjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qFAAqF;IACrF,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAyKvE"}
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,qBAAqB,CAAC;AAGjE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qFAAqF;IACrF,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,SAAS,CAmFvE"}