favicon-animate 0.1.0 → 0.3.1

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.
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Animation loop manager for favicon frame playback
3
+ */
4
+ import { DecodedFrame } from './frame-decoder';
5
+ import { BadgeConfig } from './types';
6
+ export interface AnimationLoopOptions {
7
+ frames: DecodedFrame[];
8
+ faviconSize: number;
9
+ badge?: BadgeConfig | null;
10
+ loopCount?: number;
11
+ onFrameChange?: (frameIndex: number) => void;
12
+ onAnimationEnd?: () => void;
13
+ }
14
+ /**
15
+ * Manages animation loop for favicon frames
16
+ */
17
+ export declare class AnimationLoop {
18
+ private frames;
19
+ private faviconSize;
20
+ private badge;
21
+ private loopCount;
22
+ private currentFrameIndex;
23
+ private currentLoop;
24
+ private isPlaying;
25
+ private isPaused;
26
+ private nextFrameTimeout;
27
+ private onFrameChange;
28
+ private onAnimationEnd;
29
+ constructor(options: AnimationLoopOptions);
30
+ /**
31
+ * Start animation loop
32
+ */
33
+ play(): void;
34
+ /**
35
+ * Pause animation
36
+ */
37
+ pause(): void;
38
+ /**
39
+ * Resume animation
40
+ */
41
+ resume(): void;
42
+ /**
43
+ * Stop animation and cleanup
44
+ */
45
+ stop(): void;
46
+ /**
47
+ * Get current frame data URL
48
+ */
49
+ getCurrentFrameDataUrl(): string;
50
+ /**
51
+ * Schedule next frame
52
+ */
53
+ private scheduleNextFrame;
54
+ /**
55
+ * Clear scheduled frame timeout
56
+ */
57
+ private clearScheduledFrame;
58
+ /**
59
+ * Check if animation is playing
60
+ */
61
+ getIsPlaying(): boolean;
62
+ /**
63
+ * Get current frame index
64
+ */
65
+ getCurrentFrameIndex(): number;
66
+ /**
67
+ * Update badge during animation
68
+ */
69
+ setBadge(badge: BadgeConfig | null): void;
70
+ /**
71
+ * Get current badge
72
+ */
73
+ getBadge(): BadgeConfig | null;
74
+ /**
75
+ * Get total frames
76
+ */
77
+ getFrameCount(): number;
78
+ /**
79
+ * Cleanup resources
80
+ */
81
+ destroy(): void;
82
+ }
83
+ //# sourceMappingURL=animation-loop.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-loop.d.ts","sourceRoot":"","sources":["../src/animation-loop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,iBAAiB,CAAa;IACtC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,cAAc,CAAsB;gBAEhC,OAAO,EAAE,oBAAoB;IASzC;;OAEG;IACH,IAAI,IAAI,IAAI;IAWZ;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAwBhC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI;IAIzC;;OAEG;IACH,QAAQ,IAAI,WAAW,GAAG,IAAI;IAI9B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,OAAO,IAAI,IAAI;CAGhB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=animation-loop.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"animation-loop.test.d.ts","sourceRoot":"","sources":["../src/animation-loop.test.ts"],"names":[],"mappings":""}
@@ -12,6 +12,10 @@ export declare class FaviconAnimator {
12
12
  private unsubscribeVisibility;
13
13
  private faviconSize;
14
14
  private updateInterval;
15
+ private enableAnimation;
16
+ private animationLoop;
17
+ private decodedFrames;
18
+ private animationFrameId;
15
19
  constructor(options?: AnimatorOptions);
16
20
  /**
17
21
  * Set favicon
@@ -29,6 +33,18 @@ export declare class FaviconAnimator {
29
33
  * Remove badge
30
34
  */
31
35
  removeBadge(): void;
36
+ /**
37
+ * Start animation for GIF/WebP
38
+ */
39
+ private startAnimation;
40
+ /**
41
+ * Stop animation and cleanup
42
+ */
43
+ private stopAnimation;
44
+ /**
45
+ * Update animation frame on favicon
46
+ */
47
+ private updateAnimationFrame;
32
48
  /**
33
49
  * Update favicon display (with badge if configured)
34
50
  */
@@ -1 +1 @@
1
- {"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../src/animator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAYnF;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAe;gBAEzB,OAAO,GAAE,eAAoB;IAoCzC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B/D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IASnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU1C;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;OAEG;YACW,oBAAoB;IAiClC;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,MAAM,IAAI,IAAI;IAMd;;OAEG;IACH,UAAU,IAAI,WAAW,GAAG,IAAI;IAIhC;;OAEG;IACH,QAAQ,IAAI,WAAW,GAAG,IAAI;IAI9B;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAMhB"}
1
+ {"version":3,"file":"animator.d.ts","sourceRoot":"","sources":["../src/animator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAenF;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,aAAa,CAA8B;IACnD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,gBAAgB,CAAuB;gBAEnC,OAAO,GAAE,eAAoB;IAwCzC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0C/D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IASnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAc1C;;OAEG;IACH,WAAW,IAAI,IAAI;IASnB;;OAEG;YACW,cAAc;IAyC5B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B;;OAEG;YACW,oBAAoB;IAiClC;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,MAAM,IAAI,IAAI;IAOd;;OAEG;IACH,UAAU,IAAI,WAAW,GAAG,IAAI;IAIhC;;OAEG;IACH,QAAQ,IAAI,WAAW,GAAG,IAAI;IAI9B;;OAEG;IACH,cAAc,IAAI,OAAO;IAIzB;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../src/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErD;;GAEG;AAEH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAU,GACjB;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAmB3B;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI;IAiCP;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW;CA4CjE"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../src/badge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErD;;GAEG;AAEH,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,GAAE,MAAU,GACjB;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAmB3B;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,GAAG,EAAE,wBAAwB,EAC7B,MAAM,EAAE,WAAW,EACnB,WAAW,EAAE,MAAM,GAClB,IAAI;IAgCP;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW;CA0CjE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CORS and canvas taint handling for animated favicons
3
+ */
4
+ /**
5
+ * Check if canvas is tainted (can't export to data URL)
6
+ */
7
+ export declare function isCanvasTainted(canvas: HTMLCanvasElement): boolean;
8
+ /**
9
+ * Test if an image can be loaded with CORS
10
+ */
11
+ export declare function testCorsImage(url: string, corsMode?: 'cors' | 'no-cors' | 'same-origin'): Promise<boolean>;
12
+ /**
13
+ * Get appropriate CORS mode for URL
14
+ */
15
+ export declare function getCorsMode(url: string): Promise<'cors' | 'no-cors' | 'same-origin'>;
16
+ /**
17
+ * Check if URL is same origin
18
+ */
19
+ export declare function isSameOrigin(url: string): boolean;
20
+ /**
21
+ * Log CORS warning
22
+ */
23
+ export declare function logCorsWarning(url: string, error: Error): void;
24
+ //# sourceMappingURL=cors-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors-handler.d.ts","sourceRoot":"","sources":["../src/cors-handler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAOlE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,GAAG,SAAS,GAAG,aAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BxH;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC,CAa1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAejD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAS9D"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Frame decoder for animated GIF/WebP using ImageDecoder (WebCodecs)
3
+ * with fallback to img+drawImage for unsupported browsers
4
+ */
5
+ export interface DecodedFrame {
6
+ bitmap: ImageBitmap;
7
+ durationMs: number;
8
+ }
9
+ export interface FrameDecoderOptions {
10
+ corsMode?: 'cors' | 'no-cors' | 'same-origin';
11
+ onProgress?: (current: number, total: number) => void;
12
+ }
13
+ /**
14
+ * Check if ImageDecoder is available
15
+ */
16
+ export declare function hasImageDecoder(): boolean;
17
+ /**
18
+ * Decode animated image using ImageDecoder (WebCodecs)
19
+ * Returns array of frames with their durations
20
+ */
21
+ export declare function decodeImageFrames(url: string, options?: FrameDecoderOptions): Promise<DecodedFrame[]>;
22
+ /**
23
+ * Release resources from decoded frames
24
+ */
25
+ export declare function releaseFrames(frames: DecodedFrame[]): void;
26
+ //# sourceMappingURL=frame-decoder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-decoder.d.ts","sourceRoot":"","sources":["../src/frame-decoder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9C,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CA6BzB;AA0HD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAM1D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=frame-decoder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-decoder.test.d.ts","sourceRoot":"","sources":["../src/frame-decoder.test.ts"],"names":[],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -6,6 +6,11 @@
6
6
  export { FaviconAnimator } from './animator';
7
7
  export { BadgeRenderer } from './badge';
8
8
  export { getVisibilityManager, VisibilityManager } from './visibility';
9
+ export { decodeImageFrames, releaseFrames, hasImageDecoder } from './frame-decoder';
10
+ export { AnimationLoop } from './animation-loop';
11
+ export { isCanvasTainted, testCorsImage, getCorsMode, isSameOrigin, logCorsWarning } from './cors-handler';
9
12
  export type { BadgePosition, BadgeConfig, FaviconConfig, AnimatorOptions, VisibilityState, FaviconData } from './types';
10
- export { getFaviconLink, createCanvas, loadImage, detectImageFormat, supportsPageVisibility, debounce, throttle, canvasToDataUrl, isBrowser } from './utils';
13
+ export type { DecodedFrame, FrameDecoderOptions } from './frame-decoder';
14
+ export type { AnimationLoopOptions } from './animation-loop';
15
+ export { getFaviconLink, createCanvas, loadImage, detectImageFormat, supportsPageVisibility, debounce, throttle, canvasToDataUrl, isBrowser, normalizeLinks } from './utils';
11
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAGvE,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,cAAc,EACd,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,SAAS,EACV,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAG3G,YAAY,EACV,aAAa,EACb,WAAW,EACX,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACZ,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D,OAAO,EACL,cAAc,EACd,YAAY,EACZ,SAAS,EACT,iBAAiB,EACjB,sBAAsB,EACtB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,SAAS,EACT,cAAc,EACf,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -26,7 +26,7 @@ class BadgeRenderer {
26
26
  * Draw badge on canvas
27
27
  */
28
28
  static drawBadge(ctx, config, faviconSize) {
29
- const { number, position, backgroundColor = '#FF0000', textColor = '#FFFFFF', size = 16, fontSize = 12, borderRadius = '50%', offset = 2, fontWeight = 'bold', fontFamily = 'Arial, sans-serif' } = config;
29
+ const { number, position, backgroundColor = '#FF0000', textColor = '#FFFFFF', size = 16, fontSize = 12, offset = 2, fontWeight = 'bold', fontFamily = 'Arial, sans-serif' } = config;
30
30
  const { x, y } = this.calculatePosition(position, faviconSize, size, offset);
31
31
  // Draw badge background circle
32
32
  ctx.fillStyle = backgroundColor;
@@ -46,7 +46,7 @@ class BadgeRenderer {
46
46
  * Validate badge configuration
47
47
  */
48
48
  static validateConfig(config) {
49
- const { number = 1, position = 'top-right', backgroundColor = '#FF0000', textColor = '#FFFFFF', size = 16, fontSize = 12, borderRadius = '50%', offset = 2, fontWeight = 'bold', fontFamily = 'Arial, sans-serif' } = config;
49
+ const { number = 1, position = 'top-right', backgroundColor = '#FF0000', textColor = '#FFFFFF', size = 16, fontSize = 12, offset = 2, fontWeight = 'bold', fontFamily = 'Arial, sans-serif' } = config;
50
50
  // Validate position
51
51
  const validPositions = [
52
52
  'top-left',
@@ -69,7 +69,6 @@ class BadgeRenderer {
69
69
  textColor,
70
70
  size: Math.max(8, size),
71
71
  fontSize: Math.max(6, fontSize),
72
- borderRadius,
73
72
  offset: Math.max(0, offset),
74
73
  fontWeight,
75
74
  fontFamily
@@ -145,6 +144,243 @@ function getVisibilityManager() {
145
144
  return visibilityManager;
146
145
  }
147
146
 
147
+ /**
148
+ * CORS and canvas taint handling for animated favicons
149
+ */
150
+ /**
151
+ * Check if canvas is tainted (can't export to data URL)
152
+ */
153
+ function isCanvasTainted(canvas) {
154
+ try {
155
+ canvas.toDataURL();
156
+ return false;
157
+ }
158
+ catch (error) {
159
+ return true;
160
+ }
161
+ }
162
+ /**
163
+ * Test if an image can be loaded with CORS
164
+ */
165
+ async function testCorsImage(url, corsMode = 'cors') {
166
+ return new Promise((resolve) => {
167
+ const img = new Image();
168
+ img.crossOrigin = corsMode === 'cors' ? 'anonymous' : 'use-credentials';
169
+ img.onload = () => {
170
+ // Try to draw on canvas to verify CORS
171
+ try {
172
+ const canvas = document.createElement('canvas');
173
+ canvas.width = 1;
174
+ canvas.height = 1;
175
+ const ctx = canvas.getContext('2d');
176
+ if (!ctx) {
177
+ resolve(false);
178
+ return;
179
+ }
180
+ ctx.drawImage(img, 0, 0);
181
+ canvas.toDataURL();
182
+ resolve(true);
183
+ }
184
+ catch (error) {
185
+ resolve(false);
186
+ }
187
+ };
188
+ img.onerror = () => {
189
+ resolve(false);
190
+ };
191
+ img.src = url;
192
+ });
193
+ }
194
+ /**
195
+ * Get appropriate CORS mode for URL
196
+ */
197
+ async function getCorsMode(url) {
198
+ // Same origin URLs don't need CORS
199
+ if (isSameOrigin(url)) {
200
+ return 'same-origin';
201
+ }
202
+ // Test CORS
203
+ if (await testCorsImage(url, 'cors')) {
204
+ return 'cors';
205
+ }
206
+ // Fallback to no-cors (will work but canvas will be tainted)
207
+ return 'no-cors';
208
+ }
209
+ /**
210
+ * Check if URL is same origin
211
+ */
212
+ function isSameOrigin(url) {
213
+ if (url.startsWith('data:')) {
214
+ return true;
215
+ }
216
+ if (url.startsWith('/')) {
217
+ return true;
218
+ }
219
+ try {
220
+ const urlObj = new URL(url, window.location.href);
221
+ return urlObj.origin === window.location.origin;
222
+ }
223
+ catch {
224
+ return false;
225
+ }
226
+ }
227
+ /**
228
+ * Log CORS warning
229
+ */
230
+ function logCorsWarning(url, error) {
231
+ console.warn(`[favicon-animate] CORS issue with favicon: ${url}\n` +
232
+ `Error: ${error.message}\n` +
233
+ `Falling back to static image. To fix:\n` +
234
+ `1. Ensure the image server sends Access-Control-Allow-Origin header\n` +
235
+ `2. Or use a same-origin image\n` +
236
+ `3. Or set corsMode: 'no-cors' (but canvas will be tainted)`);
237
+ }
238
+
239
+ /**
240
+ * Frame decoder for animated GIF/WebP using ImageDecoder (WebCodecs)
241
+ * with fallback to img+drawImage for unsupported browsers
242
+ */
243
+ /**
244
+ * Check if ImageDecoder is available
245
+ */
246
+ function hasImageDecoder() {
247
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
248
+ return typeof globalThis.ImageDecoder !== 'undefined';
249
+ }
250
+ /**
251
+ * Decode animated image using ImageDecoder (WebCodecs)
252
+ * Returns array of frames with their durations
253
+ */
254
+ async function decodeImageFrames(url, options = {}) {
255
+ const { corsMode = 'cors', onProgress } = options;
256
+ try {
257
+ // Fetch the image as ArrayBuffer
258
+ const response = await fetch(url, {
259
+ mode: corsMode,
260
+ credentials: corsMode === 'cors' ? 'omit' : 'same-origin'
261
+ });
262
+ if (!response.ok) {
263
+ throw new Error(`Failed to fetch image: ${response.statusText}`);
264
+ }
265
+ const contentType = response.headers.get('content-type') || 'image/webp';
266
+ const arrayBuffer = await response.arrayBuffer();
267
+ // Use ImageDecoder if available
268
+ if (hasImageDecoder()) {
269
+ return await decodeWithImageDecoder(arrayBuffer, contentType, onProgress);
270
+ }
271
+ else {
272
+ // Fallback to img+drawImage for unsupported browsers
273
+ return await decodeWithImageElement(url, onProgress);
274
+ }
275
+ }
276
+ catch (error) {
277
+ const err = error instanceof Error ? error : new Error(String(error));
278
+ logCorsWarning(url, err);
279
+ throw error;
280
+ }
281
+ }
282
+ /**
283
+ * Decode using ImageDecoder (WebCodecs API)
284
+ */
285
+ async function decodeWithImageDecoder(arrayBuffer, contentType, onProgress) {
286
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
287
+ const ImageDecoderClass = globalThis.ImageDecoder;
288
+ if (!ImageDecoderClass) {
289
+ throw new Error('ImageDecoder not available');
290
+ }
291
+ const decoder = new ImageDecoderClass({
292
+ data: arrayBuffer,
293
+ type: contentType
294
+ });
295
+ await decoder.tracks.ready;
296
+ const track = decoder.tracks.selectedTrack;
297
+ if (!track) {
298
+ throw new Error('No video track found in image');
299
+ }
300
+ const frameCount = track.frameCount;
301
+ const frames = [];
302
+ for (let i = 0; i < frameCount; i++) {
303
+ try {
304
+ const { image } = await decoder.decode({ frameIndex: i });
305
+ // Get frame duration (in microseconds, convert to milliseconds)
306
+ const durationMs = image.duration ? image.duration / 1000 : 90;
307
+ // Create ImageBitmap from VideoFrame
308
+ const bitmap = await createImageBitmap(image);
309
+ frames.push({
310
+ bitmap,
311
+ durationMs: Math.max(durationMs, 10) // Minimum 10ms per frame
312
+ });
313
+ image.close();
314
+ if (onProgress) {
315
+ onProgress(i + 1, frameCount);
316
+ }
317
+ }
318
+ catch (error) {
319
+ console.warn(`Failed to decode frame ${i}:`, error);
320
+ // Continue with other frames
321
+ }
322
+ }
323
+ if (frames.length === 0) {
324
+ throw new Error('No frames could be decoded');
325
+ }
326
+ return frames;
327
+ }
328
+ /**
329
+ * Fallback: Decode using HTMLImageElement + drawImage
330
+ * This captures the current frame of an animated image
331
+ * Note: Less precise, doesn't give exact frame durations
332
+ */
333
+ async function decodeWithImageElement(url, onProgress) {
334
+ return new Promise((resolve, reject) => {
335
+ const img = new Image();
336
+ img.crossOrigin = 'anonymous';
337
+ img.onload = async () => {
338
+ try {
339
+ // Create a canvas and draw the image
340
+ const canvas = document.createElement('canvas');
341
+ canvas.width = img.width;
342
+ canvas.height = img.height;
343
+ const ctx = canvas.getContext('2d');
344
+ if (!ctx) {
345
+ throw new Error('Failed to get canvas context');
346
+ }
347
+ ctx.drawImage(img, 0, 0);
348
+ // Convert to ImageBitmap
349
+ const bitmap = await createImageBitmap(canvas);
350
+ // Return single frame with default duration
351
+ // This is a fallback - we can't get exact frame info without ImageDecoder
352
+ const frames = [
353
+ {
354
+ bitmap,
355
+ durationMs: 100 // Default 100ms per frame
356
+ }
357
+ ];
358
+ if (onProgress) {
359
+ onProgress(1, 1);
360
+ }
361
+ resolve(frames);
362
+ }
363
+ catch (error) {
364
+ reject(error);
365
+ }
366
+ };
367
+ img.onerror = () => {
368
+ reject(new Error(`Failed to load image: ${url}`));
369
+ };
370
+ img.src = url;
371
+ });
372
+ }
373
+ /**
374
+ * Release resources from decoded frames
375
+ */
376
+ function releaseFrames(frames) {
377
+ frames.forEach(frame => {
378
+ if (frame.bitmap && typeof frame.bitmap.close === 'function') {
379
+ frame.bitmap.close();
380
+ }
381
+ });
382
+ }
383
+
148
384
  /**
149
385
  * Utility functions
150
386
  */
@@ -258,6 +494,194 @@ function canvasToDataUrl(canvas) {
258
494
  function isBrowser() {
259
495
  return typeof window !== 'undefined' && typeof document !== 'undefined';
260
496
  }
497
+ /**
498
+ * Normalize favicon links by removing duplicates
499
+ * Keeps only one canonical favicon link
500
+ */
501
+ function normalizeLinks() {
502
+ const links = document.querySelectorAll('link[rel~="icon"]');
503
+ if (links.length <= 1)
504
+ return;
505
+ // Keep the first link, remove others
506
+ let kept = false;
507
+ links.forEach((link) => {
508
+ const linkEl = link;
509
+ if (!kept && !linkEl.href.startsWith('data:')) {
510
+ kept = true;
511
+ }
512
+ else if (kept || linkEl.href.startsWith('data:')) {
513
+ link.remove();
514
+ }
515
+ });
516
+ }
517
+
518
+ /**
519
+ * Animation loop manager for favicon frame playback
520
+ */
521
+ /**
522
+ * Manages animation loop for favicon frames
523
+ */
524
+ class AnimationLoop {
525
+ constructor(options) {
526
+ this.currentFrameIndex = 0;
527
+ this.currentLoop = 0;
528
+ this.isPlaying = false;
529
+ this.isPaused = false;
530
+ this.nextFrameTimeout = null;
531
+ this.frames = options.frames;
532
+ this.faviconSize = options.faviconSize;
533
+ this.badge = options.badge || null;
534
+ this.loopCount = options.loopCount || 0;
535
+ this.onFrameChange = options.onFrameChange || null;
536
+ this.onAnimationEnd = options.onAnimationEnd || null;
537
+ }
538
+ /**
539
+ * Start animation loop
540
+ */
541
+ play() {
542
+ if (this.isPlaying)
543
+ return;
544
+ this.isPlaying = true;
545
+ this.isPaused = false;
546
+ this.currentFrameIndex = 0;
547
+ this.currentLoop = 0;
548
+ this.scheduleNextFrame();
549
+ }
550
+ /**
551
+ * Pause animation
552
+ */
553
+ pause() {
554
+ if (!this.isPlaying)
555
+ return;
556
+ this.isPaused = true;
557
+ this.clearScheduledFrame();
558
+ }
559
+ /**
560
+ * Resume animation
561
+ */
562
+ resume() {
563
+ if (!this.isPaused)
564
+ return;
565
+ this.isPaused = false;
566
+ this.scheduleNextFrame();
567
+ }
568
+ /**
569
+ * Stop animation and cleanup
570
+ */
571
+ stop() {
572
+ this.isPlaying = false;
573
+ this.isPaused = false;
574
+ this.clearScheduledFrame();
575
+ this.currentFrameIndex = 0;
576
+ this.currentLoop = 0;
577
+ }
578
+ /**
579
+ * Get current frame data URL
580
+ */
581
+ getCurrentFrameDataUrl() {
582
+ if (this.currentFrameIndex >= this.frames.length) {
583
+ this.currentFrameIndex = 0;
584
+ }
585
+ const frame = this.frames[this.currentFrameIndex];
586
+ const canvas = createCanvas(this.faviconSize);
587
+ const ctx = canvas.getContext('2d');
588
+ if (!ctx) {
589
+ throw new Error('Failed to get canvas context');
590
+ }
591
+ // Draw the frame bitmap
592
+ ctx.drawImage(frame.bitmap, 0, 0, this.faviconSize, this.faviconSize);
593
+ // Draw badge if configured
594
+ if (this.badge) {
595
+ BadgeRenderer.drawBadge(ctx, this.badge, this.faviconSize);
596
+ }
597
+ return canvasToDataUrl(canvas);
598
+ }
599
+ /**
600
+ * Schedule next frame
601
+ */
602
+ scheduleNextFrame() {
603
+ if (!this.isPlaying || this.isPaused)
604
+ return;
605
+ // Check if animation should end
606
+ if (this.loopCount > 0 && this.currentLoop >= this.loopCount) {
607
+ this.stop();
608
+ if (this.onAnimationEnd) {
609
+ this.onAnimationEnd();
610
+ }
611
+ return;
612
+ }
613
+ const frame = this.frames[this.currentFrameIndex];
614
+ const duration = frame.durationMs;
615
+ // Notify frame change
616
+ if (this.onFrameChange) {
617
+ this.onFrameChange(this.currentFrameIndex);
618
+ }
619
+ // Schedule next frame
620
+ this.nextFrameTimeout = window.setTimeout(() => {
621
+ this.currentFrameIndex++;
622
+ // Check if we've reached the end of frames
623
+ if (this.currentFrameIndex >= this.frames.length) {
624
+ this.currentFrameIndex = 0;
625
+ this.currentLoop++;
626
+ // Check loop count
627
+ if (this.loopCount > 0 && this.currentLoop >= this.loopCount) {
628
+ this.stop();
629
+ if (this.onAnimationEnd) {
630
+ this.onAnimationEnd();
631
+ }
632
+ return;
633
+ }
634
+ }
635
+ // Schedule next frame
636
+ this.scheduleNextFrame();
637
+ }, duration);
638
+ }
639
+ /**
640
+ * Clear scheduled frame timeout
641
+ */
642
+ clearScheduledFrame() {
643
+ if (this.nextFrameTimeout !== null) {
644
+ clearTimeout(this.nextFrameTimeout);
645
+ this.nextFrameTimeout = null;
646
+ }
647
+ }
648
+ /**
649
+ * Check if animation is playing
650
+ */
651
+ getIsPlaying() {
652
+ return this.isPlaying && !this.isPaused;
653
+ }
654
+ /**
655
+ * Get current frame index
656
+ */
657
+ getCurrentFrameIndex() {
658
+ return this.currentFrameIndex;
659
+ }
660
+ /**
661
+ * Update badge during animation
662
+ */
663
+ setBadge(badge) {
664
+ this.badge = badge || null;
665
+ }
666
+ /**
667
+ * Get current badge
668
+ */
669
+ getBadge() {
670
+ return this.badge;
671
+ }
672
+ /**
673
+ * Get total frames
674
+ */
675
+ getFrameCount() {
676
+ return this.frames.length;
677
+ }
678
+ /**
679
+ * Cleanup resources
680
+ */
681
+ destroy() {
682
+ this.stop();
683
+ }
684
+ }
261
685
 
262
686
  /**
263
687
  * Main FaviconAnimator class
@@ -272,12 +696,19 @@ class FaviconAnimator {
272
696
  this.unsubscribeVisibility = null;
273
697
  this.faviconSize = 32;
274
698
  this.updateInterval = 100;
699
+ this.enableAnimation = true;
700
+ this.animationLoop = null;
701
+ this.decodedFrames = [];
702
+ this.animationFrameId = null;
275
703
  if (!isBrowser()) {
276
704
  throw new Error('FaviconAnimator can only be used in browser environment');
277
705
  }
278
706
  this.faviconLink = getFaviconLink();
279
707
  this.pauseOnHidden = options.pauseOnHidden !== false;
280
708
  this.updateInterval = options.updateInterval || 100;
709
+ this.enableAnimation = options.enableAnimation !== false;
710
+ // Normalize favicon links (remove duplicates)
711
+ normalizeLinks();
281
712
  // Setup visibility manager
282
713
  if (this.pauseOnHidden) {
283
714
  const visibilityManager = getVisibilityManager();
@@ -310,20 +741,36 @@ class FaviconAnimator {
310
741
  const faviconConfig = typeof config === 'string'
311
742
  ? { url: config }
312
743
  : config;
313
- const { url, size = 32 } = faviconConfig;
744
+ const { url, size = 32, animate = true, corsMode = 'cors', loopCount = 0 } = faviconConfig;
314
745
  this.faviconSize = size;
315
746
  try {
747
+ // Stop any existing animation
748
+ this.stopAnimation();
316
749
  // Detect format
317
750
  const format = detectImageFormat(url);
751
+ const isAnimated = format === 'gif' || format === 'webp';
318
752
  // Create favicon data
319
753
  this.currentFavicon = {
320
754
  url,
321
755
  size,
322
- isAnimated: format === 'gif' || format === 'webp',
756
+ isAnimated,
323
757
  format
324
758
  };
325
- // Update favicon link
326
- await this.updateFaviconDisplay();
759
+ // Try to decode and animate if enabled
760
+ if (isAnimated && animate && this.enableAnimation) {
761
+ try {
762
+ await this.startAnimation(url, corsMode, loopCount);
763
+ }
764
+ catch (error) {
765
+ console.warn('Animation failed, falling back to static image:', error);
766
+ // Fallback to static image
767
+ await this.updateFaviconDisplay();
768
+ }
769
+ }
770
+ else {
771
+ // Static favicon
772
+ await this.updateFaviconDisplay();
773
+ }
327
774
  }
328
775
  catch (error) {
329
776
  console.error('Error setting favicon:', error);
@@ -333,12 +780,12 @@ class FaviconAnimator {
333
780
  * Set badge
334
781
  */
335
782
  setBadge(config) {
336
- try {
337
- this.currentBadge = BadgeRenderer.validateConfig(config);
338
- this.updateFaviconDisplay();
783
+ this.currentBadge = BadgeRenderer.validateConfig(config);
784
+ if (this.animationLoop) {
785
+ this.animationLoop.setBadge(this.currentBadge);
339
786
  }
340
- catch (error) {
341
- console.error('Error setting badge:', error);
787
+ else {
788
+ this.updateFaviconDisplay();
342
789
  }
343
790
  }
344
791
  /**
@@ -350,14 +797,93 @@ class FaviconAnimator {
350
797
  return;
351
798
  }
352
799
  this.currentBadge.number = number;
353
- this.updateFaviconDisplay();
800
+ if (this.animationLoop) {
801
+ this.animationLoop.setBadge(this.currentBadge);
802
+ }
803
+ else {
804
+ this.updateFaviconDisplay();
805
+ }
354
806
  }
355
807
  /**
356
808
  * Remove badge
357
809
  */
358
810
  removeBadge() {
359
811
  this.currentBadge = null;
360
- this.updateFaviconDisplay();
812
+ if (this.animationLoop) {
813
+ this.animationLoop.setBadge(null);
814
+ }
815
+ else {
816
+ this.updateFaviconDisplay();
817
+ }
818
+ }
819
+ /**
820
+ * Start animation for GIF/WebP
821
+ */
822
+ async startAnimation(url, corsMode, loopCount) {
823
+ try {
824
+ // Decode frames
825
+ this.decodedFrames = await decodeImageFrames(url, { corsMode });
826
+ if (this.decodedFrames.length <= 1) {
827
+ // Not animated or single frame
828
+ await this.updateFaviconDisplay();
829
+ return;
830
+ }
831
+ // Create animation loop
832
+ this.animationLoop = new AnimationLoop({
833
+ frames: this.decodedFrames,
834
+ faviconSize: this.faviconSize,
835
+ badge: this.currentBadge,
836
+ loopCount,
837
+ onFrameChange: (_frameIndex) => {
838
+ this.updateAnimationFrame();
839
+ },
840
+ onAnimationEnd: () => {
841
+ this.isAnimating = false;
842
+ }
843
+ });
844
+ // Start animation if visible
845
+ if (this.isVisible) {
846
+ this.animationLoop.play();
847
+ this.isAnimating = true;
848
+ this.updateAnimationFrame();
849
+ }
850
+ }
851
+ catch (error) {
852
+ console.error('Failed to start animation:', error);
853
+ throw error;
854
+ }
855
+ }
856
+ /**
857
+ * Stop animation and cleanup
858
+ */
859
+ stopAnimation() {
860
+ if (this.animationFrameId !== null) {
861
+ cancelAnimationFrame(this.animationFrameId);
862
+ this.animationFrameId = null;
863
+ }
864
+ if (this.animationLoop) {
865
+ this.animationLoop.destroy();
866
+ this.animationLoop = null;
867
+ }
868
+ if (this.decodedFrames.length > 0) {
869
+ releaseFrames(this.decodedFrames);
870
+ this.decodedFrames = [];
871
+ }
872
+ this.isAnimating = false;
873
+ }
874
+ /**
875
+ * Update animation frame on favicon
876
+ */
877
+ updateAnimationFrame() {
878
+ if (!this.animationLoop)
879
+ return;
880
+ try {
881
+ const dataUrl = this.animationLoop.getCurrentFrameDataUrl();
882
+ this.faviconLink.href = dataUrl;
883
+ }
884
+ catch (error) {
885
+ console.error('Error updating animation frame:', error);
886
+ }
361
887
  }
362
888
  /**
363
889
  * Update favicon display (with badge if configured)
@@ -393,13 +919,17 @@ class FaviconAnimator {
393
919
  * Pause animation
394
920
  */
395
921
  pause() {
922
+ if (this.animationLoop) {
923
+ this.animationLoop.pause();
924
+ }
396
925
  this.isAnimating = false;
397
926
  }
398
927
  /**
399
928
  * Resume animation
400
929
  */
401
930
  resume() {
402
- if (this.isVisible) {
931
+ if (this.isVisible && this.animationLoop) {
932
+ this.animationLoop.resume();
403
933
  this.isAnimating = true;
404
934
  }
405
935
  }
@@ -425,6 +955,7 @@ class FaviconAnimator {
425
955
  * Cleanup
426
956
  */
427
957
  destroy() {
958
+ this.stopAnimation();
428
959
  this.pause();
429
960
  if (this.unsubscribeVisibility) {
430
961
  this.unsubscribeVisibility();
@@ -432,5 +963,5 @@ class FaviconAnimator {
432
963
  }
433
964
  }
434
965
 
435
- export { BadgeRenderer, FaviconAnimator, VisibilityManager, canvasToDataUrl, createCanvas, debounce, detectImageFormat, getFaviconLink, getVisibilityManager, isBrowser, loadImage, supportsPageVisibility, throttle };
966
+ export { AnimationLoop, BadgeRenderer, FaviconAnimator, VisibilityManager, canvasToDataUrl, createCanvas, debounce, decodeImageFrames, detectImageFormat, getCorsMode, getFaviconLink, getVisibilityManager, hasImageDecoder, isBrowser, isCanvasTainted, isSameOrigin, loadImage, logCorsWarning, normalizeLinks, releaseFrames, supportsPageVisibility, testCorsImage, throttle };
436
967
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/badge.ts","../src/visibility.ts","../src/utils.ts","../src/animator.ts"],"sourcesContent":[null,null,null,null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/badge.ts","../src/visibility.ts","../src/cors-handler.ts","../src/frame-decoder.ts","../src/utils.ts","../src/animation-loop.ts","../src/animator.ts"],"sourcesContent":[null,null,null,null,null,null,null],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -18,8 +18,6 @@ export interface BadgeConfig {
18
18
  size?: number;
19
19
  /** Font size of the badge number */
20
20
  fontSize?: number;
21
- /** Border radius (usually '50%' for circle) */
22
- borderRadius?: string;
23
21
  /** Offset from the edge in pixels */
24
22
  offset?: number;
25
23
  /** Font weight */
@@ -37,6 +35,12 @@ export interface FaviconConfig {
37
35
  size?: number;
38
36
  /** Whether to use the favicon as-is or process it */
39
37
  raw?: boolean;
38
+ /** Enable animation for GIF/WebP (default: true for animated images) */
39
+ animate?: boolean;
40
+ /** CORS mode for fetching animated images (default: 'cors') */
41
+ corsMode?: 'cors' | 'no-cors' | 'same-origin';
42
+ /** Loop count for animation (0 = infinite, >0 = finite) */
43
+ loopCount?: number;
40
44
  }
41
45
  /**
42
46
  * Animator options
@@ -52,6 +56,8 @@ export interface AnimatorOptions {
52
56
  updateInterval?: number;
53
57
  /** Custom favicon link element selector */
54
58
  linkSelector?: string;
59
+ /** Enable animation for GIF/WebP by default */
60
+ enableAnimation?: boolean;
55
61
  }
56
62
  /**
57
63
  * Page visibility state
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4BAA4B;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACjC,kCAAkC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;CAC5D"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ,CAAC;AAEjG;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,4BAA4B;IAC5B,QAAQ,EAAE,aAAa,CAAC;IACxB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qCAAqC;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,kDAAkD;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9C,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oCAAoC;IACpC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IACjC,kCAAkC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,yDAAyD;IACzD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;CAC5D"}
package/dist/utils.d.ts CHANGED
@@ -24,11 +24,11 @@ export declare function supportsPageVisibility(): boolean;
24
24
  /**
25
25
  * Debounce function
26
26
  */
27
- export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
27
+ export declare function debounce<T extends (...args: Parameters<T>) => ReturnType<T>>(func: T, wait: number): (...args: Parameters<T>) => void;
28
28
  /**
29
29
  * Throttle function
30
30
  */
31
- export declare function throttle<T extends (...args: any[]) => any>(func: T, limit: number): (...args: Parameters<T>) => void;
31
+ export declare function throttle<T extends (...args: Parameters<T>) => ReturnType<T>>(func: T, limit: number): (...args: Parameters<T>) => void;
32
32
  /**
33
33
  * Convert canvas to data URL
34
34
  */
@@ -37,4 +37,9 @@ export declare function canvasToDataUrl(canvas: HTMLCanvasElement): string;
37
37
  * Check if running in browser environment
38
38
  */
39
39
  export declare function isBrowser(): boolean;
40
+ /**
41
+ * Normalize favicon links by removing duplicates
42
+ * Keeps only one canonical favicon link
43
+ */
44
+ export declare function normalizeLinks(): void;
40
45
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAWhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAK5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAiBjG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAUlC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,wBAAgB,cAAc,IAAI,eAAe,CAWhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAK5D;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAOhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAiBjG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAC1E,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAYlC;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAC1E,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAUlC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAcrC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "favicon-animate",
3
- "version": "0.1.0",
3
+ "version": "0.3.1",
4
4
  "description": "Lightweight favicon animation library with badge support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",