@kya-os/cli 0.1.0-beta.1 → 0.1.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +210 -34
  2. package/dist/commands/check.d.ts.map +1 -1
  3. package/dist/commands/check.js +73 -57
  4. package/dist/commands/check.js.map +1 -1
  5. package/dist/commands/claim.js +33 -39
  6. package/dist/commands/claim.js.map +1 -1
  7. package/dist/commands/cli-experience-demo-simple.d.ts +14 -0
  8. package/dist/commands/cli-experience-demo-simple.d.ts.map +1 -0
  9. package/dist/commands/cli-experience-demo-simple.js +119 -0
  10. package/dist/commands/cli-experience-demo-simple.js.map +1 -0
  11. package/dist/commands/cli-experience-demo.d.ts +14 -0
  12. package/dist/commands/cli-experience-demo.d.ts.map +1 -0
  13. package/dist/commands/cli-experience-demo.js +172 -0
  14. package/dist/commands/cli-experience-demo.js.map +1 -0
  15. package/dist/commands/effects-demo.d.ts +10 -0
  16. package/dist/commands/effects-demo.d.ts.map +1 -0
  17. package/dist/commands/effects-demo.js +292 -0
  18. package/dist/commands/effects-demo.js.map +1 -0
  19. package/dist/commands/env.d.ts.map +1 -1
  20. package/dist/commands/env.js +55 -51
  21. package/dist/commands/env.js.map +1 -1
  22. package/dist/commands/init.d.ts +1 -0
  23. package/dist/commands/init.d.ts.map +1 -1
  24. package/dist/commands/init.js +527 -102
  25. package/dist/commands/init.js.map +1 -1
  26. package/dist/commands/rotate.d.ts.map +1 -1
  27. package/dist/commands/rotate.js +81 -60
  28. package/dist/commands/rotate.js.map +1 -1
  29. package/dist/dev.d.ts +7 -0
  30. package/dist/dev.d.ts.map +1 -0
  31. package/dist/dev.js +9 -0
  32. package/dist/dev.js.map +1 -0
  33. package/dist/effects/__tests__/effects.test.d.ts +5 -0
  34. package/dist/effects/__tests__/effects.test.d.ts.map +1 -0
  35. package/dist/effects/__tests__/effects.test.js +206 -0
  36. package/dist/effects/__tests__/effects.test.js.map +1 -0
  37. package/dist/effects/animation-engine.d.ts +173 -0
  38. package/dist/effects/animation-engine.d.ts.map +1 -0
  39. package/dist/effects/animation-engine.js +254 -0
  40. package/dist/effects/animation-engine.js.map +1 -0
  41. package/dist/effects/cli-integration.d.ts +86 -0
  42. package/dist/effects/cli-integration.d.ts.map +1 -0
  43. package/dist/effects/cli-integration.js +309 -0
  44. package/dist/effects/cli-integration.js.map +1 -0
  45. package/dist/effects/config.d.ts +95 -0
  46. package/dist/effects/config.d.ts.map +1 -0
  47. package/dist/effects/config.js +216 -0
  48. package/dist/effects/config.js.map +1 -0
  49. package/dist/effects/effect-runner.d.ts +69 -0
  50. package/dist/effects/effect-runner.d.ts.map +1 -0
  51. package/dist/effects/effect-runner.js +255 -0
  52. package/dist/effects/effect-runner.js.map +1 -0
  53. package/dist/effects/gradient.d.ts +131 -0
  54. package/dist/effects/gradient.d.ts.map +1 -0
  55. package/dist/effects/gradient.js +236 -0
  56. package/dist/effects/gradient.js.map +1 -0
  57. package/dist/effects/implementations/beams.d.ts +80 -0
  58. package/dist/effects/implementations/beams.d.ts.map +1 -0
  59. package/dist/effects/implementations/beams.js +221 -0
  60. package/dist/effects/implementations/beams.js.map +1 -0
  61. package/dist/effects/implementations/binary-path.d.ts +88 -0
  62. package/dist/effects/implementations/binary-path.d.ts.map +1 -0
  63. package/dist/effects/implementations/binary-path.js +296 -0
  64. package/dist/effects/implementations/binary-path.js.map +1 -0
  65. package/dist/effects/implementations/blackhole.d.ts +98 -0
  66. package/dist/effects/implementations/blackhole.d.ts.map +1 -0
  67. package/dist/effects/implementations/blackhole.js +394 -0
  68. package/dist/effects/implementations/blackhole.js.map +1 -0
  69. package/dist/effects/implementations/burn.d.ts +74 -0
  70. package/dist/effects/implementations/burn.d.ts.map +1 -0
  71. package/dist/effects/implementations/burn.js +234 -0
  72. package/dist/effects/implementations/burn.js.map +1 -0
  73. package/dist/effects/implementations/decrypt.d.ts +115 -0
  74. package/dist/effects/implementations/decrypt.d.ts.map +1 -0
  75. package/dist/effects/implementations/decrypt.js +394 -0
  76. package/dist/effects/implementations/decrypt.js.map +1 -0
  77. package/dist/effects/implementations/test.d.ts +113 -0
  78. package/dist/effects/implementations/test.d.ts.map +1 -0
  79. package/dist/effects/implementations/test.js +552 -0
  80. package/dist/effects/implementations/test.js.map +1 -0
  81. package/dist/effects/implementations/waves.d.ts +78 -0
  82. package/dist/effects/implementations/waves.d.ts.map +1 -0
  83. package/dist/effects/implementations/waves.js +278 -0
  84. package/dist/effects/implementations/waves.js.map +1 -0
  85. package/dist/effects/index.d.ts +37 -0
  86. package/dist/effects/index.d.ts.map +1 -0
  87. package/dist/effects/index.js +79 -0
  88. package/dist/effects/index.js.map +1 -0
  89. package/dist/effects/motion-engine.d.ts +168 -0
  90. package/dist/effects/motion-engine.d.ts.map +1 -0
  91. package/dist/effects/motion-engine.js +353 -0
  92. package/dist/effects/motion-engine.js.map +1 -0
  93. package/dist/effects/safe-executor.d.ts +55 -0
  94. package/dist/effects/safe-executor.d.ts.map +1 -0
  95. package/dist/effects/safe-executor.js +210 -0
  96. package/dist/effects/safe-executor.js.map +1 -0
  97. package/dist/effects/template/effect-template.d.ts +97 -0
  98. package/dist/effects/template/effect-template.d.ts.map +1 -0
  99. package/dist/effects/template/effect-template.js +208 -0
  100. package/dist/effects/template/effect-template.js.map +1 -0
  101. package/dist/effects/types.d.ts +199 -0
  102. package/dist/effects/types.d.ts.map +1 -0
  103. package/dist/effects/types.js +80 -0
  104. package/dist/effects/types.js.map +1 -0
  105. package/dist/effects/utils.d.ts +104 -0
  106. package/dist/effects/utils.d.ts.map +1 -0
  107. package/dist/effects/utils.js +280 -0
  108. package/dist/effects/utils.js.map +1 -0
  109. package/dist/index.d.ts +2 -1
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +52 -51
  112. package/dist/index.js.map +1 -1
  113. package/dist/utils/env-manager.d.ts +66 -2
  114. package/dist/utils/env-manager.d.ts.map +1 -1
  115. package/dist/utils/env-manager.js +355 -65
  116. package/dist/utils/env-manager.js.map +1 -1
  117. package/dist/utils/platform-detector.js +15 -19
  118. package/dist/utils/platform-detector.js.map +1 -1
  119. package/dist/utils/prompts.js +21 -34
  120. package/dist/utils/prompts.js.map +1 -1
  121. package/package.json +10 -5
@@ -0,0 +1,296 @@
1
+ /**
2
+ * Binary Path Effect
3
+ * Creates a binary rain effect that reveals characters
4
+ */
5
+ import { BaseEffect } from "../types.js";
6
+ import { ANSI } from "../utils.js";
7
+ /**
8
+ * Binary Path effect implementation
9
+ */
10
+ export class BinaryPathEffect extends BaseEffect {
11
+ constructor(options = {}) {
12
+ super();
13
+ this.name = "BinaryPath";
14
+ this.description = "Creates a binary rain effect that reveals characters";
15
+ this.streams = [];
16
+ this.characterStates = new Map();
17
+ this.animationFrameCount = 0;
18
+ this.totalFrames = 0;
19
+ this.nextStreamId = 0;
20
+ this._isEffectComplete = false;
21
+ this.options = {
22
+ duration: 4000,
23
+ streamCount: 20,
24
+ fallSpeed: 0.5,
25
+ binaryColors: ["00FF00", "008800"],
26
+ revealColor: "FFFFFF",
27
+ fadeDuration: 500,
28
+ spawnProbability: 0.1,
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.streams = [];
38
+ this.characterStates.clear();
39
+ this.animationFrameCount = 0;
40
+ this.nextStreamId = 0;
41
+ this._isEffectComplete = false;
42
+ // Initialize character states
43
+ for (const char of this.characters) {
44
+ const key = `${char.originalPosition.x},${char.originalPosition.y}`;
45
+ this.characterStates.set(key, {
46
+ revealed: false,
47
+ revealTime: -1,
48
+ fadeProgress: 0,
49
+ });
50
+ }
51
+ // Hide all characters initially
52
+ for (const char of this.characters) {
53
+ char.visual.symbol = " ";
54
+ }
55
+ }
56
+ /**
57
+ * Render the next frame
58
+ */
59
+ async render() {
60
+ if (!this.isInitialized) {
61
+ throw new Error("Effect not initialized");
62
+ }
63
+ // Update streams
64
+ this.updateStreams();
65
+ // Render text line by line
66
+ const lines = this.text.split("\n");
67
+ const renderedLines = [];
68
+ for (let y = 0; y < lines.length; y++) {
69
+ let line = "";
70
+ const chars = [...lines[y]];
71
+ for (let x = 0; x < chars.length; x++) {
72
+ const char = chars[x];
73
+ const key = `${x},${y}`;
74
+ const state = this.characterStates.get(key);
75
+ let renderedChar = " ";
76
+ let color = null;
77
+ // Check if character is revealed
78
+ if (state && state.revealed) {
79
+ renderedChar = char;
80
+ color = this.getRevealedCharacterColor(state);
81
+ }
82
+ else {
83
+ // Check if there's a binary stream at this position
84
+ for (const stream of this.streams) {
85
+ if (!stream.active || stream.x !== x)
86
+ continue;
87
+ for (const segment of stream.trail) {
88
+ const segY = Math.floor(segment.y);
89
+ if (segY === y) {
90
+ renderedChar = segment.char;
91
+ const colorIndex = segment.char === "1" ? 0 : 1;
92
+ const baseColor = this.options.binaryColors[colorIndex];
93
+ color = this.applyFade(baseColor, segment.fade);
94
+ break;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ if (color) {
100
+ const colorCode = this.getColorCode(color);
101
+ const resetCode = ANSI.reset;
102
+ line += colorCode + renderedChar + resetCode;
103
+ }
104
+ else {
105
+ line += renderedChar;
106
+ }
107
+ }
108
+ renderedLines.push(line);
109
+ }
110
+ this.animationFrameCount++;
111
+ return renderedLines;
112
+ }
113
+ /**
114
+ * Update stream positions and states
115
+ */
116
+ updateStreams() {
117
+ const dimensions = this.getCanvasDimensions();
118
+ // Spawn new streams
119
+ if (this.streams.filter((s) => s.active).length < this.options.streamCount &&
120
+ Math.random() < this.options.spawnProbability &&
121
+ this.animationFrameCount < this.totalFrames * 0.8) {
122
+ this.spawnStream();
123
+ }
124
+ // Update existing streams
125
+ for (const stream of this.streams) {
126
+ if (!stream.active)
127
+ continue;
128
+ // Move stream down
129
+ stream.y += stream.speed;
130
+ // Update trail
131
+ stream.trail = stream.trail
132
+ .map((segment) => ({
133
+ ...segment,
134
+ fade: Math.max(0, segment.fade - 0.05),
135
+ }))
136
+ .filter((segment) => segment.fade > 0);
137
+ // Add new segment at the head
138
+ if (stream.y < dimensions.height) {
139
+ stream.trail.unshift({
140
+ y: stream.y,
141
+ char: Math.random() > 0.5 ? "1" : "0",
142
+ fade: 1,
143
+ });
144
+ }
145
+ // Trim trail to max length
146
+ if (stream.trail.length > stream.maxLength) {
147
+ stream.trail = stream.trail.slice(0, stream.maxLength);
148
+ }
149
+ // Check for character collision
150
+ this.checkCharacterCollision(stream);
151
+ // Deactivate if completely off screen
152
+ if (stream.y > dimensions.height + stream.maxLength) {
153
+ stream.active = false;
154
+ }
155
+ }
156
+ // Update revealed characters
157
+ let allRevealed = true;
158
+ for (const [, state] of this.characterStates.entries()) {
159
+ if (state.revealed && state.fadeProgress < 1) {
160
+ const timeSinceReveal = this.animationFrameCount - state.revealTime;
161
+ state.fadeProgress = Math.min(1, timeSinceReveal /
162
+ (this.options.fadeDuration / (1000 / this.config.frameRate)));
163
+ }
164
+ if (!state.revealed) {
165
+ allRevealed = false;
166
+ }
167
+ }
168
+ // Check if effect is complete
169
+ const activeStreams = this.streams.filter((s) => s.active).length;
170
+ this._isEffectComplete =
171
+ allRevealed &&
172
+ activeStreams === 0 &&
173
+ this.animationFrameCount >= this.totalFrames * 0.8;
174
+ }
175
+ /**
176
+ * Spawn a new binary stream
177
+ */
178
+ spawnStream() {
179
+ const dimensions = this.getCanvasDimensions();
180
+ const stream = {
181
+ id: this.nextStreamId++,
182
+ x: Math.floor(Math.random() * dimensions.width),
183
+ y: -1,
184
+ speed: 0.3 + Math.random() * this.options.fallSpeed,
185
+ trail: [],
186
+ active: true,
187
+ maxLength: 5 + Math.floor(Math.random() * 10),
188
+ };
189
+ this.streams.push(stream);
190
+ }
191
+ /**
192
+ * Check if a stream collides with any characters
193
+ */
194
+ checkCharacterCollision(stream) {
195
+ for (const segment of stream.trail) {
196
+ const y = Math.floor(segment.y);
197
+ // Check all characters at this position
198
+ for (const char of this.characters) {
199
+ if (char.originalPosition.x === stream.x &&
200
+ char.originalPosition.y === y) {
201
+ const key = `${char.originalPosition.x},${char.originalPosition.y}`;
202
+ const state = this.characterStates.get(key);
203
+ if (state && !state.revealed) {
204
+ state.revealed = true;
205
+ state.revealTime = this.animationFrameCount;
206
+ state.fadeProgress = 0;
207
+ }
208
+ }
209
+ }
210
+ }
211
+ }
212
+ /**
213
+ * Get color for a revealed character based on fade progress
214
+ */
215
+ getRevealedCharacterColor(state) {
216
+ if (state.fadeProgress >= 1) {
217
+ return this.options.revealColor;
218
+ }
219
+ // Fade from bright green to final color
220
+ const startColor = this.options.binaryColors[0];
221
+ const endColor = this.options.revealColor;
222
+ return this.interpolateColor(startColor, endColor, state.fadeProgress);
223
+ }
224
+ /**
225
+ * Apply fade to a color
226
+ */
227
+ applyFade(color, fade) {
228
+ const r = parseInt(color.substring(0, 2), 16);
229
+ const g = parseInt(color.substring(2, 4), 16);
230
+ const b = parseInt(color.substring(4, 6), 16);
231
+ const fadedR = Math.round(r * fade);
232
+ const fadedG = Math.round(g * fade);
233
+ const fadedB = Math.round(b * fade);
234
+ return [fadedR, fadedG, fadedB]
235
+ .map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
236
+ .join("");
237
+ }
238
+ /**
239
+ * Interpolate between two colors
240
+ */
241
+ interpolateColor(color1, color2, factor) {
242
+ const r1 = parseInt(color1.substring(0, 2), 16);
243
+ const g1 = parseInt(color1.substring(2, 4), 16);
244
+ const b1 = parseInt(color1.substring(4, 6), 16);
245
+ const r2 = parseInt(color2.substring(0, 2), 16);
246
+ const g2 = parseInt(color2.substring(2, 4), 16);
247
+ const b2 = parseInt(color2.substring(4, 6), 16);
248
+ const r = Math.round(r1 + (r2 - r1) * factor);
249
+ const g = Math.round(g1 + (g2 - g1) * factor);
250
+ const b = Math.round(b1 + (b2 - b1) * factor);
251
+ return [r, g, b]
252
+ .map((c) => Math.max(0, Math.min(255, c)).toString(16).padStart(2, "0"))
253
+ .join("");
254
+ }
255
+ /**
256
+ * Get ANSI color code for a color
257
+ */
258
+ getColorCode(color) {
259
+ if (!color || this.config.noColor) {
260
+ return "";
261
+ }
262
+ // For RGB colors, convert to ANSI 24-bit color
263
+ if (typeof color === "string") {
264
+ const r = parseInt(color.substring(0, 2), 16);
265
+ const g = parseInt(color.substring(2, 4), 16);
266
+ const b = parseInt(color.substring(4, 6), 16);
267
+ return `\x1b[38;2;${r};${g};${b}m`;
268
+ }
269
+ // For XTerm colors
270
+ return `\x1b[38;5;${color}m`;
271
+ }
272
+ /**
273
+ * Render fallback for when effects are disabled
274
+ */
275
+ renderFallback() {
276
+ return this.text.split("\n");
277
+ }
278
+ /**
279
+ * Check if effect is complete
280
+ */
281
+ isComplete() {
282
+ return this._isEffectComplete;
283
+ }
284
+ /**
285
+ * Reset the effect
286
+ */
287
+ onReset() {
288
+ this.streams = [];
289
+ this.characterStates.clear();
290
+ this.animationFrameCount = 0;
291
+ this.nextStreamId = 0;
292
+ this._isEffectComplete = false;
293
+ this.onInitialize();
294
+ }
295
+ }
296
+ //# sourceMappingURL=binary-path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"binary-path.js","sourceRoot":"","sources":["../../../src/effects/implementations/binary-path.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAS,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA4CnC;;GAEG;AACH,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAY9C,YAAY,UAAmC,EAAE;QAC/C,KAAK,EAAE,CAAC;QAZD,SAAI,GAAG,YAAY,CAAC;QACpB,gBAAW,GAAG,sDAAsD,CAAC;QAGtE,YAAO,GAAmB,EAAE,CAAC;QAC7B,oBAAe,GAAsC,IAAI,GAAG,EAAE,CAAC;QAC/D,wBAAmB,GAAW,CAAC,CAAC;QAChC,gBAAW,GAAW,CAAC,CAAC;QACxB,iBAAY,GAAW,CAAC,CAAC;QACzB,sBAAiB,GAAY,KAAK,CAAC;QAIzC,IAAI,CAAC,OAAO,GAAG;YACb,QAAQ,EAAE,IAAI;YACd,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,GAAG;YACd,YAAY,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC;YAClC,WAAW,EAAE,QAAQ;YACrB,YAAY,EAAE,GAAG;YACjB,gBAAgB,EAAE,GAAG;YACrB,GAAG,OAAO;SACX,CAAC;IACJ,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;QACF,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAE/B,8BAA8B;QAC9B,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,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE;gBAC5B,QAAQ,EAAE,KAAK;gBACf,UAAU,EAAE,CAAC,CAAC;gBACd,YAAY,EAAE,CAAC;aAChB,CAAC,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3B,CAAC;IACH,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,iBAAiB;QACjB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,2BAA2B;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,aAAa,GAAa,EAAE,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE5C,IAAI,YAAY,GAAG,GAAG,CAAC;gBACvB,IAAI,KAAK,GAAG,IAAI,CAAC;gBAEjB,iCAAiC;gBACjC,IAAI,KAAK,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBAC5B,YAAY,GAAG,IAAI,CAAC;oBACpB,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACN,oDAAoD;oBACpD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;wBAClC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC;4BAAE,SAAS;wBAE/C,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;4BACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;4BACnC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gCACf,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;gCAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAChD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gCACxD,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;gCAChD,MAAM;4BACR,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,KAAK,EAAE,CAAC;oBACV,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC7B,IAAI,IAAI,SAAS,GAAG,YAAY,GAAG,SAAS,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,IAAI,IAAI,YAAY,CAAC;gBACvB,CAAC;YACH,CAAC;YAED,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE3B,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE9C,oBAAoB;QACpB,IACE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW;YACtE,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC7C,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,EACjD,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;QACrB,CAAC;QAED,0BAA0B;QAC1B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,SAAS;YAE7B,mBAAmB;YACnB,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC;YAEzB,eAAe;YACf,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK;iBACxB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjB,GAAG,OAAO;gBACV,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;aACvC,CAAC,CAAC;iBACF,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAEzC,8BAA8B;YAC9B,IAAI,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;gBACjC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;oBACnB,CAAC,EAAE,MAAM,CAAC,CAAC;oBACX,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;oBACrC,IAAI,EAAE,CAAC;iBACR,CAAC,CAAC;YACL,CAAC;YAED,2BAA2B;YAC3B,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3C,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YACzD,CAAC;YAED,gCAAgC;YAChC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;YAErC,sCAAsC;YACtC,IAAI,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpD,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,6BAA6B;QAC7B,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,UAAU,CAAC;gBACpE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,CAAC,EACD,eAAe;oBACb,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAC/D,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACpB,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QAED,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAClE,IAAI,CAAC,iBAAiB;YACpB,WAAW;gBACX,aAAa,KAAK,CAAC;gBACnB,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,WAAW;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE9C,MAAM,MAAM,GAAiB;YAC3B,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE;YACvB,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;YAC/C,CAAC,EAAE,CAAC,CAAC;YACL,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS;YACnD,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC;SAC9C,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,MAAoB;QAClD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAEhC,wCAAwC;YACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,IACE,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC;oBACpC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAC7B,CAAC;oBACD,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;oBACpE,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAE5C,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;wBAC7B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;wBACtB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC;wBAC5C,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC;oBACzB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAAC,KAA2B;QAC3D,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAClC,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;QAE1C,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAa,EAAE,IAAY;QAC3C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEpC,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAC5B,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;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;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;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,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,mBAAmB,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Blackhole Effect
3
+ * Characters are consumed by a black hole 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
+ }
25
+ /**
26
+ * Blackhole effect implementation
27
+ */
28
+ export declare class BlackholeEffect extends BaseEffect {
29
+ readonly name = "Blackhole";
30
+ readonly description = "Characters are consumed by a black hole and explode outwards";
31
+ private options;
32
+ private characterStates;
33
+ private animationFrameCount;
34
+ private totalFrames;
35
+ private _isEffectComplete;
36
+ private currentPhase;
37
+ private phaseProgress;
38
+ private blackholeCenter;
39
+ private blackholeRadius;
40
+ private blackholeChars;
41
+ private consumptionQueue;
42
+ private readonly starSymbols;
43
+ private readonly starfieldColors;
44
+ constructor(options?: BlackholeEffectOptions);
45
+ /**
46
+ * Initialize the effect
47
+ */
48
+ protected onInitialize(): void;
49
+ /**
50
+ * Calculate gradient colors
51
+ */
52
+ private calculateGradientColors;
53
+ /**
54
+ * Get gradient key based on direction
55
+ */
56
+ private getGradientKey;
57
+ /**
58
+ * Render the next frame
59
+ */
60
+ render(): Promise<string[]>;
61
+ /**
62
+ * Update animation state for all characters
63
+ */
64
+ private updateAnimationState;
65
+ /**
66
+ * Update individual character position
67
+ */
68
+ private updateCharacterPosition;
69
+ /**
70
+ * Create visual representation of a character
71
+ */
72
+ private createCharacterVisual;
73
+ /**
74
+ * Calculate distance between two coordinates
75
+ */
76
+ private calculateDistance;
77
+ /**
78
+ * Get ANSI color code for a color
79
+ */
80
+ private getColorCode;
81
+ /**
82
+ * Interpolate between two colors
83
+ */
84
+ private interpolateColor;
85
+ /**
86
+ * Render fallback for when effects are disabled
87
+ */
88
+ renderFallback(): string[];
89
+ /**
90
+ * Check if effect is complete
91
+ */
92
+ isComplete(): boolean;
93
+ /**
94
+ * Reset the effect
95
+ */
96
+ protected onReset(): void;
97
+ }
98
+ //# sourceMappingURL=blackhole.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blackhole.d.ts","sourceRoot":"","sources":["../../../src/effects/implementations/blackhole.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;CACxB;AAmBD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,WAAW,kEAAkE;IAEtF,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,CAAgF;IAEpG,OAAO,CAAC,aAAa,CAAa;IAGlC,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,cAAc,CAAyB;IAE/C,OAAO,CAAC,gBAAgB,CAAyB;IAGjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAC7E,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAgE;gBAEpF,OAAO,GAAE,sBAA2B;IAchD;;OAEG;IACH,SAAS,CAAC,YAAY,IAAI,IAAI;IA0E9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAyCjC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAuB5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwG/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2D7B;;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;CAU1B"}