@kya-os/cli 0.1.0-beta.6 → 0.1.0-beta.7
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 +28 -6
- package/dist/commands/check.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 +12 -2
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +262 -136
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rotate.d.ts.map +1 -1
- package/dist/commands/rotate.js +19 -3
- 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 +48 -42
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decrypt Effect
|
|
3
|
+
* Movie-style text decryption effect with typing animation
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect, } from "../types.js";
|
|
6
|
+
import { ANSI } from "../utils.js";
|
|
7
|
+
/**
|
|
8
|
+
* Decrypt effect implementation
|
|
9
|
+
*/
|
|
10
|
+
export class DecryptEffect extends BaseEffect {
|
|
11
|
+
constructor(options = {}) {
|
|
12
|
+
super();
|
|
13
|
+
this.name = "Decrypt";
|
|
14
|
+
this.description = "Movie-style text decryption effect with typing animation";
|
|
15
|
+
this.characterStates = new Map();
|
|
16
|
+
this.animationFrameCount = 0;
|
|
17
|
+
this.totalFrames = 0;
|
|
18
|
+
this.typingQueue = [];
|
|
19
|
+
this.activeTypingChars = new Set();
|
|
20
|
+
this.decryptingChars = new Set();
|
|
21
|
+
this._isEffectComplete = false;
|
|
22
|
+
// Character sets for encryption
|
|
23
|
+
this.encryptedSymbols = [];
|
|
24
|
+
this.typingSymbols = ["▉", "▓", "▒", "░"];
|
|
25
|
+
this.options = {
|
|
26
|
+
duration: 5000,
|
|
27
|
+
typingSpeed: 1,
|
|
28
|
+
ciphertextColors: ["008000", "00cb00", "00ff00"],
|
|
29
|
+
finalColor: "eda000",
|
|
30
|
+
useGradient: true,
|
|
31
|
+
gradientDirection: "vertical",
|
|
32
|
+
typingProbability: 0.75,
|
|
33
|
+
fastReveal: false,
|
|
34
|
+
revealCompletionRatio: 0.3,
|
|
35
|
+
...options,
|
|
36
|
+
};
|
|
37
|
+
this.initializeEncryptedSymbols();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Initialize the pool of encrypted symbols
|
|
41
|
+
*/
|
|
42
|
+
initializeEncryptedSymbols() {
|
|
43
|
+
// Keyboard characters
|
|
44
|
+
for (let i = 33; i < 127; i++) {
|
|
45
|
+
this.encryptedSymbols.push(String.fromCharCode(i));
|
|
46
|
+
}
|
|
47
|
+
// Box drawing characters
|
|
48
|
+
for (let i = 9472; i < 9599; i++) {
|
|
49
|
+
this.encryptedSymbols.push(String.fromCharCode(i));
|
|
50
|
+
}
|
|
51
|
+
// Block characters
|
|
52
|
+
for (let i = 9608; i < 9632; i++) {
|
|
53
|
+
this.encryptedSymbols.push(String.fromCharCode(i));
|
|
54
|
+
}
|
|
55
|
+
// Misc symbols
|
|
56
|
+
for (let i = 174; i < 452; i++) {
|
|
57
|
+
this.encryptedSymbols.push(String.fromCharCode(i));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Initialize the effect
|
|
62
|
+
*/
|
|
63
|
+
onInitialize() {
|
|
64
|
+
this.totalFrames = Math.floor((this.options.duration / 1000) * this.config.frameRate);
|
|
65
|
+
// Initialize character states
|
|
66
|
+
this.characterStates.clear();
|
|
67
|
+
this.typingQueue = [...this.characters];
|
|
68
|
+
this.activeTypingChars.clear();
|
|
69
|
+
this.decryptingChars.clear();
|
|
70
|
+
// Shuffle typing queue for random order
|
|
71
|
+
this.shuffleArray(this.typingQueue);
|
|
72
|
+
// Calculate final colors for gradient effect
|
|
73
|
+
const dimensions = this.getCanvasDimensions();
|
|
74
|
+
const gradientColors = this.calculateGradientColors(dimensions);
|
|
75
|
+
for (const char of this.characters) {
|
|
76
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
77
|
+
let finalColor = this.options.finalColor;
|
|
78
|
+
if (this.options.useGradient) {
|
|
79
|
+
const gradientKey = this.options.gradientDirection === "vertical"
|
|
80
|
+
? char.originalPosition.y
|
|
81
|
+
: char.originalPosition.x;
|
|
82
|
+
finalColor = gradientColors[gradientKey] || this.options.finalColor;
|
|
83
|
+
}
|
|
84
|
+
this.characterStates.set(key, {
|
|
85
|
+
phase: "hidden",
|
|
86
|
+
typingFrame: 0,
|
|
87
|
+
decryptStartTime: -1,
|
|
88
|
+
currentSymbol: char.originalSymbol,
|
|
89
|
+
currentColor: this.getRandomCiphertextColor(),
|
|
90
|
+
finalColor,
|
|
91
|
+
decryptSpeed: Math.floor(Math.random() * 3) + 2,
|
|
92
|
+
decryptChangesRemaining: Math.floor(Math.random() * 15) + 80,
|
|
93
|
+
discoveryFrame: 0,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
this.animationFrameCount = 0;
|
|
97
|
+
this._isEffectComplete = false;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Calculate gradient colors based on dimensions
|
|
101
|
+
*/
|
|
102
|
+
calculateGradientColors(dimensions) {
|
|
103
|
+
const gradientMap = {};
|
|
104
|
+
const size = this.options.gradientDirection === "vertical"
|
|
105
|
+
? dimensions.height
|
|
106
|
+
: dimensions.width;
|
|
107
|
+
// Simple linear gradient from ciphertext color to final color
|
|
108
|
+
const startColor = this.options.ciphertextColors[this.options.ciphertextColors.length - 1];
|
|
109
|
+
for (let i = 0; i < size; i++) {
|
|
110
|
+
const factor = i / (size - 1);
|
|
111
|
+
gradientMap[i] = this.interpolateColor(startColor, this.options.finalColor, factor);
|
|
112
|
+
}
|
|
113
|
+
return gradientMap;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Render the next frame
|
|
117
|
+
*/
|
|
118
|
+
async render() {
|
|
119
|
+
if (!this.isInitialized) {
|
|
120
|
+
throw new Error("Effect not initialized");
|
|
121
|
+
}
|
|
122
|
+
// Update animation state
|
|
123
|
+
this.updateAnimationState();
|
|
124
|
+
// Create the frame
|
|
125
|
+
const dimensions = this.getCanvasDimensions();
|
|
126
|
+
const frame = Array(dimensions.height)
|
|
127
|
+
.fill("")
|
|
128
|
+
.map(() => Array(dimensions.width).fill(" "));
|
|
129
|
+
// Render characters
|
|
130
|
+
for (const char of this.characters) {
|
|
131
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
132
|
+
const state = this.characterStates.get(key);
|
|
133
|
+
if (state && state.phase !== "hidden") {
|
|
134
|
+
const visual = this.createCharacterVisual(char, state);
|
|
135
|
+
char.visual = visual;
|
|
136
|
+
const { x, y } = char.currentPosition;
|
|
137
|
+
if (y >= 0 && y < dimensions.height && x >= 0 && x < dimensions.width) {
|
|
138
|
+
// Apply ANSI color codes
|
|
139
|
+
const colorCode = this.getColorCode(visual.colors.fg);
|
|
140
|
+
const resetCode = ANSI.reset;
|
|
141
|
+
frame[y][x] = colorCode + visual.symbol + resetCode;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
this.animationFrameCount++;
|
|
146
|
+
// Convert frame to strings
|
|
147
|
+
return frame.map((row) => row.join(""));
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Update animation state for all characters
|
|
151
|
+
*/
|
|
152
|
+
updateAnimationState() {
|
|
153
|
+
// Phase 1: Typing animation
|
|
154
|
+
if (this.typingQueue.length > 0 || this.activeTypingChars.size > 0) {
|
|
155
|
+
this.updateTypingPhase();
|
|
156
|
+
}
|
|
157
|
+
else if (this.decryptingChars.size === 0) {
|
|
158
|
+
// Transition to decryption phase
|
|
159
|
+
for (const char of this.characters) {
|
|
160
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
161
|
+
const state = this.characterStates.get(key);
|
|
162
|
+
if (state) {
|
|
163
|
+
state.phase = "fast_decrypt";
|
|
164
|
+
state.decryptStartTime = this.animationFrameCount;
|
|
165
|
+
this.decryptingChars.add(key);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Phase 2: Decryption animation
|
|
170
|
+
if (this.decryptingChars.size > 0) {
|
|
171
|
+
this.updateDecryptionPhase();
|
|
172
|
+
}
|
|
173
|
+
// Check if effect is complete
|
|
174
|
+
this._isEffectComplete = this.checkCompletion();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Update typing phase animation
|
|
178
|
+
*/
|
|
179
|
+
updateTypingPhase() {
|
|
180
|
+
// Start typing new characters
|
|
181
|
+
if (this.typingQueue.length > 0 && Math.random() < this.options.typingProbability) {
|
|
182
|
+
for (let i = 0; i < this.options.typingSpeed && this.typingQueue.length > 0; i++) {
|
|
183
|
+
const char = this.typingQueue.shift();
|
|
184
|
+
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
185
|
+
const state = this.characterStates.get(key);
|
|
186
|
+
if (state) {
|
|
187
|
+
state.phase = "typing";
|
|
188
|
+
state.typingFrame = 0;
|
|
189
|
+
this.activeTypingChars.add(key);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Update active typing characters
|
|
194
|
+
for (const key of this.activeTypingChars) {
|
|
195
|
+
const state = this.characterStates.get(key);
|
|
196
|
+
if (state) {
|
|
197
|
+
state.typingFrame++;
|
|
198
|
+
// Complete typing animation after showing all typing symbols
|
|
199
|
+
if (state.typingFrame > this.typingSymbols.length * 2 + 4) {
|
|
200
|
+
state.phase = "fast_decrypt";
|
|
201
|
+
this.activeTypingChars.delete(key);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Update decryption phase animation
|
|
208
|
+
*/
|
|
209
|
+
updateDecryptionPhase() {
|
|
210
|
+
const completedKeys = [];
|
|
211
|
+
for (const key of this.decryptingChars) {
|
|
212
|
+
const state = this.characterStates.get(key);
|
|
213
|
+
if (!state)
|
|
214
|
+
continue;
|
|
215
|
+
const framesSinceStart = this.animationFrameCount - state.decryptStartTime;
|
|
216
|
+
if (state.phase === "fast_decrypt") {
|
|
217
|
+
// Fast decrypt phase - rapid symbol changes
|
|
218
|
+
if (framesSinceStart % 3 === 0) {
|
|
219
|
+
state.currentSymbol = this.getRandomEncryptedSymbol();
|
|
220
|
+
state.decryptChangesRemaining--;
|
|
221
|
+
}
|
|
222
|
+
// Transition to slow decrypt after initial burst
|
|
223
|
+
if (state.decryptChangesRemaining <= 15) {
|
|
224
|
+
state.phase = "slow_decrypt";
|
|
225
|
+
state.decryptSpeed = Math.floor(Math.random() * 50) + 25;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
else if (state.phase === "slow_decrypt") {
|
|
229
|
+
// Slow decrypt phase - less frequent changes
|
|
230
|
+
if (framesSinceStart % state.decryptSpeed === 0) {
|
|
231
|
+
state.currentSymbol = this.getRandomEncryptedSymbol();
|
|
232
|
+
state.decryptChangesRemaining--;
|
|
233
|
+
// 30% chance of extra long duration
|
|
234
|
+
if (Math.random() < 0.3) {
|
|
235
|
+
state.decryptSpeed = Math.floor(Math.random() * 75) + 50;
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
state.decryptSpeed = Math.floor(Math.random() * 5) + 5;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
// Transition to discovered
|
|
242
|
+
if (state.decryptChangesRemaining <= 0) {
|
|
243
|
+
state.phase = "discovered";
|
|
244
|
+
state.discoveryFrame = 0;
|
|
245
|
+
const [x, y] = key.split(",").map(Number);
|
|
246
|
+
const char = this.characters.find(c => c.originalPosition.x === x && c.originalPosition.y === y);
|
|
247
|
+
if (char) {
|
|
248
|
+
state.currentSymbol = char.originalSymbol;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else if (state.phase === "discovered") {
|
|
253
|
+
// Discovery fade-in effect
|
|
254
|
+
state.discoveryFrame++;
|
|
255
|
+
if (state.discoveryFrame > 10) {
|
|
256
|
+
completedKeys.push(key);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Remove completed characters from decrypting set
|
|
261
|
+
for (const key of completedKeys) {
|
|
262
|
+
this.decryptingChars.delete(key);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Create visual representation of a character
|
|
267
|
+
*/
|
|
268
|
+
createCharacterVisual(char, state) {
|
|
269
|
+
let symbol = char.originalSymbol;
|
|
270
|
+
let color = state.currentColor;
|
|
271
|
+
switch (state.phase) {
|
|
272
|
+
case "typing":
|
|
273
|
+
// Typing animation with block characters
|
|
274
|
+
const typingIndex = Math.floor(state.typingFrame / 2) % this.typingSymbols.length;
|
|
275
|
+
symbol = state.typingFrame < this.typingSymbols.length * 2
|
|
276
|
+
? this.typingSymbols[typingIndex]
|
|
277
|
+
: state.currentSymbol;
|
|
278
|
+
color = this.getRandomCiphertextColor();
|
|
279
|
+
break;
|
|
280
|
+
case "fast_decrypt":
|
|
281
|
+
case "slow_decrypt":
|
|
282
|
+
symbol = state.currentSymbol;
|
|
283
|
+
color = state.currentColor;
|
|
284
|
+
break;
|
|
285
|
+
case "discovered":
|
|
286
|
+
// Fade from white to final color
|
|
287
|
+
const fadeFactor = Math.min(state.discoveryFrame / 10, 1);
|
|
288
|
+
color = this.interpolateColor("ffffff", state.finalColor, fadeFactor);
|
|
289
|
+
symbol = char.originalSymbol;
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
symbol,
|
|
294
|
+
colors: {
|
|
295
|
+
fg: color,
|
|
296
|
+
bg: null,
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get a random ciphertext color
|
|
302
|
+
*/
|
|
303
|
+
getRandomCiphertextColor() {
|
|
304
|
+
return this.options.ciphertextColors[Math.floor(Math.random() * this.options.ciphertextColors.length)];
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Get a random encrypted symbol
|
|
308
|
+
*/
|
|
309
|
+
getRandomEncryptedSymbol() {
|
|
310
|
+
return this.encryptedSymbols[Math.floor(Math.random() * this.encryptedSymbols.length)];
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Check if the effect is complete
|
|
314
|
+
*/
|
|
315
|
+
checkCompletion() {
|
|
316
|
+
if (this.animationFrameCount >= this.totalFrames) {
|
|
317
|
+
return true;
|
|
318
|
+
}
|
|
319
|
+
for (const state of this.characterStates.values()) {
|
|
320
|
+
if (state.phase !== "discovered" || state.discoveryFrame < 10) {
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return true;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Shuffle array in place
|
|
328
|
+
*/
|
|
329
|
+
shuffleArray(array) {
|
|
330
|
+
for (let i = array.length - 1; i > 0; i--) {
|
|
331
|
+
const j = Math.floor(Math.random() * (i + 1));
|
|
332
|
+
[array[i], array[j]] = [array[j], array[i]];
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Get ANSI color code for a color
|
|
337
|
+
*/
|
|
338
|
+
getColorCode(color) {
|
|
339
|
+
if (!color || this.config.noColor) {
|
|
340
|
+
return "";
|
|
341
|
+
}
|
|
342
|
+
// For RGB colors, convert to ANSI 24-bit color
|
|
343
|
+
if (typeof color === "string") {
|
|
344
|
+
const r = parseInt(color.substring(0, 2), 16);
|
|
345
|
+
const g = parseInt(color.substring(2, 4), 16);
|
|
346
|
+
const b = parseInt(color.substring(4, 6), 16);
|
|
347
|
+
return `\x1b[38;2;${r};${g};${b}m`;
|
|
348
|
+
}
|
|
349
|
+
// For XTerm colors
|
|
350
|
+
return `\x1b[38;5;${color}m`;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Interpolate between two colors
|
|
354
|
+
*/
|
|
355
|
+
interpolateColor(color1, color2, factor) {
|
|
356
|
+
const r1 = parseInt(color1.substring(0, 2), 16);
|
|
357
|
+
const g1 = parseInt(color1.substring(2, 4), 16);
|
|
358
|
+
const b1 = parseInt(color1.substring(4, 6), 16);
|
|
359
|
+
const r2 = parseInt(color2.substring(0, 2), 16);
|
|
360
|
+
const g2 = parseInt(color2.substring(2, 4), 16);
|
|
361
|
+
const b2 = parseInt(color2.substring(4, 6), 16);
|
|
362
|
+
const r = Math.round(r1 + (r2 - r1) * factor);
|
|
363
|
+
const g = Math.round(g1 + (g2 - g1) * factor);
|
|
364
|
+
const b = Math.round(b1 + (b2 - b1) * factor);
|
|
365
|
+
return [r, g, b]
|
|
366
|
+
.map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
|
|
367
|
+
.join("");
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* Render fallback for when effects are disabled
|
|
371
|
+
*/
|
|
372
|
+
renderFallback() {
|
|
373
|
+
return this.text.split("\n");
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Check if effect is complete
|
|
377
|
+
*/
|
|
378
|
+
isComplete() {
|
|
379
|
+
return this._isEffectComplete;
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* Reset the effect
|
|
383
|
+
*/
|
|
384
|
+
onReset() {
|
|
385
|
+
this.characterStates.clear();
|
|
386
|
+
this.typingQueue = [];
|
|
387
|
+
this.activeTypingChars.clear();
|
|
388
|
+
this.decryptingChars.clear();
|
|
389
|
+
this.animationFrameCount = 0;
|
|
390
|
+
this._isEffectComplete = false;
|
|
391
|
+
this.onInitialize();
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
//# sourceMappingURL=decrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/effects/implementations/decrypt.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,GAKX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAyCnC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,UAAU;IAiB3C,YAAY,UAAgC,EAAE;QAC5C,KAAK,EAAE,CAAC;QAjBD,SAAI,GAAG,SAAS,CAAC;QACjB,gBAAW,GAAG,0DAA0D,CAAC;QAG1E,oBAAe,GAAuC,IAAI,GAAG,EAAE,CAAC;QAChE,wBAAmB,GAAW,CAAC,CAAC;QAChC,gBAAW,GAAW,CAAC,CAAC;QACxB,gBAAW,GAAsB,EAAE,CAAC;QACpC,sBAAiB,GAAgB,IAAI,GAAG,EAAE,CAAC;QAC3C,oBAAe,GAAgB,IAAI,GAAG,EAAE,CAAC;QACzC,sBAAiB,GAAY,KAAK,CAAC;QAE3C,gCAAgC;QACf,qBAAgB,GAAa,EAAE,CAAC;QAChC,kBAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAIpD,IAAI,CAAC,OAAO,GAAG;YACb,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;YAChD,UAAU,EAAE,QAAQ;YACpB,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,UAAU;YAC7B,iBAAiB,EAAE,IAAI;YACvB,UAAU,EAAE,KAAK;YACjB,qBAAqB,EAAE,GAAG;YAC1B,GAAG,OAAO;SACX,CAAC;QACF,IAAI,CAAC,0BAA0B,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACK,0BAA0B;QAChC,sBAAsB;QACtB,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,yBAAyB;QACzB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,mBAAmB;QACnB,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;QACD,eAAe;QACf,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED;;OAEG;IACO,YAAY;QACpB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAC3B,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CACvD,CAAC;QAEF,8BAA8B;QAC9B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAE7B,wCAAwC;QACxC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEpC,6CAA6C;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,MAAM,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;QAEhE,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;YACpE,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAEzC,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU;oBAC/D,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBACzB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;gBAC5B,UAAU,GAAG,cAAc,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YACtE,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC5B,KAAK,EAAE,QAAQ;gBACf,WAAW,EAAE,CAAC;gBACd,gBAAgB,EAAE,CAAC,CAAC;gBACpB,aAAa,EAAE,IAAI,CAAC,cAAc;gBAClC,YAAY,EAAE,IAAI,CAAC,wBAAwB,EAAE;gBAC7C,UAAU;gBACV,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC;gBAC/C,uBAAuB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE;gBAC5D,cAAc,EAAE,CAAC;aAClB,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;IACjC,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,UAA8B;QAC5D,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,KAAK,UAAU;YACxD,CAAC,CAAC,UAAU,CAAC,MAAM;YACnB,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QAErB,8DAA8D;QAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE3F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC9B,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACtF,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,yBAAyB;QACzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,mBAAmB;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC9C,MAAM,KAAK,GAAe,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;aAC/C,IAAI,CAAC,EAAE,CAAC;aACR,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhD,oBAAoB;QACpB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;YACpE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAE5C,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACtC,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBAErB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,EAAE,CAAC;oBACtE,yBAAyB;oBACzB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,2BAA2B;QAC3B,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACK,oBAAoB;QAC1B,4BAA4B;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC3B,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3C,iCAAiC;YACjC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;oBAC7B,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC;oBAClD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;QACH,CAAC;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAClC,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;QAED,8BAA8B;QAC9B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;IAClD,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,8BAA8B;QAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAClF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACjF,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAG,CAAC;gBACvC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;gBACpE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5C,IAAI,KAAK,EAAE,CAAC;oBACV,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;oBACvB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;YACH,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,WAAW,EAAE,CAAC;gBAEpB,6DAA6D;gBAC7D,IAAI,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1D,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;oBAC7B,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACrC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK;gBAAE,SAAS;YAErB,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,gBAAgB,CAAC;YAE3E,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBACnC,4CAA4C;gBAC5C,IAAI,gBAAgB,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBACtD,KAAK,CAAC,uBAAuB,EAAE,CAAC;gBAClC,CAAC;gBAED,iDAAiD;gBACjD,IAAI,KAAK,CAAC,uBAAuB,IAAI,EAAE,EAAE,CAAC;oBACxC,KAAK,CAAC,KAAK,GAAG,cAAc,CAAC;oBAC7B,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;gBAC3D,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,cAAc,EAAE,CAAC;gBAC1C,6CAA6C;gBAC7C,IAAI,gBAAgB,GAAG,KAAK,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;oBAChD,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;oBACtD,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBAEhC,oCAAoC;oBACpC,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC;wBACxB,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;oBAC3D,CAAC;yBAAM,CAAC;wBACN,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;oBACzD,CAAC;gBACH,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,EAAE,CAAC;oBACvC,KAAK,CAAC,KAAK,GAAG,YAAY,CAAC;oBAC3B,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC;oBACzB,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAC/B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,CAC9D,CAAC;oBACF,IAAI,IAAI,EAAE,CAAC;wBACT,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;oBAC5C,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,EAAE,CAAC;gBACxC,2BAA2B;gBAC3B,KAAK,CAAC,cAAc,EAAE,CAAC;gBAEvB,IAAI,KAAK,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC;oBAC9B,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,kDAAkD;QAClD,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAC3B,IAAqB,EACrB,KAA4B;QAE5B,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;QACjC,IAAI,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;QAE/B,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,QAAQ;gBACX,yCAAyC;gBACzC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;gBAClF,MAAM,GAAG,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;oBACxD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;oBACjC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC;gBACxB,KAAK,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBACxC,MAAM;YAER,KAAK,cAAc,CAAC;YACpB,KAAK,cAAc;gBACjB,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC7B,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC;gBAC3B,MAAM;YAER,KAAK,YAAY;gBACf,iCAAiC;gBACjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1D,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACtE,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC7B,MAAM;QACV,CAAC;QAED,OAAO;YACL,MAAM;YACN,MAAM,EAAE;gBACN,EAAE,EAAE,KAAK;gBACT,EAAE,EAAE,IAAI;aACT;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAClC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACjE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,wBAAwB;QAC9B,OAAO,IAAI,CAAC,gBAAgB,CAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CACzD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YAClD,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,CAAC,cAAc,GAAG,EAAE,EAAE,CAAC;gBAC9D,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,YAAY,CAAI,KAAU;QAChC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,KAAY;QAC/B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,+CAA+C;QAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QACrC,CAAC;QAED,mBAAmB;QACnB,OAAO,aAAa,KAAK,GAAG,CAAC;IAC/B,CAAC;IAED;;OAEG;IACK,gBAAgB,CACtB,MAAc,EACd,MAAc,EACd,MAAc;QAEd,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC;QAE9C,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;aACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;aACvE,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;OAEG;IACO,OAAO;QACf,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Blackhole Effect with ASCII Art Center
|
|
3
|
+
* Characters are consumed by a black hole with custom ASCII art and explode outwards
|
|
4
|
+
*/
|
|
5
|
+
import { BaseEffect } from "../types.js";
|
|
6
|
+
/**
|
|
7
|
+
* Configuration options for the Blackhole effect
|
|
8
|
+
*/
|
|
9
|
+
export interface BlackholeEffectOptions {
|
|
10
|
+
/** Duration in milliseconds */
|
|
11
|
+
duration?: number;
|
|
12
|
+
/** Color for the blackhole border stars */
|
|
13
|
+
blackholeColor?: string;
|
|
14
|
+
/** Colors for stars during explosion */
|
|
15
|
+
starColors?: string[];
|
|
16
|
+
/** Final color for characters */
|
|
17
|
+
finalColor?: string;
|
|
18
|
+
/** Use gradient for final color */
|
|
19
|
+
useGradient?: boolean;
|
|
20
|
+
/** Gradient direction */
|
|
21
|
+
gradientDirection?: "vertical" | "horizontal" | "diagonal";
|
|
22
|
+
/** Size of the blackhole relative to canvas (0.1 - 0.5) */
|
|
23
|
+
blackholeSize?: number;
|
|
24
|
+
/** ASCII art to display at the center */
|
|
25
|
+
centerAsciiArt?: string[];
|
|
26
|
+
/** Color for the center ASCII art */
|
|
27
|
+
centerArtColor?: string;
|
|
28
|
+
/** Whether to animate the center art */
|
|
29
|
+
animateCenterArt?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Blackhole effect implementation
|
|
33
|
+
*/
|
|
34
|
+
export declare class TestBlackholeEffect extends BaseEffect {
|
|
35
|
+
readonly name = "Blackhole";
|
|
36
|
+
readonly description = "Characters are consumed by a black hole with ASCII art center and explode outwards";
|
|
37
|
+
private options;
|
|
38
|
+
private characterStates;
|
|
39
|
+
private animationFrameCount;
|
|
40
|
+
private totalFrames;
|
|
41
|
+
private _isEffectComplete;
|
|
42
|
+
private currentPhase;
|
|
43
|
+
private blackholeCenter;
|
|
44
|
+
private blackholeRadius;
|
|
45
|
+
private blackholeChars;
|
|
46
|
+
private centerArtChars;
|
|
47
|
+
private centerArtBounds;
|
|
48
|
+
private readonly starSymbols;
|
|
49
|
+
private readonly starfieldColors;
|
|
50
|
+
private readonly defaultPiArt;
|
|
51
|
+
constructor(options?: BlackholeEffectOptions);
|
|
52
|
+
/**
|
|
53
|
+
* Parse ASCII art into character positions
|
|
54
|
+
*/
|
|
55
|
+
private parseAsciiArt;
|
|
56
|
+
/**
|
|
57
|
+
* Initialize the effect
|
|
58
|
+
*/
|
|
59
|
+
protected onInitialize(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Calculate gradient colors
|
|
62
|
+
*/
|
|
63
|
+
private calculateGradientColors;
|
|
64
|
+
/**
|
|
65
|
+
* Get gradient key based on direction
|
|
66
|
+
*/
|
|
67
|
+
private getGradientKey;
|
|
68
|
+
/**
|
|
69
|
+
* Render the next frame
|
|
70
|
+
*/
|
|
71
|
+
render(): Promise<string[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Render center ASCII art
|
|
74
|
+
*/
|
|
75
|
+
private renderCenterArt;
|
|
76
|
+
/**
|
|
77
|
+
* Update animation state for all characters
|
|
78
|
+
*/
|
|
79
|
+
private updateAnimationState;
|
|
80
|
+
/**
|
|
81
|
+
* Update individual character position
|
|
82
|
+
*/
|
|
83
|
+
private updateCharacterPosition;
|
|
84
|
+
/**
|
|
85
|
+
* Create visual representation of a character
|
|
86
|
+
*/
|
|
87
|
+
private createCharacterVisual;
|
|
88
|
+
/**
|
|
89
|
+
* Calculate distance between two coordinates
|
|
90
|
+
*/
|
|
91
|
+
private calculateDistance;
|
|
92
|
+
/**
|
|
93
|
+
* Get ANSI color code for a color
|
|
94
|
+
*/
|
|
95
|
+
private getColorCode;
|
|
96
|
+
/**
|
|
97
|
+
* Interpolate between two colors
|
|
98
|
+
*/
|
|
99
|
+
private interpolateColor;
|
|
100
|
+
/**
|
|
101
|
+
* Render fallback for when effects are disabled
|
|
102
|
+
*/
|
|
103
|
+
renderFallback(): string[];
|
|
104
|
+
/**
|
|
105
|
+
* Check if effect is complete
|
|
106
|
+
*/
|
|
107
|
+
isComplete(): boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Reset the effect
|
|
110
|
+
*/
|
|
111
|
+
protected onReset(): void;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/effects/implementations/test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EAMX,MAAM,aAAa,CAAC;AAGrB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,yBAAyB;IACzB,iBAAiB,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;IAC3D,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAkCD;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,wFACmE;IAEvF,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,eAAe,CAAmD;IAC1E,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,iBAAiB,CAAkB;IAG3C,OAAO,CAAC,YAAY,CAKO;IAG3B,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,cAAc,CAAyB;IAG/C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,eAAe,CAA2B;IAGlD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAO9B;IAGF,OAAO,CAAC,QAAQ,CAAC,YAAY,CA+B3B;gBAEU,OAAO,GAAE,sBAA2B;IAiBhD;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IA8F9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwC/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA8CjC;;OAEG;IACH,OAAO,CAAC,eAAe;IA2FvB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAyB5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwI/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkE7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAIzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,cAAc,IAAI,MAAM,EAAE;IAI1B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,OAAO,IAAI,IAAI;CAS1B"}
|