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