favicon-animate-utils 0.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/dist/index.js ADDED
@@ -0,0 +1,505 @@
1
+ import { BadgeRenderer, canvasToDataUrl, createCanvas, getFaviconLink } from 'favicon-animate';
2
+ export * from 'favicon-animate';
3
+
4
+ /**
5
+ * Simple Event Emitter for favicon-animate
6
+ */
7
+ class EventEmitter {
8
+ constructor() {
9
+ this.events = new Map();
10
+ }
11
+ /**
12
+ * Register event listener
13
+ */
14
+ on(event, listener) {
15
+ if (!this.events.has(event)) {
16
+ this.events.set(event, new Set());
17
+ }
18
+ this.events.get(event).add(listener);
19
+ // Return unsubscribe function
20
+ return () => {
21
+ this.off(event, listener);
22
+ };
23
+ }
24
+ /**
25
+ * Register one-time event listener
26
+ */
27
+ once(event, listener) {
28
+ const wrapper = (...args) => {
29
+ listener(...args);
30
+ this.off(event, wrapper);
31
+ };
32
+ return this.on(event, wrapper);
33
+ }
34
+ /**
35
+ * Remove event listener
36
+ */
37
+ off(event, listener) {
38
+ if (!this.events.has(event))
39
+ return;
40
+ this.events.get(event).delete(listener);
41
+ if (this.events.get(event).size === 0) {
42
+ this.events.delete(event);
43
+ }
44
+ }
45
+ /**
46
+ * Remove all listeners for an event
47
+ */
48
+ removeAllListeners(event) {
49
+ if (event) {
50
+ this.events.delete(event);
51
+ }
52
+ else {
53
+ this.events.clear();
54
+ }
55
+ }
56
+ /**
57
+ * Emit event
58
+ */
59
+ emit(event, ...args) {
60
+ if (!this.events.has(event))
61
+ return false;
62
+ this.events.get(event).forEach(listener => {
63
+ try {
64
+ listener(...args);
65
+ }
66
+ catch (error) {
67
+ console.error(`Error in listener for event "${event}":`, error);
68
+ }
69
+ });
70
+ return true;
71
+ }
72
+ /**
73
+ * Get listener count for event
74
+ */
75
+ listenerCount(event) {
76
+ return this.events.get(event)?.size || 0;
77
+ }
78
+ /**
79
+ * Get all event names
80
+ */
81
+ eventNames() {
82
+ return Array.from(this.events.keys());
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Canvas Animator for custom favicon animations
88
+ */
89
+ class CanvasAnimator {
90
+ constructor(options) {
91
+ this.animationFrameId = null;
92
+ this.startTime = 0;
93
+ this.isRunning = false;
94
+ this.isPaused = false;
95
+ /**
96
+ * Internal animation loop
97
+ */
98
+ this.animate = () => {
99
+ if (!this.isRunning || this.isPaused)
100
+ return;
101
+ const now = performance.now();
102
+ const elapsed = now - this.startTime;
103
+ // Calculate progress (0 to 1)
104
+ let progress = this.duration > 0 ? (elapsed % this.duration) / this.duration : (elapsed % 1000) / 1000;
105
+ // Clear canvas
106
+ this.ctx.clearRect(0, 0, this.size, this.size);
107
+ // Call frame callback
108
+ try {
109
+ this.frame(this.ctx, progress);
110
+ }
111
+ catch (error) {
112
+ console.error('Error in animation frame:', error);
113
+ }
114
+ // Draw badge if configured
115
+ if (this.badge) {
116
+ try {
117
+ BadgeRenderer.drawBadge(this.ctx, this.badge, this.size);
118
+ }
119
+ catch (error) {
120
+ console.error('Error drawing badge:', error);
121
+ }
122
+ }
123
+ // Update favicon
124
+ this.faviconLink.href = canvasToDataUrl(this.canvas);
125
+ // Check if animation should continue
126
+ if (this.duration > 0 && elapsed >= this.duration) {
127
+ if (this.loop) {
128
+ this.startTime = now;
129
+ }
130
+ else {
131
+ this.stop();
132
+ return;
133
+ }
134
+ }
135
+ // Schedule next frame
136
+ const frameInterval = 1000 / this.fps;
137
+ this.animationFrameId = window.setTimeout(() => {
138
+ this.animationFrameId = window.requestAnimationFrame(this.animate);
139
+ }, frameInterval);
140
+ };
141
+ const { size = 32, frame, duration = 0, fps = 60, badge = null, loop = true, pauseOnHidden = true } = options;
142
+ this.size = size;
143
+ this.frame = frame;
144
+ this.duration = duration;
145
+ this.fps = Math.max(1, fps);
146
+ this.badge = badge;
147
+ this.loop = loop;
148
+ this.pauseOnHidden = pauseOnHidden;
149
+ // Create canvas
150
+ this.canvas = createCanvas(size);
151
+ this.ctx = this.canvas.getContext('2d');
152
+ this.faviconLink = getFaviconLink();
153
+ // Setup visibility listener if needed
154
+ if (pauseOnHidden) {
155
+ this.setupVisibilityListener();
156
+ }
157
+ }
158
+ setupVisibilityListener() {
159
+ document.addEventListener('visibilitychange', () => {
160
+ if (document.hidden) {
161
+ this.pause();
162
+ }
163
+ else if (this.isRunning) {
164
+ this.resume();
165
+ }
166
+ });
167
+ }
168
+ /**
169
+ * Start animation
170
+ */
171
+ start() {
172
+ if (this.isRunning)
173
+ return;
174
+ this.isRunning = true;
175
+ this.isPaused = false;
176
+ this.startTime = performance.now();
177
+ this.animate();
178
+ }
179
+ /**
180
+ * Pause animation
181
+ */
182
+ pause() {
183
+ if (!this.isRunning || this.isPaused)
184
+ return;
185
+ this.isPaused = true;
186
+ if (this.animationFrameId !== null) {
187
+ cancelAnimationFrame(this.animationFrameId);
188
+ this.animationFrameId = null;
189
+ }
190
+ }
191
+ /**
192
+ * Resume animation
193
+ */
194
+ resume() {
195
+ if (!this.isRunning || !this.isPaused)
196
+ return;
197
+ this.isPaused = false;
198
+ this.startTime = performance.now() - (this.startTime || 0);
199
+ this.animate();
200
+ }
201
+ /**
202
+ * Stop animation
203
+ */
204
+ stop() {
205
+ this.isRunning = false;
206
+ this.isPaused = false;
207
+ if (this.animationFrameId !== null) {
208
+ cancelAnimationFrame(this.animationFrameId);
209
+ this.animationFrameId = null;
210
+ }
211
+ }
212
+ /**
213
+ * Set badge
214
+ */
215
+ setBadge(badge) {
216
+ this.badge = badge;
217
+ }
218
+ /**
219
+ * Update badge number
220
+ */
221
+ updateBadge(number) {
222
+ if (!this.badge)
223
+ return;
224
+ this.badge.number = number;
225
+ }
226
+ /**
227
+ * Get animation state
228
+ */
229
+ getIsRunning() {
230
+ return this.isRunning;
231
+ }
232
+ /**
233
+ * Get pause state
234
+ */
235
+ getIsPaused() {
236
+ return this.isPaused;
237
+ }
238
+ /**
239
+ * Cleanup
240
+ */
241
+ destroy() {
242
+ this.stop();
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Theme Manager for favicon-animate
248
+ * Handles light/dark mode and custom themes
249
+ */
250
+ class ThemeManager extends EventEmitter {
251
+ constructor() {
252
+ super();
253
+ this.currentTheme = 'auto';
254
+ this.themes = new Map();
255
+ this.mediaQuery = null;
256
+ this.boundHandleMediaChange = null;
257
+ this.initializeMediaQuery();
258
+ }
259
+ initializeMediaQuery() {
260
+ if (typeof window !== 'undefined' && window.matchMedia) {
261
+ this.mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
262
+ this.boundHandleMediaChange = this.handleMediaChange.bind(this);
263
+ if (this.mediaQuery.addEventListener) {
264
+ this.mediaQuery.addEventListener('change', this.boundHandleMediaChange);
265
+ }
266
+ else {
267
+ // Fallback for older browsers
268
+ this.mediaQuery.addListener(this.boundHandleMediaChange);
269
+ }
270
+ }
271
+ }
272
+ handleMediaChange() {
273
+ if (this.currentTheme === 'auto') {
274
+ this.emit('theme-change', this.getEffectiveTheme());
275
+ }
276
+ }
277
+ /**
278
+ * Register a theme
279
+ */
280
+ registerTheme(name, config) {
281
+ this.themes.set(name, config);
282
+ }
283
+ /**
284
+ * Get registered theme
285
+ */
286
+ getTheme(name) {
287
+ return this.themes.get(name);
288
+ }
289
+ /**
290
+ * Set current theme
291
+ */
292
+ setTheme(theme) {
293
+ if (this.currentTheme !== theme) {
294
+ this.currentTheme = theme;
295
+ this.emit('theme-change', this.getEffectiveTheme());
296
+ }
297
+ }
298
+ /**
299
+ * Get current theme setting
300
+ */
301
+ getCurrentTheme() {
302
+ return this.currentTheme;
303
+ }
304
+ /**
305
+ * Get effective theme (resolves 'auto')
306
+ */
307
+ getEffectiveTheme() {
308
+ if (this.currentTheme === 'auto') {
309
+ return this.getSystemTheme();
310
+ }
311
+ return this.currentTheme;
312
+ }
313
+ /**
314
+ * Get system theme preference
315
+ */
316
+ getSystemTheme() {
317
+ if (this.mediaQuery) {
318
+ return this.mediaQuery.matches ? 'dark' : 'light';
319
+ }
320
+ return 'light';
321
+ }
322
+ /**
323
+ * Get favicon URL for current theme
324
+ */
325
+ getFaviconUrl(themeConfig) {
326
+ const effectiveTheme = this.getEffectiveTheme();
327
+ return effectiveTheme === 'dark' ? themeConfig.dark : themeConfig.light;
328
+ }
329
+ /**
330
+ * Toggle between light and dark
331
+ */
332
+ toggle() {
333
+ const current = this.getEffectiveTheme();
334
+ this.setTheme(current === 'light' ? 'dark' : 'light');
335
+ }
336
+ /**
337
+ * Cleanup
338
+ */
339
+ destroy() {
340
+ if (this.mediaQuery && this.boundHandleMediaChange) {
341
+ if (this.mediaQuery.removeEventListener) {
342
+ this.mediaQuery.removeEventListener('change', this.boundHandleMediaChange);
343
+ }
344
+ else {
345
+ // Fallback for older browsers
346
+ this.mediaQuery.removeListener(this.boundHandleMediaChange);
347
+ }
348
+ }
349
+ this.removeAllListeners();
350
+ }
351
+ }
352
+
353
+ /**
354
+ * Animation presets for favicon-animate
355
+ */
356
+ /**
357
+ * Spinning loader animation
358
+ */
359
+ const spinningLoader = (ctx, progress) => {
360
+ const size = ctx.canvas.width;
361
+ const centerX = size / 2;
362
+ const centerY = size / 2;
363
+ const radius = size / 3;
364
+ // Draw background circle
365
+ ctx.fillStyle = '#f0f0f0';
366
+ ctx.beginPath();
367
+ ctx.arc(centerX, centerY, radius, 0, Math.PI * 2);
368
+ ctx.fill();
369
+ // Draw spinning arc
370
+ ctx.strokeStyle = '#0066cc';
371
+ ctx.lineWidth = 3;
372
+ ctx.lineCap = 'round';
373
+ ctx.beginPath();
374
+ ctx.arc(centerX, centerY, radius, progress * Math.PI * 2, progress * Math.PI * 2 + Math.PI);
375
+ ctx.stroke();
376
+ };
377
+ /**
378
+ * Pulsing animation
379
+ */
380
+ const pulsing = (ctx, progress) => {
381
+ const size = ctx.canvas.width;
382
+ const centerX = size / 2;
383
+ const centerY = size / 2;
384
+ // Calculate pulsing scale
385
+ const scale = 0.5 + Math.sin(progress * Math.PI * 2) * 0.5;
386
+ // Draw pulsing circle
387
+ ctx.fillStyle = '#ff6b6b';
388
+ ctx.beginPath();
389
+ ctx.arc(centerX, centerY, (size / 3) * scale, 0, Math.PI * 2);
390
+ ctx.fill();
391
+ // Draw outer ring
392
+ ctx.strokeStyle = `rgba(255, 107, 107, ${1 - scale})`;
393
+ ctx.lineWidth = 2;
394
+ ctx.beginPath();
395
+ ctx.arc(centerX, centerY, (size / 2) * scale, 0, Math.PI * 2);
396
+ ctx.stroke();
397
+ };
398
+ /**
399
+ * Bouncing dot animation
400
+ */
401
+ const bouncingDot = (ctx, progress) => {
402
+ const size = ctx.canvas.width;
403
+ // Calculate bounce position
404
+ const bounceProgress = Math.abs(Math.sin(progress * Math.PI));
405
+ const y = (size / 4) + bounceProgress * (size / 2);
406
+ // Draw dot
407
+ ctx.fillStyle = '#4ecdc4';
408
+ ctx.beginPath();
409
+ ctx.arc(size / 2, y, size / 6, 0, Math.PI * 2);
410
+ ctx.fill();
411
+ // Draw trail
412
+ ctx.strokeStyle = 'rgba(78, 205, 196, 0.3)';
413
+ ctx.lineWidth = 1;
414
+ ctx.beginPath();
415
+ ctx.moveTo(size / 2, size / 4);
416
+ ctx.lineTo(size / 2, size * 0.75);
417
+ ctx.stroke();
418
+ };
419
+ /**
420
+ * Rotating square animation
421
+ */
422
+ const rotatingSquare = (ctx, progress) => {
423
+ const size = ctx.canvas.width;
424
+ const centerX = size / 2;
425
+ const centerY = size / 2;
426
+ const squareSize = size / 3;
427
+ ctx.save();
428
+ ctx.translate(centerX, centerY);
429
+ ctx.rotate(progress * Math.PI * 2);
430
+ ctx.fillStyle = '#a78bfa';
431
+ ctx.fillRect(-squareSize / 2, -squareSize / 2, squareSize, squareSize);
432
+ ctx.restore();
433
+ };
434
+ /**
435
+ * Wave animation
436
+ */
437
+ const wave = (ctx, progress) => {
438
+ const size = ctx.canvas.width;
439
+ const amplitude = size / 6;
440
+ const frequency = 3;
441
+ const centerY = size / 2;
442
+ ctx.strokeStyle = '#06b6d4';
443
+ ctx.lineWidth = 2;
444
+ ctx.beginPath();
445
+ for (let x = 0; x < size; x += 1) {
446
+ const y = centerY + Math.sin((x / size + progress) * Math.PI * 2 * frequency) * amplitude;
447
+ if (x === 0) {
448
+ ctx.moveTo(x, y);
449
+ }
450
+ else {
451
+ ctx.lineTo(x, y);
452
+ }
453
+ }
454
+ ctx.stroke();
455
+ };
456
+ /**
457
+ * Gradient fade animation
458
+ */
459
+ const gradientFade = (ctx, progress) => {
460
+ const size = ctx.canvas.width;
461
+ // Create gradient
462
+ const gradient = ctx.createLinearGradient(0, 0, size, 0);
463
+ gradient.addColorStop(0, `rgba(255, 107, 107, ${progress})`);
464
+ gradient.addColorStop(0.5, `rgba(255, 193, 7, ${progress})`);
465
+ gradient.addColorStop(1, `rgba(76, 175, 80, ${progress})`);
466
+ ctx.fillStyle = gradient;
467
+ ctx.fillRect(0, 0, size, size);
468
+ };
469
+ /**
470
+ * Blinking animation
471
+ */
472
+ const blinking = (ctx, progress) => {
473
+ const size = ctx.canvas.width;
474
+ // Blink effect (on for 0.7 of cycle, off for 0.3)
475
+ const opacity = progress < 0.7 ? 1 : 0;
476
+ ctx.fillStyle = `rgba(100, 200, 255, ${opacity})`;
477
+ ctx.beginPath();
478
+ ctx.arc(size / 2, size / 2, size / 3, 0, Math.PI * 2);
479
+ ctx.fill();
480
+ };
481
+ /**
482
+ * All available presets
483
+ */
484
+ const animationPresets = {
485
+ spinningLoader,
486
+ pulsing,
487
+ bouncingDot,
488
+ rotatingSquare,
489
+ wave,
490
+ gradientFade,
491
+ blinking
492
+ };
493
+ /**
494
+ * Get preset by name
495
+ */
496
+ function getPreset(name) {
497
+ const preset = animationPresets[name];
498
+ if (!preset) {
499
+ throw new Error(`Unknown animation preset: ${name}`);
500
+ }
501
+ return preset;
502
+ }
503
+
504
+ export { CanvasAnimator, EventEmitter, ThemeManager, animationPresets, blinking, bouncingDot, getPreset, gradientFade, pulsing, rotatingSquare, spinningLoader, wave };
505
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../src/event-emitter.ts","../src/canvas-animator.ts","../src/theme-manager.ts","../src/presets.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "favicon-animate-utils",
3
+ "version": "0.1.0",
4
+ "description": "Advanced utilities for favicon-animate: GIF/WebP parsing, canvas animations, events, themes",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "scripts": {
19
+ "build": "rollup -c",
20
+ "dev": "rollup -c -w",
21
+ "test": "vitest",
22
+ "lint": "eslint src",
23
+ "format": "prettier --write src"
24
+ },
25
+ "keywords": [
26
+ "favicon",
27
+ "animate",
28
+ "gif",
29
+ "webp",
30
+ "canvas",
31
+ "events",
32
+ "theme"
33
+ ],
34
+ "author": "Daniel Belintani <daniel.belintani@hotmail.com>",
35
+ "license": "MIT",
36
+ "dependencies": {
37
+ "favicon-animate": "workspace:*"
38
+ },
39
+ "devDependencies": {
40
+ "@rollup/plugin-typescript": "^11.0.0",
41
+ "@types/node": "^20.0.0",
42
+ "rollup": "^4.0.0",
43
+ "typescript": "^5.3.0",
44
+ "vitest": "^1.0.0"
45
+ }
46
+ }