zx-kit 0.9.1 → 0.10.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.
package/dist/ay.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ /** ZX Spectrum 128K / Melodik AY-3-8912 master clock. */
2
+ export declare const AY_CLOCK = 1773400;
3
+ /**
4
+ * Hardware-accurate logarithmic amplitude table.
5
+ * The real chip uses ≈ √2 steps per level (≈ 3 dB).
6
+ * Index 0 = silence, index 15 = full amplitude.
7
+ */
8
+ export declare const AY_VOL: readonly number[];
9
+ export type AYChannel = 'A' | 'B' | 'C';
10
+ /** One note in an AY sequencer pattern. */
11
+ export interface AYNote {
12
+ /** Frequency in Hz. 0 = rest (silence). */
13
+ freq: number;
14
+ /** Duration in milliseconds. */
15
+ dur: number;
16
+ /** Amplitude 0–15. Default 15. Ignored when envShape is set. */
17
+ vol?: number;
18
+ /** Mix LFSR noise alongside the tone. Default false. */
19
+ noise?: boolean;
20
+ /** Noise period 1–31 (maps to R6). Higher = darker texture. Default 8. */
21
+ noisePeriod?: number;
22
+ /** Envelope shape 0–15 (R13). When set, vol is ignored. */
23
+ envShape?: number;
24
+ /** Envelope cycle duration in ms (one ramp: 0→15 or 15→0). Default = note duration. */
25
+ envCycleDurMs?: number;
26
+ }
27
+ /** Real-time AY chip handle returned by `createAY()`. */
28
+ export interface AYChip {
29
+ /** Set channel tone + volume (vol 0–15). freq ≤ 0 silences the tone generator. */
30
+ tone(ch: AYChannel, freq: number, vol?: number): void;
31
+ /** Enable LFSR noise on a channel. period 1–31 (R6): higher = darker texture. */
32
+ enableNoise(ch: AYChannel, period?: number): void;
33
+ /** Disable noise on a channel. */
34
+ disableNoise(ch: AYChannel): void;
35
+ /**
36
+ * Apply an AY envelope to a channel's amplitude.
37
+ * shape 0–15 maps to the 16 AY-3-8912 envelope shapes (see `AY_ENVELOPE_SHAPES`).
38
+ * cycleDurMs: time in ms for one ramp (15→0 or 0→15).
39
+ * Repeating shapes are pre-scheduled for 32 cycles — call again to extend.
40
+ */
41
+ envelope(ch: AYChannel, shape: number, cycleDurMs: number): void;
42
+ /** Fade out a channel (tone + noise). */
43
+ mute(ch: AYChannel): void;
44
+ /** Fade out all three channels. */
45
+ muteAll(): void;
46
+ /** Stop all oscillators / sources and release Web Audio nodes. */
47
+ stop(): void;
48
+ }
49
+ /**
50
+ * Human-readable names for the 16 AY envelope shapes.
51
+ * Index = R13 value. Useful for documentation and tooling.
52
+ */
53
+ export declare const AY_ENVELOPE_SHAPES: readonly ["\\_ ", "\\_ ", "\\_ ", "\\_ ", "/_ ", "/_ ", "/_ ", "/_ ", "\\\\", "\\_", "\\/\\/", "\\‾", "//", "/‾", "/\\/\\", "/_"];
54
+ /**
55
+ * Creates three persistent AY channels wired to the zx-kit master gain.
56
+ * Each channel has independent tone (square wave), noise (LFSR), and envelope.
57
+ *
58
+ * Must be called inside a user-gesture handler due to browser autoplay policy.
59
+ *
60
+ * @example
61
+ * button.addEventListener('click', () => {
62
+ * const ay = createAY()
63
+ * ay.tone('A', 440, 12)
64
+ * ay.enableNoise('B', 16)
65
+ * ay.envelope('C', 10, 400) // shape 10 = \/\/ triangle
66
+ * ay.tone('C', 220, 0) // tone silent; only envelope-modulated noise
67
+ * })
68
+ */
69
+ export declare function createAY(): AYChip;
70
+ /**
71
+ * Pre-schedules up to three independent AY note arrays on the shared AudioContext.
72
+ * All channels start at the same wall-clock time; shorter channels finish earlier.
73
+ * Fire-and-forget — no handle returned.
74
+ *
75
+ * Each `AYNote` may optionally mix in LFSR noise and/or apply an envelope shape.
76
+ *
77
+ * @example
78
+ * playAY({
79
+ * a: [{ freq: 440, dur: 300 }, { freq: 523, dur: 300, envShape: 12, envCycleDurMs: 150 }],
80
+ * b: [{ freq: 110, dur: 200, noise: true, noisePeriod: 16 }],
81
+ * c: [{ freq: 0, dur: 600, noise: true, noisePeriod: 4, envShape: 8, envCycleDurMs: 100 }],
82
+ * })
83
+ */
84
+ export declare function playAY(pattern: {
85
+ a?: AYNote[];
86
+ b?: AYNote[];
87
+ c?: AYNote[];
88
+ }, startDelay?: number): void;
89
+ //# sourceMappingURL=ay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ay.d.ts","sourceRoot":"","sources":["../src/ay.ts"],"names":[],"mappings":"AAIA,yDAAyD;AACzD,eAAO,MAAM,QAAQ,UAAY,CAAA;AAEjC;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAGnC,CAAA;AAWD,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAEvC,2CAA2C;AAC3C,MAAM,WAAW,MAAM;IACrB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,yDAAyD;AACzD,MAAM,WAAW,MAAM;IACrB,kFAAkF;IAClF,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrD,kFAAkF;IAClF,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjD,kCAAkC;IAClC,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAA;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAChE,yCAAyC;IACzC,IAAI,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAA;IACzB,mCAAmC;IACnC,OAAO,IAAI,IAAI,CAAA;IACf,kEAAkE;IAClE,IAAI,IAAI,IAAI,CAAA;CACb;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,mIAWrB,CAAA;AAwFV;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CA6GjC;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACrD,UAAU,SAAI,GACb,IAAI,CA+EN"}
package/dist/ay.js ADDED
@@ -0,0 +1,300 @@
1
+ import { initAudio, getMasterGain } from './audio.js';
2
+ // ─── Hardware constants ────────────────────────────────────────────────────────
3
+ /** ZX Spectrum 128K / Melodik AY-3-8912 master clock. */
4
+ export const AY_CLOCK = 1_773_400;
5
+ /**
6
+ * Hardware-accurate logarithmic amplitude table.
7
+ * The real chip uses ≈ √2 steps per level (≈ 3 dB).
8
+ * Index 0 = silence, index 15 = full amplitude.
9
+ */
10
+ export const AY_VOL = [
11
+ 0, 0.0089, 0.0118, 0.0156, 0.0211, 0.0289, 0.0403, 0.0549,
12
+ 0.0744, 0.1060, 0.1518, 0.2139, 0.2969, 0.4259, 0.6098, 1.0,
13
+ ];
14
+ // Headroom so three simultaneous channels don't clip the master bus.
15
+ const CH_GAIN = 0.28;
16
+ function ayVol(level) {
17
+ return AY_VOL[Math.max(0, Math.min(15, level))] * CH_GAIN;
18
+ }
19
+ /**
20
+ * Human-readable names for the 16 AY envelope shapes.
21
+ * Index = R13 value. Useful for documentation and tooling.
22
+ */
23
+ export const AY_ENVELOPE_SHAPES = [
24
+ '\\_ ', '\\_ ', '\\_ ', '\\_ ', // 0-3 decay, hold low
25
+ '/_ ', '/_ ', '/_ ', '/_ ', // 4-7 attack, hold low
26
+ '\\\\', // 8 repeat decay (sawtooth down)
27
+ '\\_', // 9 decay, hold low
28
+ '\\/\\/', // 10 alternate down/up (triangle)
29
+ '\\‾', // 11 decay, hold high
30
+ '//', // 12 repeat attack (sawtooth up)
31
+ '/‾', // 13 attack, hold high
32
+ '/\\/\\', // 14 alternate up/down (triangle)
33
+ '/_', // 15 attack, hold low
34
+ ];
35
+ // ─── LFSR noise buffer ─────────────────────────────────────────────────────────
36
+ // 17-bit LFSR: feedback = bit0 XOR bit2 (matches AY-3-8910 datasheet)
37
+ function makeLFSRBuffer(actx) {
38
+ const len = Math.ceil(actx.sampleRate * 1.5); // 1.5 s loop
39
+ const buf = actx.createBuffer(1, len, actx.sampleRate);
40
+ const data = buf.getChannelData(0);
41
+ let lfsr = 0x1FFFF;
42
+ for (let i = 0; i < len; i++) {
43
+ const bit = (lfsr ^ (lfsr >> 2)) & 1;
44
+ lfsr = (lfsr >> 1) | (bit << 16);
45
+ data[i] = (lfsr & 1) ? 1.0 : -1.0;
46
+ }
47
+ return buf;
48
+ }
49
+ /** Convert AY noise period register (R6, 1–31) to Hz cutoff for the LFSR filter. */
50
+ function noiseCutoffHz(period) {
51
+ return AY_CLOCK / (16 * Math.max(1, Math.min(31, period)));
52
+ }
53
+ // ─── Envelope scheduling ──────────────────────────────────────────────────────
54
+ /**
55
+ * Schedules AY envelope automation on an `AudioParam`.
56
+ *
57
+ * R13 bit layout: bit3=CONT bit2=ATT bit1=ALT bit0=HOLD
58
+ *
59
+ * cycleDur: seconds for one ramp (15→0 or 0→15).
60
+ * numCycles: how many cycles to pre-schedule for repeating shapes.
61
+ */
62
+ function scheduleEnvelope(param, shape, cycleDur, startTime, numCycles = 32) {
63
+ const CONT = (shape >> 3) & 1;
64
+ const ATT = (shape >> 2) & 1;
65
+ const ALT = (shape >> 1) & 1;
66
+ const HOLD = shape & 1;
67
+ const lo = 0;
68
+ const hi = ayVol(15);
69
+ // Cancel any automation already scheduled from startTime onward.
70
+ param.cancelScheduledValues(startTime);
71
+ const ramp = (from, to, t) => {
72
+ param.setValueAtTime(from, t);
73
+ param.linearRampToValueAtTime(to, t + cycleDur);
74
+ };
75
+ if (!CONT) {
76
+ // Shapes 0-7: one-shot, hold at 0 after
77
+ ramp(ATT ? lo : hi, ATT ? hi : lo, startTime);
78
+ param.setValueAtTime(lo, startTime + cycleDur);
79
+ return;
80
+ }
81
+ if (HOLD) {
82
+ // Single cycle, then hold at final level
83
+ if (!ATT) {
84
+ ramp(hi, lo, startTime);
85
+ // Shape 11 (\‾): hold HIGH after decay; Shape 9 (\_): hold LOW
86
+ param.setValueAtTime(ALT ? hi : lo, startTime + cycleDur);
87
+ }
88
+ else {
89
+ ramp(lo, hi, startTime);
90
+ // Shape 15 (/_): hold LOW after attack; Shape 13 (/‾): hold HIGH
91
+ param.setValueAtTime(ALT ? lo : hi, startTime + cycleDur);
92
+ }
93
+ return;
94
+ }
95
+ // Repeating shapes 8, 10, 12, 14 — pre-schedule numCycles ramps
96
+ for (let i = 0; i < numCycles; i++) {
97
+ const t = startTime + i * cycleDur;
98
+ // ATT=base direction; ALT=flip each odd cycle
99
+ const goUp = ALT ? (ATT ? i % 2 === 0 : i % 2 === 1) : ATT === 1;
100
+ ramp(goUp ? lo : hi, goUp ? hi : lo, t);
101
+ }
102
+ }
103
+ // ─── Real-time chip ───────────────────────────────────────────────────────────
104
+ /**
105
+ * Creates three persistent AY channels wired to the zx-kit master gain.
106
+ * Each channel has independent tone (square wave), noise (LFSR), and envelope.
107
+ *
108
+ * Must be called inside a user-gesture handler due to browser autoplay policy.
109
+ *
110
+ * @example
111
+ * button.addEventListener('click', () => {
112
+ * const ay = createAY()
113
+ * ay.tone('A', 440, 12)
114
+ * ay.enableNoise('B', 16)
115
+ * ay.envelope('C', 10, 400) // shape 10 = \/\/ triangle
116
+ * ay.tone('C', 220, 0) // tone silent; only envelope-modulated noise
117
+ * })
118
+ */
119
+ export function createAY() {
120
+ initAudio();
121
+ const master = getMasterGain();
122
+ const actx = master.context;
123
+ const noiseBuf = makeLFSRBuffer(actx);
124
+ const makeChannel = () => {
125
+ const osc = actx.createOscillator();
126
+ const toneGain = actx.createGain();
127
+ osc.type = 'square';
128
+ osc.frequency.value = 440;
129
+ toneGain.gain.value = 0;
130
+ osc.connect(toneGain);
131
+ toneGain.connect(master);
132
+ osc.start();
133
+ const noiseFilter = actx.createBiquadFilter();
134
+ noiseFilter.type = 'lowpass';
135
+ noiseFilter.frequency.value = noiseCutoffHz(8);
136
+ const noiseGain = actx.createGain();
137
+ noiseGain.gain.value = 0;
138
+ noiseFilter.connect(noiseGain);
139
+ noiseGain.connect(master);
140
+ return { osc, toneGain, noiseFilter, noiseGain };
141
+ };
142
+ const chs = {
143
+ A: makeChannel(), B: makeChannel(), C: makeChannel(),
144
+ };
145
+ // One shared LFSR source feeds all three channel noise filters.
146
+ const noiseSrc = actx.createBufferSource();
147
+ noiseSrc.buffer = noiseBuf;
148
+ noiseSrc.loop = true;
149
+ noiseSrc.connect(chs.A.noiseFilter);
150
+ noiseSrc.connect(chs.B.noiseFilter);
151
+ noiseSrc.connect(chs.C.noiseFilter);
152
+ noiseSrc.start();
153
+ return {
154
+ tone(ch, freq, vol = 15) {
155
+ const { osc, toneGain } = chs[ch];
156
+ const now = actx.currentTime;
157
+ toneGain.gain.cancelScheduledValues(now);
158
+ if (freq <= 0) {
159
+ toneGain.gain.setTargetAtTime(0, now, 0.003);
160
+ }
161
+ else {
162
+ osc.frequency.setValueAtTime(freq, now);
163
+ toneGain.gain.setTargetAtTime(ayVol(vol), now, 0.003);
164
+ }
165
+ },
166
+ enableNoise(ch, period = 8) {
167
+ const { noiseFilter, noiseGain } = chs[ch];
168
+ const now = actx.currentTime;
169
+ noiseFilter.frequency.setValueAtTime(noiseCutoffHz(period), now);
170
+ noiseGain.gain.setTargetAtTime(ayVol(15), now, 0.003);
171
+ },
172
+ disableNoise(ch) {
173
+ chs[ch].noiseGain.gain.setTargetAtTime(0, actx.currentTime, 0.003);
174
+ },
175
+ envelope(ch, shape, cycleDurMs) {
176
+ scheduleEnvelope(chs[ch].toneGain.gain, shape, cycleDurMs / 1000, actx.currentTime);
177
+ },
178
+ mute(ch) {
179
+ const { toneGain, noiseGain } = chs[ch];
180
+ const now = actx.currentTime;
181
+ toneGain.gain.cancelScheduledValues(now);
182
+ noiseGain.gain.cancelScheduledValues(now);
183
+ toneGain.gain.setTargetAtTime(0, now, 0.005);
184
+ noiseGain.gain.setTargetAtTime(0, now, 0.005);
185
+ },
186
+ muteAll() {
187
+ const now = actx.currentTime;
188
+ for (const { toneGain, noiseGain } of Object.values(chs)) {
189
+ toneGain.gain.cancelScheduledValues(now);
190
+ noiseGain.gain.cancelScheduledValues(now);
191
+ toneGain.gain.setTargetAtTime(0, now, 0.005);
192
+ noiseGain.gain.setTargetAtTime(0, now, 0.005);
193
+ }
194
+ },
195
+ stop() {
196
+ const now = actx.currentTime;
197
+ noiseSrc.stop(now + 0.01);
198
+ noiseSrc.disconnect();
199
+ for (const { osc, toneGain, noiseFilter, noiseGain } of Object.values(chs)) {
200
+ toneGain.gain.setValueAtTime(0, now);
201
+ noiseGain.gain.setValueAtTime(0, now);
202
+ osc.stop(now + 0.01);
203
+ osc.disconnect();
204
+ toneGain.disconnect();
205
+ noiseFilter.disconnect();
206
+ noiseGain.disconnect();
207
+ }
208
+ },
209
+ };
210
+ }
211
+ // ─── Sequencer ────────────────────────────────────────────────────────────────
212
+ /**
213
+ * Pre-schedules up to three independent AY note arrays on the shared AudioContext.
214
+ * All channels start at the same wall-clock time; shorter channels finish earlier.
215
+ * Fire-and-forget — no handle returned.
216
+ *
217
+ * Each `AYNote` may optionally mix in LFSR noise and/or apply an envelope shape.
218
+ *
219
+ * @example
220
+ * playAY({
221
+ * a: [{ freq: 440, dur: 300 }, { freq: 523, dur: 300, envShape: 12, envCycleDurMs: 150 }],
222
+ * b: [{ freq: 110, dur: 200, noise: true, noisePeriod: 16 }],
223
+ * c: [{ freq: 0, dur: 600, noise: true, noisePeriod: 4, envShape: 8, envCycleDurMs: 100 }],
224
+ * })
225
+ */
226
+ export function playAY(pattern, startDelay = 0) {
227
+ initAudio();
228
+ const master = getMasterGain();
229
+ if (!master)
230
+ return;
231
+ const actx = master.context;
232
+ const noiseBuf = makeLFSRBuffer(actx);
233
+ const scheduleChannel = (notes) => {
234
+ if (!notes?.length)
235
+ return;
236
+ let t = actx.currentTime + startDelay / 1000;
237
+ for (const note of notes) {
238
+ const { freq, dur, vol = 15, noise = false, noisePeriod = 8, envShape, envCycleDurMs } = note;
239
+ const durS = dur / 1000;
240
+ if (freq > 0) {
241
+ const osc = actx.createOscillator();
242
+ const toneGain = actx.createGain();
243
+ osc.type = 'square';
244
+ osc.frequency.value = freq;
245
+ osc.connect(toneGain);
246
+ toneGain.connect(master);
247
+ if (envShape !== undefined) {
248
+ const cycleDur = (envCycleDurMs ?? dur) / 1000;
249
+ const numCycles = Math.ceil(durS / cycleDur) + 4;
250
+ scheduleEnvelope(toneGain.gain, envShape, cycleDur, t, numCycles);
251
+ toneGain.gain.setValueAtTime(0, t + durS);
252
+ }
253
+ else {
254
+ const att = 0.005;
255
+ const rel = Math.min(0.015, durS * 0.12);
256
+ toneGain.gain.setValueAtTime(0, t);
257
+ toneGain.gain.linearRampToValueAtTime(ayVol(vol), t + att);
258
+ toneGain.gain.setValueAtTime(ayVol(vol), t + durS - rel);
259
+ toneGain.gain.linearRampToValueAtTime(0, t + durS);
260
+ }
261
+ osc.start(t);
262
+ osc.stop(t + durS + 0.01);
263
+ }
264
+ if (noise) {
265
+ const noiseSrc = actx.createBufferSource();
266
+ const noiseFilter = actx.createBiquadFilter();
267
+ const noiseGain = actx.createGain();
268
+ noiseSrc.buffer = noiseBuf;
269
+ noiseSrc.loop = true;
270
+ noiseFilter.type = 'lowpass';
271
+ noiseFilter.frequency.value = noiseCutoffHz(noisePeriod);
272
+ if (envShape !== undefined) {
273
+ const cycleDur = (envCycleDurMs ?? dur) / 1000;
274
+ const numCycles = Math.ceil(durS / cycleDur) + 4;
275
+ scheduleEnvelope(noiseGain.gain, envShape, cycleDur, t, numCycles);
276
+ noiseGain.gain.setValueAtTime(0, t + durS);
277
+ }
278
+ else {
279
+ const att = 0.005;
280
+ const rel = Math.min(0.015, durS * 0.12);
281
+ const nv = ayVol(vol) * 0.6;
282
+ noiseGain.gain.setValueAtTime(0, t);
283
+ noiseGain.gain.linearRampToValueAtTime(nv, t + att);
284
+ noiseGain.gain.setValueAtTime(nv, t + durS - rel);
285
+ noiseGain.gain.linearRampToValueAtTime(0, t + durS);
286
+ }
287
+ noiseSrc.connect(noiseFilter);
288
+ noiseFilter.connect(noiseGain);
289
+ noiseGain.connect(master);
290
+ noiseSrc.start(t);
291
+ noiseSrc.stop(t + durS + 0.01);
292
+ }
293
+ t += durS;
294
+ }
295
+ };
296
+ scheduleChannel(pattern.a);
297
+ scheduleChannel(pattern.b);
298
+ scheduleChannel(pattern.c);
299
+ }
300
+ //# sourceMappingURL=ay.js.map
package/dist/ay.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ay.js","sourceRoot":"","sources":["../src/ay.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAqMA;;;;;GAKG;AACH,eAAO,MAAM,IAAI,yBAAsB,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhE"}
1
+ {"version":3,"file":"font.d.ts","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAqMA;;;;;GAKG;AACH,eAAO,MAAM,IAAI,yBAAsB,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhE"}
package/dist/font.js CHANGED
@@ -221,6 +221,8 @@ export function getCharRow(charCode, row) {
221
221
  const idx = charCode - 32;
222
222
  if (idx < 0 || idx >= 96)
223
223
  return 0;
224
+ if (row < 0 || row > 7)
225
+ return 0;
224
226
  return FONT[idx * 8 + row];
225
227
  }
226
228
  //# sourceMappingURL=font.js.map
package/dist/font.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"font.js","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gGAAgG;AAChG,MAAM,GAAG,GAAsB;IAC7B,WAAW;IACX,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,eAAe;IACf,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,mDAAmD;IACnD,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;CACxC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,GAAW;IACtD,MAAM,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAA;IACzB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE;QAAE,OAAO,CAAC,CAAA;IAClC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;AAC5B,CAAC"}
1
+ {"version":3,"file":"font.js","sourceRoot":"","sources":["../src/font.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,gGAAgG;AAChG,MAAM,GAAG,GAAsB;IAC7B,WAAW;IACX,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,eAAe;IACf,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,OAAO;IACP,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,QAAQ;IACR,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;IACvC,mDAAmD;IACnD,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,IAAI;CACxC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAA;AAEvC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB,EAAE,GAAW;IACtD,MAAM,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAA;IACzB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE;QAAE,OAAO,CAAC,CAAA;IAClC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAAE,OAAO,CAAC,CAAA;IAChC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAA;AAC5B,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './palette.js';
2
+ export * from './ay.js';
2
3
  export * from './font.js';
3
4
  export * from './renderer.js';
4
5
  export * from './audio.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './palette.js';
2
+ export * from './ay.js';
2
3
  export * from './font.js';
3
4
  export * from './renderer.js';
4
5
  export * from './audio.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
@@ -127,21 +127,5 @@ export declare function drawTextCentered(ctx: CanvasRenderingContext2D, text: st
127
127
  * drawScanlines(ctx, 0.35) // stronger effect
128
128
  */
129
129
  export declare function drawScanlines(ctx: CanvasRenderingContext2D, alpha?: number): void;
130
- /**
131
- * Flashes `document.body.style.backgroundColor` between `color` and `resetColor`.
132
- * Fire-and-forget — does not block. Uses `setInterval` internally.
133
- * One "flash" = one `color → resetColor` cycle; total steps = `times * 2`.
134
- * Always resets to `resetColor` on completion.
135
- *
136
- * @param color - Flash color (`C.*` palette value)
137
- * @param times - Number of flashes
138
- * @param intervalMs - Duration of each half-cycle in milliseconds
139
- * @param resetColor - Final color after flashing (default `C.BLACK`)
140
- *
141
- * @example
142
- * flashBorder(C.B_RED, 3, 150) // explosion — 3 red flashes → black
143
- * flashBorder(C.B_GREEN, 2, 200) // level complete
144
- * flashBorder(C.B_CYAN, 2, 120, C.BLUE) // flash → reset to blue border
145
- */
146
130
  export declare function flashBorder(color: SpectrumColor, times: number, intervalMs: number, resetColor?: SpectrumColor): void;
147
131
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAiB1D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,KAAK,SAAM,EACX,MAAM,SAAM,GACX,wBAAwB,CAS1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,SAAI,GAAG,IAAI,CAS3E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAUxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GACvC,IAAI,CAKN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GACxC,IAAI,CAON;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GACxC,IAAI,CAIN;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GACxC,IAAI,CAGN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,SAAO,GACX,IAAI,CASN;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,aAAuB,GAClC,IAAI,CAWN"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAiB1D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,MAAM,EACb,KAAK,SAAM,EACX,MAAM,SAAM,GACX,wBAAwB,CAS1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,SAAI,GAAG,IAAI,CAS3E;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,GAAG,UAAU,CAUxD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,UAAU,EAClB,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,GACvC,IAAI,CAKN;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GACxC,IAAI,CAON;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CACtB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EACpB,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GACxC,IAAI,CAIN;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,wBAAwB,EAC7B,IAAI,EAAE,MAAM,EACZ,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,EAAE,aAAa,GACxC,IAAI,CAGN;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,wBAAwB,EAC7B,KAAK,SAAO,GACX,IAAI,CASN;AAoBD,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,UAAU,GAAE,aAAuB,GAClC,IAAI,CAmBN"}
package/dist/renderer.js CHANGED
@@ -210,14 +210,23 @@ export function drawScanlines(ctx, alpha = 0.25) {
210
210
  * flashBorder(C.B_GREEN, 2, 200) // level complete
211
211
  * flashBorder(C.B_CYAN, 2, 120, C.BLUE) // flash → reset to blue border
212
212
  */
213
+ let _flashIntervalId = null;
213
214
  export function flashBorder(color, times, intervalMs, resetColor = C.BLACK) {
215
+ // Cancel any in-flight flash so we never have two intervals fighting over body bg
216
+ if (_flashIntervalId !== null) {
217
+ clearInterval(_flashIntervalId);
218
+ _flashIntervalId = null;
219
+ }
214
220
  let step = 0;
215
221
  const totalSteps = times * 2;
216
- const id = setInterval(() => {
222
+ _flashIntervalId = setInterval(() => {
217
223
  document.body.style.backgroundColor = step % 2 === 0 ? color : resetColor;
218
224
  step++;
219
225
  if (step >= totalSteps) {
220
- clearInterval(id);
226
+ if (_flashIntervalId !== null) {
227
+ clearInterval(_flashIntervalId);
228
+ _flashIntervalId = null;
229
+ }
221
230
  document.body.style.backgroundColor = resetColor;
222
231
  }
223
232
  }, intervalMs);
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../src/renderer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zx-kit",
3
- "version": "0.9.1",
3
+ "version": "0.10.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/zrebec/zx-kit.git"
@@ -31,6 +31,10 @@
31
31
  "game",
32
32
  "canvas"
33
33
  ],
34
+ "sideEffects": false,
35
+ "engines": {
36
+ "node": ">=22"
37
+ },
34
38
  "license": "MIT",
35
39
  "devDependencies": {
36
40
  "@semantic-release/changelog": "^6.0.3",