@kya-os/cli 1.0.0-beta.9 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -2
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +60 -15
- package/dist/commands/init.js.map +1 -1
- package/dist/components/agent-card.js +2 -2
- package/dist/components/agent-card.js.map +1 -1
- package/dist/components/agent-table.js +19 -19
- package/dist/components/agent-table.js.map +1 -1
- package/dist/components/welcome.js +1 -1
- package/dist/effects/cli-integration.js +8 -8
- package/dist/effects/cli-integration.js.map +1 -1
- package/dist/effects/config.d.ts +10 -86
- package/dist/effects/config.d.ts.map +1 -1
- package/dist/effects/config.js +18 -201
- package/dist/effects/config.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/utils/platform-detector.js +3 -3
- package/dist/utils/platform-detector.js.map +1 -1
- package/dist/utils/screen-manager.js +5 -1
- package/dist/utils/screen-manager.js.map +1 -1
- package/dist/utils/validation.d.ts +9 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +3 -0
- package/dist/utils/validation.js.map +1 -1
- package/package.json +4 -3
- package/dist/effects/animation-engine.d.ts +0 -173
- package/dist/effects/animation-engine.d.ts.map +0 -1
- package/dist/effects/animation-engine.js +0 -254
- package/dist/effects/animation-engine.js.map +0 -1
- package/dist/effects/effect-runner.d.ts +0 -69
- package/dist/effects/effect-runner.d.ts.map +0 -1
- package/dist/effects/effect-runner.js +0 -255
- package/dist/effects/effect-runner.js.map +0 -1
- package/dist/effects/gradient.d.ts +0 -131
- package/dist/effects/gradient.d.ts.map +0 -1
- package/dist/effects/gradient.js +0 -236
- package/dist/effects/gradient.js.map +0 -1
- package/dist/effects/implementations/beams.d.ts +0 -80
- package/dist/effects/implementations/beams.d.ts.map +0 -1
- package/dist/effects/implementations/beams.js +0 -221
- package/dist/effects/implementations/beams.js.map +0 -1
- package/dist/effects/implementations/blackhole.d.ts +0 -98
- package/dist/effects/implementations/blackhole.d.ts.map +0 -1
- package/dist/effects/implementations/blackhole.js +0 -421
- package/dist/effects/implementations/blackhole.js.map +0 -1
- package/dist/effects/implementations/burn.d.ts +0 -74
- package/dist/effects/implementations/burn.d.ts.map +0 -1
- package/dist/effects/implementations/burn.js +0 -234
- package/dist/effects/implementations/burn.js.map +0 -1
- package/dist/effects/implementations/decrypt.d.ts +0 -115
- package/dist/effects/implementations/decrypt.d.ts.map +0 -1
- package/dist/effects/implementations/decrypt.js +0 -394
- package/dist/effects/implementations/decrypt.js.map +0 -1
- package/dist/effects/implementations/waves.d.ts +0 -78
- package/dist/effects/implementations/waves.d.ts.map +0 -1
- package/dist/effects/implementations/waves.js +0 -278
- package/dist/effects/implementations/waves.js.map +0 -1
- package/dist/effects/index.d.ts +0 -34
- package/dist/effects/index.d.ts.map +0 -1
- package/dist/effects/index.js +0 -114
- package/dist/effects/index.js.map +0 -1
- package/dist/effects/motion-engine.d.ts +0 -168
- package/dist/effects/motion-engine.d.ts.map +0 -1
- package/dist/effects/motion-engine.js +0 -353
- package/dist/effects/motion-engine.js.map +0 -1
- package/dist/effects/safe-executor.d.ts +0 -55
- package/dist/effects/safe-executor.d.ts.map +0 -1
- package/dist/effects/safe-executor.js +0 -210
- package/dist/effects/safe-executor.js.map +0 -1
- package/dist/effects/types.d.ts +0 -199
- package/dist/effects/types.d.ts.map +0 -1
- package/dist/effects/types.js +0 -80
- package/dist/effects/types.js.map +0 -1
- package/dist/effects/utils.d.ts +0 -104
- package/dist/effects/utils.d.ts.map +0 -1
- package/dist/effects/utils.js +0 -280
- package/dist/effects/utils.js.map +0 -1
|
@@ -1,278 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Waves Effect
|
|
3
|
-
* Creates wave patterns that travel across the text
|
|
4
|
-
*/
|
|
5
|
-
import { BaseEffect, } from "../types.js";
|
|
6
|
-
import { ANSI } from "../utils.js";
|
|
7
|
-
import { Gradient, GradientDirection, EASING } from "../gradient.js";
|
|
8
|
-
/**
|
|
9
|
-
* Waves effect implementation
|
|
10
|
-
*/
|
|
11
|
-
export class WavesEffect extends BaseEffect {
|
|
12
|
-
constructor(options = {}) {
|
|
13
|
-
super();
|
|
14
|
-
this.name = "Waves";
|
|
15
|
-
this.description = "Creates wave patterns that travel across the text";
|
|
16
|
-
this.characterStates = new Map();
|
|
17
|
-
this.animationFrameCount = 0;
|
|
18
|
-
this.totalFrames = 0;
|
|
19
|
-
this.wavePosition = 0;
|
|
20
|
-
this._isEffectComplete = false;
|
|
21
|
-
this.options = {
|
|
22
|
-
duration: 4000,
|
|
23
|
-
waveColors: ["0080ff", "00a0ff", "00c0ff", "00e0ff", "00ffff", "80ffff", "ffffff"],
|
|
24
|
-
finalColor: "ffffff",
|
|
25
|
-
waveSpeed: 0.15,
|
|
26
|
-
waveFrequency: 2,
|
|
27
|
-
waveAmplitude: 3,
|
|
28
|
-
direction: "horizontal",
|
|
29
|
-
useGradient: true,
|
|
30
|
-
...options,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Initialize the effect
|
|
35
|
-
*/
|
|
36
|
-
onInitialize() {
|
|
37
|
-
this.totalFrames = Math.floor((this.options.duration / 1000) * this.config.frameRate);
|
|
38
|
-
// Create gradient if enabled
|
|
39
|
-
if (this.options.useGradient) {
|
|
40
|
-
this.gradient = new Gradient({
|
|
41
|
-
stops: this.options.waveColors,
|
|
42
|
-
steps: 10,
|
|
43
|
-
direction: this.options.direction === "vertical"
|
|
44
|
-
? GradientDirection.HORIZONTAL
|
|
45
|
-
: GradientDirection.VERTICAL,
|
|
46
|
-
easingFn: EASING.inOutSine,
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
// Initialize character states
|
|
50
|
-
this.characterStates.clear();
|
|
51
|
-
const dimensions = this.getCanvasDimensions();
|
|
52
|
-
for (const char of this.characters) {
|
|
53
|
-
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
54
|
-
// Calculate wave offset based on position and direction
|
|
55
|
-
let waveOffset = 0;
|
|
56
|
-
switch (this.options.direction) {
|
|
57
|
-
case "horizontal":
|
|
58
|
-
waveOffset = char.originalPosition.x / dimensions.width;
|
|
59
|
-
break;
|
|
60
|
-
case "vertical":
|
|
61
|
-
waveOffset = char.originalPosition.y / dimensions.height;
|
|
62
|
-
break;
|
|
63
|
-
case "diagonal":
|
|
64
|
-
waveOffset = (char.originalPosition.x + char.originalPosition.y) /
|
|
65
|
-
(dimensions.width + dimensions.height);
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
this.characterStates.set(key, {
|
|
69
|
-
phase: "waiting",
|
|
70
|
-
waveOffset,
|
|
71
|
-
waveIntensity: 0,
|
|
72
|
-
originalY: char.originalPosition.y,
|
|
73
|
-
currentWaveY: char.originalPosition.y,
|
|
74
|
-
colorIndex: 0,
|
|
75
|
-
settleProgress: 0,
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
this.wavePosition = -0.5; // Start wave off-screen
|
|
79
|
-
this.animationFrameCount = 0;
|
|
80
|
-
this._isEffectComplete = false;
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Render the next frame
|
|
84
|
-
*/
|
|
85
|
-
async render() {
|
|
86
|
-
if (!this.isInitialized) {
|
|
87
|
-
throw new Error("Effect not initialized");
|
|
88
|
-
}
|
|
89
|
-
// Update animation state
|
|
90
|
-
this.updateAnimationState();
|
|
91
|
-
// Create the frame
|
|
92
|
-
const dimensions = this.getCanvasDimensions();
|
|
93
|
-
const frame = Array(dimensions.height)
|
|
94
|
-
.fill("")
|
|
95
|
-
.map(() => Array(dimensions.width).fill(" "));
|
|
96
|
-
// Render characters
|
|
97
|
-
for (const char of this.characters) {
|
|
98
|
-
const key = `${char.originalPosition.x},${char.originalPosition.y}`;
|
|
99
|
-
const state = this.characterStates.get(key);
|
|
100
|
-
if (state) {
|
|
101
|
-
const visual = this.createCharacterVisual(char, state);
|
|
102
|
-
char.visual = visual;
|
|
103
|
-
// Use wave-displaced position for horizontal/diagonal waves
|
|
104
|
-
let x = char.originalPosition.x;
|
|
105
|
-
let y = char.originalPosition.y;
|
|
106
|
-
if (this.options.direction !== "vertical" && state.phase === "waving") {
|
|
107
|
-
y = Math.round(state.currentWaveY);
|
|
108
|
-
}
|
|
109
|
-
else if (this.options.direction === "vertical" && state.phase === "waving") {
|
|
110
|
-
// For vertical waves, displace horizontally
|
|
111
|
-
x = Math.round(char.originalPosition.x +
|
|
112
|
-
Math.sin(state.currentWaveY * Math.PI * this.options.waveFrequency) *
|
|
113
|
-
this.options.waveAmplitude);
|
|
114
|
-
}
|
|
115
|
-
if (y >= 0 && y < dimensions.height && x >= 0 && x < dimensions.width) {
|
|
116
|
-
const colorCode = this.getColorCode(visual.colors.fg);
|
|
117
|
-
const resetCode = ANSI.reset;
|
|
118
|
-
frame[y][x] = colorCode + visual.symbol + resetCode;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
this.animationFrameCount++;
|
|
123
|
-
// Convert frame to strings
|
|
124
|
-
return frame.map((row) => row.join(""));
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Update animation state for all characters
|
|
128
|
-
*/
|
|
129
|
-
updateAnimationState() {
|
|
130
|
-
const progress = this.animationFrameCount / this.totalFrames;
|
|
131
|
-
// Update wave position
|
|
132
|
-
this.wavePosition += this.options.waveSpeed;
|
|
133
|
-
// Update character states
|
|
134
|
-
for (const [key, state] of this.characterStates) {
|
|
135
|
-
const [_x, _y] = key.split(",").map(Number);
|
|
136
|
-
// Calculate wave influence
|
|
137
|
-
const waveDistance = Math.abs(this.wavePosition - state.waveOffset);
|
|
138
|
-
const waveInfluence = Math.max(0, 1 - waveDistance * 2);
|
|
139
|
-
if (waveInfluence > 0 && state.phase !== "complete") {
|
|
140
|
-
state.phase = "waving";
|
|
141
|
-
state.waveIntensity = waveInfluence;
|
|
142
|
-
// Calculate wave displacement
|
|
143
|
-
const wavePhase = (state.waveOffset + this.wavePosition) *
|
|
144
|
-
Math.PI * 2 * this.options.waveFrequency;
|
|
145
|
-
const waveHeight = Math.sin(wavePhase) * this.options.waveAmplitude * waveInfluence;
|
|
146
|
-
if (this.options.direction !== "vertical") {
|
|
147
|
-
state.currentWaveY = state.originalY + waveHeight;
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
// For vertical waves, we'll use this for horizontal displacement
|
|
151
|
-
state.currentWaveY = wavePhase;
|
|
152
|
-
}
|
|
153
|
-
// Update color based on wave position
|
|
154
|
-
if (this.gradient) {
|
|
155
|
-
const spectrum = this.gradient.getSpectrum();
|
|
156
|
-
state.colorIndex = Math.floor(waveInfluence * (spectrum.length - 1));
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
state.colorIndex = Math.floor(waveInfluence * (this.options.waveColors.length - 1));
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
else if (state.phase === "waving" && waveInfluence === 0) {
|
|
163
|
-
// Start settling
|
|
164
|
-
state.phase = "settling";
|
|
165
|
-
}
|
|
166
|
-
// Handle settling phase
|
|
167
|
-
if (state.phase === "settling") {
|
|
168
|
-
state.settleProgress += 0.05;
|
|
169
|
-
state.currentWaveY = state.originalY +
|
|
170
|
-
(state.currentWaveY - state.originalY) * (1 - state.settleProgress);
|
|
171
|
-
if (state.settleProgress >= 1) {
|
|
172
|
-
state.phase = "complete";
|
|
173
|
-
state.currentWaveY = state.originalY;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
// Check if effect is complete
|
|
178
|
-
this._isEffectComplete = progress >= 1 ||
|
|
179
|
-
Array.from(this.characterStates.values()).every(s => s.phase === "complete");
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Create visual representation of a character
|
|
183
|
-
*/
|
|
184
|
-
createCharacterVisual(char, state) {
|
|
185
|
-
let color = this.options.finalColor;
|
|
186
|
-
switch (state.phase) {
|
|
187
|
-
case "waiting":
|
|
188
|
-
// Use dimmed color while waiting
|
|
189
|
-
color = "404040";
|
|
190
|
-
break;
|
|
191
|
-
case "waving":
|
|
192
|
-
// Use wave color based on intensity
|
|
193
|
-
if (this.gradient) {
|
|
194
|
-
const spectrum = this.gradient.getSpectrum();
|
|
195
|
-
color = spectrum[state.colorIndex] || spectrum[spectrum.length - 1];
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
color = this.options.waveColors[state.colorIndex] ||
|
|
199
|
-
this.options.waveColors[this.options.waveColors.length - 1];
|
|
200
|
-
}
|
|
201
|
-
break;
|
|
202
|
-
case "settling":
|
|
203
|
-
// Interpolate from wave color to final color
|
|
204
|
-
const waveColor = this.gradient
|
|
205
|
-
? this.gradient.getSpectrum()[0]
|
|
206
|
-
: this.options.waveColors[0];
|
|
207
|
-
color = this.interpolateColor(waveColor, this.options.finalColor, state.settleProgress);
|
|
208
|
-
break;
|
|
209
|
-
case "complete":
|
|
210
|
-
color = this.options.finalColor;
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
return {
|
|
214
|
-
symbol: char.originalSymbol,
|
|
215
|
-
colors: {
|
|
216
|
-
fg: color,
|
|
217
|
-
bg: null,
|
|
218
|
-
},
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
/**
|
|
222
|
-
* Get ANSI color code for a color
|
|
223
|
-
*/
|
|
224
|
-
getColorCode(color) {
|
|
225
|
-
if (!color || this.config.noColor) {
|
|
226
|
-
return "";
|
|
227
|
-
}
|
|
228
|
-
// For RGB colors, convert to ANSI 24-bit color
|
|
229
|
-
if (typeof color === "string") {
|
|
230
|
-
const r = parseInt(color.substring(0, 2), 16);
|
|
231
|
-
const g = parseInt(color.substring(2, 4), 16);
|
|
232
|
-
const b = parseInt(color.substring(4, 6), 16);
|
|
233
|
-
return `\x1b[38;2;${r};${g};${b}m`;
|
|
234
|
-
}
|
|
235
|
-
// For XTerm colors
|
|
236
|
-
return `\x1b[38;5;${color}m`;
|
|
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
|
-
* Render fallback for when effects are disabled
|
|
257
|
-
*/
|
|
258
|
-
renderFallback() {
|
|
259
|
-
return this.text.split("\n");
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Check if effect is complete
|
|
263
|
-
*/
|
|
264
|
-
isComplete() {
|
|
265
|
-
return this._isEffectComplete;
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Reset the effect
|
|
269
|
-
*/
|
|
270
|
-
onReset() {
|
|
271
|
-
this.characterStates.clear();
|
|
272
|
-
this.wavePosition = -0.5;
|
|
273
|
-
this.animationFrameCount = 0;
|
|
274
|
-
this._isEffectComplete = false;
|
|
275
|
-
this.onInitialize();
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
//# sourceMappingURL=waves.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"waves.js","sourceRoot":"","sources":["../../../src/effects/implementations/waves.ts"],"names":[],"mappings":"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"}
|
package/dist/effects/index.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Effect Registry and Exports
|
|
3
|
-
* Uses lazy loading to reduce initial bundle size
|
|
4
|
-
*/
|
|
5
|
-
import { Effect, EffectRegistryEntry } from "./types.js";
|
|
6
|
-
/**
|
|
7
|
-
* Get an effect by name (async with lazy loading)
|
|
8
|
-
*/
|
|
9
|
-
export declare function getEffect(name: string): Promise<Effect | null>;
|
|
10
|
-
/**
|
|
11
|
-
* Get an effect synchronously if already cached
|
|
12
|
-
* For backward compatibility with sync code
|
|
13
|
-
*/
|
|
14
|
-
export declare function getEffectSync(name: string): Effect | null;
|
|
15
|
-
/**
|
|
16
|
-
* Preload specific effects for performance
|
|
17
|
-
*/
|
|
18
|
-
export declare function preloadEffects(...names: string[]): Promise<void>;
|
|
19
|
-
/**
|
|
20
|
-
* Get all available effects (returns basic info without loading)
|
|
21
|
-
*/
|
|
22
|
-
export declare function getAllEffects(): EffectRegistryEntry[];
|
|
23
|
-
export * from "./types.js";
|
|
24
|
-
export * from "./utils.js";
|
|
25
|
-
export * from "./config.js";
|
|
26
|
-
export * from "./safe-executor.js";
|
|
27
|
-
export * from "./effect-runner.js";
|
|
28
|
-
export * from "./cli-integration.js";
|
|
29
|
-
export { Gradient, GradientDirection, GRADIENTS, EASING } from "./gradient.js";
|
|
30
|
-
export { SyncMetric, AnimationEvent, CharacterAnimation, AnimatedCharacter, } from "./animation-engine.js";
|
|
31
|
-
export type { AnimationFrame, AnimationEventHandler, } from "./animation-engine.js";
|
|
32
|
-
export { MotionEvent, CharacterMotion } from "./motion-engine.js";
|
|
33
|
-
export type { Waypoint, Segment, MotionEventHandler } from "./motion-engine.js";
|
|
34
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA4BzD;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGzD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,mBAAmB,EAAE,CAarD;AAwCD,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AAGrC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAG/E,OAAO,EACL,UAAU,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EACV,cAAc,EACd,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGlE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
package/dist/effects/index.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Effect Registry and Exports
|
|
3
|
-
* Uses lazy loading to reduce initial bundle size
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Registry of all available effects (lazy loaded)
|
|
7
|
-
*/
|
|
8
|
-
const lazyEffectRegistry = new Map();
|
|
9
|
-
/**
|
|
10
|
-
* Cache for loaded effect classes
|
|
11
|
-
*/
|
|
12
|
-
const effectClassCache = new Map();
|
|
13
|
-
/**
|
|
14
|
-
* Register a lazy-loaded effect
|
|
15
|
-
*/
|
|
16
|
-
function registerLazyEffect(entry) {
|
|
17
|
-
lazyEffectRegistry.set(entry.name.toLowerCase(), entry);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Get an effect by name (async with lazy loading)
|
|
21
|
-
*/
|
|
22
|
-
export async function getEffect(name) {
|
|
23
|
-
const entry = lazyEffectRegistry.get(name.toLowerCase());
|
|
24
|
-
if (!entry)
|
|
25
|
-
return null;
|
|
26
|
-
try {
|
|
27
|
-
// Check cache first
|
|
28
|
-
let EffectClass = effectClassCache.get(name.toLowerCase());
|
|
29
|
-
if (!EffectClass) {
|
|
30
|
-
// Load the effect class
|
|
31
|
-
EffectClass = await entry.loader();
|
|
32
|
-
effectClassCache.set(name.toLowerCase(), EffectClass);
|
|
33
|
-
}
|
|
34
|
-
return new EffectClass();
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
console.error(`Failed to load effect '${name}':`, error);
|
|
38
|
-
return null;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Get an effect synchronously if already cached
|
|
43
|
-
* For backward compatibility with sync code
|
|
44
|
-
*/
|
|
45
|
-
export function getEffectSync(name) {
|
|
46
|
-
const EffectClass = effectClassCache.get(name.toLowerCase());
|
|
47
|
-
return EffectClass ? new EffectClass() : null;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Preload specific effects for performance
|
|
51
|
-
*/
|
|
52
|
-
export async function preloadEffects(...names) {
|
|
53
|
-
await Promise.all(names.map(name => getEffect(name)));
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* Get all available effects (returns basic info without loading)
|
|
57
|
-
*/
|
|
58
|
-
export function getAllEffects() {
|
|
59
|
-
return Array.from(lazyEffectRegistry.values()).map(entry => ({
|
|
60
|
-
name: entry.name,
|
|
61
|
-
description: entry.description,
|
|
62
|
-
factory: () => {
|
|
63
|
-
// This is a sync factory that throws if effect not loaded
|
|
64
|
-
const EffectClass = effectClassCache.get(entry.name.toLowerCase());
|
|
65
|
-
if (!EffectClass) {
|
|
66
|
-
throw new Error(`Effect '${entry.name}' not loaded. Use getEffect() instead.`);
|
|
67
|
-
}
|
|
68
|
-
return new EffectClass();
|
|
69
|
-
}
|
|
70
|
-
}));
|
|
71
|
-
}
|
|
72
|
-
// Register built-in effects with lazy loading
|
|
73
|
-
registerLazyEffect({
|
|
74
|
-
name: "burn",
|
|
75
|
-
description: "Characters are ignited and burn up the screen",
|
|
76
|
-
loader: async () => (await import("./implementations/burn.js")).BurnEffect,
|
|
77
|
-
});
|
|
78
|
-
registerLazyEffect({
|
|
79
|
-
name: "beams",
|
|
80
|
-
description: "Creates beams which travel over the canvas illuminating the characters",
|
|
81
|
-
loader: async () => (await import("./implementations/beams.js")).BeamsEffect,
|
|
82
|
-
});
|
|
83
|
-
// Binary Path effect removed - was causing issues and blocking demo
|
|
84
|
-
registerLazyEffect({
|
|
85
|
-
name: "decrypt",
|
|
86
|
-
description: "Movie-style text decryption effect with typing animation",
|
|
87
|
-
loader: async () => (await import("./implementations/decrypt.js")).DecryptEffect,
|
|
88
|
-
});
|
|
89
|
-
registerLazyEffect({
|
|
90
|
-
name: "blackhole",
|
|
91
|
-
description: "Characters are consumed by a black hole and explode outwards",
|
|
92
|
-
loader: async () => (await import("./implementations/blackhole.js")).BlackholeEffect,
|
|
93
|
-
});
|
|
94
|
-
registerLazyEffect({
|
|
95
|
-
name: "waves",
|
|
96
|
-
description: "Creates wave patterns that travel across the text",
|
|
97
|
-
loader: async () => (await import("./implementations/waves.js")).WavesEffect,
|
|
98
|
-
});
|
|
99
|
-
// Individual effect classes are now lazy-loaded
|
|
100
|
-
// Use getEffect() to access them
|
|
101
|
-
// Export types
|
|
102
|
-
export * from "./types.js";
|
|
103
|
-
export * from "./utils.js";
|
|
104
|
-
export * from "./config.js";
|
|
105
|
-
export * from "./safe-executor.js";
|
|
106
|
-
export * from "./effect-runner.js";
|
|
107
|
-
export * from "./cli-integration.js";
|
|
108
|
-
// Export gradient system (has createGradient which conflicts with utils)
|
|
109
|
-
export { Gradient, GradientDirection, GRADIENTS, EASING } from "./gradient.js";
|
|
110
|
-
// Export animation engine (has Scene which conflicts with types)
|
|
111
|
-
export { SyncMetric, AnimationEvent, CharacterAnimation, AnimatedCharacter, } from "./animation-engine.js";
|
|
112
|
-
// Export motion engine (has Path which conflicts with types)
|
|
113
|
-
export { MotionEvent, CharacterMotion } from "./motion-engine.js";
|
|
114
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/effects/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Motion Path Engine for Terminal Effects
|
|
3
|
-
* Provides sophisticated character movement with paths, waypoints, and bezier curves
|
|
4
|
-
*/
|
|
5
|
-
import { Coordinate, EasingFunction } from "./types.js";
|
|
6
|
-
/**
|
|
7
|
-
* Waypoint in a motion path
|
|
8
|
-
*/
|
|
9
|
-
export interface Waypoint {
|
|
10
|
-
id: string;
|
|
11
|
-
coordinate: Coordinate;
|
|
12
|
-
/** Optional bezier control point for curved paths */
|
|
13
|
-
bezierControl?: Coordinate;
|
|
14
|
-
/** Hold time at this waypoint (ms) */
|
|
15
|
-
holdTime?: number;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Motion segment between two waypoints
|
|
19
|
-
*/
|
|
20
|
-
export interface Segment {
|
|
21
|
-
start: Waypoint;
|
|
22
|
-
end: Waypoint;
|
|
23
|
-
distance: number;
|
|
24
|
-
/** Bezier curve points if applicable */
|
|
25
|
-
curvePoints?: Coordinate[];
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Motion path for character movement
|
|
29
|
-
*/
|
|
30
|
-
export declare class Path {
|
|
31
|
-
readonly id: string;
|
|
32
|
-
private waypoints;
|
|
33
|
-
private segments;
|
|
34
|
-
private _isLooping;
|
|
35
|
-
private _speed;
|
|
36
|
-
private _easingFn?;
|
|
37
|
-
/** Current position along the path (0-1) */
|
|
38
|
-
private progress;
|
|
39
|
-
/** Current segment index */
|
|
40
|
-
private currentSegmentIndex;
|
|
41
|
-
/** Time spent at current waypoint (for holds) */
|
|
42
|
-
private holdTimeElapsed;
|
|
43
|
-
/** Total path distance */
|
|
44
|
-
private totalDistance;
|
|
45
|
-
constructor(id: string, speed?: number, easingFn?: EasingFunction);
|
|
46
|
-
/**
|
|
47
|
-
* Add a waypoint to the path
|
|
48
|
-
*/
|
|
49
|
-
newWaypoint(coord: Coordinate, waypointId?: string, bezierControl?: Coordinate, holdTime?: number): Waypoint;
|
|
50
|
-
/**
|
|
51
|
-
* Recalculate segments when waypoints change
|
|
52
|
-
*/
|
|
53
|
-
private recalculateSegments;
|
|
54
|
-
/**
|
|
55
|
-
* Calculate bezier curve points
|
|
56
|
-
*/
|
|
57
|
-
private calculateBezierPoints;
|
|
58
|
-
/**
|
|
59
|
-
* Calculate distance between two coordinates
|
|
60
|
-
*/
|
|
61
|
-
private calculateDistance;
|
|
62
|
-
/**
|
|
63
|
-
* Calculate total distance along a path of points
|
|
64
|
-
*/
|
|
65
|
-
private calculatePathDistance;
|
|
66
|
-
/**
|
|
67
|
-
* Set looping behavior
|
|
68
|
-
*/
|
|
69
|
-
setLooping(isLooping: boolean): void;
|
|
70
|
-
/**
|
|
71
|
-
* Set speed
|
|
72
|
-
*/
|
|
73
|
-
setSpeed(speed: number): void;
|
|
74
|
-
/**
|
|
75
|
-
* Get position at current progress
|
|
76
|
-
*/
|
|
77
|
-
getCurrentPosition(): Coordinate;
|
|
78
|
-
/**
|
|
79
|
-
* Get progress within current segment (0-1)
|
|
80
|
-
*/
|
|
81
|
-
private getSegmentProgress;
|
|
82
|
-
/**
|
|
83
|
-
* Update motion progress
|
|
84
|
-
*/
|
|
85
|
-
update(deltaTime: number): void;
|
|
86
|
-
/**
|
|
87
|
-
* Reset the path
|
|
88
|
-
*/
|
|
89
|
-
reset(): void;
|
|
90
|
-
/**
|
|
91
|
-
* Check if path is complete
|
|
92
|
-
*/
|
|
93
|
-
isComplete(): boolean;
|
|
94
|
-
/**
|
|
95
|
-
* Get waypoint count
|
|
96
|
-
*/
|
|
97
|
-
getWaypointCount(): number;
|
|
98
|
-
/**
|
|
99
|
-
* Get total path distance
|
|
100
|
-
*/
|
|
101
|
-
getTotalDistance(): number;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Motion event types
|
|
105
|
-
*/
|
|
106
|
-
export declare enum MotionEvent {
|
|
107
|
-
PATH_COMPLETE = "path_complete",
|
|
108
|
-
PATH_ACTIVATED = "path_activated",
|
|
109
|
-
WAYPOINT_REACHED = "waypoint_reached",
|
|
110
|
-
SEGMENT_ENTERED = "segment_entered"
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* Motion event handler
|
|
114
|
-
*/
|
|
115
|
-
export interface MotionEventHandler {
|
|
116
|
-
event: MotionEvent;
|
|
117
|
-
pathId?: string;
|
|
118
|
-
waypointId?: string;
|
|
119
|
-
callback: () => void;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Character motion manager
|
|
123
|
-
*/
|
|
124
|
-
export declare class CharacterMotion {
|
|
125
|
-
private paths;
|
|
126
|
-
private activePath;
|
|
127
|
-
private lastUpdateTime;
|
|
128
|
-
private eventHandlers;
|
|
129
|
-
private currentPosition;
|
|
130
|
-
constructor(initialPosition: Coordinate);
|
|
131
|
-
/**
|
|
132
|
-
* Create a new path
|
|
133
|
-
*/
|
|
134
|
-
newPath(pathId: string, speed?: number, easingFn?: EasingFunction): Path;
|
|
135
|
-
/**
|
|
136
|
-
* Get a path by ID
|
|
137
|
-
*/
|
|
138
|
-
queryPath(pathId: string): Path | undefined;
|
|
139
|
-
/**
|
|
140
|
-
* Activate a path
|
|
141
|
-
*/
|
|
142
|
-
activatePath(path: Path): void;
|
|
143
|
-
/**
|
|
144
|
-
* Set position directly
|
|
145
|
-
*/
|
|
146
|
-
setCoordinate(coord: Coordinate): void;
|
|
147
|
-
/**
|
|
148
|
-
* Update motion and get current position
|
|
149
|
-
*/
|
|
150
|
-
update(): Coordinate;
|
|
151
|
-
/**
|
|
152
|
-
* Register an event handler
|
|
153
|
-
*/
|
|
154
|
-
registerEvent(event: MotionEvent, pathId: string, callback: () => void, waypointId?: string): void;
|
|
155
|
-
/**
|
|
156
|
-
* Trigger an event
|
|
157
|
-
*/
|
|
158
|
-
private triggerEvent;
|
|
159
|
-
/**
|
|
160
|
-
* Reset all paths
|
|
161
|
-
*/
|
|
162
|
-
reset(): void;
|
|
163
|
-
/**
|
|
164
|
-
* Get current position
|
|
165
|
-
*/
|
|
166
|
-
getCurrentPosition(): Coordinate;
|
|
167
|
-
}
|
|
168
|
-
//# sourceMappingURL=motion-engine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"motion-engine.d.ts","sourceRoot":"","sources":["../../src/effects/motion-engine.ts"],"names":[],"mappings":"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"}
|