@grandgular/rive-angular 0.1.1 → 0.1.2

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.
@@ -172,6 +172,9 @@ class RiveCanvasComponent {
172
172
  isInitialized = false;
173
173
  isPausedByIntersectionObserver = false;
174
174
  retestIntersectionTimeoutId = null;
175
+ resizeRafId = null;
176
+ lastWidth = 0;
177
+ lastHeight = 0;
175
178
  constructor() {
176
179
  // Effect to reload animation when src, buffer, or riveFile changes
177
180
  effect(() => {
@@ -207,14 +210,27 @@ class RiveCanvasComponent {
207
210
  const canvas = this.canvas().nativeElement;
208
211
  const dpr = window.devicePixelRatio || 1;
209
212
  this.resizeObserver = new ResizeObserver((entries) => {
213
+ // Cancel any pending resize frame
214
+ if (this.resizeRafId) {
215
+ cancelAnimationFrame(this.resizeRafId);
216
+ }
210
217
  for (const entry of entries) {
211
218
  const { width, height } = entry.contentRect;
212
- // Set canvas size with device pixel ratio for sharp rendering
213
- canvas.width = width * dpr;
214
- canvas.height = height * dpr;
215
- // Resize Rive instance if it exists
216
- if (this.#rive)
217
- this.#rive.resizeDrawingSurfaceToCanvas();
219
+ // Skip if dimensions haven't changed (prevents unnecessary updates)
220
+ if (width === this.lastWidth && height === this.lastHeight) {
221
+ continue;
222
+ }
223
+ this.lastWidth = width;
224
+ this.lastHeight = height;
225
+ // Defer resize to next animation frame to prevent excessive updates in Safari
226
+ this.resizeRafId = requestAnimationFrame(() => {
227
+ // Set canvas size with device pixel ratio for sharp rendering
228
+ canvas.width = width * dpr;
229
+ canvas.height = height * dpr;
230
+ // Resize Rive instance if it exists
231
+ if (this.#rive)
232
+ this.#rive.resizeDrawingSurfaceToCanvas();
233
+ });
218
234
  }
219
235
  });
220
236
  this.resizeObserver.observe(canvas);
@@ -223,6 +239,10 @@ class RiveCanvasComponent {
223
239
  * Disconnect ResizeObserver
224
240
  */
225
241
  disconnectResizeObserver() {
242
+ if (this.resizeRafId) {
243
+ cancelAnimationFrame(this.resizeRafId);
244
+ this.resizeRafId = null;
245
+ }
226
246
  if (this.resizeObserver) {
227
247
  this.resizeObserver.disconnect();
228
248
  this.resizeObserver = null;
@@ -1 +1 @@
1
- {"version":3,"file":"grandgular-rive-angular.mjs","sources":["../../../../libs/rive-angular/src/lib/models/rive.model.ts","../../../../libs/rive-angular/src/lib/utils/element-observer.ts","../../../../libs/rive-angular/src/lib/components/rive-canvas.component.ts","../../../../libs/rive-angular/src/lib/services/rive-file.service.ts","../../../../libs/rive-angular/src/index.ts","../../../../libs/rive-angular/src/grandgular-rive-angular.ts"],"sourcesContent":["/**\n * Re-export Rive SDK types for consumer convenience\n */\nexport { Fit, Alignment, EventType } from '@rive-app/canvas';\nexport type { Event as RiveEvent } from '@rive-app/canvas';\n\n/**\n * Error thrown when Rive animation fails to load\n */\nexport class RiveLoadError extends Error {\n constructor(\n message: string,\n public readonly originalError?: Error,\n ) {\n super(message);\n this.name = 'RiveLoadError';\n }\n}\n","/**\n * Fake IntersectionObserver for environments where it's not available (e.g., SSR)\n */\nclass FakeIntersectionObserver implements IntersectionObserver {\n readonly root: Element | Document | null = null;\n readonly rootMargin: string = '';\n readonly thresholds: ReadonlyArray<number> = [];\n\n observe(): void {\n // Intentionally empty for SSR compatibility\n }\n unobserve(): void {\n // Intentionally empty for SSR compatibility\n }\n disconnect(): void {\n // Intentionally empty for SSR compatibility\n }\n takeRecords(): IntersectionObserverEntry[] {\n return [];\n }\n}\n\nconst MyIntersectionObserver =\n (typeof globalThis !== 'undefined' && globalThis.IntersectionObserver) ||\n FakeIntersectionObserver;\n\n/**\n * Singleton IntersectionObserver wrapper for observing multiple elements\n * with individual callbacks. This avoids creating multiple IntersectionObserver\n * instances which is more efficient.\n */\nexport class ElementObserver {\n private observer: IntersectionObserver;\n private elementsMap: Map<Element, (entry: IntersectionObserverEntry) => void> = new Map();\n\n constructor() {\n this.observer = new MyIntersectionObserver(\n this.onObserved,\n ) as IntersectionObserver;\n }\n\n private onObserved = (entries: IntersectionObserverEntry[]): void => {\n entries.forEach((entry) => {\n const elementCallback = this.elementsMap.get(entry.target as Element);\n if (elementCallback) {\n elementCallback(entry);\n }\n });\n };\n\n public registerCallback(element: Element, callback: (entry: IntersectionObserverEntry) => void): void {\n this.observer.observe(element);\n this.elementsMap.set(element, callback);\n }\n\n public removeCallback(element: Element): void {\n this.observer.unobserve(element);\n this.elementsMap.delete(element);\n }\n}\n\n// Singleton instance\nlet observerInstance: ElementObserver | null = null;\n\n/**\n * Get the singleton ElementObserver instance\n */\nexport function getElementObserver(): ElementObserver {\n if (!observerInstance) {\n observerInstance = new ElementObserver();\n }\n return observerInstance;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n input,\n output,\n signal,\n effect,\n inject,\n DestroyRef,\n PLATFORM_ID,\n AfterViewInit,\n NgZone,\n viewChild,\n untracked,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n Rive,\n RiveFile,\n Layout,\n Fit,\n Alignment,\n StateMachineInput,\n type LayoutParameters,\n Event as RiveEvent,\n} from '@rive-app/canvas';\nimport { RiveLoadError } from '../models';\nimport { getElementObserver } from '../utils';\n\n/**\n * Standalone Angular component for Rive animations\n *\n * Features:\n * - Signal-based inputs for reactive updates\n * - Automatic canvas sizing via ResizeObserver with DPR support\n * - OnPush change detection strategy\n * - SSR compatible\n * - Zoneless architecture ready\n * - Automatic resource cleanup\n * - Runs outside Angular zone for optimal performance\n *\n * @example\n * ```html\n * <rive-canvas\n * src=\"assets/animations/rive/animation.riv\"\n * [stateMachines]=\"'StateMachine'\"\n * [autoplay]=\"true\"\n * [fit]=\"Fit.Cover\"\n * [alignment]=\"Alignment.Center\"\n * (loaded)=\"onLoad()\"\n * />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'rive-canvas',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <canvas #canvas [style.width.%]=\"100\" [style.height.%]=\"100\"></canvas>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n canvas {\n display: block;\n }\n `,\n ],\n})\nexport class RiveCanvasComponent implements AfterViewInit {\n private readonly canvas =\n viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #ngZone = inject(NgZone);\n\n public readonly src = input<string>();\n public readonly buffer = input<ArrayBuffer>();\n /**\n * Preloaded RiveFile instance (from RiveFileService).\n * If provided, this takes precedence over src/buffer.\n */\n public readonly riveFile = input<RiveFile>();\n public readonly artboard = input<string>();\n public readonly animations = input<string | string[]>();\n public readonly stateMachines = input<string | string[]>();\n public readonly autoplay = input<boolean>(true);\n public readonly fit = input<Fit>(Fit.Contain);\n public readonly alignment = input<Alignment>(Alignment.Center);\n public readonly useOffscreenRenderer = input<boolean>(false);\n /**\n * Enable IntersectionObserver to automatically stop rendering when canvas is not visible.\n * This optimizes performance by pausing animations that are off-screen.\n */\n public readonly shouldUseIntersectionObserver = input<boolean>(true);\n /**\n * Disable Rive event listeners on the canvas (pointer events, touch events).\n * Useful for decorative animations without interactivity.\n */\n public readonly shouldDisableRiveListeners = input<boolean>(false);\n /**\n * Allow Rive to automatically handle Rive Events (e.g., OpenUrlEvent opens URLs).\n * Default is false for security - events must be handled manually via riveEvent output.\n */\n public readonly automaticallyHandleEvents = input<boolean>(false);\n\n // Outputs (Events)\n public readonly loaded = output<void>();\n public readonly loadError = output<Error>();\n /**\n * Emitted when state machine state changes.\n * Contains information about the state change event.\n */\n public readonly stateChange = output<RiveEvent>();\n /**\n * Emitted for Rive Events (custom events defined in the .riv file).\n * Use this to handle custom events like OpenUrlEvent, etc.\n */\n public readonly riveEvent = output<RiveEvent>();\n /**\n * Emitted when Rive instance is created and ready.\n * Provides direct access to the Rive instance for advanced use cases.\n */\n public readonly riveReady = output<Rive>();\n\n // Signals for reactive state\n public readonly isPlaying = signal<boolean>(false);\n public readonly isPaused = signal<boolean>(false);\n public readonly isLoaded = signal<boolean>(false);\n /**\n * Public signal providing access to the Rive instance.\n * Use this to access advanced Rive SDK features.\n */\n public readonly riveInstance = signal<Rive | null>(null);\n\n // Private state\n #rive: Rive | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private isInitialized = false;\n private isPausedByIntersectionObserver = false;\n private retestIntersectionTimeoutId: ReturnType<typeof setTimeout> | null =\n null;\n\n constructor() {\n // Effect to reload animation when src, buffer, or riveFile changes\n effect(() => {\n const src = this.src();\n const buffer = this.buffer();\n const riveFile = this.riveFile();\n untracked(() => {\n if (\n (src || buffer || riveFile) &&\n isPlatformBrowser(this.#platformId) &&\n this.isInitialized\n )\n this.loadAnimation();\n });\n });\n\n // Auto cleanup on destroy\n this.#destroyRef.onDestroy(() => {\n this.cleanupRive();\n this.disconnectResizeObserver();\n this.disconnectIntersectionObserver();\n });\n }\n\n public ngAfterViewInit(): void {\n if (isPlatformBrowser(this.#platformId)) {\n this.isInitialized = true;\n this.setupResizeObserver();\n this.setupIntersectionObserver();\n this.loadAnimation();\n }\n }\n\n /**\n * Setup ResizeObserver for automatic canvas sizing with DPR support\n */\n private setupResizeObserver(): void {\n const canvas = this.canvas().nativeElement;\n const dpr = window.devicePixelRatio || 1;\n\n this.resizeObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n\n // Set canvas size with device pixel ratio for sharp rendering\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n\n // Resize Rive instance if it exists\n if (this.#rive) this.#rive.resizeDrawingSurfaceToCanvas();\n }\n });\n\n this.resizeObserver.observe(canvas);\n }\n\n /**\n * Disconnect ResizeObserver\n */\n private disconnectResizeObserver(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n /**\n * Setup IntersectionObserver to stop rendering when canvas is not visible\n */\n private setupIntersectionObserver(): void {\n if (!this.shouldUseIntersectionObserver()) return;\n\n const canvas = this.canvas().nativeElement;\n const observer = getElementObserver();\n\n const onIntersectionChange = (entry: IntersectionObserverEntry): void => {\n if (entry.isIntersecting) {\n // Canvas is visible - start rendering\n if (this.#rive) {\n this.#rive.startRendering();\n }\n this.isPausedByIntersectionObserver = false;\n } else {\n // Canvas is not visible - stop rendering\n if (this.#rive) {\n this.#rive.stopRendering();\n }\n this.isPausedByIntersectionObserver = true;\n\n // Workaround for Chrome bug with insertBefore\n // Retest after 10ms if boundingClientRect.width is 0\n if (this.retestIntersectionTimeoutId) {\n clearTimeout(this.retestIntersectionTimeoutId);\n }\n\n if (entry.boundingClientRect.width === 0) {\n this.retestIntersectionTimeoutId = setTimeout(() => {\n this.retestIntersection();\n }, 10);\n }\n }\n };\n\n observer.registerCallback(canvas, onIntersectionChange);\n }\n\n /**\n * Retest intersection - workaround for Chrome bug\n */\n private retestIntersection(): void {\n if (!this.isPausedByIntersectionObserver) return;\n\n const canvas = this.canvas().nativeElement;\n const rect = canvas.getBoundingClientRect();\n\n const isIntersecting =\n rect.width > 0 &&\n rect.height > 0 &&\n rect.top <\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.bottom > 0 &&\n rect.left < (window.innerWidth || document.documentElement.clientWidth) &&\n rect.right > 0;\n\n if (isIntersecting && this.#rive) {\n this.#rive.startRendering();\n this.isPausedByIntersectionObserver = false;\n }\n }\n\n /**\n * Disconnect IntersectionObserver\n */\n private disconnectIntersectionObserver(): void {\n if (this.retestIntersectionTimeoutId) {\n clearTimeout(this.retestIntersectionTimeoutId);\n this.retestIntersectionTimeoutId = null;\n }\n\n if (this.shouldUseIntersectionObserver()) {\n const canvas = this.canvas().nativeElement;\n const observer = getElementObserver();\n observer.removeCallback(canvas);\n }\n }\n\n /**\n * Load animation from src or buffer\n */\n private loadAnimation(): void {\n // Run outside Angular zone for better performance\n this.#ngZone.runOutsideAngular(() => {\n try {\n // Clean up existing Rive instance only\n this.cleanupRive();\n\n const canvas = this.canvas().nativeElement;\n const src = this.src();\n const buffer = this.buffer();\n const riveFile = this.riveFile();\n\n if (!src && !buffer && !riveFile) return;\n\n // Build layout configuration\n const layoutParams: LayoutParameters = {\n fit: this.fit(),\n alignment: this.alignment(),\n };\n\n // Create Rive instance configuration\n // Using Record to allow dynamic property assignment\n const config: Record<string, unknown> = {\n canvas,\n autoplay: this.autoplay(),\n layout: new Layout(layoutParams),\n useOffscreenRenderer: this.useOffscreenRenderer(),\n shouldDisableRiveListeners: this.shouldDisableRiveListeners(),\n automaticallyHandleEvents: this.automaticallyHandleEvents(),\n onLoad: () => this.onLoad(),\n onLoadError: (error?: unknown) => this.onLoadError(error),\n onPlay: () => this.onPlay(),\n onPause: () => this.onPause(),\n onStop: () => this.onStop(),\n onStateChange: (event: RiveEvent) => this.onStateChange(event),\n onRiveEvent: (event: RiveEvent) => this.onRiveEvent(event),\n };\n\n // Add src, buffer, or riveFile (priority: riveFile > src > buffer)\n if (riveFile) {\n config['riveFile'] = riveFile;\n } else if (src) {\n config['src'] = src;\n } else if (buffer) {\n config['buffer'] = buffer;\n }\n\n // Add artboard if specified\n const artboard = this.artboard();\n if (artboard) config['artboard'] = artboard;\n\n // Add animations if specified\n const animations = this.animations();\n if (animations) config['animations'] = animations;\n\n // Add state machines if specified\n const stateMachines = this.stateMachines();\n if (stateMachines) config['stateMachines'] = stateMachines;\n\n // Safe type assertion - config contains all required properties\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.#rive = new Rive(config as any);\n\n // Update public signal and emit riveReady event\n this.#ngZone.run(() => {\n this.riveInstance.set(this.#rive);\n this.riveReady.emit(this.#rive!);\n });\n } catch (error) {\n console.error('Failed to initialize Rive instance:', error);\n this.#ngZone.run(() =>\n this.loadError.emit(\n new RiveLoadError('Failed to load Rive animation', error as Error),\n ),\n );\n }\n });\n }\n\n // Event handlers (run inside Angular zone for change detection)\n private onLoad(): void {\n this.#ngZone.run(() => {\n this.isLoaded.set(true);\n this.loaded.emit();\n });\n }\n\n private onLoadError(originalError?: unknown): void {\n this.#ngZone.run(() => {\n const error = new RiveLoadError(\n 'Failed to load Rive animation',\n originalError instanceof Error ? originalError : undefined,\n );\n console.error('Rive load error:', error);\n this.loadError.emit(error);\n });\n }\n\n private onPlay(): void {\n this.#ngZone.run(() => {\n this.isPlaying.set(true);\n this.isPaused.set(false);\n });\n }\n\n private onPause(): void {\n this.#ngZone.run(() => {\n this.isPlaying.set(false);\n this.isPaused.set(true);\n });\n }\n\n private onStop(): void {\n this.#ngZone.run(() => {\n this.isPlaying.set(false);\n this.isPaused.set(false);\n });\n }\n\n private onStateChange(event: RiveEvent): void {\n this.#ngZone.run(() => this.stateChange.emit(event));\n }\n\n private onRiveEvent(event: RiveEvent): void {\n this.#ngZone.run(() => this.riveEvent.emit(event));\n }\n\n // Public API methods\n\n /**\n * Play animation(s)\n */\n public playAnimation(animations?: string | string[]): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n if (animations) {\n this.#rive!.play(animations);\n } else {\n this.#rive!.play();\n }\n });\n }\n\n /**\n * Pause animation(s)\n */\n public pauseAnimation(animations?: string | string[]): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n if (animations) {\n this.#rive!.pause(animations);\n } else {\n this.#rive!.pause();\n }\n });\n }\n\n /**\n * Stop animation(s)\n */\n public stopAnimation(animations?: string | string[]): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n if (animations) {\n this.#rive!.stop(animations);\n } else {\n this.#rive!.stop();\n }\n });\n }\n\n /**\n * Reset the animation to the beginning\n */\n public reset(): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n this.#rive!.reset();\n });\n }\n\n /**\n * Set a state machine input value\n */\n public setInput(\n stateMachineName: string,\n inputName: string,\n value: number | boolean,\n ): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n const inputs = this.#rive!.stateMachineInputs(stateMachineName);\n const input = inputs.find((i: StateMachineInput) => i.name === inputName);\n\n if (input && 'value' in input) {\n input.value = value;\n }\n });\n }\n\n /**\n * Fire a state machine trigger\n */\n public fireTrigger(stateMachineName: string, triggerName: string): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n const inputs = this.#rive!.stateMachineInputs(stateMachineName);\n const input = inputs.find(\n (i: StateMachineInput) => i.name === triggerName,\n );\n\n if (input && 'fire' in input && typeof input.fire === 'function') {\n input.fire();\n }\n });\n }\n\n /**\n * Clean up Rive instance only\n */\n private cleanupRive(): void {\n if (this.#rive) {\n try {\n this.#rive.cleanup();\n } catch (error) {\n console.warn('Error during Rive cleanup:', error);\n }\n this.#rive = null;\n }\n\n // Reset signals\n this.riveInstance.set(null);\n this.isLoaded.set(false);\n this.isPlaying.set(false);\n this.isPaused.set(false);\n }\n}\n","import { Injectable, signal, Signal } from '@angular/core';\nimport { RiveFile, EventType } from '@rive-app/canvas';\n\n/**\n * Status of RiveFile loading\n */\nexport type FileStatus = 'idle' | 'loading' | 'success' | 'failed';\n\n/**\n * State of a loaded RiveFile\n */\nexport interface RiveFileState {\n riveFile: RiveFile | null;\n status: FileStatus;\n}\n\n/**\n * Parameters for loading a RiveFile\n */\nexport interface RiveFileParams {\n src?: string;\n buffer?: ArrayBuffer;\n}\n\n/**\n * Cache entry for a loaded RiveFile\n */\ninterface CacheEntry {\n file: RiveFile;\n state: Signal<RiveFileState>;\n refCount: number;\n}\n\n/**\n * Pending load entry to prevent duplicate loads\n */\ninterface PendingLoad {\n stateSignal: ReturnType<typeof signal<RiveFileState>>;\n promise: Promise<void>;\n}\n\n/**\n * Service for preloading and caching Rive files.\n *\n * This service allows you to:\n * - Preload .riv files before they're needed\n * - Share the same file across multiple components\n * - Cache files to avoid redundant network requests\n * - Deduplicate concurrent loads of the same file\n *\n * @example\n * ```typescript\n * export class MyComponent {\n * private riveFileService = inject(RiveFileService);\n * private destroyRef = inject(DestroyRef);\n *\n * fileState = this.riveFileService.loadFile({\n * src: 'assets/animation.riv'\n * });\n *\n * constructor() {\n * // Auto-release on component destroy\n * this.destroyRef.onDestroy(() => {\n * this.riveFileService.releaseFile({ src: 'assets/animation.riv' });\n * });\n * }\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class RiveFileService {\n private cache = new Map<string, CacheEntry>();\n private pendingLoads = new Map<string, PendingLoad>();\n private bufferIdCounter = 0;\n\n /**\n * Load a RiveFile from URL or ArrayBuffer.\n * Returns a signal with the file state and loading status.\n * Files are cached by src URL to avoid redundant loads.\n * Concurrent loads of the same file are deduplicated.\n *\n * @param params - Parameters containing src URL or buffer\n * @returns Signal with RiveFileState\n */\n public loadFile(params: RiveFileParams): Signal<RiveFileState> {\n const cacheKey = this.getCacheKey(params);\n\n // Return cached entry if exists\n const cached = this.cache.get(cacheKey);\n if (cached) {\n cached.refCount++;\n return cached.state;\n }\n\n // Return pending load if already in progress\n const pending = this.pendingLoads.get(cacheKey);\n if (pending) {\n return pending.stateSignal.asReadonly();\n }\n\n // Create new loading state\n const stateSignal = signal<RiveFileState>({\n riveFile: null,\n status: 'loading',\n });\n\n // Start loading and track as pending\n const promise = this.loadRiveFile(params, stateSignal, cacheKey);\n this.pendingLoads.set(cacheKey, { stateSignal, promise });\n\n return stateSignal.asReadonly();\n }\n\n /**\n * Release a cached file. Decrements reference count and cleans up if no longer used.\n *\n * @param params - Parameters used to load the file\n */\n public releaseFile(params: RiveFileParams): void {\n const cacheKey = this.getCacheKey(params);\n const cached = this.cache.get(cacheKey);\n\n if (cached) {\n cached.refCount--;\n if (cached.refCount <= 0) {\n try {\n cached.file.cleanup();\n } catch (error) {\n console.warn('Error cleaning up RiveFile:', error);\n }\n this.cache.delete(cacheKey);\n }\n }\n }\n\n /**\n * Clear all cached files\n */\n public clearCache(): void {\n this.cache.forEach((entry) => {\n try {\n entry.file.cleanup();\n } catch (error) {\n console.warn('Error cleaning up RiveFile:', error);\n }\n });\n this.cache.clear();\n }\n\n /**\n * Get cache key from params\n */\n private getCacheKey(params: RiveFileParams): string {\n if (params.src) {\n return `src:${params.src}`;\n }\n if (params.buffer) {\n // For buffers, generate unique ID to avoid collisions\n // Store the ID on the buffer object itself\n const bufferWithId = params.buffer as ArrayBuffer & { __riveBufferId?: number };\n if (!bufferWithId.__riveBufferId) {\n bufferWithId.__riveBufferId = ++this.bufferIdCounter;\n }\n return `buffer:${bufferWithId.__riveBufferId}`;\n }\n return 'unknown';\n }\n\n /**\n * Load RiveFile and update state signal\n */\n private loadRiveFile(\n params: RiveFileParams,\n stateSignal: ReturnType<typeof signal<RiveFileState>>,\n cacheKey: string,\n ): Promise<void> {\n return new Promise<void>((resolve) => {\n try {\n const file = new RiveFile(params);\n file.init();\n\n file.on(EventType.Load, () => {\n // Request an instance to increment reference count\n // This prevents the file from being destroyed while in use\n file.getInstance();\n\n stateSignal.set({\n riveFile: file,\n status: 'success',\n });\n\n // Cache the successfully loaded file\n this.cache.set(cacheKey, {\n file,\n state: stateSignal.asReadonly(),\n refCount: 1,\n });\n\n // Remove from pending loads\n this.pendingLoads.delete(cacheKey);\n resolve();\n });\n\n file.on(EventType.LoadError, () => {\n stateSignal.set({\n riveFile: null,\n status: 'failed',\n });\n\n // Remove from pending loads\n this.pendingLoads.delete(cacheKey);\n\n // Resolve (not reject) — error state is communicated via the signal.\n // Rejecting would cause an unhandled promise rejection since no\n // consumer awaits or catches this promise.\n resolve();\n });\n } catch (error) {\n console.error('Failed to load RiveFile:', error);\n stateSignal.set({\n riveFile: null,\n status: 'failed',\n });\n\n // Remove from pending loads\n this.pendingLoads.delete(cacheKey);\n\n // Resolve (not reject) — error state is communicated via the signal.\n resolve();\n }\n });\n }\n}\n","/*\n * Public API Surface of @Grandgular/rive-angular\n */\n\n// Component\nexport { RiveCanvasComponent } from './lib/components';\n\n// Services\nexport {\n RiveFileService,\n type RiveFileState,\n type RiveFileParams,\n type FileStatus,\n} from './lib/services';\n\n// Re-exported Rive SDK types and error classes\nexport {\n Fit,\n Alignment,\n RiveLoadError,\n EventType,\n} from './lib/models';\nexport type { RiveEvent } from './lib/models';\n\n// Re-export commonly used types from @rive-app/canvas for convenience\nexport {\n Rive,\n RiveFile,\n Layout,\n StateMachineInput,\n type LayoutParameters,\n type RiveParameters,\n type RiveFileParameters,\n} from '@rive-app/canvas';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAAA;;AAEG;AAIH;;AAEG;AACG,MAAO,aAAc,SAAQ,KAAK,CAAA;AAGpB,IAAA,aAAA;IAFlB,WAAA,CACE,OAAe,EACC,aAAqB,EAAA;QAErC,KAAK,CAAC,OAAO,CAAC;QAFE,IAAA,CAAA,aAAa,GAAb,aAAa;AAG7B,QAAA,IAAI,CAAC,IAAI,GAAG,eAAe;IAC7B;AACD;;ACjBD;;AAEG;AACH,MAAM,wBAAwB,CAAA;IACnB,IAAI,GAA8B,IAAI;IACtC,UAAU,GAAW,EAAE;IACvB,UAAU,GAA0B,EAAE;IAE/C,OAAO,GAAA;;IAEP;IACA,SAAS,GAAA;;IAET;IACA,UAAU,GAAA;;IAEV;IACA,WAAW,GAAA;AACT,QAAA,OAAO,EAAE;IACX;AACD;AAED,MAAM,sBAAsB,GAC1B,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,CAAC,oBAAoB;AACrE,IAAA,wBAAwB;AAE1B;;;;AAIG;MACU,eAAe,CAAA;AAClB,IAAA,QAAQ;AACR,IAAA,WAAW,GAA6D,IAAI,GAAG,EAAE;AAEzF,IAAA,WAAA,GAAA;QACE,IAAI,CAAC,QAAQ,GAAG,IAAI,sBAAsB,CACxC,IAAI,CAAC,UAAU,CACQ;IAC3B;AAEQ,IAAA,UAAU,GAAG,CAAC,OAAoC,KAAU;AAClE,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAiB,CAAC;YACrE,IAAI,eAAe,EAAE;gBACnB,eAAe,CAAC,KAAK,CAAC;YACxB;AACF,QAAA,CAAC,CAAC;AACJ,IAAA,CAAC;IAEM,gBAAgB,CAAC,OAAgB,EAAE,QAAoD,EAAA;AAC5F,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC;IACzC;AAEO,IAAA,cAAc,CAAC,OAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC;AAChC,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;IAClC;AACD;AAED;AACA,IAAI,gBAAgB,GAA2B,IAAI;AAEnD;;AAEG;SACa,kBAAkB,GAAA;IAChC,IAAI,CAAC,gBAAgB,EAAE;AACrB,QAAA,gBAAgB,GAAG,IAAI,eAAe,EAAE;IAC1C;AACA,IAAA,OAAO,gBAAgB;AACzB;;AC1CA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;MAuBU,mBAAmB,CAAA;AACb,IAAA,MAAM,GACrB,SAAS,CAAC,QAAQ,CAAgC,QAAQ,CAAC;AAEpD,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAChC,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,IAAA,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC;IAEjB,GAAG,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,KAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IACrB,MAAM,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,QAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAe;AAC7C;;;AAGG;IACa,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAY;IAC5B,QAAQ,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAU;IAC1B,UAAU,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAqB;IACvC,aAAa,GAAG,KAAK,CAAA,IAAA,SAAA,GAAA,CAAA,SAAA,EAAA,EAAA,SAAA,EAAA,eAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAqB;AAC1C,IAAA,QAAQ,GAAG,KAAK,CAAU,IAAI,oDAAC;AAC/B,IAAA,GAAG,GAAG,KAAK,CAAM,GAAG,CAAC,OAAO,+CAAC;AAC7B,IAAA,SAAS,GAAG,KAAK,CAAY,SAAS,CAAC,MAAM,qDAAC;AAC9C,IAAA,oBAAoB,GAAG,KAAK,CAAU,KAAK,gEAAC;AAC5D;;;AAGG;AACa,IAAA,6BAA6B,GAAG,KAAK,CAAU,IAAI,yEAAC;AACpE;;;AAGG;AACa,IAAA,0BAA0B,GAAG,KAAK,CAAU,KAAK,sEAAC;AAClE;;;AAGG;AACa,IAAA,yBAAyB,GAAG,KAAK,CAAU,KAAK,qEAAC;;IAGjD,MAAM,GAAG,MAAM,EAAQ;IACvB,SAAS,GAAG,MAAM,EAAS;AAC3C;;;AAGG;IACa,WAAW,GAAG,MAAM,EAAa;AACjD;;;AAGG;IACa,SAAS,GAAG,MAAM,EAAa;AAC/C;;;AAGG;IACa,SAAS,GAAG,MAAM,EAAQ;;AAG1B,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,oDAAC;AACjC,IAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,oDAAC;AACjD;;;AAGG;AACa,IAAA,YAAY,GAAG,MAAM,CAAc,IAAI,wDAAC;;IAGxD,KAAK,GAAgB,IAAI;IACjB,cAAc,GAA0B,IAAI;IAC5C,aAAa,GAAG,KAAK;IACrB,8BAA8B,GAAG,KAAK;IACtC,2BAA2B,GACjC,IAAI;AAEN,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;YAChC,SAAS,CAAC,MAAK;AACb,gBAAA,IACE,CAAC,GAAG,IAAI,MAAM,IAAI,QAAQ;AAC1B,oBAAA,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;AACnC,oBAAA,IAAI,CAAC,aAAa;oBAElB,IAAI,CAAC,aAAa,EAAE;AACxB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;;AAGF,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;YAC9B,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,wBAAwB,EAAE;YAC/B,IAAI,CAAC,8BAA8B,EAAE;AACvC,QAAA,CAAC,CAAC;IACJ;IAEO,eAAe,GAAA;AACpB,QAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI;YACzB,IAAI,CAAC,mBAAmB,EAAE;YAC1B,IAAI,CAAC,yBAAyB,EAAE;YAChC,IAAI,CAAC,aAAa,EAAE;QACtB;IACF;AAEA;;AAEG;IACK,mBAAmB,GAAA;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AAC1C,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC;QAExC,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,CAAC,OAAO,KAAI;AACnD,YAAA,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;gBAC3B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW;;AAG3C,gBAAA,MAAM,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG;AAC1B,gBAAA,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,GAAG;;gBAG5B,IAAI,IAAI,CAAC,KAAK;AAAE,oBAAA,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE;YAC3D;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC;IACrC;AAEA;;AAEG;IACK,wBAAwB,GAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE;AAChC,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;AAEA;;AAEG;IACK,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,6BAA6B,EAAE;YAAE;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AAC1C,QAAA,MAAM,QAAQ,GAAG,kBAAkB,EAAE;AAErC,QAAA,MAAM,oBAAoB,GAAG,CAAC,KAAgC,KAAU;AACtE,YAAA,IAAI,KAAK,CAAC,cAAc,EAAE;;AAExB,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;gBAC7B;AACA,gBAAA,IAAI,CAAC,8BAA8B,GAAG,KAAK;YAC7C;iBAAO;;AAEL,gBAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,oBAAA,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE;gBAC5B;AACA,gBAAA,IAAI,CAAC,8BAA8B,GAAG,IAAI;;;AAI1C,gBAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;AACpC,oBAAA,YAAY,CAAC,IAAI,CAAC,2BAA2B,CAAC;gBAChD;gBAEA,IAAI,KAAK,CAAC,kBAAkB,CAAC,KAAK,KAAK,CAAC,EAAE;AACxC,oBAAA,IAAI,CAAC,2BAA2B,GAAG,UAAU,CAAC,MAAK;wBACjD,IAAI,CAAC,kBAAkB,EAAE;oBAC3B,CAAC,EAAE,EAAE,CAAC;gBACR;YACF;AACF,QAAA,CAAC;AAED,QAAA,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,CAAC;IACzD;AAEA;;AAEG;IACK,kBAAkB,GAAA;QACxB,IAAI,CAAC,IAAI,CAAC,8BAA8B;YAAE;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AAC1C,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;AAE3C,QAAA,MAAM,cAAc,GAClB,IAAI,CAAC,KAAK,GAAG,CAAC;YACd,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,IAAI,CAAC,GAAG;iBACL,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC;YAC/D,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC;AACvE,YAAA,IAAI,CAAC,KAAK,GAAG,CAAC;AAEhB,QAAA,IAAI,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE;AAC3B,YAAA,IAAI,CAAC,8BAA8B,GAAG,KAAK;QAC7C;IACF;AAEA;;AAEG;IACK,8BAA8B,GAAA;AACpC,QAAA,IAAI,IAAI,CAAC,2BAA2B,EAAE;AACpC,YAAA,YAAY,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC9C,YAAA,IAAI,CAAC,2BAA2B,GAAG,IAAI;QACzC;AAEA,QAAA,IAAI,IAAI,CAAC,6BAA6B,EAAE,EAAE;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AAC1C,YAAA,MAAM,QAAQ,GAAG,kBAAkB,EAAE;AACrC,YAAA,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC;QACjC;IACF;AAEA;;AAEG;IACK,aAAa,GAAA;;AAEnB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,IAAI;;gBAEF,IAAI,CAAC,WAAW,EAAE;gBAElB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,aAAa;AAC1C,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AACtB,gBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AAC5B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAEhC,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ;oBAAE;;AAGlC,gBAAA,MAAM,YAAY,GAAqB;AACrC,oBAAA,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;AACf,oBAAA,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE;iBAC5B;;;AAID,gBAAA,MAAM,MAAM,GAA4B;oBACtC,MAAM;AACN,oBAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,oBAAA,MAAM,EAAE,IAAI,MAAM,CAAC,YAAY,CAAC;AAChC,oBAAA,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE;AACjD,oBAAA,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,EAAE;AAC7D,oBAAA,yBAAyB,EAAE,IAAI,CAAC,yBAAyB,EAAE;AAC3D,oBAAA,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;oBAC3B,WAAW,EAAE,CAAC,KAAe,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;AACzD,oBAAA,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;AAC3B,oBAAA,OAAO,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE;AAC7B,oBAAA,MAAM,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE;oBAC3B,aAAa,EAAE,CAAC,KAAgB,KAAK,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;oBAC9D,WAAW,EAAE,CAAC,KAAgB,KAAK,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;iBAC3D;;gBAGD,IAAI,QAAQ,EAAE;AACZ,oBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ;gBAC/B;qBAAO,IAAI,GAAG,EAAE;AACd,oBAAA,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG;gBACrB;qBAAO,IAAI,MAAM,EAAE;AACjB,oBAAA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM;gBAC3B;;AAGA,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,gBAAA,IAAI,QAAQ;AAAE,oBAAA,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ;;AAG3C,gBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;AACpC,gBAAA,IAAI,UAAU;AAAE,oBAAA,MAAM,CAAC,YAAY,CAAC,GAAG,UAAU;;AAGjD,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,gBAAA,IAAI,aAAa;AAAE,oBAAA,MAAM,CAAC,eAAe,CAAC,GAAG,aAAa;;;gBAI1D,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAa,CAAC;;AAGpC,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;oBACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;oBACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAM,CAAC;AAClC,gBAAA,CAAC,CAAC;YACJ;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;gBAC3D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MACf,IAAI,CAAC,SAAS,CAAC,IAAI,CACjB,IAAI,aAAa,CAAC,+BAA+B,EAAE,KAAc,CAAC,CACnE,CACF;YACH;AACF,QAAA,CAAC,CAAC;IACJ;;IAGQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;AACpB,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,WAAW,CAAC,aAAuB,EAAA;AACzC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,YAAA,MAAM,KAAK,GAAG,IAAI,aAAa,CAC7B,+BAA+B,EAC/B,aAAa,YAAY,KAAK,GAAG,aAAa,GAAG,SAAS,CAC3D;AACD,YAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5B,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,CAAC,CAAC;IACJ;IAEQ,OAAO,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACzB,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAK;AACpB,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AAC1B,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,aAAa,CAAC,KAAgB,EAAA;AACpC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtD;AAEQ,IAAA,WAAW,CAAC,KAAgB,EAAA;AAClC,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD;;AAIA;;AAEG;AACI,IAAA,aAAa,CAAC,UAA8B,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,KAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAM,CAAC,IAAI,EAAE;YACpB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,cAAc,CAAC,UAA8B,EAAA;QAClD,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,KAAM,CAAC,KAAK,CAAC,UAAU,CAAC;YAC/B;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAM,CAAC,KAAK,EAAE;YACrB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,aAAa,CAAC,UAA8B,EAAA;QACjD,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,KAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YAC9B;iBAAO;AACL,gBAAA,IAAI,CAAC,KAAM,CAAC,IAAI,EAAE;YACpB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACI,KAAK,GAAA;QACV,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,KAAM,CAAC,KAAK,EAAE;AACrB,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;AACI,IAAA,QAAQ,CACb,gBAAwB,EACxB,SAAiB,EACjB,KAAuB,EAAA;QAEvB,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;AAC/D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAoB,KAAK,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC;AAEzE,YAAA,IAAI,KAAK,IAAI,OAAO,IAAI,KAAK,EAAE;AAC7B,gBAAA,KAAK,CAAC,KAAK,GAAG,KAAK;YACrB;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACI,WAAW,CAAC,gBAAwB,EAAE,WAAmB,EAAA;QAC9D,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE;AAEjB,QAAA,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAK;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC;AAC/D,YAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,CAAoB,KAAK,CAAC,CAAC,IAAI,KAAK,WAAW,CACjD;AAED,YAAA,IAAI,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;gBAChE,KAAK,CAAC,IAAI,EAAE;YACd;AACF,QAAA,CAAC,CAAC;IACJ;AAEA;;AAEG;IACK,WAAW,GAAA;AACjB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI;AACF,gBAAA,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE;YACtB;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,KAAK,CAAC;YACnD;AACA,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;;AAGA,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;IAC1B;uGAjdW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,6BAAA,EAAA,EAAA,iBAAA,EAAA,+BAAA,EAAA,UAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,0BAAA,EAAA,EAAA,iBAAA,EAAA,4BAAA,EAAA,UAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,yBAAA,EAAA,EAAA,iBAAA,EAAA,2BAAA,EAAA,UAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,WAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,QAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAjBpB;;AAET,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAeU,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAtB/B,SAAS;AAEE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,aAAa,cACX,IAAI,EAAA,eAAA,EACC,uBAAuB,CAAC,MAAM,EAAA,QAAA,EACrC;;AAET,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,oEAAA,CAAA,EAAA;8FAiBmD,QAAQ,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,aAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,WAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,oBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,6BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,+BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,0BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,4BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,yBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,2BAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACrC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BG;MAIU,eAAe,CAAA;AAClB,IAAA,KAAK,GAAG,IAAI,GAAG,EAAsB;AACrC,IAAA,YAAY,GAAG,IAAI,GAAG,EAAuB;IAC7C,eAAe,GAAG,CAAC;AAE3B;;;;;;;;AAQG;AACI,IAAA,QAAQ,CAAC,MAAsB,EAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;;QAGzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvC,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,QAAQ,EAAE;YACjB,OAAO,MAAM,CAAC,KAAK;QACrB;;QAGA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC/C,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,OAAO,CAAC,WAAW,CAAC,UAAU,EAAE;QACzC;;QAGA,MAAM,WAAW,GAAG,MAAM,CAAgB;AACxC,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,MAAM,EAAE,SAAS;AAClB,SAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC;AAChE,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;AAEzD,QAAA,OAAO,WAAW,CAAC,UAAU,EAAE;IACjC;AAEA;;;;AAIG;AACI,IAAA,WAAW,CAAC,MAAsB,EAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAEvC,IAAI,MAAM,EAAE;YACV,MAAM,CAAC,QAAQ,EAAE;AACjB,YAAA,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,EAAE;AACxB,gBAAA,IAAI;AACF,oBAAA,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE;gBACvB;gBAAE,OAAO,KAAK,EAAE;AACd,oBAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC;gBACpD;AACA,gBAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC;YAC7B;QACF;IACF;AAEA;;AAEG;IACI,UAAU,GAAA;QACf,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC3B,YAAA,IAAI;AACF,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;YACtB;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,IAAI,CAAC,6BAA6B,EAAE,KAAK,CAAC;YACpD;AACF,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AAEA;;AAEG;AACK,IAAA,WAAW,CAAC,MAAsB,EAAA;AACxC,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE;AACd,YAAA,OAAO,CAAA,IAAA,EAAO,MAAM,CAAC,GAAG,EAAE;QAC5B;AACA,QAAA,IAAI,MAAM,CAAC,MAAM,EAAE;;;AAGjB,YAAA,MAAM,YAAY,GAAG,MAAM,CAAC,MAAmD;AAC/E,YAAA,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE;AAChC,gBAAA,YAAY,CAAC,cAAc,GAAG,EAAE,IAAI,CAAC,eAAe;YACtD;AACA,YAAA,OAAO,CAAA,OAAA,EAAU,YAAY,CAAC,cAAc,EAAE;QAChD;AACA,QAAA,OAAO,SAAS;IAClB;AAEA;;AAEG;AACK,IAAA,YAAY,CAClB,MAAsB,EACtB,WAAqD,EACrD,QAAgB,EAAA;AAEhB,QAAA,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,KAAI;AACnC,YAAA,IAAI;AACF,gBAAA,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;gBACjC,IAAI,CAAC,IAAI,EAAE;gBAEX,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAK;;;oBAG3B,IAAI,CAAC,WAAW,EAAE;oBAElB,WAAW,CAAC,GAAG,CAAC;AACd,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,MAAM,EAAE,SAAS;AAClB,qBAAA,CAAC;;AAGF,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE;wBACvB,IAAI;AACJ,wBAAA,KAAK,EAAE,WAAW,CAAC,UAAU,EAAE;AAC/B,wBAAA,QAAQ,EAAE,CAAC;AACZ,qBAAA,CAAC;;AAGF,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClC,oBAAA,OAAO,EAAE;AACX,gBAAA,CAAC,CAAC;gBAEF,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,MAAK;oBAChC,WAAW,CAAC,GAAG,CAAC;AACd,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,MAAM,EAAE,QAAQ;AACjB,qBAAA,CAAC;;AAGF,oBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;;;;AAKlC,oBAAA,OAAO,EAAE;AACX,gBAAA,CAAC,CAAC;YACJ;YAAE,OAAO,KAAK,EAAE;AACd,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;gBAChD,WAAW,CAAC,GAAG,CAAC;AACd,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,MAAM,EAAE,QAAQ;AACjB,iBAAA,CAAC;;AAGF,gBAAA,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC;;AAGlC,gBAAA,OAAO,EAAE;YACX;AACF,QAAA,CAAC,CAAC;IACJ;uGAjKW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACvED;;AAEG;AAEH;;ACJA;;AAEG;;;;"}
1
+ {"version":3,"file":"grandgular-rive-angular.mjs","sources":["../../../../libs/rive-angular/src/lib/models/rive.model.ts","../../../../libs/rive-angular/src/lib/utils/element-observer.ts","../../../../libs/rive-angular/src/lib/components/rive-canvas.component.ts","../../../../libs/rive-angular/src/lib/services/rive-file.service.ts","../../../../libs/rive-angular/src/index.ts","../../../../libs/rive-angular/src/grandgular-rive-angular.ts"],"sourcesContent":["/**\n * Re-export Rive SDK types for consumer convenience\n */\nexport { Fit, Alignment, EventType } from '@rive-app/canvas';\nexport type { Event as RiveEvent } from '@rive-app/canvas';\n\n/**\n * Error thrown when Rive animation fails to load\n */\nexport class RiveLoadError extends Error {\n constructor(\n message: string,\n public readonly originalError?: Error,\n ) {\n super(message);\n this.name = 'RiveLoadError';\n }\n}\n","/**\n * Fake IntersectionObserver for environments where it's not available (e.g., SSR)\n */\nclass FakeIntersectionObserver implements IntersectionObserver {\n readonly root: Element | Document | null = null;\n readonly rootMargin: string = '';\n readonly thresholds: ReadonlyArray<number> = [];\n\n observe(): void {\n // Intentionally empty for SSR compatibility\n }\n unobserve(): void {\n // Intentionally empty for SSR compatibility\n }\n disconnect(): void {\n // Intentionally empty for SSR compatibility\n }\n takeRecords(): IntersectionObserverEntry[] {\n return [];\n }\n}\n\nconst MyIntersectionObserver =\n (typeof globalThis !== 'undefined' && globalThis.IntersectionObserver) ||\n FakeIntersectionObserver;\n\n/**\n * Singleton IntersectionObserver wrapper for observing multiple elements\n * with individual callbacks. This avoids creating multiple IntersectionObserver\n * instances which is more efficient.\n */\nexport class ElementObserver {\n private observer: IntersectionObserver;\n private elementsMap: Map<Element, (entry: IntersectionObserverEntry) => void> = new Map();\n\n constructor() {\n this.observer = new MyIntersectionObserver(\n this.onObserved,\n ) as IntersectionObserver;\n }\n\n private onObserved = (entries: IntersectionObserverEntry[]): void => {\n entries.forEach((entry) => {\n const elementCallback = this.elementsMap.get(entry.target as Element);\n if (elementCallback) {\n elementCallback(entry);\n }\n });\n };\n\n public registerCallback(element: Element, callback: (entry: IntersectionObserverEntry) => void): void {\n this.observer.observe(element);\n this.elementsMap.set(element, callback);\n }\n\n public removeCallback(element: Element): void {\n this.observer.unobserve(element);\n this.elementsMap.delete(element);\n }\n}\n\n// Singleton instance\nlet observerInstance: ElementObserver | null = null;\n\n/**\n * Get the singleton ElementObserver instance\n */\nexport function getElementObserver(): ElementObserver {\n if (!observerInstance) {\n observerInstance = new ElementObserver();\n }\n return observerInstance;\n}\n","import {\n Component,\n ChangeDetectionStrategy,\n ElementRef,\n input,\n output,\n signal,\n effect,\n inject,\n DestroyRef,\n PLATFORM_ID,\n AfterViewInit,\n NgZone,\n viewChild,\n untracked,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n Rive,\n RiveFile,\n Layout,\n Fit,\n Alignment,\n StateMachineInput,\n type LayoutParameters,\n Event as RiveEvent,\n} from '@rive-app/canvas';\nimport { RiveLoadError } from '../models';\nimport { getElementObserver } from '../utils';\n\n/**\n * Standalone Angular component for Rive animations\n *\n * Features:\n * - Signal-based inputs for reactive updates\n * - Automatic canvas sizing via ResizeObserver with DPR support\n * - OnPush change detection strategy\n * - SSR compatible\n * - Zoneless architecture ready\n * - Automatic resource cleanup\n * - Runs outside Angular zone for optimal performance\n *\n * @example\n * ```html\n * <rive-canvas\n * src=\"assets/animations/rive/animation.riv\"\n * [stateMachines]=\"'StateMachine'\"\n * [autoplay]=\"true\"\n * [fit]=\"Fit.Cover\"\n * [alignment]=\"Alignment.Center\"\n * (loaded)=\"onLoad()\"\n * />\n * ```\n */\n@Component({\n // eslint-disable-next-line @angular-eslint/component-selector\n selector: 'rive-canvas',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <canvas #canvas [style.width.%]=\"100\" [style.height.%]=\"100\"></canvas>\n `,\n styles: [\n `\n :host {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n canvas {\n display: block;\n }\n `,\n ],\n})\nexport class RiveCanvasComponent implements AfterViewInit {\n private readonly canvas =\n viewChild.required<ElementRef<HTMLCanvasElement>>('canvas');\n\n readonly #destroyRef = inject(DestroyRef);\n readonly #platformId = inject(PLATFORM_ID);\n readonly #ngZone = inject(NgZone);\n\n public readonly src = input<string>();\n public readonly buffer = input<ArrayBuffer>();\n /**\n * Preloaded RiveFile instance (from RiveFileService).\n * If provided, this takes precedence over src/buffer.\n */\n public readonly riveFile = input<RiveFile>();\n public readonly artboard = input<string>();\n public readonly animations = input<string | string[]>();\n public readonly stateMachines = input<string | string[]>();\n public readonly autoplay = input<boolean>(true);\n public readonly fit = input<Fit>(Fit.Contain);\n public readonly alignment = input<Alignment>(Alignment.Center);\n public readonly useOffscreenRenderer = input<boolean>(false);\n /**\n * Enable IntersectionObserver to automatically stop rendering when canvas is not visible.\n * This optimizes performance by pausing animations that are off-screen.\n */\n public readonly shouldUseIntersectionObserver = input<boolean>(true);\n /**\n * Disable Rive event listeners on the canvas (pointer events, touch events).\n * Useful for decorative animations without interactivity.\n */\n public readonly shouldDisableRiveListeners = input<boolean>(false);\n /**\n * Allow Rive to automatically handle Rive Events (e.g., OpenUrlEvent opens URLs).\n * Default is false for security - events must be handled manually via riveEvent output.\n */\n public readonly automaticallyHandleEvents = input<boolean>(false);\n\n // Outputs (Events)\n public readonly loaded = output<void>();\n public readonly loadError = output<Error>();\n /**\n * Emitted when state machine state changes.\n * Contains information about the state change event.\n */\n public readonly stateChange = output<RiveEvent>();\n /**\n * Emitted for Rive Events (custom events defined in the .riv file).\n * Use this to handle custom events like OpenUrlEvent, etc.\n */\n public readonly riveEvent = output<RiveEvent>();\n /**\n * Emitted when Rive instance is created and ready.\n * Provides direct access to the Rive instance for advanced use cases.\n */\n public readonly riveReady = output<Rive>();\n\n // Signals for reactive state\n public readonly isPlaying = signal<boolean>(false);\n public readonly isPaused = signal<boolean>(false);\n public readonly isLoaded = signal<boolean>(false);\n /**\n * Public signal providing access to the Rive instance.\n * Use this to access advanced Rive SDK features.\n */\n public readonly riveInstance = signal<Rive | null>(null);\n\n // Private state\n #rive: Rive | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private isInitialized = false;\n private isPausedByIntersectionObserver = false;\n private retestIntersectionTimeoutId: ReturnType<typeof setTimeout> | null =\n null;\n private resizeRafId: number | null = null;\n private lastWidth = 0;\n private lastHeight = 0;\n\n constructor() {\n // Effect to reload animation when src, buffer, or riveFile changes\n effect(() => {\n const src = this.src();\n const buffer = this.buffer();\n const riveFile = this.riveFile();\n untracked(() => {\n if (\n (src || buffer || riveFile) &&\n isPlatformBrowser(this.#platformId) &&\n this.isInitialized\n )\n this.loadAnimation();\n });\n });\n\n // Auto cleanup on destroy\n this.#destroyRef.onDestroy(() => {\n this.cleanupRive();\n this.disconnectResizeObserver();\n this.disconnectIntersectionObserver();\n });\n }\n\n public ngAfterViewInit(): void {\n if (isPlatformBrowser(this.#platformId)) {\n this.isInitialized = true;\n this.setupResizeObserver();\n this.setupIntersectionObserver();\n this.loadAnimation();\n }\n }\n\n /**\n * Setup ResizeObserver for automatic canvas sizing with DPR support\n */\n private setupResizeObserver(): void {\n const canvas = this.canvas().nativeElement;\n const dpr = window.devicePixelRatio || 1;\n\n this.resizeObserver = new ResizeObserver((entries) => {\n // Cancel any pending resize frame\n if (this.resizeRafId) {\n cancelAnimationFrame(this.resizeRafId);\n }\n\n for (const entry of entries) {\n const { width, height } = entry.contentRect;\n\n // Skip if dimensions haven't changed (prevents unnecessary updates)\n if (width === this.lastWidth && height === this.lastHeight) {\n continue;\n }\n\n this.lastWidth = width;\n this.lastHeight = height;\n\n // Defer resize to next animation frame to prevent excessive updates in Safari\n this.resizeRafId = requestAnimationFrame(() => {\n // Set canvas size with device pixel ratio for sharp rendering\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n\n // Resize Rive instance if it exists\n if (this.#rive) this.#rive.resizeDrawingSurfaceToCanvas();\n });\n }\n });\n\n this.resizeObserver.observe(canvas);\n }\n\n /**\n * Disconnect ResizeObserver\n */\n private disconnectResizeObserver(): void {\n if (this.resizeRafId) {\n cancelAnimationFrame(this.resizeRafId);\n this.resizeRafId = null;\n }\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n\n /**\n * Setup IntersectionObserver to stop rendering when canvas is not visible\n */\n private setupIntersectionObserver(): void {\n if (!this.shouldUseIntersectionObserver()) return;\n\n const canvas = this.canvas().nativeElement;\n const observer = getElementObserver();\n\n const onIntersectionChange = (entry: IntersectionObserverEntry): void => {\n if (entry.isIntersecting) {\n // Canvas is visible - start rendering\n if (this.#rive) {\n this.#rive.startRendering();\n }\n this.isPausedByIntersectionObserver = false;\n } else {\n // Canvas is not visible - stop rendering\n if (this.#rive) {\n this.#rive.stopRendering();\n }\n this.isPausedByIntersectionObserver = true;\n\n // Workaround for Chrome bug with insertBefore\n // Retest after 10ms if boundingClientRect.width is 0\n if (this.retestIntersectionTimeoutId) {\n clearTimeout(this.retestIntersectionTimeoutId);\n }\n\n if (entry.boundingClientRect.width === 0) {\n this.retestIntersectionTimeoutId = setTimeout(() => {\n this.retestIntersection();\n }, 10);\n }\n }\n };\n\n observer.registerCallback(canvas, onIntersectionChange);\n }\n\n /**\n * Retest intersection - workaround for Chrome bug\n */\n private retestIntersection(): void {\n if (!this.isPausedByIntersectionObserver) return;\n\n const canvas = this.canvas().nativeElement;\n const rect = canvas.getBoundingClientRect();\n\n const isIntersecting =\n rect.width > 0 &&\n rect.height > 0 &&\n rect.top <\n (window.innerHeight || document.documentElement.clientHeight) &&\n rect.bottom > 0 &&\n rect.left < (window.innerWidth || document.documentElement.clientWidth) &&\n rect.right > 0;\n\n if (isIntersecting && this.#rive) {\n this.#rive.startRendering();\n this.isPausedByIntersectionObserver = false;\n }\n }\n\n /**\n * Disconnect IntersectionObserver\n */\n private disconnectIntersectionObserver(): void {\n if (this.retestIntersectionTimeoutId) {\n clearTimeout(this.retestIntersectionTimeoutId);\n this.retestIntersectionTimeoutId = null;\n }\n\n if (this.shouldUseIntersectionObserver()) {\n const canvas = this.canvas().nativeElement;\n const observer = getElementObserver();\n observer.removeCallback(canvas);\n }\n }\n\n /**\n * Load animation from src or buffer\n */\n private loadAnimation(): void {\n // Run outside Angular zone for better performance\n this.#ngZone.runOutsideAngular(() => {\n try {\n // Clean up existing Rive instance only\n this.cleanupRive();\n\n const canvas = this.canvas().nativeElement;\n const src = this.src();\n const buffer = this.buffer();\n const riveFile = this.riveFile();\n\n if (!src && !buffer && !riveFile) return;\n\n // Build layout configuration\n const layoutParams: LayoutParameters = {\n fit: this.fit(),\n alignment: this.alignment(),\n };\n\n // Create Rive instance configuration\n // Using Record to allow dynamic property assignment\n const config: Record<string, unknown> = {\n canvas,\n autoplay: this.autoplay(),\n layout: new Layout(layoutParams),\n useOffscreenRenderer: this.useOffscreenRenderer(),\n shouldDisableRiveListeners: this.shouldDisableRiveListeners(),\n automaticallyHandleEvents: this.automaticallyHandleEvents(),\n onLoad: () => this.onLoad(),\n onLoadError: (error?: unknown) => this.onLoadError(error),\n onPlay: () => this.onPlay(),\n onPause: () => this.onPause(),\n onStop: () => this.onStop(),\n onStateChange: (event: RiveEvent) => this.onStateChange(event),\n onRiveEvent: (event: RiveEvent) => this.onRiveEvent(event),\n };\n\n // Add src, buffer, or riveFile (priority: riveFile > src > buffer)\n if (riveFile) {\n config['riveFile'] = riveFile;\n } else if (src) {\n config['src'] = src;\n } else if (buffer) {\n config['buffer'] = buffer;\n }\n\n // Add artboard if specified\n const artboard = this.artboard();\n if (artboard) config['artboard'] = artboard;\n\n // Add animations if specified\n const animations = this.animations();\n if (animations) config['animations'] = animations;\n\n // Add state machines if specified\n const stateMachines = this.stateMachines();\n if (stateMachines) config['stateMachines'] = stateMachines;\n\n // Safe type assertion - config contains all required properties\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.#rive = new Rive(config as any);\n\n // Update public signal and emit riveReady event\n this.#ngZone.run(() => {\n this.riveInstance.set(this.#rive);\n this.riveReady.emit(this.#rive!);\n });\n } catch (error) {\n console.error('Failed to initialize Rive instance:', error);\n this.#ngZone.run(() =>\n this.loadError.emit(\n new RiveLoadError('Failed to load Rive animation', error as Error),\n ),\n );\n }\n });\n }\n\n // Event handlers (run inside Angular zone for change detection)\n private onLoad(): void {\n this.#ngZone.run(() => {\n this.isLoaded.set(true);\n this.loaded.emit();\n });\n }\n\n private onLoadError(originalError?: unknown): void {\n this.#ngZone.run(() => {\n const error = new RiveLoadError(\n 'Failed to load Rive animation',\n originalError instanceof Error ? originalError : undefined,\n );\n console.error('Rive load error:', error);\n this.loadError.emit(error);\n });\n }\n\n private onPlay(): void {\n this.#ngZone.run(() => {\n this.isPlaying.set(true);\n this.isPaused.set(false);\n });\n }\n\n private onPause(): void {\n this.#ngZone.run(() => {\n this.isPlaying.set(false);\n this.isPaused.set(true);\n });\n }\n\n private onStop(): void {\n this.#ngZone.run(() => {\n this.isPlaying.set(false);\n this.isPaused.set(false);\n });\n }\n\n private onStateChange(event: RiveEvent): void {\n this.#ngZone.run(() => this.stateChange.emit(event));\n }\n\n private onRiveEvent(event: RiveEvent): void {\n this.#ngZone.run(() => this.riveEvent.emit(event));\n }\n\n // Public API methods\n\n /**\n * Play animation(s)\n */\n public playAnimation(animations?: string | string[]): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n if (animations) {\n this.#rive!.play(animations);\n } else {\n this.#rive!.play();\n }\n });\n }\n\n /**\n * Pause animation(s)\n */\n public pauseAnimation(animations?: string | string[]): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n if (animations) {\n this.#rive!.pause(animations);\n } else {\n this.#rive!.pause();\n }\n });\n }\n\n /**\n * Stop animation(s)\n */\n public stopAnimation(animations?: string | string[]): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n if (animations) {\n this.#rive!.stop(animations);\n } else {\n this.#rive!.stop();\n }\n });\n }\n\n /**\n * Reset the animation to the beginning\n */\n public reset(): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n this.#rive!.reset();\n });\n }\n\n /**\n * Set a state machine input value\n */\n public setInput(\n stateMachineName: string,\n inputName: string,\n value: number | boolean,\n ): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n const inputs = this.#rive!.stateMachineInputs(stateMachineName);\n const input = inputs.find((i: StateMachineInput) => i.name === inputName);\n\n if (input && 'value' in input) {\n input.value = value;\n }\n });\n }\n\n /**\n * Fire a state machine trigger\n */\n public fireTrigger(stateMachineName: string, triggerName: string): void {\n if (!this.#rive) return;\n\n this.#ngZone.runOutsideAngular(() => {\n const inputs = this.#rive!.stateMachineInputs(stateMachineName);\n const input = inputs.find(\n (i: StateMachineInput) => i.name === triggerName,\n );\n\n if (input && 'fire' in input && typeof input.fire === 'function') {\n input.fire();\n }\n });\n }\n\n /**\n * Clean up Rive instance only\n */\n private cleanupRive(): void {\n if (this.#rive) {\n try {\n this.#rive.cleanup();\n } catch (error) {\n console.warn('Error during Rive cleanup:', error);\n }\n this.#rive = null;\n }\n\n // Reset signals\n this.riveInstance.set(null);\n this.isLoaded.set(false);\n this.isPlaying.set(false);\n this.isPaused.set(false);\n }\n}\n","import { Injectable, signal, Signal } from '@angular/core';\nimport { RiveFile, EventType } from '@rive-app/canvas';\n\n/**\n * Status of RiveFile loading\n */\nexport type FileStatus = 'idle' | 'loading' | 'success' | 'failed';\n\n/**\n * State of a loaded RiveFile\n */\nexport interface RiveFileState {\n riveFile: RiveFile | null;\n status: FileStatus;\n}\n\n/**\n * Parameters for loading a RiveFile\n */\nexport interface RiveFileParams {\n src?: string;\n buffer?: ArrayBuffer;\n}\n\n/**\n * Cache entry for a loaded RiveFile\n */\ninterface CacheEntry {\n file: RiveFile;\n state: Signal<RiveFileState>;\n refCount: number;\n}\n\n/**\n * Pending load entry to prevent duplicate loads\n */\ninterface PendingLoad {\n stateSignal: ReturnType<typeof signal<RiveFileState>>;\n promise: Promise<void>;\n}\n\n/**\n * Service for preloading and caching Rive files.\n *\n * This service allows you to:\n * - Preload .riv files before they're needed\n * - Share the same file across multiple components\n * - Cache files to avoid redundant network requests\n * - Deduplicate concurrent loads of the same file\n *\n * @example\n * ```typescript\n * export class MyComponent {\n * private riveFileService = inject(RiveFileService);\n * private destroyRef = inject(DestroyRef);\n *\n * fileState = this.riveFileService.loadFile({\n * src: 'assets/animation.riv'\n * });\n *\n * constructor() {\n * // Auto-release on component destroy\n * this.destroyRef.onDestroy(() => {\n * this.riveFileService.releaseFile({ src: 'assets/animation.riv' });\n * });\n * }\n * }\n * ```\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class RiveFileService {\n private cache = new Map<string, CacheEntry>();\n private pendingLoads = new Map<string, PendingLoad>();\n private bufferIdCounter = 0;\n\n /**\n * Load a RiveFile from URL or ArrayBuffer.\n * Returns a signal with the file state and loading status.\n * Files are cached by src URL to avoid redundant loads.\n * Concurrent loads of the same file are deduplicated.\n *\n * @param params - Parameters containing src URL or buffer\n * @returns Signal with RiveFileState\n */\n public loadFile(params: RiveFileParams): Signal<RiveFileState> {\n const cacheKey = this.getCacheKey(params);\n\n // Return cached entry if exists\n const cached = this.cache.get(cacheKey);\n if (cached) {\n cached.refCount++;\n return cached.state;\n }\n\n // Return pending load if already in progress\n const pending = this.pendingLoads.get(cacheKey);\n if (pending) {\n return pending.stateSignal.asReadonly();\n }\n\n // Create new loading state\n const stateSignal = signal<RiveFileState>({\n riveFile: null,\n status: 'loading',\n });\n\n // Start loading and track as pending\n const promise = this.loadRiveFile(params, stateSignal, cacheKey);\n this.pendingLoads.set(cacheKey, { stateSignal, promise });\n\n return stateSignal.asReadonly();\n }\n\n /**\n * Release a cached file. Decrements reference count and cleans up if no longer used.\n *\n * @param params - Parameters used to load the file\n */\n public releaseFile(params: RiveFileParams): void {\n const cacheKey = this.getCacheKey(params);\n const cached = this.cache.get(cacheKey);\n\n if (cached) {\n cached.refCount--;\n if (cached.refCount <= 0) {\n try {\n cached.file.cleanup();\n } catch (error) {\n console.warn('Error cleaning up RiveFile:', error);\n }\n this.cache.delete(cacheKey);\n }\n }\n }\n\n /**\n * Clear all cached files\n */\n public clearCache(): void {\n this.cache.forEach((entry) => {\n try {\n entry.file.cleanup();\n } catch (error) {\n console.warn('Error cleaning up RiveFile:', error);\n }\n });\n this.cache.clear();\n }\n\n /**\n * Get cache key from params\n */\n private getCacheKey(params: RiveFileParams): string {\n if (params.src) {\n return `src:${params.src}`;\n }\n if (params.buffer) {\n // For buffers, generate unique ID to avoid collisions\n // Store the ID on the buffer object itself\n const bufferWithId = params.buffer as ArrayBuffer & { __riveBufferId?: number };\n if (!bufferWithId.__riveBufferId) {\n bufferWithId.__riveBufferId = ++this.bufferIdCounter;\n }\n return `buffer:${bufferWithId.__riveBufferId}`;\n }\n return 'unknown';\n }\n\n /**\n * Load RiveFile and update state signal\n */\n private loadRiveFile(\n params: RiveFileParams,\n stateSignal: ReturnType<typeof signal<RiveFileState>>,\n cacheKey: string,\n ): Promise<void> {\n return new Promise<void>((resolve) => {\n try {\n const file = new RiveFile(params);\n file.init();\n\n file.on(EventType.Load, () => {\n // Request an instance to increment reference count\n // This prevents the file from being destroyed while in use\n file.getInstance();\n\n stateSignal.set({\n riveFile: file,\n status: 'success',\n });\n\n // Cache the successfully loaded file\n this.cache.set(cacheKey, {\n file,\n state: stateSignal.asReadonly(),\n refCount: 1,\n });\n\n // Remove from pending loads\n this.pendingLoads.delete(cacheKey);\n resolve();\n });\n\n file.on(EventType.LoadError, () => {\n stateSignal.set({\n riveFile: null,\n status: 'failed',\n });\n\n // Remove from pending loads\n this.pendingLoads.delete(cacheKey);\n\n // Resolve (not reject) — error state is communicated via the signal.\n // Rejecting would cause an unhandled promise rejection since no\n // consumer awaits or catches this promise.\n resolve();\n });\n } catch (error) {\n console.error('Failed to load RiveFile:', error);\n stateSignal.set({\n riveFile: null,\n status: 'failed',\n });\n\n // Remove from pending loads\n this.pendingLoads.delete(cacheKey);\n\n // Resolve (not reject) — error state is communicated via the signal.\n resolve();\n }\n });\n }\n}\n","/*\n * Public API Surface of @Grandgular/rive-angular\n */\n\n// Component\nexport { RiveCanvasComponent } from './lib/components';\n\n// Services\nexport {\n RiveFileService,\n type RiveFileState,\n type RiveFileParams,\n type FileStatus,\n} from './lib/services';\n\n// Re-exported Rive SDK types and error classes\nexport {\n Fit,\n Alignment,\n RiveLoadError,\n EventType,\n} from './lib/models';\nexport type { RiveEvent } from './lib/models';\n\n// Re-export commonly used types from @rive-app/canvas for convenience\nexport {\n Rive,\n RiveFile,\n Layout,\n StateMachineInput,\n type LayoutParameters,\n type RiveParameters,\n type RiveFileParameters,\n} from '@rive-app/canvas';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grandgular/rive-angular",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "Modern Angular wrapper for Rive animations with reactive state management, built with signals and zoneless architecture",
5
5
  "keywords": [
6
6
  "angular",
@@ -20,7 +20,7 @@
20
20
  "license": "MIT",
21
21
  "repository": {
22
22
  "type": "git",
23
- "url": "https://github.com/Grandgular/rive.git",
23
+ "url": "git+https://github.com/Grandgular/rive.git",
24
24
  "directory": "libs/rive-angular"
25
25
  },
26
26
  "homepage": "https://github.com/Grandgular/rive/tree/main/libs/rive-angular#readme",
@@ -54,4 +54,4 @@
54
54
  "dependencies": {
55
55
  "tslib": "^2.3.0"
56
56
  }
57
- }
57
+ }
@@ -88,6 +88,9 @@ declare class RiveCanvasComponent implements AfterViewInit {
88
88
  private isInitialized;
89
89
  private isPausedByIntersectionObserver;
90
90
  private retestIntersectionTimeoutId;
91
+ private resizeRafId;
92
+ private lastWidth;
93
+ private lastHeight;
91
94
  constructor();
92
95
  ngAfterViewInit(): void;
93
96
  /**