favicon-animate 0.1.0 → 0.3.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.
@@ -0,0 +1,75 @@
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
+ * Get total frames
68
+ */
69
+ getFrameCount(): number;
70
+ /**
71
+ * Cleanup resources
72
+ */
73
+ destroy(): void;
74
+ }
75
+ //# 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,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;IAKnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAU1C;;OAEG;IACH,WAAW,IAAI,IAAI;IAKnB;;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,CAEzC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,YAAY,EAAE,CAAC,CA6BzB;AAyHD;;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,241 @@ 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
+ return typeof globalThis.ImageDecoder !== 'undefined';
248
+ }
249
+ /**
250
+ * Decode animated image using ImageDecoder (WebCodecs)
251
+ * Returns array of frames with their durations
252
+ */
253
+ async function decodeImageFrames(url, options = {}) {
254
+ const { corsMode = 'cors', onProgress } = options;
255
+ try {
256
+ // Fetch the image as ArrayBuffer
257
+ const response = await fetch(url, {
258
+ mode: corsMode,
259
+ credentials: corsMode === 'cors' ? 'omit' : 'same-origin'
260
+ });
261
+ if (!response.ok) {
262
+ throw new Error(`Failed to fetch image: ${response.statusText}`);
263
+ }
264
+ const contentType = response.headers.get('content-type') || 'image/webp';
265
+ const arrayBuffer = await response.arrayBuffer();
266
+ // Use ImageDecoder if available
267
+ if (hasImageDecoder()) {
268
+ return await decodeWithImageDecoder(arrayBuffer, contentType, onProgress);
269
+ }
270
+ else {
271
+ // Fallback to img+drawImage for unsupported browsers
272
+ return await decodeWithImageElement(url, onProgress);
273
+ }
274
+ }
275
+ catch (error) {
276
+ const err = error instanceof Error ? error : new Error(String(error));
277
+ logCorsWarning(url, err);
278
+ throw error;
279
+ }
280
+ }
281
+ /**
282
+ * Decode using ImageDecoder (WebCodecs API)
283
+ */
284
+ async function decodeWithImageDecoder(arrayBuffer, contentType, onProgress) {
285
+ const ImageDecoderClass = globalThis.ImageDecoder;
286
+ if (!ImageDecoderClass) {
287
+ throw new Error('ImageDecoder not available');
288
+ }
289
+ const decoder = new ImageDecoderClass({
290
+ data: arrayBuffer,
291
+ type: contentType
292
+ });
293
+ await decoder.tracks.ready;
294
+ const track = decoder.tracks.selectedTrack;
295
+ if (!track) {
296
+ throw new Error('No video track found in image');
297
+ }
298
+ const frameCount = track.frameCount;
299
+ const frames = [];
300
+ for (let i = 0; i < frameCount; i++) {
301
+ try {
302
+ const { image } = await decoder.decode({ frameIndex: i });
303
+ // Get frame duration (in microseconds, convert to milliseconds)
304
+ const durationMs = image.duration ? image.duration / 1000 : 90;
305
+ // Create ImageBitmap from VideoFrame
306
+ const bitmap = await createImageBitmap(image);
307
+ frames.push({
308
+ bitmap,
309
+ durationMs: Math.max(durationMs, 10) // Minimum 10ms per frame
310
+ });
311
+ image.close();
312
+ if (onProgress) {
313
+ onProgress(i + 1, frameCount);
314
+ }
315
+ }
316
+ catch (error) {
317
+ console.warn(`Failed to decode frame ${i}:`, error);
318
+ // Continue with other frames
319
+ }
320
+ }
321
+ if (frames.length === 0) {
322
+ throw new Error('No frames could be decoded');
323
+ }
324
+ return frames;
325
+ }
326
+ /**
327
+ * Fallback: Decode using HTMLImageElement + drawImage
328
+ * This captures the current frame of an animated image
329
+ * Note: Less precise, doesn't give exact frame durations
330
+ */
331
+ async function decodeWithImageElement(url, onProgress) {
332
+ return new Promise((resolve, reject) => {
333
+ const img = new Image();
334
+ img.crossOrigin = 'anonymous';
335
+ img.onload = async () => {
336
+ try {
337
+ // Create a canvas and draw the image
338
+ const canvas = document.createElement('canvas');
339
+ canvas.width = img.width;
340
+ canvas.height = img.height;
341
+ const ctx = canvas.getContext('2d');
342
+ if (!ctx) {
343
+ throw new Error('Failed to get canvas context');
344
+ }
345
+ ctx.drawImage(img, 0, 0);
346
+ // Convert to ImageBitmap
347
+ const bitmap = await createImageBitmap(canvas);
348
+ // Return single frame with default duration
349
+ // This is a fallback - we can't get exact frame info without ImageDecoder
350
+ const frames = [
351
+ {
352
+ bitmap,
353
+ durationMs: 100 // Default 100ms per frame
354
+ }
355
+ ];
356
+ if (onProgress) {
357
+ onProgress(1, 1);
358
+ }
359
+ resolve(frames);
360
+ }
361
+ catch (error) {
362
+ reject(error);
363
+ }
364
+ };
365
+ img.onerror = () => {
366
+ reject(new Error(`Failed to load image: ${url}`));
367
+ };
368
+ img.src = url;
369
+ });
370
+ }
371
+ /**
372
+ * Release resources from decoded frames
373
+ */
374
+ function releaseFrames(frames) {
375
+ frames.forEach(frame => {
376
+ if (frame.bitmap && typeof frame.bitmap.close === 'function') {
377
+ frame.bitmap.close();
378
+ }
379
+ });
380
+ }
381
+
148
382
  /**
149
383
  * Utility functions
150
384
  */
@@ -258,6 +492,182 @@ function canvasToDataUrl(canvas) {
258
492
  function isBrowser() {
259
493
  return typeof window !== 'undefined' && typeof document !== 'undefined';
260
494
  }
495
+ /**
496
+ * Normalize favicon links by removing duplicates
497
+ * Keeps only one canonical favicon link
498
+ */
499
+ function normalizeLinks() {
500
+ const links = document.querySelectorAll('link[rel~="icon"]');
501
+ if (links.length <= 1)
502
+ return;
503
+ // Keep the first link, remove others
504
+ let kept = false;
505
+ links.forEach((link) => {
506
+ const linkEl = link;
507
+ if (!kept && !linkEl.href.startsWith('data:')) {
508
+ kept = true;
509
+ }
510
+ else if (kept || linkEl.href.startsWith('data:')) {
511
+ link.remove();
512
+ }
513
+ });
514
+ }
515
+
516
+ /**
517
+ * Animation loop manager for favicon frame playback
518
+ */
519
+ /**
520
+ * Manages animation loop for favicon frames
521
+ */
522
+ class AnimationLoop {
523
+ constructor(options) {
524
+ this.currentFrameIndex = 0;
525
+ this.currentLoop = 0;
526
+ this.isPlaying = false;
527
+ this.isPaused = false;
528
+ this.nextFrameTimeout = null;
529
+ this.frames = options.frames;
530
+ this.faviconSize = options.faviconSize;
531
+ this.badge = options.badge || null;
532
+ this.loopCount = options.loopCount || 0;
533
+ this.onFrameChange = options.onFrameChange || null;
534
+ this.onAnimationEnd = options.onAnimationEnd || null;
535
+ }
536
+ /**
537
+ * Start animation loop
538
+ */
539
+ play() {
540
+ if (this.isPlaying)
541
+ return;
542
+ this.isPlaying = true;
543
+ this.isPaused = false;
544
+ this.currentFrameIndex = 0;
545
+ this.currentLoop = 0;
546
+ this.scheduleNextFrame();
547
+ }
548
+ /**
549
+ * Pause animation
550
+ */
551
+ pause() {
552
+ if (!this.isPlaying)
553
+ return;
554
+ this.isPaused = true;
555
+ this.clearScheduledFrame();
556
+ }
557
+ /**
558
+ * Resume animation
559
+ */
560
+ resume() {
561
+ if (!this.isPaused)
562
+ return;
563
+ this.isPaused = false;
564
+ this.scheduleNextFrame();
565
+ }
566
+ /**
567
+ * Stop animation and cleanup
568
+ */
569
+ stop() {
570
+ this.isPlaying = false;
571
+ this.isPaused = false;
572
+ this.clearScheduledFrame();
573
+ this.currentFrameIndex = 0;
574
+ this.currentLoop = 0;
575
+ }
576
+ /**
577
+ * Get current frame data URL
578
+ */
579
+ getCurrentFrameDataUrl() {
580
+ if (this.currentFrameIndex >= this.frames.length) {
581
+ this.currentFrameIndex = 0;
582
+ }
583
+ const frame = this.frames[this.currentFrameIndex];
584
+ const canvas = createCanvas(this.faviconSize);
585
+ const ctx = canvas.getContext('2d');
586
+ if (!ctx) {
587
+ throw new Error('Failed to get canvas context');
588
+ }
589
+ // Draw the frame bitmap
590
+ ctx.drawImage(frame.bitmap, 0, 0, this.faviconSize, this.faviconSize);
591
+ // Draw badge if configured
592
+ if (this.badge) {
593
+ BadgeRenderer.drawBadge(ctx, this.badge, this.faviconSize);
594
+ }
595
+ return canvasToDataUrl(canvas);
596
+ }
597
+ /**
598
+ * Schedule next frame
599
+ */
600
+ scheduleNextFrame() {
601
+ if (!this.isPlaying || this.isPaused)
602
+ return;
603
+ // Check if animation should end
604
+ if (this.loopCount > 0 && this.currentLoop >= this.loopCount) {
605
+ this.stop();
606
+ if (this.onAnimationEnd) {
607
+ this.onAnimationEnd();
608
+ }
609
+ return;
610
+ }
611
+ const frame = this.frames[this.currentFrameIndex];
612
+ const duration = frame.durationMs;
613
+ // Notify frame change
614
+ if (this.onFrameChange) {
615
+ this.onFrameChange(this.currentFrameIndex);
616
+ }
617
+ // Schedule next frame
618
+ this.nextFrameTimeout = window.setTimeout(() => {
619
+ this.currentFrameIndex++;
620
+ // Check if we've reached the end of frames
621
+ if (this.currentFrameIndex >= this.frames.length) {
622
+ this.currentFrameIndex = 0;
623
+ this.currentLoop++;
624
+ // Check loop count
625
+ if (this.loopCount > 0 && this.currentLoop >= this.loopCount) {
626
+ this.stop();
627
+ if (this.onAnimationEnd) {
628
+ this.onAnimationEnd();
629
+ }
630
+ return;
631
+ }
632
+ }
633
+ // Schedule next frame
634
+ this.scheduleNextFrame();
635
+ }, duration);
636
+ }
637
+ /**
638
+ * Clear scheduled frame timeout
639
+ */
640
+ clearScheduledFrame() {
641
+ if (this.nextFrameTimeout !== null) {
642
+ clearTimeout(this.nextFrameTimeout);
643
+ this.nextFrameTimeout = null;
644
+ }
645
+ }
646
+ /**
647
+ * Check if animation is playing
648
+ */
649
+ getIsPlaying() {
650
+ return this.isPlaying && !this.isPaused;
651
+ }
652
+ /**
653
+ * Get current frame index
654
+ */
655
+ getCurrentFrameIndex() {
656
+ return this.currentFrameIndex;
657
+ }
658
+ /**
659
+ * Get total frames
660
+ */
661
+ getFrameCount() {
662
+ return this.frames.length;
663
+ }
664
+ /**
665
+ * Cleanup resources
666
+ */
667
+ destroy() {
668
+ this.stop();
669
+ }
670
+ }
261
671
 
262
672
  /**
263
673
  * Main FaviconAnimator class
@@ -272,12 +682,19 @@ class FaviconAnimator {
272
682
  this.unsubscribeVisibility = null;
273
683
  this.faviconSize = 32;
274
684
  this.updateInterval = 100;
685
+ this.enableAnimation = true;
686
+ this.animationLoop = null;
687
+ this.decodedFrames = [];
688
+ this.animationFrameId = null;
275
689
  if (!isBrowser()) {
276
690
  throw new Error('FaviconAnimator can only be used in browser environment');
277
691
  }
278
692
  this.faviconLink = getFaviconLink();
279
693
  this.pauseOnHidden = options.pauseOnHidden !== false;
280
694
  this.updateInterval = options.updateInterval || 100;
695
+ this.enableAnimation = options.enableAnimation !== false;
696
+ // Normalize favicon links (remove duplicates)
697
+ normalizeLinks();
281
698
  // Setup visibility manager
282
699
  if (this.pauseOnHidden) {
283
700
  const visibilityManager = getVisibilityManager();
@@ -310,20 +727,36 @@ class FaviconAnimator {
310
727
  const faviconConfig = typeof config === 'string'
311
728
  ? { url: config }
312
729
  : config;
313
- const { url, size = 32 } = faviconConfig;
730
+ const { url, size = 32, animate = true, corsMode = 'cors', loopCount = 0 } = faviconConfig;
314
731
  this.faviconSize = size;
315
732
  try {
733
+ // Stop any existing animation
734
+ this.stopAnimation();
316
735
  // Detect format
317
736
  const format = detectImageFormat(url);
737
+ const isAnimated = format === 'gif' || format === 'webp';
318
738
  // Create favicon data
319
739
  this.currentFavicon = {
320
740
  url,
321
741
  size,
322
- isAnimated: format === 'gif' || format === 'webp',
742
+ isAnimated,
323
743
  format
324
744
  };
325
- // Update favicon link
326
- await this.updateFaviconDisplay();
745
+ // Try to decode and animate if enabled
746
+ if (isAnimated && animate && this.enableAnimation) {
747
+ try {
748
+ await this.startAnimation(url, corsMode, loopCount);
749
+ }
750
+ catch (error) {
751
+ console.warn('Animation failed, falling back to static image:', error);
752
+ // Fallback to static image
753
+ await this.updateFaviconDisplay();
754
+ }
755
+ }
756
+ else {
757
+ // Static favicon
758
+ await this.updateFaviconDisplay();
759
+ }
327
760
  }
328
761
  catch (error) {
329
762
  console.error('Error setting favicon:', error);
@@ -333,13 +766,8 @@ class FaviconAnimator {
333
766
  * Set badge
334
767
  */
335
768
  setBadge(config) {
336
- try {
337
- this.currentBadge = BadgeRenderer.validateConfig(config);
338
- this.updateFaviconDisplay();
339
- }
340
- catch (error) {
341
- console.error('Error setting badge:', error);
342
- }
769
+ this.currentBadge = BadgeRenderer.validateConfig(config);
770
+ this.updateFaviconDisplay();
343
771
  }
344
772
  /**
345
773
  * Update badge
@@ -359,6 +787,75 @@ class FaviconAnimator {
359
787
  this.currentBadge = null;
360
788
  this.updateFaviconDisplay();
361
789
  }
790
+ /**
791
+ * Start animation for GIF/WebP
792
+ */
793
+ async startAnimation(url, corsMode, loopCount) {
794
+ try {
795
+ // Decode frames
796
+ this.decodedFrames = await decodeImageFrames(url, { corsMode });
797
+ if (this.decodedFrames.length <= 1) {
798
+ // Not animated or single frame
799
+ await this.updateFaviconDisplay();
800
+ return;
801
+ }
802
+ // Create animation loop
803
+ this.animationLoop = new AnimationLoop({
804
+ frames: this.decodedFrames,
805
+ faviconSize: this.faviconSize,
806
+ badge: this.currentBadge,
807
+ loopCount,
808
+ onFrameChange: (frameIndex) => {
809
+ this.updateAnimationFrame();
810
+ },
811
+ onAnimationEnd: () => {
812
+ this.isAnimating = false;
813
+ }
814
+ });
815
+ // Start animation if visible
816
+ if (this.isVisible) {
817
+ this.animationLoop.play();
818
+ this.isAnimating = true;
819
+ this.updateAnimationFrame();
820
+ }
821
+ }
822
+ catch (error) {
823
+ console.error('Failed to start animation:', error);
824
+ throw error;
825
+ }
826
+ }
827
+ /**
828
+ * Stop animation and cleanup
829
+ */
830
+ stopAnimation() {
831
+ if (this.animationFrameId !== null) {
832
+ cancelAnimationFrame(this.animationFrameId);
833
+ this.animationFrameId = null;
834
+ }
835
+ if (this.animationLoop) {
836
+ this.animationLoop.destroy();
837
+ this.animationLoop = null;
838
+ }
839
+ if (this.decodedFrames.length > 0) {
840
+ releaseFrames(this.decodedFrames);
841
+ this.decodedFrames = [];
842
+ }
843
+ this.isAnimating = false;
844
+ }
845
+ /**
846
+ * Update animation frame on favicon
847
+ */
848
+ updateAnimationFrame() {
849
+ if (!this.animationLoop)
850
+ return;
851
+ try {
852
+ const dataUrl = this.animationLoop.getCurrentFrameDataUrl();
853
+ this.faviconLink.href = dataUrl;
854
+ }
855
+ catch (error) {
856
+ console.error('Error updating animation frame:', error);
857
+ }
858
+ }
362
859
  /**
363
860
  * Update favicon display (with badge if configured)
364
861
  */
@@ -393,13 +890,17 @@ class FaviconAnimator {
393
890
  * Pause animation
394
891
  */
395
892
  pause() {
893
+ if (this.animationLoop) {
894
+ this.animationLoop.pause();
895
+ }
396
896
  this.isAnimating = false;
397
897
  }
398
898
  /**
399
899
  * Resume animation
400
900
  */
401
901
  resume() {
402
- if (this.isVisible) {
902
+ if (this.isVisible && this.animationLoop) {
903
+ this.animationLoop.resume();
403
904
  this.isAnimating = true;
404
905
  }
405
906
  }
@@ -425,6 +926,7 @@ class FaviconAnimator {
425
926
  * Cleanup
426
927
  */
427
928
  destroy() {
929
+ this.stopAnimation();
428
930
  this.pause();
429
931
  if (this.unsubscribeVisibility) {
430
932
  this.unsubscribeVisibility();
@@ -432,5 +934,5 @@ class FaviconAnimator {
432
934
  }
433
935
  }
434
936
 
435
- export { BadgeRenderer, FaviconAnimator, VisibilityManager, canvasToDataUrl, createCanvas, debounce, detectImageFormat, getFaviconLink, getVisibilityManager, isBrowser, loadImage, supportsPageVisibility, throttle };
937
+ 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
938
  //# 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":"AAEA;;AAEG;MAEU,aAAa,CAAA;AACxB;;AAEG;IACH,OAAO,iBAAiB,CACtB,QAAuB,EACvB,WAAmB,EACnB,SAAiB,EACjB,MAAA,GAAiB,CAAC,EAAA;AAElB,QAAA,MAAM,WAAW,GAAG,SAAS,GAAG,CAAC;QAEjC,QAAQ,QAAQ;AACd,YAAA,KAAK,UAAU;AACb,gBAAA,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;AAC7D,YAAA,KAAK,WAAW;AACd,gBAAA,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;AAC3E,YAAA,KAAK,aAAa;AAChB,gBAAA,OAAO,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,EAAE;AAC3E,YAAA,KAAK,cAAc;AACjB,gBAAA,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,EAAE;AACzF,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE,CAAC,EAAE,WAAW,GAAG,CAAC,EAAE;AACnD,YAAA;AACE,gBAAA,OAAO,EAAE,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,WAAW,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,EAAE;;IAE/E;AAEA;;AAEG;AACH,IAAA,OAAO,SAAS,CACd,GAA6B,EAC7B,MAAmB,EACnB,WAAmB,EAAA;AAEnB,QAAA,MAAM,EACJ,MAAM,EACN,QAAQ,EACR,eAAe,GAAG,SAAS,EAC3B,SAAS,GAAG,SAAS,EACrB,IAAI,GAAG,EAAE,EACT,QAAQ,GAAG,EAAE,EACb,YAAY,GAAG,KAAK,EACpB,MAAM,GAAG,CAAC,EACV,UAAU,GAAG,MAAM,EACnB,UAAU,GAAG,mBAAmB,EACjC,GAAG,MAAM;AAEV,QAAA,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC;;AAG5E,QAAA,GAAG,CAAC,SAAS,GAAG,eAAe;QAC/B,GAAG,CAAC,SAAS,EAAE;AACf,QAAA,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACvC,GAAG,CAAC,IAAI,EAAE;;AAGV,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS;QACzB,GAAG,CAAC,IAAI,GAAG,CAAA,EAAG,UAAU,IAAI,QAAQ,CAAA,GAAA,EAAM,UAAU,CAAA,CAAE;AACtD,QAAA,GAAG,CAAC,SAAS,GAAG,QAAQ;AACxB,QAAA,GAAG,CAAC,YAAY,GAAG,QAAQ;;AAG3B,QAAA,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/B;AAEA;;AAEG;IACH,OAAO,cAAc,CAAC,MAA4B,EAAA;AAChD,QAAA,MAAM,EACJ,MAAM,GAAG,CAAC,EACV,QAAQ,GAAG,WAAW,EACtB,eAAe,GAAG,SAAS,EAC3B,SAAS,GAAG,SAAS,EACrB,IAAI,GAAG,EAAE,EACT,QAAQ,GAAG,EAAE,EACb,YAAY,GAAG,KAAK,EACpB,MAAM,GAAG,CAAC,EACV,UAAU,GAAG,MAAM,EACnB,UAAU,GAAG,mBAAmB,EACjC,GAAG,MAAM;;AAGV,QAAA,MAAM,cAAc,GAAoB;YACtC,UAAU;YACV,WAAW;YACX,aAAa;YACb,cAAc;YACd;SACD;QACD,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAyB,CAAC,EAAE;AACvD,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAA,CAAE,CAAC;QACxD;;QAGA,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AAC5D,YAAA,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;QAC5D;QAEA,OAAO;YACL,MAAM;AACN,YAAA,QAAQ,EAAE,QAAyB;YACnC,eAAe;YACf,SAAS;YACT,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;YACvB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC;YAC/B,YAAY;YACZ,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;YAC3B,UAAU;YACV;SACD;IACH;AACD;;ACzHD;;;AAGG;MAIU,iBAAiB,CAAA;AAK5B,IAAA,WAAA,GAAA;QAJQ,IAAA,CAAA,SAAS,GAAY,IAAI;AACzB,QAAA,IAAA,CAAA,SAAS,GAAkC,IAAI,GAAG,EAAE;QAI1D,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;QACzE,IAAI,CAAC,IAAI,EAAE;IACb;IAEQ,IAAI,GAAA;;AAEV,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,MAAM;;QAGjC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,2BAA2B,CAAC;IACjF;IAEQ,sBAAsB,GAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS;AACjC,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,QAAQ,CAAC,MAAM;;AAGjC,QAAA,IAAI,UAAU,KAAK,IAAI,CAAC,SAAS,EAAE;YACjC,IAAI,CAAC,eAAe,EAAE;QACxB;IACF;IAEQ,eAAe,GAAA;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AAChC,YAAA,IAAI;AACF,gBAAA,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YAC1B;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC;YACvD;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,QAAkC,EAAA;AACzC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAG5B,QAAA,OAAO,MAAK;AACV,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AACjC,QAAA,CAAC;IACH;AAEA;;AAEG;IACH,YAAY,GAAA;QACV,OAAO,IAAI,CAAC,SAAS;IACvB;AAEA;;AAEG;IACH,OAAO,GAAA;QACL,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,2BAA2B,CAAC;AAClF,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;IACxB;AACD;AAED;AACA,IAAI,iBAAiB,GAA6B,IAAI;SAEtC,oBAAoB,GAAA;IAClC,IAAI,CAAC,iBAAiB,EAAE;AACtB,QAAA,iBAAiB,GAAG,IAAI,iBAAiB,EAAE;IAC7C;AACA,IAAA,OAAO,iBAAiB;AAC1B;;ACjFA;;AAEG;AAEH;;AAEG;SACa,cAAc,GAAA;IAC5B,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,kBAAkB,CAAoB;IAExE,IAAI,CAAC,IAAI,EAAE;AACT,QAAA,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,GAAG,MAAM;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,WAAW;AACvB,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACjC;AAEA,IAAA,OAAO,IAAI;AACb;AAEA;;AAEG;AACG,SAAU,YAAY,CAAC,IAAY,EAAA;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC/C,IAAA,MAAM,CAAC,KAAK,GAAG,IAAI;AACnB,IAAA,MAAM,CAAC,MAAM,GAAG,IAAI;AACpB,IAAA,OAAO,MAAM;AACf;AAEA;;AAEG;AACG,SAAU,SAAS,CAAC,GAAW,EAAA;IACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE;QACvB,GAAG,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;AAC/B,QAAA,GAAG,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,KAAK,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE,CAAC,CAAC;AACrE,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG;AACf,IAAA,CAAC,CAAC;AACJ;AAEA;;AAEG;AACG,SAAU,iBAAiB,CAAC,GAAW,EAAA;AAC3C,IAAA,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC3B,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAC1C,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,MAAM;AAC5C,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAC1C,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK;AAC1C,QAAA,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;AAAE,YAAA,OAAO,KAAK;IAC7C;SAAO;AACL,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE;QAC/C,IAAI,GAAG,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QAC/B,IAAI,GAAG,KAAK,MAAM;AAAE,YAAA,OAAO,MAAM;QACjC,IAAI,GAAG,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QAC/B,IAAI,GAAG,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;QAC/B,IAAI,GAAG,KAAK,KAAK;AAAE,YAAA,OAAO,KAAK;IACjC;AACA,IAAA,OAAO,SAAS;AAClB;AAEA;;AAEG;SACa,sBAAsB,GAAA;AACpC,IAAA,OAAO,OAAO,QAAQ,CAAC,MAAM,KAAK,WAAW;AAC/C;AAEA;;AAEG;AACG,SAAU,QAAQ,CACtB,IAAO,EACP,IAAY,EAAA;AAEZ,IAAA,IAAI,OAAuB;AAE3B,IAAA,OAAO,SAAS,gBAAgB,CAAC,GAAG,IAAmB,EAAA;QACrD,MAAM,KAAK,GAAG,MAAK;YACjB,YAAY,CAAC,OAAO,CAAC;AACrB,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC;AACf,QAAA,CAAC;QAED,YAAY,CAAC,OAAO,CAAC;AACrB,QAAA,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;AACnC,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,QAAQ,CACtB,IAAO,EACP,KAAa,EAAA;AAEb,IAAA,IAAI,UAAmB;AAEvB,IAAA,OAAO,SAAS,gBAAgB,CAAC,GAAG,IAAmB,EAAA;QACrD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,UAAU,GAAG,IAAI;AACjB,YAAA,UAAU,CAAC,OAAO,UAAU,GAAG,KAAK,CAAC,EAAE,KAAK,CAAC;QAC/C;AACF,IAAA,CAAC;AACH;AAEA;;AAEG;AACG,SAAU,eAAe,CAAC,MAAyB,EAAA;AACvD,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;AACtC;AAEA;;AAEG;SACa,SAAS,GAAA;IACvB,OAAO,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW;AACzE;;AC7GA;;AAEG;MACU,eAAe,CAAA;AAW1B,IAAA,WAAA,CAAY,UAA2B,EAAE,EAAA;QATjC,IAAA,CAAA,cAAc,GAAuB,IAAI;QACzC,IAAA,CAAA,YAAY,GAAuB,IAAI;QACvC,IAAA,CAAA,WAAW,GAAY,KAAK;QAC5B,IAAA,CAAA,aAAa,GAAY,IAAI;QAC7B,IAAA,CAAA,SAAS,GAAY,IAAI;QACzB,IAAA,CAAA,qBAAqB,GAAwB,IAAI;QACjD,IAAA,CAAA,WAAW,GAAW,EAAE;QACxB,IAAA,CAAA,cAAc,GAAW,GAAG;AAGlC,QAAA,IAAI,CAAC,SAAS,EAAE,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC;QAC5E;AAEA,QAAA,IAAI,CAAC,WAAW,GAAG,cAAc,EAAE;QACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK;QACpD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG;;AAGnD,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,YAAA,MAAM,iBAAiB,GAAG,oBAAoB,EAAE;YAChD,IAAI,CAAC,qBAAqB,GAAG,iBAAiB,CAAC,QAAQ,CAAC,SAAS,IAAG;AAClE,gBAAA,IAAI,CAAC,SAAS,GAAG,SAAS;gBAC1B,IAAI,SAAS,EAAE;oBACb,IAAI,CAAC,MAAM,EAAE;gBACf;qBAAO;oBACL,IAAI,CAAC,KAAK,EAAE;gBACd;AACF,YAAA,CAAC,CAAC;QACJ;;AAGA,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,YAAA,MAAM,aAAa,GAAG,OAAO,OAAO,CAAC,OAAO,KAAK;AAC/C,kBAAE,EAAE,GAAG,EAAE,OAAO,CAAC,OAAO;AACxB,kBAAE,OAAO,CAAC,OAAO;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAChC;;AAGA,QAAA,IAAI,OAAO,CAAC,KAAK,EAAE;AACjB,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;QAC9B;IACF;AAEA;;AAEG;IACH,MAAM,UAAU,CAAC,MAA8B,EAAA;AAC7C,QAAA,MAAM,aAAa,GAAkB,OAAO,MAAM,KAAK;AACrD,cAAE,EAAE,GAAG,EAAE,MAAM;cACb,MAAM;QAEV,MAAM,EAAE,GAAG,EAAE,IAAI,GAAG,EAAE,EAAE,GAAG,aAAa;AACxC,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;AAEvB,QAAA,IAAI;;AAEF,YAAA,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC;;YAGrC,IAAI,CAAC,cAAc,GAAG;gBACpB,GAAG;gBACH,IAAI;AACJ,gBAAA,UAAU,EAAE,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;gBACjD;aACD;;AAGD,YAAA,MAAM,IAAI,CAAC,oBAAoB,EAAE;QACnC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC;QAChD;IACF;AAEA;;AAEG;AACH,IAAA,QAAQ,CAAC,MAAmB,EAAA;AAC1B,QAAA,IAAI;YACF,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC;YACxD,IAAI,CAAC,oBAAoB,EAAE;QAC7B;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC;QAC9C;IACF;AAEA;;AAEG;AACH,IAAA,WAAW,CAAC,MAAuB,EAAA;AACjC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;AACtB,YAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC;YACzD;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,MAAM;QACjC,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI;QACxB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;AAEA;;AAEG;AACK,IAAA,MAAM,oBAAoB,GAAA;QAChC,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE;AAE1B,QAAA,IAAI;AACF,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG;;AAGxC,YAAA,IAAI,IAAI,CAAC,YAAY,EAAE;gBACrB,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC;gBAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC;gBAEnC,IAAI,CAAC,GAAG,EAAE;AACR,oBAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;gBACjD;;gBAGA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACpD,gBAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;;AAG5D,gBAAA,aAAa,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC;;AAGjE,gBAAA,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC;YACtC;;AAGA,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,UAAU;QACpC;QAAE,OAAO,KAAK,EAAE;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC;QACzD;IACF;AAEA;;AAEG;IACH,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK;IAC1B;AAEA;;AAEG;IACH,MAAM,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AAClB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACzB;IACF;AAEA;;AAEG;IACH,UAAU,GAAA;QACR,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA;;AAEG;IACH,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;AAEG;IACH,cAAc,GAAA;QACZ,OAAO,IAAI,CAAC,WAAW;IACzB;AAEA;;AAEG;IACH,OAAO,GAAA;QACL,IAAI,CAAC,KAAK,EAAE;AACZ,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC9B,IAAI,CAAC,qBAAqB,EAAE;QAC9B;IACF;AACD;;;;"}
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.0",
4
4
  "description": "Lightweight favicon animation library with badge support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",