@kya-os/cli 0.1.0-beta.1 → 0.1.0-beta.11
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/README.md +210 -34
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +73 -57
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/claim.js +33 -39
- package/dist/commands/claim.js.map +1 -1
- package/dist/commands/cli-experience-demo-simple.d.ts +14 -0
- package/dist/commands/cli-experience-demo-simple.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo-simple.js +119 -0
- package/dist/commands/cli-experience-demo-simple.js.map +1 -0
- package/dist/commands/cli-experience-demo.d.ts +14 -0
- package/dist/commands/cli-experience-demo.d.ts.map +1 -0
- package/dist/commands/cli-experience-demo.js +172 -0
- package/dist/commands/cli-experience-demo.js.map +1 -0
- package/dist/commands/effects-demo.d.ts +10 -0
- package/dist/commands/effects-demo.d.ts.map +1 -0
- package/dist/commands/effects-demo.js +292 -0
- package/dist/commands/effects-demo.js.map +1 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +55 -51
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init.d.ts +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +527 -102
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +81 -60
- package/dist/commands/rotate.js.map +1 -1
- package/dist/dev.d.ts +7 -0
- package/dist/dev.d.ts.map +1 -0
- package/dist/dev.js +9 -0
- package/dist/dev.js.map +1 -0
- package/dist/effects/__tests__/effects.test.d.ts +5 -0
- package/dist/effects/__tests__/effects.test.d.ts.map +1 -0
- package/dist/effects/__tests__/effects.test.js +206 -0
- package/dist/effects/__tests__/effects.test.js.map +1 -0
- package/dist/effects/animation-engine.d.ts +173 -0
- package/dist/effects/animation-engine.d.ts.map +1 -0
- package/dist/effects/animation-engine.js +254 -0
- package/dist/effects/animation-engine.js.map +1 -0
- package/dist/effects/cli-integration.d.ts +86 -0
- package/dist/effects/cli-integration.d.ts.map +1 -0
- package/dist/effects/cli-integration.js +309 -0
- package/dist/effects/cli-integration.js.map +1 -0
- package/dist/effects/config.d.ts +95 -0
- package/dist/effects/config.d.ts.map +1 -0
- package/dist/effects/config.js +216 -0
- package/dist/effects/config.js.map +1 -0
- package/dist/effects/effect-runner.d.ts +69 -0
- package/dist/effects/effect-runner.d.ts.map +1 -0
- package/dist/effects/effect-runner.js +255 -0
- package/dist/effects/effect-runner.js.map +1 -0
- package/dist/effects/gradient.d.ts +131 -0
- package/dist/effects/gradient.d.ts.map +1 -0
- package/dist/effects/gradient.js +236 -0
- package/dist/effects/gradient.js.map +1 -0
- package/dist/effects/implementations/beams.d.ts +80 -0
- package/dist/effects/implementations/beams.d.ts.map +1 -0
- package/dist/effects/implementations/beams.js +221 -0
- package/dist/effects/implementations/beams.js.map +1 -0
- package/dist/effects/implementations/binary-path.d.ts +88 -0
- package/dist/effects/implementations/binary-path.d.ts.map +1 -0
- package/dist/effects/implementations/binary-path.js +296 -0
- package/dist/effects/implementations/binary-path.js.map +1 -0
- package/dist/effects/implementations/blackhole.d.ts +98 -0
- package/dist/effects/implementations/blackhole.d.ts.map +1 -0
- package/dist/effects/implementations/blackhole.js +394 -0
- package/dist/effects/implementations/blackhole.js.map +1 -0
- package/dist/effects/implementations/burn.d.ts +74 -0
- package/dist/effects/implementations/burn.d.ts.map +1 -0
- package/dist/effects/implementations/burn.js +234 -0
- package/dist/effects/implementations/burn.js.map +1 -0
- package/dist/effects/implementations/decrypt.d.ts +115 -0
- package/dist/effects/implementations/decrypt.d.ts.map +1 -0
- package/dist/effects/implementations/decrypt.js +394 -0
- package/dist/effects/implementations/decrypt.js.map +1 -0
- package/dist/effects/implementations/test.d.ts +113 -0
- package/dist/effects/implementations/test.d.ts.map +1 -0
- package/dist/effects/implementations/test.js +552 -0
- package/dist/effects/implementations/test.js.map +1 -0
- package/dist/effects/implementations/waves.d.ts +78 -0
- package/dist/effects/implementations/waves.d.ts.map +1 -0
- package/dist/effects/implementations/waves.js +278 -0
- package/dist/effects/implementations/waves.js.map +1 -0
- package/dist/effects/index.d.ts +37 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +79 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/motion-engine.d.ts +168 -0
- package/dist/effects/motion-engine.d.ts.map +1 -0
- package/dist/effects/motion-engine.js +353 -0
- package/dist/effects/motion-engine.js.map +1 -0
- package/dist/effects/safe-executor.d.ts +55 -0
- package/dist/effects/safe-executor.d.ts.map +1 -0
- package/dist/effects/safe-executor.js +210 -0
- package/dist/effects/safe-executor.js.map +1 -0
- package/dist/effects/template/effect-template.d.ts +97 -0
- package/dist/effects/template/effect-template.d.ts.map +1 -0
- package/dist/effects/template/effect-template.js +208 -0
- package/dist/effects/template/effect-template.js.map +1 -0
- package/dist/effects/types.d.ts +199 -0
- package/dist/effects/types.d.ts.map +1 -0
- package/dist/effects/types.js +80 -0
- package/dist/effects/types.js.map +1 -0
- package/dist/effects/utils.d.ts +104 -0
- package/dist/effects/utils.d.ts.map +1 -0
- package/dist/effects/utils.js +280 -0
- package/dist/effects/utils.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +52 -51
- package/dist/index.js.map +1 -1
- package/dist/utils/env-manager.d.ts +66 -2
- package/dist/utils/env-manager.d.ts.map +1 -1
- package/dist/utils/env-manager.js +355 -65
- package/dist/utils/env-manager.js.map +1 -1
- package/dist/utils/platform-detector.js +15 -19
- package/dist/utils/platform-detector.js.map +1 -1
- package/dist/utils/prompts.js +21 -34
- package/dist/utils/prompts.js.map +1 -1
- package/package.json +10 -5
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gradient System for Terminal Effects
|
|
3
|
+
* Provides comprehensive gradient color mapping capabilities
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Gradient direction options
|
|
7
|
+
*/
|
|
8
|
+
export var GradientDirection;
|
|
9
|
+
(function (GradientDirection) {
|
|
10
|
+
GradientDirection["HORIZONTAL"] = "horizontal";
|
|
11
|
+
GradientDirection["VERTICAL"] = "vertical";
|
|
12
|
+
GradientDirection["DIAGONAL"] = "diagonal";
|
|
13
|
+
GradientDirection["RADIAL"] = "radial";
|
|
14
|
+
GradientDirection["DIAGONAL_REVERSE"] = "diagonal_reverse";
|
|
15
|
+
})(GradientDirection || (GradientDirection = {}));
|
|
16
|
+
/**
|
|
17
|
+
* Gradient class for creating color transitions
|
|
18
|
+
*/
|
|
19
|
+
export class Gradient {
|
|
20
|
+
constructor(config) {
|
|
21
|
+
this.spectrum = [];
|
|
22
|
+
this.colorStops = config.stops;
|
|
23
|
+
this.steps = config.steps || 10;
|
|
24
|
+
this.direction = config.direction || GradientDirection.VERTICAL;
|
|
25
|
+
this.easingFn = config.easingFn || ((t) => t); // Linear by default
|
|
26
|
+
this.generateSpectrum();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate the full color spectrum
|
|
30
|
+
*/
|
|
31
|
+
generateSpectrum() {
|
|
32
|
+
this.spectrum = [];
|
|
33
|
+
if (this.colorStops.length === 1) {
|
|
34
|
+
// Single color - no gradient
|
|
35
|
+
this.spectrum = [this.colorStops[0]];
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
// Generate colors between each pair of stops
|
|
39
|
+
for (let i = 0; i < this.colorStops.length - 1; i++) {
|
|
40
|
+
const startColor = this.colorStops[i];
|
|
41
|
+
const endColor = this.colorStops[i + 1];
|
|
42
|
+
const segmentColors = this.interpolateColors(startColor, endColor, this.steps);
|
|
43
|
+
// Add all colors except the last (to avoid duplicates)
|
|
44
|
+
if (i < this.colorStops.length - 2) {
|
|
45
|
+
this.spectrum.push(...segmentColors.slice(0, -1));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
// For the last segment, include all colors
|
|
49
|
+
this.spectrum.push(...segmentColors);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Interpolate between two colors
|
|
55
|
+
*/
|
|
56
|
+
interpolateColors(color1, color2, steps) {
|
|
57
|
+
const colors = [];
|
|
58
|
+
const r1 = parseInt(color1.substring(0, 2), 16);
|
|
59
|
+
const g1 = parseInt(color1.substring(2, 4), 16);
|
|
60
|
+
const b1 = parseInt(color1.substring(4, 6), 16);
|
|
61
|
+
const r2 = parseInt(color2.substring(0, 2), 16);
|
|
62
|
+
const g2 = parseInt(color2.substring(2, 4), 16);
|
|
63
|
+
const b2 = parseInt(color2.substring(4, 6), 16);
|
|
64
|
+
for (let i = 0; i < steps; i++) {
|
|
65
|
+
const t = i / (steps - 1);
|
|
66
|
+
const easedT = this.easingFn(t);
|
|
67
|
+
const r = Math.round(r1 + (r2 - r1) * easedT);
|
|
68
|
+
const g = Math.round(g1 + (g2 - g1) * easedT);
|
|
69
|
+
const b = Math.round(b1 + (b2 - b1) * easedT);
|
|
70
|
+
const hex = [r, g, b]
|
|
71
|
+
.map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
|
|
72
|
+
.join("");
|
|
73
|
+
colors.push(hex);
|
|
74
|
+
}
|
|
75
|
+
return colors;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build coordinate-to-color mapping for a canvas area
|
|
79
|
+
*/
|
|
80
|
+
buildCoordinateColorMapping(dimensions, bounds) {
|
|
81
|
+
const mapping = new Map();
|
|
82
|
+
// Use provided bounds or default to full canvas
|
|
83
|
+
const top = bounds?.top ?? 0;
|
|
84
|
+
const bottom = bounds?.bottom ?? dimensions.height - 1;
|
|
85
|
+
const left = bounds?.left ?? 0;
|
|
86
|
+
const right = bounds?.right ?? dimensions.width - 1;
|
|
87
|
+
const width = right - left + 1;
|
|
88
|
+
const height = bottom - top + 1;
|
|
89
|
+
for (let y = top; y <= bottom; y++) {
|
|
90
|
+
for (let x = left; x <= right; x++) {
|
|
91
|
+
const key = `${x},${y}`;
|
|
92
|
+
const color = this.getColorAtPosition(x - left, y - top, width, height);
|
|
93
|
+
mapping.set(key, color);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return mapping;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get color at a specific position based on gradient direction
|
|
100
|
+
*/
|
|
101
|
+
getColorAtPosition(x, y, width, height) {
|
|
102
|
+
let factor = 0;
|
|
103
|
+
switch (this.direction) {
|
|
104
|
+
case GradientDirection.HORIZONTAL:
|
|
105
|
+
factor = x / (width - 1);
|
|
106
|
+
break;
|
|
107
|
+
case GradientDirection.VERTICAL:
|
|
108
|
+
factor = y / (height - 1);
|
|
109
|
+
break;
|
|
110
|
+
case GradientDirection.DIAGONAL:
|
|
111
|
+
factor = (x + y) / (width + height - 2);
|
|
112
|
+
break;
|
|
113
|
+
case GradientDirection.DIAGONAL_REVERSE:
|
|
114
|
+
factor = (x + (height - 1 - y)) / (width + height - 2);
|
|
115
|
+
break;
|
|
116
|
+
case GradientDirection.RADIAL:
|
|
117
|
+
const centerX = width / 2;
|
|
118
|
+
const centerY = height / 2;
|
|
119
|
+
const maxDist = Math.sqrt(centerX * centerX + centerY * centerY);
|
|
120
|
+
const dist = Math.sqrt(Math.pow(x - centerX, 2) + Math.pow(y - centerY, 2));
|
|
121
|
+
factor = dist / maxDist;
|
|
122
|
+
break;
|
|
123
|
+
}
|
|
124
|
+
// Clamp factor to [0, 1]
|
|
125
|
+
factor = Math.max(0, Math.min(1, factor));
|
|
126
|
+
// Get color from spectrum
|
|
127
|
+
const index = Math.floor(factor * (this.spectrum.length - 1));
|
|
128
|
+
return this.spectrum[index];
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Get color for a specific coordinate
|
|
132
|
+
*/
|
|
133
|
+
getColorForCoordinate(coord, dimensions) {
|
|
134
|
+
return this.getColorAtPosition(coord.x, coord.y, dimensions.width, dimensions.height);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Get the generated color spectrum
|
|
138
|
+
*/
|
|
139
|
+
getSpectrum() {
|
|
140
|
+
return [...this.spectrum];
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Apply gradient to a string (character by character)
|
|
144
|
+
*/
|
|
145
|
+
applyToString(text) {
|
|
146
|
+
const result = [];
|
|
147
|
+
const chars = [...text]; // Handle Unicode properly
|
|
148
|
+
for (let i = 0; i < chars.length; i++) {
|
|
149
|
+
const factor = i / (chars.length - 1);
|
|
150
|
+
const colorIndex = Math.floor(factor * (this.spectrum.length - 1));
|
|
151
|
+
result.push({
|
|
152
|
+
char: chars[i],
|
|
153
|
+
color: this.spectrum[colorIndex],
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Predefined gradients
|
|
161
|
+
*/
|
|
162
|
+
export const GRADIENTS = {
|
|
163
|
+
// Fire gradient (red to yellow)
|
|
164
|
+
FIRE: {
|
|
165
|
+
stops: ["ff0000", "ff4500", "ff8c00", "ffa500", "ffff00"],
|
|
166
|
+
steps: 10,
|
|
167
|
+
},
|
|
168
|
+
// Ocean gradient (dark blue to cyan)
|
|
169
|
+
OCEAN: {
|
|
170
|
+
stops: ["000080", "0000ff", "0080ff", "00ffff"],
|
|
171
|
+
steps: 12,
|
|
172
|
+
},
|
|
173
|
+
// Matrix gradient (dark green to bright green)
|
|
174
|
+
MATRIX: {
|
|
175
|
+
stops: ["003300", "006600", "009900", "00cc00", "00ff00"],
|
|
176
|
+
steps: 8,
|
|
177
|
+
},
|
|
178
|
+
// Sunset gradient
|
|
179
|
+
SUNSET: {
|
|
180
|
+
stops: ["ff1493", "ff69b4", "ffa500", "ffff00", "fffacd"],
|
|
181
|
+
steps: 15,
|
|
182
|
+
},
|
|
183
|
+
// Cool gradient (purple to cyan)
|
|
184
|
+
COOL: {
|
|
185
|
+
stops: ["8b008b", "9932cc", "6a0dad", "0000ff", "00ffff"],
|
|
186
|
+
steps: 12,
|
|
187
|
+
},
|
|
188
|
+
// Monochrome gradient (black to white)
|
|
189
|
+
MONOCHROME: {
|
|
190
|
+
stops: ["000000", "404040", "808080", "c0c0c0", "ffffff"],
|
|
191
|
+
steps: 10,
|
|
192
|
+
},
|
|
193
|
+
// Rainbow gradient
|
|
194
|
+
RAINBOW: {
|
|
195
|
+
stops: ["ff0000", "ff7f00", "ffff00", "00ff00", "0000ff", "4b0082", "9400d3"],
|
|
196
|
+
steps: 8,
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
/**
|
|
200
|
+
* Easing functions for gradient interpolation
|
|
201
|
+
*/
|
|
202
|
+
export const EASING = {
|
|
203
|
+
linear: (t) => t,
|
|
204
|
+
inQuad: (t) => t * t,
|
|
205
|
+
outQuad: (t) => t * (2 - t),
|
|
206
|
+
inOutQuad: (t) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),
|
|
207
|
+
inCubic: (t) => t * t * t,
|
|
208
|
+
outCubic: (t) => (--t) * t * t + 1,
|
|
209
|
+
inOutCubic: (t) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
|
|
210
|
+
inExpo: (t) => (t === 0 ? 0 : Math.pow(2, 10 * t - 10)),
|
|
211
|
+
outExpo: (t) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t)),
|
|
212
|
+
inOutExpo: (t) => {
|
|
213
|
+
if (t === 0)
|
|
214
|
+
return 0;
|
|
215
|
+
if (t === 1)
|
|
216
|
+
return 1;
|
|
217
|
+
if (t < 0.5)
|
|
218
|
+
return Math.pow(2, 20 * t - 10) / 2;
|
|
219
|
+
return (2 - Math.pow(2, -20 * t + 10)) / 2;
|
|
220
|
+
},
|
|
221
|
+
inSine: (t) => 1 - Math.cos((t * Math.PI) / 2),
|
|
222
|
+
outSine: (t) => Math.sin((t * Math.PI) / 2),
|
|
223
|
+
inOutSine: (t) => -(Math.cos(Math.PI * t) - 1) / 2,
|
|
224
|
+
};
|
|
225
|
+
/**
|
|
226
|
+
* Helper function to create a gradient from preset
|
|
227
|
+
*/
|
|
228
|
+
export function createGradient(preset, direction, easingFn) {
|
|
229
|
+
const config = GRADIENTS[preset];
|
|
230
|
+
return new Gradient({
|
|
231
|
+
...config,
|
|
232
|
+
direction,
|
|
233
|
+
easingFn,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=gradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gradient.js","sourceRoot":"","sources":["../../src/effects/gradient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Beams Effect
|
|
3
|
+
* Creates beams which travel over the canvas illuminating the characters
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Beams effect
|
|
8
|
+
*/
|
|
9
|
+
export interface BeamsEffectOptions {
|
|
10
|
+
/** Duration in milliseconds */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Number of beams */
|
|
13
|
+
beamCount?: number;
|
|
14
|
+
/** Beam width */
|
|
15
|
+
beamWidth?: number;
|
|
16
|
+
/** Beam speed range */
|
|
17
|
+
beamSpeedRange?: [number, number];
|
|
18
|
+
/** Beam colors */
|
|
19
|
+
beamColors?: string[];
|
|
20
|
+
/** Illumination brightness multiplier */
|
|
21
|
+
illuminationBrightness?: number;
|
|
22
|
+
/** Base character color */
|
|
23
|
+
baseColor?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Beams effect implementation
|
|
27
|
+
*/
|
|
28
|
+
export declare class BeamsEffect extends BaseEffect {
|
|
29
|
+
readonly name = "Beams";
|
|
30
|
+
readonly description = "Creates beams which travel over the canvas illuminating the characters";
|
|
31
|
+
private options;
|
|
32
|
+
private beams;
|
|
33
|
+
private animationFrameCount;
|
|
34
|
+
private totalFrames;
|
|
35
|
+
private nextBeamId;
|
|
36
|
+
private lastBeamSpawn;
|
|
37
|
+
private _isEffectComplete;
|
|
38
|
+
constructor(options?: BeamsEffectOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the effect
|
|
41
|
+
*/
|
|
42
|
+
protected onInitialize(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Render the next frame
|
|
45
|
+
*/
|
|
46
|
+
render(): Promise<string[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Update beam positions and states
|
|
49
|
+
*/
|
|
50
|
+
private updateBeams;
|
|
51
|
+
/**
|
|
52
|
+
* Spawn a new beam
|
|
53
|
+
*/
|
|
54
|
+
private spawnBeam;
|
|
55
|
+
/**
|
|
56
|
+
* Get beam color based on its properties
|
|
57
|
+
*/
|
|
58
|
+
private getBeamColor;
|
|
59
|
+
/**
|
|
60
|
+
* Apply illumination to a base color
|
|
61
|
+
*/
|
|
62
|
+
private applyIllumination;
|
|
63
|
+
/**
|
|
64
|
+
* Get ANSI color code for a color
|
|
65
|
+
*/
|
|
66
|
+
private getColorCode;
|
|
67
|
+
/**
|
|
68
|
+
* Render fallback for when effects are disabled
|
|
69
|
+
*/
|
|
70
|
+
renderFallback(): string[];
|
|
71
|
+
/**
|
|
72
|
+
* Check if effect is complete
|
|
73
|
+
*/
|
|
74
|
+
isComplete(): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Reset the effect
|
|
77
|
+
*/
|
|
78
|
+
protected onReset(): void;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=beams.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beams.d.ts","sourceRoot":"","sources":["../../../src/effects/implementations/beams.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAqB,MAAM,aAAa,CAAC;AAG5D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,yCAAyC;IACzC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAeD;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,QAAQ,CAAC,IAAI,WAAW;IACxB,QAAQ,CAAC,WAAW,4EACuD;IAE3E,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,OAAO,GAAE,kBAAuB;IAc5C;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IAgB9B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkDjC;;OAEG;IACH,OAAO,CAAC,WAAW;IA4CnB;;OAEG;IACH,OAAO,CAAC,SAAS;IA2BjB;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoCzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;CAQ1B"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Beams Effect
|
|
3
|
+
* Creates beams which travel over the canvas illuminating the characters
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
import { ANSI, easeInOutSine } from "../utils.js";
|
|
7
|
+
/**
|
|
8
|
+
* Beams effect implementation
|
|
9
|
+
*/
|
|
10
|
+
export class BeamsEffect extends BaseEffect {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
super();
|
|
13
|
+
this.name = "Beams";
|
|
14
|
+
this.description = "Creates beams which travel over the canvas illuminating the characters";
|
|
15
|
+
this.beams = [];
|
|
16
|
+
this.animationFrameCount = 0;
|
|
17
|
+
this.totalFrames = 0;
|
|
18
|
+
this.nextBeamId = 0;
|
|
19
|
+
this.lastBeamSpawn = 0;
|
|
20
|
+
this._isEffectComplete = false;
|
|
21
|
+
this.options = {
|
|
22
|
+
duration: 5000,
|
|
23
|
+
beamCount: 8,
|
|
24
|
+
beamWidth: 5,
|
|
25
|
+
beamSpeedRange: [1.0, 3.0],
|
|
26
|
+
beamColors: ["ffffff", "00D1FF", "8A008A"],
|
|
27
|
+
illuminationBrightness: 2.0,
|
|
28
|
+
baseColor: "202020",
|
|
29
|
+
...options,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Initialize the effect
|
|
34
|
+
*/
|
|
35
|
+
onInitialize() {
|
|
36
|
+
this.totalFrames = Math.floor((this.options.duration / 1000) * this.config.frameRate);
|
|
37
|
+
this.beams = [];
|
|
38
|
+
this.animationFrameCount = 0;
|
|
39
|
+
this.nextBeamId = 0;
|
|
40
|
+
this.lastBeamSpawn = 0;
|
|
41
|
+
this._isEffectComplete = false;
|
|
42
|
+
// Set base color for all characters
|
|
43
|
+
for (const char of this.characters) {
|
|
44
|
+
char.visual.colors.fg = this.options.baseColor;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Render the next frame
|
|
49
|
+
*/
|
|
50
|
+
async render() {
|
|
51
|
+
if (!this.isInitialized) {
|
|
52
|
+
throw new Error("Effect not initialized");
|
|
53
|
+
}
|
|
54
|
+
// Update beams
|
|
55
|
+
this.updateBeams();
|
|
56
|
+
// Render text with beam effects line by line
|
|
57
|
+
const lines = this.text.split("\n");
|
|
58
|
+
const renderedLines = [];
|
|
59
|
+
for (let y = 0; y < lines.length; y++) {
|
|
60
|
+
let line = "";
|
|
61
|
+
const chars = [...lines[y]];
|
|
62
|
+
for (let x = 0; x < chars.length; x++) {
|
|
63
|
+
const char = chars[x];
|
|
64
|
+
let color = this.options.baseColor;
|
|
65
|
+
// Check if character is illuminated by any beam
|
|
66
|
+
for (const beam of this.beams) {
|
|
67
|
+
if (!beam.active)
|
|
68
|
+
continue;
|
|
69
|
+
const distance = beam.direction === "horizontal"
|
|
70
|
+
? Math.abs(y - beam.position.y)
|
|
71
|
+
: Math.abs(x - beam.position.x);
|
|
72
|
+
if (distance <= beam.width) {
|
|
73
|
+
const intensity = 1 - distance / beam.width;
|
|
74
|
+
const easedIntensity = easeInOutSine(intensity);
|
|
75
|
+
const beamColor = this.getBeamColor(beam);
|
|
76
|
+
color = this.applyIllumination(color, beamColor, easedIntensity);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
const colorCode = this.getColorCode(color);
|
|
80
|
+
const resetCode = ANSI.reset;
|
|
81
|
+
line += colorCode + char + resetCode;
|
|
82
|
+
}
|
|
83
|
+
renderedLines.push(line);
|
|
84
|
+
}
|
|
85
|
+
this.animationFrameCount++;
|
|
86
|
+
return renderedLines;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Update beam positions and states
|
|
90
|
+
*/
|
|
91
|
+
updateBeams() {
|
|
92
|
+
const dimensions = this.getCanvasDimensions();
|
|
93
|
+
const spawnInterval = Math.floor(this.totalFrames / (this.options.beamCount * 3));
|
|
94
|
+
// Spawn new beams more frequently
|
|
95
|
+
if (this.beams.filter(b => b.active).length < this.options.beamCount &&
|
|
96
|
+
this.animationFrameCount - this.lastBeamSpawn > spawnInterval &&
|
|
97
|
+
this.animationFrameCount < this.totalFrames * 0.8) {
|
|
98
|
+
this.spawnBeam();
|
|
99
|
+
this.lastBeamSpawn = this.animationFrameCount;
|
|
100
|
+
}
|
|
101
|
+
// Update existing beams
|
|
102
|
+
for (const beam of this.beams) {
|
|
103
|
+
if (!beam.active)
|
|
104
|
+
continue;
|
|
105
|
+
// Update position based on direction
|
|
106
|
+
if (beam.direction === "horizontal") {
|
|
107
|
+
beam.position.x += beam.speed;
|
|
108
|
+
// Deactivate if off screen
|
|
109
|
+
if (beam.position.x > dimensions.width + beam.width) {
|
|
110
|
+
beam.active = false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
beam.position.y += beam.speed;
|
|
115
|
+
// Deactivate if off screen
|
|
116
|
+
if (beam.position.y > dimensions.height + beam.width) {
|
|
117
|
+
beam.active = false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
// Check if effect is complete
|
|
122
|
+
const activeBeams = this.beams.filter((b) => b.active).length;
|
|
123
|
+
this._isEffectComplete =
|
|
124
|
+
activeBeams === 0 && this.animationFrameCount >= this.totalFrames * 0.8;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Spawn a new beam
|
|
128
|
+
*/
|
|
129
|
+
spawnBeam() {
|
|
130
|
+
const dimensions = this.getCanvasDimensions();
|
|
131
|
+
const isHorizontal = Math.random() > 0.5;
|
|
132
|
+
const beam = {
|
|
133
|
+
id: this.nextBeamId++,
|
|
134
|
+
position: {
|
|
135
|
+
x: isHorizontal
|
|
136
|
+
? -this.options.beamWidth
|
|
137
|
+
: Math.random() * dimensions.width,
|
|
138
|
+
y: isHorizontal
|
|
139
|
+
? Math.random() * dimensions.height
|
|
140
|
+
: -this.options.beamWidth,
|
|
141
|
+
},
|
|
142
|
+
direction: isHorizontal ? "horizontal" : "vertical",
|
|
143
|
+
speed: this.options.beamSpeedRange[0] +
|
|
144
|
+
Math.random() *
|
|
145
|
+
(this.options.beamSpeedRange[1] - this.options.beamSpeedRange[0]),
|
|
146
|
+
width: this.options.beamWidth,
|
|
147
|
+
progress: 0,
|
|
148
|
+
active: true,
|
|
149
|
+
};
|
|
150
|
+
this.beams.push(beam);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get beam color based on its properties
|
|
154
|
+
*/
|
|
155
|
+
getBeamColor(beam) {
|
|
156
|
+
// Cycle through colors based on beam ID
|
|
157
|
+
const colorIndex = beam.id % this.options.beamColors.length;
|
|
158
|
+
return this.options.beamColors[colorIndex];
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Apply illumination to a base color
|
|
162
|
+
*/
|
|
163
|
+
applyIllumination(baseColor, beamColor, intensity) {
|
|
164
|
+
// Parse colors
|
|
165
|
+
const baseR = parseInt(baseColor.substring(0, 2), 16);
|
|
166
|
+
const baseG = parseInt(baseColor.substring(2, 4), 16);
|
|
167
|
+
const baseB = parseInt(baseColor.substring(4, 6), 16);
|
|
168
|
+
const beamR = parseInt(beamColor.substring(0, 2), 16);
|
|
169
|
+
const beamG = parseInt(beamColor.substring(2, 4), 16);
|
|
170
|
+
const beamB = parseInt(beamColor.substring(4, 6), 16);
|
|
171
|
+
// Apply illumination with brightness multiplier
|
|
172
|
+
const brightness = 1 + (this.options.illuminationBrightness - 1) * intensity;
|
|
173
|
+
const r = Math.min(255, Math.round(baseR + (beamR - baseR) * intensity * brightness));
|
|
174
|
+
const g = Math.min(255, Math.round(baseG + (beamG - baseG) * intensity * brightness));
|
|
175
|
+
const b = Math.min(255, Math.round(baseB + (beamB - baseB) * intensity * brightness));
|
|
176
|
+
return [r, g, b]
|
|
177
|
+
.map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
|
|
178
|
+
.join("");
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get ANSI color code for a color
|
|
182
|
+
*/
|
|
183
|
+
getColorCode(color) {
|
|
184
|
+
if (!color || this.config.noColor) {
|
|
185
|
+
return "";
|
|
186
|
+
}
|
|
187
|
+
// For RGB colors, convert to ANSI 24-bit color
|
|
188
|
+
if (typeof color === "string") {
|
|
189
|
+
const r = parseInt(color.substring(0, 2), 16);
|
|
190
|
+
const g = parseInt(color.substring(2, 4), 16);
|
|
191
|
+
const b = parseInt(color.substring(4, 6), 16);
|
|
192
|
+
return `\x1b[38;2;${r};${g};${b}m`;
|
|
193
|
+
}
|
|
194
|
+
// For XTerm colors
|
|
195
|
+
return `\x1b[38;5;${color}m`;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Render fallback for when effects are disabled
|
|
199
|
+
*/
|
|
200
|
+
renderFallback() {
|
|
201
|
+
return this.text.split("\n");
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Check if effect is complete
|
|
205
|
+
*/
|
|
206
|
+
isComplete() {
|
|
207
|
+
return this._isEffectComplete;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Reset the effect
|
|
211
|
+
*/
|
|
212
|
+
onReset() {
|
|
213
|
+
this.beams = [];
|
|
214
|
+
this.animationFrameCount = 0;
|
|
215
|
+
this.nextBeamId = 0;
|
|
216
|
+
this.lastBeamSpawn = 0;
|
|
217
|
+
this._isEffectComplete = false;
|
|
218
|
+
this.onInitialize();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=beams.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beams.js","sourceRoot":"","sources":["../../../src/effects/implementations/beams.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Binary Path Effect
|
|
3
|
+
* Creates a binary rain effect that reveals characters
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Binary Path effect
|
|
8
|
+
*/
|
|
9
|
+
export interface BinaryPathEffectOptions {
|
|
10
|
+
/** Duration in milliseconds */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Number of binary streams */
|
|
13
|
+
streamCount?: number;
|
|
14
|
+
/** Speed of binary fall */
|
|
15
|
+
fallSpeed?: number;
|
|
16
|
+
/** Binary colors (for 0 and 1) */
|
|
17
|
+
binaryColors?: [string, string];
|
|
18
|
+
/** Revealed character color */
|
|
19
|
+
revealColor?: string;
|
|
20
|
+
/** Fade duration for revealed characters */
|
|
21
|
+
fadeDuration?: number;
|
|
22
|
+
/** Probability of spawning new stream per frame */
|
|
23
|
+
spawnProbability?: number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Binary Path effect implementation
|
|
27
|
+
*/
|
|
28
|
+
export declare class BinaryPathEffect extends BaseEffect {
|
|
29
|
+
readonly name = "BinaryPath";
|
|
30
|
+
readonly description = "Creates a binary rain effect that reveals characters";
|
|
31
|
+
private options;
|
|
32
|
+
private streams;
|
|
33
|
+
private characterStates;
|
|
34
|
+
private animationFrameCount;
|
|
35
|
+
private totalFrames;
|
|
36
|
+
private nextStreamId;
|
|
37
|
+
private _isEffectComplete;
|
|
38
|
+
constructor(options?: BinaryPathEffectOptions);
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the effect
|
|
41
|
+
*/
|
|
42
|
+
protected onInitialize(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Render the next frame
|
|
45
|
+
*/
|
|
46
|
+
render(): Promise<string[]>;
|
|
47
|
+
/**
|
|
48
|
+
* Update stream positions and states
|
|
49
|
+
*/
|
|
50
|
+
private updateStreams;
|
|
51
|
+
/**
|
|
52
|
+
* Spawn a new binary stream
|
|
53
|
+
*/
|
|
54
|
+
private spawnStream;
|
|
55
|
+
/**
|
|
56
|
+
* Check if a stream collides with any characters
|
|
57
|
+
*/
|
|
58
|
+
private checkCharacterCollision;
|
|
59
|
+
/**
|
|
60
|
+
* Get color for a revealed character based on fade progress
|
|
61
|
+
*/
|
|
62
|
+
private getRevealedCharacterColor;
|
|
63
|
+
/**
|
|
64
|
+
* Apply fade to a color
|
|
65
|
+
*/
|
|
66
|
+
private applyFade;
|
|
67
|
+
/**
|
|
68
|
+
* Interpolate between two colors
|
|
69
|
+
*/
|
|
70
|
+
private interpolateColor;
|
|
71
|
+
/**
|
|
72
|
+
* Get ANSI color code for a color
|
|
73
|
+
*/
|
|
74
|
+
private getColorCode;
|
|
75
|
+
/**
|
|
76
|
+
* Render fallback for when effects are disabled
|
|
77
|
+
*/
|
|
78
|
+
renderFallback(): string[];
|
|
79
|
+
/**
|
|
80
|
+
* Check if effect is complete
|
|
81
|
+
*/
|
|
82
|
+
isComplete(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Reset the effect
|
|
85
|
+
*/
|
|
86
|
+
protected onReset(): void;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=binary-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-path.d.ts","sourceRoot":"","sources":["../../../src/effects/implementations/binary-path.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAS,MAAM,aAAa,CAAC;AAGhD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kCAAkC;IAClC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,+BAA+B;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAwBD;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,WAAW,0DAA0D;IAE9E,OAAO,CAAC,OAAO,CAAoC;IACnD,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,eAAe,CAAgD;IACvE,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,iBAAiB,CAAkB;gBAE/B,OAAO,GAAE,uBAA4B;IAcjD;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IA0B9B;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA+DjC;;OAEG;IACH,OAAO,CAAC,aAAa;IA0ErB;;OAEG;IACH,OAAO,CAAC,WAAW;IAgBnB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,SAAS;IAcjB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;CAQ1B"}
|