holostaff-widget 3.0.0 → 3.0.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.
- package/dist/{BufferResource-DeLlYxf8.js → BufferResource-6mO-PO_c.js} +4 -4
- package/dist/{BufferResource-DeLlYxf8.js.map → BufferResource-6mO-PO_c.js.map} +1 -1
- package/dist/{CanvasRenderer-BgLtSh22.js → CanvasRenderer-BL1L0Zug.js} +5 -5
- package/dist/{CanvasRenderer-BgLtSh22.js.map → CanvasRenderer-BL1L0Zug.js.map} +1 -1
- package/dist/{Geometry-Bdq2tsB3.js → Geometry-B-K9I6MO.js} +2 -2
- package/dist/{Geometry-Bdq2tsB3.js.map → Geometry-B-K9I6MO.js.map} +1 -1
- package/dist/{RenderTargetSystem-BCBByEgg.js → RenderTargetSystem-CahYKOD4.js} +3 -3
- package/dist/{RenderTargetSystem-BCBByEgg.js.map → RenderTargetSystem-CahYKOD4.js.map} +1 -1
- package/dist/{WebGLRenderer-3x7mgYt9.js → WebGLRenderer-Ci14rIHw.js} +5 -5
- package/dist/{WebGLRenderer-3x7mgYt9.js.map → WebGLRenderer-Ci14rIHw.js.map} +1 -1
- package/dist/{WebGPURenderer-CdbjQMqs.js → WebGPURenderer-SF1OSYpo.js} +6 -6
- package/dist/{WebGPURenderer-CdbjQMqs.js.map → WebGPURenderer-SF1OSYpo.js.map} +1 -1
- package/dist/{browserAll-DejMU3y7.js → browserAll-B97ymwYI.js} +3 -3
- package/dist/{browserAll-DejMU3y7.js.map → browserAll-B97ymwYI.js.map} +1 -1
- package/dist/{getTextureBatchBindGroup-CHJWR-eE.js → getTextureBatchBindGroup-BPB_9pp9.js} +3 -3
- package/dist/{getTextureBatchBindGroup-CHJWR-eE.js.map → getTextureBatchBindGroup-BPB_9pp9.js.map} +1 -1
- package/dist/hs-widget.es.js +1 -1
- package/dist/hs-widget.umd.js +60 -60
- package/dist/hs-widget.umd.js.map +1 -1
- package/dist/{index-C1ZbqCjI.js → index-qJyFW51-.js} +511 -502
- package/dist/index-qJyFW51-.js.map +1 -0
- package/dist/{webworkerAll-D5g5Ds7S.js → webworkerAll-DYG_wBG4.js} +3 -3
- package/dist/{webworkerAll-D5g5Ds7S.js.map → webworkerAll-DYG_wBG4.js.map} +1 -1
- package/package.json +1 -1
- package/dist/index-C1ZbqCjI.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-qJyFW51-.js","sources":["../src/config.ts","../src/api/backend.ts","../node_modules/pixi.js/lib/extensions/Extensions.mjs","../node_modules/pixi.js/lib/environment-browser/browserExt.mjs","../node_modules/pixi.js/lib/environment-webworker/webworkerExt.mjs","../node_modules/pixi.js/lib/maths/point/ObservablePoint.mjs","../node_modules/eventemitter3/index.js","../node_modules/pixi.js/lib/maths/misc/const.mjs","../node_modules/pixi.js/lib/maths/point/Point.mjs","../node_modules/pixi.js/lib/maths/matrix/Matrix.mjs","../node_modules/pixi.js/lib/maths/matrix/groupD8.mjs","../node_modules/pixi.js/lib/maths/shapes/Rectangle.mjs","../node_modules/pixi.js/lib/utils/data/uid.mjs","../node_modules/pixi.js/lib/utils/logging/deprecation.mjs","../node_modules/pixi.js/lib/utils/misc/NOOP.mjs","../node_modules/pixi.js/lib/maths/misc/pow2.mjs","../node_modules/pixi.js/lib/scene/container/utils/definedProps.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/TextureStyle.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/sources/TextureSource.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/sources/BufferImageSource.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/TextureMatrix.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/Texture.mjs","../node_modules/pixi.js/lib/utils/data/updateQuadBounds.mjs","../node_modules/pixi.js/lib/scene/container/bounds/Bounds.mjs","../node_modules/@pixi/colord/index.mjs","../node_modules/@pixi/colord/plugins/names.mjs","../node_modules/pixi.js/lib/color/Color.mjs","../node_modules/pixi.js/lib/culling/cullingMixin.mjs","../node_modules/pixi.js/lib/utils/logging/warn.mjs","../node_modules/pixi.js/lib/utils/pool/GlobalResourceRegistry.mjs","../node_modules/pixi.js/lib/utils/pool/Pool.mjs","../node_modules/pixi.js/lib/utils/pool/PoolGroup.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/cacheAsTextureMixin.mjs","../node_modules/pixi.js/lib/utils/data/removeItems.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/childrenHelperMixin.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/collectRenderablesMixin.mjs","../node_modules/pixi.js/lib/filters/FilterEffect.mjs","../node_modules/pixi.js/lib/rendering/mask/MaskEffectManager.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/effectsMixin.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/findMixin.mjs","../node_modules/pixi.js/lib/scene/container/bounds/utils/matrixAndBoundsPool.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/getFastGlobalBoundsMixin.mjs","../node_modules/pixi.js/lib/scene/container/bounds/getGlobalBounds.mjs","../node_modules/pixi.js/lib/scene/container/utils/multiplyHexColors.mjs","../node_modules/pixi.js/lib/scene/container/utils/multiplyColors.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/getGlobalMixin.mjs","../node_modules/pixi.js/lib/scene/container/bounds/getLocalBounds.mjs","../node_modules/pixi.js/lib/scene/container/utils/checkChildrenDidChange.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/measureMixin.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/onRenderMixin.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/sortMixin.mjs","../node_modules/pixi.js/lib/scene/container/container-mixins/toLocalGlobalMixin.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/instructions/InstructionSet.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/TexturePool.mjs","../node_modules/pixi.js/lib/scene/container/RenderGroup.mjs","../node_modules/pixi.js/lib/scene/container/utils/assignWithIgnore.mjs","../node_modules/pixi.js/lib/scene/container/Container.mjs","../node_modules/pixi.js/lib/scene/view/ViewContainer.mjs","../node_modules/pixi.js/lib/scene/sprite/Sprite.mjs","../node_modules/pixi.js/lib/rendering/mask/utils/addMaskBounds.mjs","../node_modules/pixi.js/lib/rendering/mask/utils/addMaskLocalBounds.mjs","../node_modules/pixi.js/lib/rendering/mask/alpha/AlphaMask.mjs","../node_modules/pixi.js/lib/rendering/mask/color/ColorMask.mjs","../node_modules/pixi.js/lib/rendering/mask/stencil/StencilMask.mjs","../node_modules/pixi.js/lib/environment-browser/BrowserAdapter.mjs","../node_modules/pixi.js/lib/environment/adapter.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/sources/CanvasSource.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/sources/ImageSource.mjs","../node_modules/pixi.js/lib/ticker/const.mjs","../node_modules/pixi.js/lib/ticker/TickerListener.mjs","../node_modules/pixi.js/lib/ticker/Ticker.mjs","../node_modules/pixi.js/lib/utils/browser/detectVideoAlphaMode.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/sources/VideoSource.mjs","../node_modules/pixi.js/lib/assets/utils/convertToList.mjs","../node_modules/pixi.js/lib/assets/cache/Cache.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/texture/utils/textureFrom.mjs","../node_modules/pixi.js/lib/rendering/init.mjs","../node_modules/pixi.js/lib/assets/loader/parsers/LoaderParser.mjs","../node_modules/pixi.js/lib/utils/path.mjs","../node_modules/pixi.js/lib/assets/utils/createStringVariations.mjs","../node_modules/pixi.js/lib/assets/utils/isSingleItem.mjs","../node_modules/pixi.js/lib/assets/resolver/Resolver.mjs","../node_modules/pixi.js/lib/assets/utils/copySearchParams.mjs","../node_modules/pixi.js/lib/spritesheet/Spritesheet.mjs","../node_modules/pixi.js/lib/spritesheet/spritesheetAsset.mjs","../node_modules/pixi.js/lib/spritesheet/init.mjs","../node_modules/pixi.js/lib/environment/autoDetectEnvironment.mjs","../node_modules/pixi.js/lib/utils/browser/unsafeEvalSupported.mjs","../node_modules/pixi.js/lib/rendering/renderers/gl/const.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/system/SystemRunner.mjs","../node_modules/pixi.js/lib/rendering/renderers/shared/system/AbstractRenderer.mjs","../node_modules/pixi.js/lib/utils/browser/isWebGLSupported.mjs","../node_modules/pixi.js/lib/utils/browser/isWebGPUSupported.mjs","../node_modules/pixi.js/lib/rendering/renderers/autoDetectRenderer.mjs","../node_modules/pixi.js/lib/utils/const.mjs","../node_modules/pixi.js/lib/utils/global/globalHooks.mjs","../node_modules/pixi.js/lib/app/ResizePlugin.mjs","../node_modules/pixi.js/lib/app/TickerPlugin.mjs","../node_modules/pixi.js/lib/app/init.mjs","../node_modules/pixi.js/lib/app/Application.mjs","../node_modules/pixi.js/lib/index.mjs","../src/rendering/stage.ts","../src/rendering/animations.ts","../src/rendering/avatarRenderer.ts","../src/engine/realtimeSession.ts","../src/engine/audioForwarder.ts","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/constants.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/ClientMetrics.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/ClientError.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/correlationId.js","../node_modules/@anam-ai/js-sdk/dist/module/lib/validateApiGatewayConfig.js","../node_modules/@anam-ai/js-sdk/dist/module/types/signalling/SignalMessage.js","../node_modules/@anam-ai/js-sdk/dist/module/types/streaming/DataChannelMessage.js","../node_modules/@anam-ai/js-sdk/dist/module/types/InputAudioState.js","../node_modules/@anam-ai/js-sdk/dist/module/types/messageHistory/MessageRole.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/public/AnamEvent.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/internal/InternalEvent.js","../node_modules/@anam-ai/js-sdk/dist/module/types/events/public/ConnectionClosedCodes.js","../node_modules/@anam-ai/js-sdk/dist/module/types/AgentAudioInputStream.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/SignallingClient.js","../node_modules/@anam-ai/js-sdk/dist/module/types/PersonaConfig.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/CoreApiRestClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/EngineApiRestClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/InternalEventEmitter.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/MessageHistoryClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/PublicEventEmitter.js","../node_modules/@anam-ai/js-sdk/dist/module/types/TalkMessageStreamState.js","../node_modules/@anam-ai/js-sdk/dist/module/types/TalkMessageStream.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/ToolCallManager.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/StreamingClient.js","../node_modules/@anam-ai/js-sdk/dist/module/modules/ReasoningHistoryClient.js","../node_modules/@anam-ai/js-sdk/dist/module/AnamClient.js","../node_modules/@anam-ai/js-sdk/dist/module/index.js","../src/engine/anamSession.ts","../src/engine/domAnalyzer.ts","../src/engine/toolHandler.ts","../src/actions/pageActions.ts","../src/actions/overlayActions.ts","../src/api/logger.ts","../node_modules/rrweb/es/rrweb/packages/rrweb-snapshot/es/rrweb-snapshot.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/utils.js","../node_modules/rrweb/es/rrweb/packages/types/dist/types.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/mutation.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observer.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/cross-origin-iframe-mirror.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/iframe-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/shadow-dom-manager.js","../node_modules/rrweb/es/rrweb/ext/tslib/tslib.es6.js","../node_modules/rrweb/es/rrweb/ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/serialize-args.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/2d.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/webgl.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js","../node_modules/rrweb/es/rrweb/_virtual/_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js","../node_modules/rrweb/es/rrweb/_virtual/image-bitmap-data-url-worker.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/observers/canvas/canvas-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/stylesheet-manager.js","../node_modules/rrweb/es/rrweb/packages/rrweb/src/record/index.js","../src/vision/rrwebRecorder.ts","../src/vision/wsClient.ts","../src/ui/glass.ts","../node_modules/tslib/tslib.es6.js","../node_modules/hey-listen/dist/hey-listen.es.js","../node_modules/popmotion/dist/es/utils/clamp.mjs","../node_modules/popmotion/dist/es/animations/utils/find-spring.mjs","../node_modules/popmotion/dist/es/animations/generators/spring.mjs","../node_modules/popmotion/dist/es/utils/progress.mjs","../node_modules/popmotion/dist/es/utils/mix.mjs","../node_modules/style-value-types/dist/es/utils.mjs","../node_modules/style-value-types/dist/es/numbers/index.mjs","../node_modules/style-value-types/dist/es/numbers/units.mjs","../node_modules/style-value-types/dist/es/color/utils.mjs","../node_modules/style-value-types/dist/es/color/hsla.mjs","../node_modules/style-value-types/dist/es/color/rgba.mjs","../node_modules/style-value-types/dist/es/color/hex.mjs","../node_modules/style-value-types/dist/es/color/index.mjs","../node_modules/style-value-types/dist/es/complex/index.mjs","../node_modules/popmotion/dist/es/utils/hsla-to-rgba.mjs","../node_modules/popmotion/dist/es/utils/mix-color.mjs","../node_modules/popmotion/dist/es/utils/inc.mjs","../node_modules/popmotion/dist/es/utils/pipe.mjs","../node_modules/popmotion/dist/es/utils/mix-complex.mjs","../node_modules/popmotion/dist/es/utils/interpolate.mjs","../node_modules/popmotion/dist/es/easing/utils.mjs","../node_modules/popmotion/dist/es/easing/index.mjs","../node_modules/popmotion/dist/es/animations/generators/keyframes.mjs","../node_modules/popmotion/dist/es/animations/generators/decay.mjs","../node_modules/popmotion/dist/es/animations/utils/detect-animation-from-options.mjs","../node_modules/framesync/dist/es/on-next-frame.mjs","../node_modules/framesync/dist/es/create-render-step.mjs","../node_modules/framesync/dist/es/index.mjs","../node_modules/popmotion/dist/es/animations/utils/elapsed.mjs","../node_modules/popmotion/dist/es/animations/index.mjs","../src/ui/spring.ts","../src/ui/tokens.ts","../src/vision/actionExecutor.ts","../src/ui/themeDetector.ts","../src/ui/components/avatarFrame.ts","../src/ui/components/speechBubble.ts","../src/ui/components/chatPill.ts","../src/ui/components/overlayCard.ts","../src/ui/components/controls.ts","../src/ui/components/confirmPrompt.ts","../src/ui/components/stageBackdrop.ts","../src/ui/components/highlightOverlay.ts","../src/widget.ts","../src/routing/pageTargeting.ts","../src/index.ts"],"sourcesContent":["import type { StaffPublicConfig } from './api/backend'\n\nexport interface WidgetConfig {\n staffId: string\n mode: 'floating' | 'inline'\n container: string | null\n position: 'bottom-center' | 'bottom-left' | 'bottom-right'\n trigger: 'scroll' | 'delay' | 'immediate'\n scrollThreshold: number\n delayMs: number\n theme: 'light' | 'dark' | 'auto'\n accentColor: string | null\n language: string\n backendUrl: string\n visionWsUrl: string | null\n visionConsent: 'auto' | 'required'\n}\n\nconst DEFAULTS: Omit<WidgetConfig, 'staffId'> = {\n mode: 'floating',\n container: null,\n position: 'bottom-center',\n trigger: 'scroll',\n scrollThreshold: 0.3,\n delayMs: 3000,\n theme: 'light',\n accentColor: null,\n language: 'en',\n backendUrl: 'https://us-central1-holostaff-ai.cloudfunctions.net',\n visionWsUrl: null,\n visionConsent: 'auto',\n}\n\n/**\n * Extract widget configuration from the hosting script tag's data-* attributes.\n * Embed attributes take priority; DEFAULTS are used as fallback.\n */\nexport function extractConfig(scriptEl: HTMLScriptElement): WidgetConfig {\n const staffId = scriptEl.dataset.staffId\n if (!staffId) {\n throw new Error('[HolostaffWidget] data-staff-id attribute is required')\n }\n\n return {\n staffId,\n mode: (scriptEl.dataset.mode as WidgetConfig['mode']) ?? DEFAULTS.mode,\n container: scriptEl.dataset.container ?? DEFAULTS.container,\n position: (scriptEl.dataset.position as WidgetConfig['position']) ?? DEFAULTS.position,\n trigger: (scriptEl.dataset.trigger as WidgetConfig['trigger']) ?? DEFAULTS.trigger,\n scrollThreshold: parseFloat(scriptEl.dataset.scrollThreshold ?? '') || DEFAULTS.scrollThreshold,\n delayMs: parseInt(scriptEl.dataset.delayMs ?? '', 10) || DEFAULTS.delayMs,\n theme: (scriptEl.dataset.theme as WidgetConfig['theme']) ?? DEFAULTS.theme,\n accentColor: scriptEl.dataset.accentColor ?? DEFAULTS.accentColor,\n language: scriptEl.dataset.language ?? DEFAULTS.language,\n backendUrl: scriptEl.dataset.backendUrl ?? DEFAULTS.backendUrl,\n visionWsUrl: scriptEl.dataset.visionWsUrl ?? DEFAULTS.visionWsUrl,\n visionConsent: (scriptEl.dataset.hsConsent as WidgetConfig['visionConsent']) ?? DEFAULTS.visionConsent,\n }\n}\n\nconst VALID_POSITIONS = ['bottom-center', 'bottom-left', 'bottom-right']\nconst VALID_TRIGGERS = ['scroll', 'delay', 'immediate']\nconst VALID_THEMES = ['light', 'dark', 'auto']\n\n/**\n * Apply server-side widget settings as defaults for any fields not explicitly\n * set via embed data-* attributes. Embed attrs always win.\n */\nexport function applyServerDefaults(\n config: WidgetConfig,\n scriptEl: HTMLScriptElement,\n serverConfig: StaffPublicConfig,\n): WidgetConfig {\n const updated = { ...config }\n\n if (!scriptEl.dataset.trigger && serverConfig.trigger && VALID_TRIGGERS.includes(serverConfig.trigger)) {\n updated.trigger = serverConfig.trigger as WidgetConfig['trigger']\n }\n if (!scriptEl.dataset.position && serverConfig.position && VALID_POSITIONS.includes(serverConfig.position)) {\n updated.position = serverConfig.position as WidgetConfig['position']\n }\n if (!scriptEl.dataset.theme && serverConfig.theme && VALID_THEMES.includes(serverConfig.theme)) {\n updated.theme = serverConfig.theme as WidgetConfig['theme']\n }\n if (!scriptEl.dataset.scrollThreshold && serverConfig.scrollThreshold != null) {\n updated.scrollThreshold = serverConfig.scrollThreshold\n }\n if (!scriptEl.dataset.delayMs && serverConfig.delayMs != null) {\n updated.delayMs = serverConfig.delayMs\n }\n if (!scriptEl.dataset.visionWsUrl && serverConfig.visionWsUrl) {\n updated.visionWsUrl = serverConfig.visionWsUrl\n }\n\n return updated\n}\n","const DEFAULT_BACKEND = 'https://us-central1-holostaff-ai.cloudfunctions.net'\n\n// ---------------------------------------------------------------------------\n// Response types (match widgetSession Cloud Function output)\n// ---------------------------------------------------------------------------\n\nexport interface StaffConfig {\n name: string\n persona: string | null\n instructions: string | null\n openingText: string | null\n voiceId: string\n}\n\nexport interface WidgetSessionResponse {\n realtimeEphemeralKey: string\n realtimeWebrtcUrl: string\n anamSessionToken: string\n staff: StaffConfig\n}\n\nexport interface StaffPublicConfig {\n name: string\n persona: string | null\n anamAvatarId: string | null\n avatarImageUrl: string | null\n idleVideoUrl: string | null\n openingText: string | null\n widgetPrompts: string[] | null\n voiceId: string\n // Widget display settings (from RTDB, used as defaults if embed attrs not set)\n trigger: string | null\n position: string | null\n theme: string | null\n scrollThreshold: number | null\n delayMs: number | null\n visionWsUrl: string | null\n pagePatterns: (string | { pattern: string; container?: string })[] | null\n}\n\n// ---------------------------------------------------------------------------\n// API calls\n// ---------------------------------------------------------------------------\n\nexport async function fetchWidgetSession(\n staffId: string,\n backendUrl = DEFAULT_BACKEND,\n): Promise<WidgetSessionResponse> {\n const res = await fetch(`${backendUrl}/widgetSession`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ staffId }),\n })\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }))\n throw new Error(body.error || `Session request failed: ${res.status}`)\n }\n\n return res.json()\n}\n\nexport class WidgetDisabledError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'WidgetDisabledError'\n }\n}\n\nexport async function fetchWidgetConfig(\n staffId: string,\n backendUrl = DEFAULT_BACKEND,\n): Promise<StaffPublicConfig> {\n const res = await fetch(\n `${backendUrl}/widgetConfig?staffId=${encodeURIComponent(staffId)}`,\n )\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }))\n // 404 with disabled:true = agent deleted or inactive — caller must bail entirely\n if (body.disabled === true || res.status === 404) {\n throw new WidgetDisabledError(body.error || 'Agent not available')\n }\n throw new Error(body.error || `Config request failed: ${res.status}`)\n }\n\n return res.json()\n}\n\nexport async function sendKeepalive(\n sessionId: string,\n sessionToken: string,\n backendUrl = DEFAULT_BACKEND,\n): Promise<void> {\n const res = await fetch(`${backendUrl}/widgetKeepalive`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ sessionId, sessionToken }),\n })\n\n if (!res.ok) {\n console.warn('[backend] Keep-alive failed:', res.status)\n }\n}\n\nexport interface PageActionResponse {\n actions: Array<{\n action: string\n index: number\n value?: string\n description: string\n }>\n}\n\nexport async function postPageAction(\n staffId: string,\n domSnapshot: string,\n instruction: string,\n backendUrl = DEFAULT_BACKEND,\n): Promise<PageActionResponse> {\n const res = await fetch(`${backendUrl}/widgetPageAction`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ staffId, domSnapshot, instruction }),\n })\n\n if (!res.ok) {\n const body = await res.json().catch(() => ({ error: res.statusText }))\n throw new Error(body.error || `Page action request failed: ${res.status}`)\n }\n\n return res.json()\n}\n","\"use strict\";\nvar ExtensionType = /* @__PURE__ */ ((ExtensionType2) => {\n ExtensionType2[\"Application\"] = \"application\";\n ExtensionType2[\"WebGLPipes\"] = \"webgl-pipes\";\n ExtensionType2[\"WebGLPipesAdaptor\"] = \"webgl-pipes-adaptor\";\n ExtensionType2[\"WebGLSystem\"] = \"webgl-system\";\n ExtensionType2[\"WebGPUPipes\"] = \"webgpu-pipes\";\n ExtensionType2[\"WebGPUPipesAdaptor\"] = \"webgpu-pipes-adaptor\";\n ExtensionType2[\"WebGPUSystem\"] = \"webgpu-system\";\n ExtensionType2[\"CanvasSystem\"] = \"canvas-system\";\n ExtensionType2[\"CanvasPipesAdaptor\"] = \"canvas-pipes-adaptor\";\n ExtensionType2[\"CanvasPipes\"] = \"canvas-pipes\";\n ExtensionType2[\"Asset\"] = \"asset\";\n ExtensionType2[\"LoadParser\"] = \"load-parser\";\n ExtensionType2[\"ResolveParser\"] = \"resolve-parser\";\n ExtensionType2[\"CacheParser\"] = \"cache-parser\";\n ExtensionType2[\"DetectionParser\"] = \"detection-parser\";\n ExtensionType2[\"MaskEffect\"] = \"mask-effect\";\n ExtensionType2[\"BlendMode\"] = \"blend-mode\";\n ExtensionType2[\"TextureSource\"] = \"texture-source\";\n ExtensionType2[\"Environment\"] = \"environment\";\n ExtensionType2[\"ShapeBuilder\"] = \"shape-builder\";\n ExtensionType2[\"Batcher\"] = \"batcher\";\n return ExtensionType2;\n})(ExtensionType || {});\nconst normalizeExtension = (ext) => {\n if (typeof ext === \"function\" || typeof ext === \"object\" && ext.extension) {\n if (!ext.extension) {\n throw new Error(\"Extension class must have an extension object\");\n }\n const metadata = typeof ext.extension !== \"object\" ? { type: ext.extension } : ext.extension;\n ext = { ...metadata, ref: ext };\n }\n if (typeof ext === \"object\") {\n ext = { ...ext };\n } else {\n throw new Error(\"Invalid extension type\");\n }\n if (typeof ext.type === \"string\") {\n ext.type = [ext.type];\n }\n return ext;\n};\nconst normalizeExtensionPriority = (ext, defaultPriority) => normalizeExtension(ext).priority ?? defaultPriority;\nconst extensions = {\n /** @ignore */\n _addHandlers: {},\n /** @ignore */\n _removeHandlers: {},\n /** @ignore */\n _queue: {},\n /**\n * Remove extensions from PixiJS.\n * @param extensions - Extensions to be removed. Can be:\n * - Extension class with static `extension` property\n * - Extension format object with `type` and `ref`\n * - Multiple extensions as separate arguments\n * @returns {extensions} this for chaining\n * @example\n * ```ts\n * // Remove a single extension\n * extensions.remove(MyRendererPlugin);\n *\n * // Remove multiple extensions\n * extensions.remove(\n * MyRendererPlugin,\n * MySystemPlugin\n * );\n * ```\n * @see {@link ExtensionType} For available extension types\n * @see {@link ExtensionFormat} For extension format details\n */\n remove(...extensions2) {\n extensions2.map(normalizeExtension).forEach((ext) => {\n ext.type.forEach((type) => this._removeHandlers[type]?.(ext));\n });\n return this;\n },\n /**\n * Register new extensions with PixiJS. Extensions can be registered in multiple formats:\n * - As a class with a static `extension` property\n * - As an extension format object\n * - As multiple extensions passed as separate arguments\n * @param extensions - Extensions to add to PixiJS. Each can be:\n * - A class with static `extension` property\n * - An extension format object with `type` and `ref`\n * - Multiple extensions as separate arguments\n * @returns This extensions instance for chaining\n * @example\n * ```ts\n * // Register a simple extension\n * extensions.add(MyRendererPlugin);\n *\n * // Register multiple extensions\n * extensions.add(\n * MyRendererPlugin,\n * MySystemPlugin,\n * });\n * ```\n * @see {@link ExtensionType} For available extension types\n * @see {@link ExtensionFormat} For extension format details\n * @see {@link extensions.remove} For removing registered extensions\n */\n add(...extensions2) {\n extensions2.map(normalizeExtension).forEach((ext) => {\n ext.type.forEach((type) => {\n const handlers = this._addHandlers;\n const queue = this._queue;\n if (!handlers[type]) {\n queue[type] = queue[type] || [];\n queue[type]?.push(ext);\n } else {\n handlers[type]?.(ext);\n }\n });\n });\n return this;\n },\n /**\n * Internal method to handle extensions by name.\n * @param type - The extension type.\n * @param onAdd - Function handler when extensions are added/registered {@link StrictExtensionFormat}.\n * @param onRemove - Function handler when extensions are removed/unregistered {@link StrictExtensionFormat}.\n * @returns this for chaining.\n * @internal\n * @ignore\n */\n handle(type, onAdd, onRemove) {\n const addHandlers = this._addHandlers;\n const removeHandlers = this._removeHandlers;\n if (addHandlers[type] || removeHandlers[type]) {\n throw new Error(`Extension type ${type} already has a handler`);\n }\n addHandlers[type] = onAdd;\n removeHandlers[type] = onRemove;\n const queue = this._queue;\n if (queue[type]) {\n queue[type]?.forEach((ext) => onAdd(ext));\n delete queue[type];\n }\n return this;\n },\n /**\n * Handle a type, but using a map by `name` property.\n * @param type - Type of extension to handle.\n * @param map - The object map of named extensions.\n * @returns this for chaining.\n * @ignore\n */\n handleByMap(type, map) {\n return this.handle(\n type,\n (extension) => {\n if (extension.name) {\n map[extension.name] = extension.ref;\n }\n },\n (extension) => {\n if (extension.name) {\n delete map[extension.name];\n }\n }\n );\n },\n /**\n * Handle a type, but using a list of extensions with a `name` property.\n * @param type - Type of extension to handle.\n * @param map - The array of named extensions.\n * @param defaultPriority - Fallback priority if none is defined.\n * @returns this for chaining.\n * @ignore\n */\n handleByNamedList(type, map, defaultPriority = -1) {\n return this.handle(\n type,\n (extension) => {\n const index = map.findIndex((item) => item.name === extension.name);\n if (index >= 0) return;\n map.push({ name: extension.name, value: extension.ref });\n map.sort((a, b) => normalizeExtensionPriority(b.value, defaultPriority) - normalizeExtensionPriority(a.value, defaultPriority));\n },\n (extension) => {\n const index = map.findIndex((item) => item.name === extension.name);\n if (index !== -1) {\n map.splice(index, 1);\n }\n }\n );\n },\n /**\n * Handle a type, but using a list of extensions.\n * @param type - Type of extension to handle.\n * @param list - The list of extensions.\n * @param defaultPriority - The default priority to use if none is specified.\n * @returns this for chaining.\n * @ignore\n */\n handleByList(type, list, defaultPriority = -1) {\n return this.handle(\n type,\n (extension) => {\n if (list.includes(extension.ref)) {\n return;\n }\n list.push(extension.ref);\n list.sort((a, b) => normalizeExtensionPriority(b, defaultPriority) - normalizeExtensionPriority(a, defaultPriority));\n },\n (extension) => {\n const index = list.indexOf(extension.ref);\n if (index !== -1) {\n list.splice(index, 1);\n }\n }\n );\n },\n /**\n * Mixin the source object(s) properties into the target class's prototype.\n * Copies all property descriptors from source objects to the target's prototype.\n * @param Target - The target class to mix properties into\n * @param sources - One or more source objects containing properties to mix in\n * @example\n * ```ts\n * // Create a mixin with shared properties\n * const moveable = {\n * x: 0,\n * y: 0,\n * move(x: number, y: number) {\n * this.x += x;\n * this.y += y;\n * }\n * };\n *\n * // Create a mixin with computed properties\n * const scalable = {\n * scale: 1,\n * get scaled() {\n * return this.scale > 1;\n * }\n * };\n *\n * // Apply mixins to a class\n * extensions.mixin(Sprite, moveable, scalable);\n *\n * // Use mixed-in properties\n * const sprite = new Sprite();\n * sprite.move(10, 20);\n * console.log(sprite.x, sprite.y); // 10, 20\n * ```\n * @remarks\n * - Copies all properties including getters/setters\n * - Does not modify source objects\n * - Preserves property descriptors\n * @see {@link Object.defineProperties} For details on property descriptors\n * @see {@link Object.getOwnPropertyDescriptors} For details on property copying\n */\n mixin(Target, ...sources) {\n for (const source of sources) {\n Object.defineProperties(Target.prototype, Object.getOwnPropertyDescriptors(source));\n }\n }\n};\n\nexport { ExtensionType, extensions, normalizeExtensionPriority };\n//# sourceMappingURL=Extensions.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\n\n\"use strict\";\nconst browserExt = {\n extension: {\n type: ExtensionType.Environment,\n name: \"browser\",\n priority: -1\n },\n test: () => true,\n load: async () => {\n await import('./browserAll.mjs');\n }\n};\n\nexport { browserExt };\n//# sourceMappingURL=browserExt.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\n\n\"use strict\";\nconst webworkerExt = {\n extension: {\n type: ExtensionType.Environment,\n name: \"webworker\",\n priority: 0\n },\n test: () => typeof self !== \"undefined\" && self.WorkerGlobalScope !== void 0,\n load: async () => {\n await import('./webworkerAll.mjs');\n }\n};\n\nexport { webworkerExt };\n//# sourceMappingURL=webworkerExt.mjs.map\n","\"use strict\";\nclass ObservablePoint {\n /**\n * Creates a new `ObservablePoint`\n * @param observer - Observer to pass to listen for change events.\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=0] - position of the point on the y axis\n */\n constructor(observer, x, y) {\n this._x = x || 0;\n this._y = y || 0;\n this._observer = observer;\n }\n /**\n * Creates a clone of this point.\n * @example\n * ```ts\n * // Basic cloning\n * const point = new ObservablePoint(observer, 100, 200);\n * const copy = point.clone();\n *\n * // Clone with new observer\n * const newObserver = {\n * _onUpdate: (p) => console.log(`Clone updated: (${p.x}, ${p.y})`)\n * };\n * const watched = point.clone(newObserver);\n *\n * // Verify independence\n * watched.set(300, 400); // Only triggers new observer\n * ```\n * @param observer - Optional observer to pass to the new observable point\n * @returns A copy of this observable point\n * @see {@link ObservablePoint.copyFrom} For copying into existing point\n * @see {@link Observer} For observer interface details\n */\n clone(observer) {\n return new ObservablePoint(observer ?? this._observer, this._x, this._y);\n }\n /**\n * Sets the point to a new x and y position.\n *\n * If y is omitted, both x and y will be set to x.\n * @example\n * ```ts\n * // Basic position setting\n * const point = new ObservablePoint(observer);\n * point.set(100, 200);\n *\n * // Set both x and y to same value\n * point.set(50); // x=50, y=50\n * ```\n * @param x - Position on the x axis\n * @param y - Position on the y axis, defaults to x\n * @returns The point instance itself\n * @see {@link ObservablePoint.copyFrom} For copying from another point\n * @see {@link ObservablePoint.equals} For comparing positions\n */\n set(x = 0, y = x) {\n if (this._x !== x || this._y !== y) {\n this._x = x;\n this._y = y;\n this._observer._onUpdate(this);\n }\n return this;\n }\n /**\n * Copies x and y from the given point into this point.\n * @example\n * ```ts\n * // Basic copying\n * const source = new ObservablePoint(observer, 100, 200);\n * const target = new ObservablePoint();\n * target.copyFrom(source);\n *\n * // Copy and chain operations\n * const point = new ObservablePoint()\n * .copyFrom(source)\n * .set(x + 50, y + 50);\n *\n * // Copy from any PointData\n * const data = { x: 10, y: 20 };\n * point.copyFrom(data);\n * ```\n * @param p - The point to copy from\n * @returns The point instance itself\n * @see {@link ObservablePoint.copyTo} For copying to another point\n * @see {@link ObservablePoint.clone} For creating new point copy\n */\n copyFrom(p) {\n if (this._x !== p.x || this._y !== p.y) {\n this._x = p.x;\n this._y = p.y;\n this._observer._onUpdate(this);\n }\n return this;\n }\n /**\n * Copies this point's x and y into the given point.\n * @example\n * ```ts\n * // Basic copying\n * const source = new ObservablePoint(100, 200);\n * const target = new ObservablePoint();\n * source.copyTo(target);\n * ```\n * @param p - The point to copy to. Can be any type that is or extends `PointLike`\n * @returns The point (`p`) with values updated\n * @see {@link ObservablePoint.copyFrom} For copying from another point\n * @see {@link ObservablePoint.clone} For creating new point copy\n */\n copyTo(p) {\n p.set(this._x, this._y);\n return p;\n }\n /**\n * Checks if another point is equal to this point.\n *\n * Compares x and y values using strict equality.\n * @example\n * ```ts\n * // Basic equality check\n * const p1 = new ObservablePoint(100, 200);\n * const p2 = new ObservablePoint(100, 200);\n * console.log(p1.equals(p2)); // true\n *\n * // Compare with PointData\n * const data = { x: 100, y: 200 };\n * console.log(p1.equals(data)); // true\n *\n * // Check different points\n * const p3 = new ObservablePoint(200, 300);\n * console.log(p1.equals(p3)); // false\n * ```\n * @param p - The point to check\n * @returns `true` if both `x` and `y` are equal\n * @see {@link ObservablePoint.copyFrom} For making points equal\n * @see {@link PointData} For point data interface\n */\n equals(p) {\n return p.x === this._x && p.y === this._y;\n }\n toString() {\n return `[pixi.js/math:ObservablePoint x=${this._x} y=${this._y} scope=${this._observer}]`;\n }\n /**\n * Position of the observable point on the x axis.\n * Triggers observer callback when value changes.\n * @example\n * ```ts\n * // Basic x position\n * const point = new ObservablePoint(observer);\n * point.x = 100; // Triggers observer\n *\n * // Use in calculations\n * const width = rightPoint.x - leftPoint.x;\n * ```\n * @default 0\n */\n get x() {\n return this._x;\n }\n set x(value) {\n if (this._x !== value) {\n this._x = value;\n this._observer._onUpdate(this);\n }\n }\n /**\n * Position of the observable point on the y axis.\n * Triggers observer callback when value changes.\n * @example\n * ```ts\n * // Basic y position\n * const point = new ObservablePoint(observer);\n * point.y = 200; // Triggers observer\n *\n * // Use in calculations\n * const height = bottomPoint.y - topPoint.y;\n * ```\n * @default 0\n */\n get y() {\n return this._y;\n }\n set y(value) {\n if (this._y !== value) {\n this._y = value;\n this._observer._onUpdate(this);\n }\n }\n}\n\nexport { ObservablePoint };\n//# sourceMappingURL=ObservablePoint.mjs.map\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","\"use strict\";\nconst PI_2 = Math.PI * 2;\nconst RAD_TO_DEG = 180 / Math.PI;\nconst DEG_TO_RAD = Math.PI / 180;\n\nexport { DEG_TO_RAD, PI_2, RAD_TO_DEG };\n//# sourceMappingURL=const.mjs.map\n","\"use strict\";\nclass Point {\n /**\n * Creates a new `Point`\n * @param {number} [x=0] - position of the point on the x axis\n * @param {number} [y=0] - position of the point on the y axis\n */\n constructor(x = 0, y = 0) {\n /**\n * Position of the point on the x axis\n * @example\n * ```ts\n * // Set x position\n * const point = new Point();\n * point.x = 100;\n *\n * // Use in calculations\n * const width = rightPoint.x - leftPoint.x;\n * ```\n */\n this.x = 0;\n /**\n * Position of the point on the y axis\n * @example\n * ```ts\n * // Set y position\n * const point = new Point();\n * point.y = 200;\n *\n * // Use in calculations\n * const height = bottomPoint.y - topPoint.y;\n * ```\n */\n this.y = 0;\n this.x = x;\n this.y = y;\n }\n /**\n * Creates a clone of this point, which is a new instance with the same `x` and `y` values.\n * @example\n * ```ts\n * // Basic point cloning\n * const original = new Point(100, 200);\n * const copy = original.clone();\n *\n * // Clone and modify\n * const modified = original.clone();\n * modified.set(300, 400);\n *\n * // Verify independence\n * console.log(original); // Point(100, 200)\n * console.log(modified); // Point(300, 400)\n * ```\n * @remarks\n * - Creates new Point instance\n * - Deep copies x and y values\n * - Independent from original\n * - Useful for preserving values\n * @returns A clone of this point\n * @see {@link Point.copyFrom} For copying into existing point\n * @see {@link Point.copyTo} For copying to existing point\n */\n clone() {\n return new Point(this.x, this.y);\n }\n /**\n * Copies x and y from the given point into this point.\n * @example\n * ```ts\n * // Basic copying\n * const source = new Point(100, 200);\n * const target = new Point();\n * target.copyFrom(source);\n *\n * // Copy and chain operations\n * const point = new Point()\n * .copyFrom(source)\n * .set(x + 50, y + 50);\n *\n * // Copy from any PointData\n * const data = { x: 10, y: 20 };\n * point.copyFrom(data);\n * ```\n * @param p - The point to copy from\n * @returns The point instance itself\n * @see {@link Point.copyTo} For copying to another point\n * @see {@link Point.clone} For creating new point copy\n */\n copyFrom(p) {\n this.set(p.x, p.y);\n return this;\n }\n /**\n * Copies this point's x and y into the given point.\n * @example\n * ```ts\n * // Basic copying\n * const source = new Point(100, 200);\n * const target = new Point();\n * source.copyTo(target);\n * ```\n * @param p - The point to copy to. Can be any type that is or extends `PointLike`\n * @returns The point (`p`) with values updated\n * @see {@link Point.copyFrom} For copying from another point\n * @see {@link Point.clone} For creating new point copy\n */\n copyTo(p) {\n p.set(this.x, this.y);\n return p;\n }\n /**\n * Checks if another point is equal to this point.\n *\n * Compares x and y values using strict equality.\n * @example\n * ```ts\n * // Basic equality check\n * const p1 = new Point(100, 200);\n * const p2 = new Point(100, 200);\n * console.log(p1.equals(p2)); // true\n *\n * // Compare with PointData\n * const data = { x: 100, y: 200 };\n * console.log(p1.equals(data)); // true\n *\n * // Check different points\n * const p3 = new Point(200, 300);\n * console.log(p1.equals(p3)); // false\n * ```\n * @param p - The point to check\n * @returns `true` if both `x` and `y` are equal\n * @see {@link Point.copyFrom} For making points equal\n * @see {@link PointData} For point data interface\n */\n equals(p) {\n return p.x === this.x && p.y === this.y;\n }\n /**\n * Sets the point to a new x and y position.\n *\n * If y is omitted, both x and y will be set to x.\n * @example\n * ```ts\n * // Basic position setting\n * const point = new Point();\n * point.set(100, 200);\n *\n * // Set both x and y to same value\n * point.set(50); // x=50, y=50\n *\n * // Chain with other operations\n * point\n * .set(10, 20)\n * .copyTo(otherPoint);\n * ```\n * @param x - Position on the x axis\n * @param y - Position on the y axis, defaults to x\n * @returns The point instance itself\n * @see {@link Point.copyFrom} For copying from another point\n * @see {@link Point.equals} For comparing positions\n */\n set(x = 0, y = x) {\n this.x = x;\n this.y = y;\n return this;\n }\n toString() {\n return `[pixi.js/math:Point x=${this.x} y=${this.y}]`;\n }\n /**\n * A static Point object with `x` and `y` values of `0`.\n *\n * This shared instance is reset to zero values when accessed.\n *\n * > [!IMPORTANT] This point is shared and temporary. Do not store references to it.\n * @example\n * ```ts\n * // Use for temporary calculations\n * const tempPoint = Point.shared;\n * tempPoint.set(100, 200);\n * matrix.apply(tempPoint);\n *\n * // Will be reset to (0,0) on next access\n * const fresh = Point.shared; // x=0, y=0\n * ```\n * @readonly\n * @returns A fresh zeroed point for temporary use\n * @see {@link Point.constructor} For creating new points\n * @see {@link PointData} For basic point interface\n */\n static get shared() {\n tempPoint.x = 0;\n tempPoint.y = 0;\n return tempPoint;\n }\n}\nconst tempPoint = new Point();\n\nexport { Point };\n//# sourceMappingURL=Point.mjs.map\n","import { PI_2 } from '../misc/const.mjs';\nimport { Point } from '../point/Point.mjs';\n\n\"use strict\";\nclass Matrix {\n /**\n * @param a - x scale\n * @param b - y skew\n * @param c - x skew\n * @param d - y scale\n * @param tx - x translation\n * @param ty - y translation\n */\n constructor(a = 1, b = 0, c = 0, d = 1, tx = 0, ty = 0) {\n /**\n * Array representation of the matrix.\n * Only populated when `toArray()` is called.\n * @default null\n * @see {@link Matrix.toArray} For filling this array\n */\n this.array = null;\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n }\n /**\n * Creates a Matrix object based on the given array.\n * Populates matrix components from a flat array in column-major order.\n *\n * > [!NOTE] Array mapping order:\n * > ```\n * > array[0] = a (x scale)\n * > array[1] = b (y skew)\n * > array[2] = tx (x translation)\n * > array[3] = c (x skew)\n * > array[4] = d (y scale)\n * > array[5] = ty (y translation)\n * > ```\n * @example\n * ```ts\n * // Create matrix from array\n * const matrix = new Matrix();\n * matrix.fromArray([\n * 2, 0, 100, // a, b, tx\n * 0, 2, 100 // c, d, ty\n * ]);\n *\n * // Create matrix from typed array\n * const float32Array = new Float32Array([\n * 1, 0, 0, // Scale x1, no skew\n * 0, 1, 0 // No skew, scale x1\n * ]);\n * matrix.fromArray(float32Array);\n * ```\n * @param array - The array to populate the matrix from\n * @see {@link Matrix.toArray} For converting matrix to array\n * @see {@link Matrix.set} For setting values directly\n */\n fromArray(array) {\n this.a = array[0];\n this.b = array[1];\n this.c = array[3];\n this.d = array[4];\n this.tx = array[2];\n this.ty = array[5];\n }\n /**\n * Sets the matrix properties directly.\n * All matrix components can be set in one call.\n * @example\n * ```ts\n * // Set to identity matrix\n * matrix.set(1, 0, 0, 1, 0, 0);\n *\n * // Set to scale matrix\n * matrix.set(2, 0, 0, 2, 0, 0); // Scale 2x\n *\n * // Set to translation matrix\n * matrix.set(1, 0, 0, 1, 100, 50); // Move 100,50\n * ```\n * @param a - Scale on x axis\n * @param b - Shear on y axis\n * @param c - Shear on x axis\n * @param d - Scale on y axis\n * @param tx - Translation on x axis\n * @param ty - Translation on y axis\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.identity} For resetting to identity\n * @see {@link Matrix.fromArray} For setting from array\n */\n set(a, b, c, d, tx, ty) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.tx = tx;\n this.ty = ty;\n return this;\n }\n /**\n * Creates an array from the current Matrix object.\n *\n * > [!NOTE] The array format is:\n * > ```\n * > Non-transposed:\n * > [a, c, tx,\n * > b, d, ty,\n * > 0, 0, 1]\n * >\n * > Transposed:\n * > [a, b, 0,\n * > c, d, 0,\n * > tx,ty,1]\n * > ```\n * @example\n * ```ts\n * // Basic array conversion\n * const matrix = new Matrix(2, 0, 0, 2, 100, 100);\n * const array = matrix.toArray();\n *\n * // Using existing array\n * const float32Array = new Float32Array(9);\n * matrix.toArray(false, float32Array);\n *\n * // Get transposed array\n * const transposed = matrix.toArray(true);\n * ```\n * @param transpose - Whether to transpose the matrix\n * @param out - Optional Float32Array to store the result\n * @returns The array containing the matrix values\n * @see {@link Matrix.fromArray} For creating matrix from array\n * @see {@link Matrix.array} For cached array storage\n */\n toArray(transpose, out) {\n if (!this.array) {\n this.array = new Float32Array(9);\n }\n const array = out || this.array;\n if (transpose) {\n array[0] = this.a;\n array[1] = this.b;\n array[2] = 0;\n array[3] = this.c;\n array[4] = this.d;\n array[5] = 0;\n array[6] = this.tx;\n array[7] = this.ty;\n array[8] = 1;\n } else {\n array[0] = this.a;\n array[1] = this.c;\n array[2] = this.tx;\n array[3] = this.b;\n array[4] = this.d;\n array[5] = this.ty;\n array[6] = 0;\n array[7] = 0;\n array[8] = 1;\n }\n return array;\n }\n /**\n * Get a new position with the current transformation applied.\n *\n * Can be used to go from a child's coordinate space to the world coordinate space. (e.g. rendering)\n * @example\n * ```ts\n * // Basic point transformation\n * const matrix = new Matrix().translate(100, 50).rotate(Math.PI / 4);\n * const point = new Point(10, 20);\n * const transformed = matrix.apply(point);\n *\n * // Reuse existing point\n * const output = new Point();\n * matrix.apply(point, output);\n * ```\n * @param pos - The origin point to transform\n * @param newPos - Optional point to store the result\n * @returns The transformed point\n * @see {@link Matrix.applyInverse} For inverse transformation\n * @see {@link Point} For point operations\n */\n apply(pos, newPos) {\n newPos = newPos || new Point();\n const x = pos.x;\n const y = pos.y;\n newPos.x = this.a * x + this.c * y + this.tx;\n newPos.y = this.b * x + this.d * y + this.ty;\n return newPos;\n }\n /**\n * Get a new position with the inverse of the current transformation applied.\n *\n * Can be used to go from the world coordinate space to a child's coordinate space. (e.g. input)\n * @example\n * ```ts\n * // Basic inverse transformation\n * const matrix = new Matrix().translate(100, 50).rotate(Math.PI / 4);\n * const worldPoint = new Point(150, 100);\n * const localPoint = matrix.applyInverse(worldPoint);\n *\n * // Reuse existing point\n * const output = new Point();\n * matrix.applyInverse(worldPoint, output);\n *\n * // Convert mouse position to local space\n * const mousePoint = new Point(mouseX, mouseY);\n * const localMouse = matrix.applyInverse(mousePoint);\n * ```\n * @param pos - The origin point to inverse-transform\n * @param newPos - Optional point to store the result\n * @returns The inverse-transformed point\n * @see {@link Matrix.apply} For forward transformation\n * @see {@link Matrix.invert} For getting inverse matrix\n */\n applyInverse(pos, newPos) {\n newPos = newPos || new Point();\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const tx = this.tx;\n const ty = this.ty;\n const id = 1 / (a * d + c * -b);\n const x = pos.x;\n const y = pos.y;\n newPos.x = d * id * x + -c * id * y + (ty * c - tx * d) * id;\n newPos.y = a * id * y + -b * id * x + (-ty * a + tx * b) * id;\n return newPos;\n }\n /**\n * Translates the matrix on the x and y axes.\n * Adds to the position values while preserving scale, rotation and skew.\n * @example\n * ```ts\n * // Basic translation\n * const matrix = new Matrix();\n * matrix.translate(100, 50); // Move right 100, down 50\n *\n * // Chain with other transformations\n * matrix\n * .scale(2, 2)\n * .translate(100, 0)\n * .rotate(Math.PI / 4);\n * ```\n * @param x - How much to translate on the x axis\n * @param y - How much to translate on the y axis\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.set} For setting position directly\n * @see {@link Matrix.setTransform} For complete transform setup\n */\n translate(x, y) {\n this.tx += x;\n this.ty += y;\n return this;\n }\n /**\n * Applies a scale transformation to the matrix.\n * Multiplies the scale values with existing matrix components.\n * @example\n * ```ts\n * // Basic scaling\n * const matrix = new Matrix();\n * matrix.scale(2, 3); // Scale 2x horizontally, 3x vertically\n *\n * // Chain with other transformations\n * matrix\n * .translate(100, 100)\n * .scale(2, 2) // Scales after translation\n * .rotate(Math.PI / 4);\n * ```\n * @param x - The amount to scale horizontally\n * @param y - The amount to scale vertically\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.setTransform} For setting scale directly\n * @see {@link Matrix.append} For combining transformations\n */\n scale(x, y) {\n this.a *= x;\n this.d *= y;\n this.c *= x;\n this.b *= y;\n this.tx *= x;\n this.ty *= y;\n return this;\n }\n /**\n * Applies a rotation transformation to the matrix.\n *\n * Rotates around the origin (0,0) by the given angle in radians.\n * @example\n * ```ts\n * // Basic rotation\n * const matrix = new Matrix();\n * matrix.rotate(Math.PI / 4); // Rotate 45 degrees\n *\n * // Chain with other transformations\n * matrix\n * .translate(100, 100) // Move to rotation center\n * .rotate(Math.PI) // Rotate 180 degrees\n * .scale(2, 2); // Scale after rotation\n *\n * // Common angles\n * matrix.rotate(Math.PI / 2); // 90 degrees\n * matrix.rotate(Math.PI); // 180 degrees\n * matrix.rotate(Math.PI * 2); // 360 degrees\n * ```\n * @remarks\n * - Rotates around origin point (0,0)\n * - Affects position if translation was set\n * - Uses counter-clockwise rotation\n * - Order of operations matters when chaining\n * @param angle - The angle in radians\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.setTransform} For setting rotation directly\n * @see {@link Matrix.append} For combining transformations\n */\n rotate(angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const a1 = this.a;\n const c1 = this.c;\n const tx1 = this.tx;\n this.a = a1 * cos - this.b * sin;\n this.b = a1 * sin + this.b * cos;\n this.c = c1 * cos - this.d * sin;\n this.d = c1 * sin + this.d * cos;\n this.tx = tx1 * cos - this.ty * sin;\n this.ty = tx1 * sin + this.ty * cos;\n return this;\n }\n /**\n * Appends the given Matrix to this Matrix.\n * Combines two matrices by multiplying them together: this = this * matrix\n * @example\n * ```ts\n * // Basic matrix combination\n * const matrix = new Matrix();\n * const other = new Matrix().translate(100, 0).rotate(Math.PI / 4);\n * matrix.append(other);\n * ```\n * @remarks\n * - Order matters: A.append(B) !== B.append(A)\n * - Modifies current matrix\n * - Preserves transformation order\n * - Commonly used for combining transforms\n * @param matrix - The matrix to append\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.prepend} For prepending transformations\n * @see {@link Matrix.appendFrom} For appending two external matrices\n */\n append(matrix) {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n this.a = matrix.a * a1 + matrix.b * c1;\n this.b = matrix.a * b1 + matrix.b * d1;\n this.c = matrix.c * a1 + matrix.d * c1;\n this.d = matrix.c * b1 + matrix.d * d1;\n this.tx = matrix.tx * a1 + matrix.ty * c1 + this.tx;\n this.ty = matrix.tx * b1 + matrix.ty * d1 + this.ty;\n return this;\n }\n /**\n * Appends two matrices and sets the result to this matrix.\n * Performs matrix multiplication: this = A * B\n * @example\n * ```ts\n * // Basic matrix multiplication\n * const result = new Matrix();\n * const matrixA = new Matrix().scale(2, 2);\n * const matrixB = new Matrix().rotate(Math.PI / 4);\n * result.appendFrom(matrixA, matrixB);\n * ```\n * @remarks\n * - Order matters: A * B !== B * A\n * - Creates a new transformation from two others\n * - More efficient than append() for multiple operations\n * - Does not modify input matrices\n * @param a - The first matrix to multiply\n * @param b - The second matrix to multiply\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.append} For single matrix combination\n * @see {@link Matrix.prepend} For reverse order multiplication\n */\n appendFrom(a, b) {\n const a1 = a.a;\n const b1 = a.b;\n const c1 = a.c;\n const d1 = a.d;\n const tx = a.tx;\n const ty = a.ty;\n const a2 = b.a;\n const b2 = b.b;\n const c2 = b.c;\n const d2 = b.d;\n this.a = a1 * a2 + b1 * c2;\n this.b = a1 * b2 + b1 * d2;\n this.c = c1 * a2 + d1 * c2;\n this.d = c1 * b2 + d1 * d2;\n this.tx = tx * a2 + ty * c2 + b.tx;\n this.ty = tx * b2 + ty * d2 + b.ty;\n return this;\n }\n /**\n * Sets the matrix based on all the available properties.\n * Combines position, scale, rotation, skew and pivot in a single operation.\n * @example\n * ```ts\n * // Basic transform setup\n * const matrix = new Matrix();\n * matrix.setTransform(\n * 100, 100, // position\n * 0, 0, // pivot\n * 2, 2, // scale\n * Math.PI / 4, // rotation (45 degrees)\n * 0, 0 // skew\n * );\n * ```\n * @remarks\n * - Updates all matrix components at once\n * - More efficient than separate transform calls\n * - Uses radians for rotation and skew\n * - Pivot affects rotation center\n * @param x - Position on the x axis\n * @param y - Position on the y axis\n * @param pivotX - Pivot on the x axis\n * @param pivotY - Pivot on the y axis\n * @param scaleX - Scale on the x axis\n * @param scaleY - Scale on the y axis\n * @param rotation - Rotation in radians\n * @param skewX - Skew on the x axis\n * @param skewY - Skew on the y axis\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.decompose} For extracting transform properties\n * @see {@link TransformableObject} For transform data structure\n */\n setTransform(x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) {\n this.a = Math.cos(rotation + skewY) * scaleX;\n this.b = Math.sin(rotation + skewY) * scaleX;\n this.c = -Math.sin(rotation - skewX) * scaleY;\n this.d = Math.cos(rotation - skewX) * scaleY;\n this.tx = x - (pivotX * this.a + pivotY * this.c);\n this.ty = y - (pivotX * this.b + pivotY * this.d);\n return this;\n }\n /**\n * Prepends the given Matrix to this Matrix.\n * Combines two matrices by multiplying them together: this = matrix * this\n * @example\n * ```ts\n * // Basic matrix prepend\n * const matrix = new Matrix().scale(2, 2);\n * const other = new Matrix().translate(100, 0);\n * matrix.prepend(other); // Translation happens before scaling\n * ```\n * @remarks\n * - Order matters: A.prepend(B) !== B.prepend(A)\n * - Modifies current matrix\n * - Reverses transformation order compared to append()\n * @param matrix - The matrix to prepend\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.append} For appending transformations\n * @see {@link Matrix.appendFrom} For combining external matrices\n */\n prepend(matrix) {\n const tx1 = this.tx;\n if (matrix.a !== 1 || matrix.b !== 0 || matrix.c !== 0 || matrix.d !== 1) {\n const a1 = this.a;\n const c1 = this.c;\n this.a = a1 * matrix.a + this.b * matrix.c;\n this.b = a1 * matrix.b + this.b * matrix.d;\n this.c = c1 * matrix.a + this.d * matrix.c;\n this.d = c1 * matrix.b + this.d * matrix.d;\n }\n this.tx = tx1 * matrix.a + this.ty * matrix.c + matrix.tx;\n this.ty = tx1 * matrix.b + this.ty * matrix.d + matrix.ty;\n return this;\n }\n /**\n * Decomposes the matrix into its individual transform components.\n * Extracts position, scale, rotation and skew values from the matrix.\n * @example\n * ```ts\n * // Basic decomposition\n * const matrix = new Matrix()\n * .translate(100, 100)\n * .rotate(Math.PI / 4)\n * .scale(2, 2);\n *\n * const transform = {\n * position: new Point(),\n * scale: new Point(),\n * pivot: new Point(),\n * skew: new Point(),\n * rotation: 0\n * };\n *\n * matrix.decompose(transform);\n * console.log(transform.position); // Point(100, 100)\n * console.log(transform.rotation); // ~0.785 (PI/4)\n * console.log(transform.scale); // Point(2, 2)\n * ```\n * @remarks\n * - Handles combined transformations\n * - Accounts for pivot points\n * - Chooses between rotation/skew based on transform type\n * - Uses radians for rotation and skew\n * @param transform - The transform object to store the decomposed values\n * @returns The transform with the newly applied properties\n * @see {@link Matrix.setTransform} For composing from components\n * @see {@link TransformableObject} For transform structure\n */\n decompose(transform) {\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const pivot = transform.pivot;\n const skewX = -Math.atan2(-c, d);\n const skewY = Math.atan2(b, a);\n const delta = Math.abs(skewX + skewY);\n if (delta < 1e-5 || Math.abs(PI_2 - delta) < 1e-5) {\n transform.rotation = skewY;\n transform.skew.x = transform.skew.y = 0;\n } else {\n transform.rotation = 0;\n transform.skew.x = skewX;\n transform.skew.y = skewY;\n }\n transform.scale.x = Math.sqrt(a * a + b * b);\n transform.scale.y = Math.sqrt(c * c + d * d);\n transform.position.x = this.tx + (pivot.x * a + pivot.y * c);\n transform.position.y = this.ty + (pivot.x * b + pivot.y * d);\n return transform;\n }\n /**\n * Inverts this matrix.\n * Creates the matrix that when multiplied with this matrix results in an identity matrix.\n * @example\n * ```ts\n * // Basic matrix inversion\n * const matrix = new Matrix()\n * .translate(100, 50)\n * .scale(2, 2);\n *\n * matrix.invert(); // Now transforms in opposite direction\n *\n * // Verify inversion\n * const point = new Point(50, 50);\n * const transformed = matrix.apply(point);\n * const original = matrix.invert().apply(transformed);\n * // original ≈ point\n * ```\n * @remarks\n * - Modifies the current matrix\n * - Useful for reversing transformations\n * - Cannot invert matrices with zero determinant\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.identity} For resetting to identity\n * @see {@link Matrix.applyInverse} For inverse transformations\n */\n invert() {\n const a1 = this.a;\n const b1 = this.b;\n const c1 = this.c;\n const d1 = this.d;\n const tx1 = this.tx;\n const n = a1 * d1 - b1 * c1;\n this.a = d1 / n;\n this.b = -b1 / n;\n this.c = -c1 / n;\n this.d = a1 / n;\n this.tx = (c1 * this.ty - d1 * tx1) / n;\n this.ty = -(a1 * this.ty - b1 * tx1) / n;\n return this;\n }\n /**\n * Checks if this matrix is an identity matrix.\n *\n * An identity matrix has no transformations applied (default state).\n * @example\n * ```ts\n * // Check if matrix is identity\n * const matrix = new Matrix();\n * console.log(matrix.isIdentity()); // true\n *\n * // Check after transformations\n * matrix.translate(100, 0);\n * console.log(matrix.isIdentity()); // false\n *\n * // Reset and verify\n * matrix.identity();\n * console.log(matrix.isIdentity()); // true\n * ```\n * @remarks\n * - Verifies a = 1, d = 1 (no scale)\n * - Verifies b = 0, c = 0 (no skew)\n * - Verifies tx = 0, ty = 0 (no translation)\n * @returns True if matrix has no transformations\n * @see {@link Matrix.identity} For resetting to identity\n * @see {@link Matrix.IDENTITY} For constant identity matrix\n */\n isIdentity() {\n return this.a === 1 && this.b === 0 && this.c === 0 && this.d === 1 && this.tx === 0 && this.ty === 0;\n }\n /**\n * Resets this Matrix to an identity (default) matrix.\n * Sets all components to their default values: scale=1, no skew, no translation.\n * @example\n * ```ts\n * // Reset transformed matrix\n * const matrix = new Matrix()\n * .scale(2, 2)\n * .rotate(Math.PI / 4);\n * matrix.identity(); // Back to default state\n *\n * // Chain after reset\n * matrix\n * .identity()\n * .translate(100, 100)\n * .scale(2, 2);\n *\n * // Compare with identity constant\n * const isDefault = matrix.equals(Matrix.IDENTITY);\n * ```\n * @remarks\n * - Sets a=1, d=1 (default scale)\n * - Sets b=0, c=0 (no skew)\n * - Sets tx=0, ty=0 (no translation)\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.IDENTITY} For constant identity matrix\n * @see {@link Matrix.isIdentity} For checking identity state\n */\n identity() {\n this.a = 1;\n this.b = 0;\n this.c = 0;\n this.d = 1;\n this.tx = 0;\n this.ty = 0;\n return this;\n }\n /**\n * Creates a new Matrix object with the same values as this one.\n * @returns A copy of this matrix. Good for chaining method calls.\n */\n clone() {\n const matrix = new Matrix();\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n return matrix;\n }\n /**\n * Creates a new Matrix object with the same values as this one.\n * @param matrix\n * @example\n * ```ts\n * // Basic matrix cloning\n * const matrix = new Matrix()\n * .translate(100, 100)\n * .rotate(Math.PI / 4);\n * const copy = matrix.clone();\n *\n * // Clone and modify\n * const modified = matrix.clone()\n * .scale(2, 2);\n *\n * // Compare matrices\n * console.log(matrix.equals(copy)); // true\n * console.log(matrix.equals(modified)); // false\n * ```\n * @returns A copy of this matrix. Good for chaining method calls.\n * @see {@link Matrix.copyTo} For copying to existing matrix\n * @see {@link Matrix.copyFrom} For copying from another matrix\n */\n copyTo(matrix) {\n matrix.a = this.a;\n matrix.b = this.b;\n matrix.c = this.c;\n matrix.d = this.d;\n matrix.tx = this.tx;\n matrix.ty = this.ty;\n return matrix;\n }\n /**\n * Changes the values of the matrix to be the same as the ones in given matrix.\n * @example\n * ```ts\n * // Basic matrix copying\n * const source = new Matrix()\n * .translate(100, 100)\n * .rotate(Math.PI / 4);\n * const target = new Matrix();\n * target.copyFrom(source);\n * ```\n * @param matrix - The matrix to copy from\n * @returns This matrix. Good for chaining method calls.\n * @see {@link Matrix.clone} For creating new matrix copy\n * @see {@link Matrix.copyTo} For copying to another matrix\n */\n copyFrom(matrix) {\n this.a = matrix.a;\n this.b = matrix.b;\n this.c = matrix.c;\n this.d = matrix.d;\n this.tx = matrix.tx;\n this.ty = matrix.ty;\n return this;\n }\n /**\n * Checks if this matrix equals another matrix.\n * Compares all components for exact equality.\n * @example\n * ```ts\n * // Basic equality check\n * const m1 = new Matrix();\n * const m2 = new Matrix();\n * console.log(m1.equals(m2)); // true\n *\n * // Compare transformed matrices\n * const transform = new Matrix()\n * .translate(100, 100)\n * const clone = new Matrix()\n * .scale(2, 2);\n * console.log(transform.equals(clone)); // false\n * ```\n * @param matrix - The matrix to compare to\n * @returns True if matrices are identical\n * @see {@link Matrix.copyFrom} For copying matrix values\n * @see {@link Matrix.isIdentity} For identity comparison\n */\n equals(matrix) {\n return matrix.a === this.a && matrix.b === this.b && matrix.c === this.c && matrix.d === this.d && matrix.tx === this.tx && matrix.ty === this.ty;\n }\n toString() {\n return `[pixi.js:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`;\n }\n /**\n * A default (identity) matrix with no transformations applied.\n *\n * > [!IMPORTANT] This is a shared read-only object. Create a new Matrix if you need to modify it.\n * @example\n * ```ts\n * // Get identity matrix reference\n * const identity = Matrix.IDENTITY;\n * console.log(identity.isIdentity()); // true\n *\n * // Compare with identity\n * const matrix = new Matrix();\n * console.log(matrix.equals(Matrix.IDENTITY)); // true\n *\n * // Create new matrix instead of modifying IDENTITY\n * const transform = new Matrix()\n * .copyFrom(Matrix.IDENTITY)\n * .translate(100, 100);\n * ```\n * @readonly\n * @returns A read-only identity matrix\n * @see {@link Matrix.shared} For temporary calculations\n * @see {@link Matrix.identity} For resetting matrices\n */\n static get IDENTITY() {\n return identityMatrix.identity();\n }\n /**\n * A static Matrix that can be used to avoid creating new objects.\n * Will always ensure the matrix is reset to identity when requested.\n *\n * > [!IMPORTANT] This matrix is shared and temporary. Do not store references to it.\n * @example\n * ```ts\n * // Use for temporary calculations\n * const tempMatrix = Matrix.shared;\n * tempMatrix.translate(100, 100).rotate(Math.PI / 4);\n * const point = tempMatrix.apply({ x: 10, y: 20 });\n *\n * // Will be reset to identity on next access\n * const fresh = Matrix.shared; // Back to identity\n * ```\n * @remarks\n * - Always returns identity matrix\n * - Safe to modify temporarily\n * - Not safe to store references\n * - Useful for one-off calculations\n * @readonly\n * @returns A fresh identity matrix for temporary use\n * @see {@link Matrix.IDENTITY} For immutable identity matrix\n * @see {@link Matrix.identity} For resetting matrices\n */\n static get shared() {\n return tempMatrix.identity();\n }\n}\nconst tempMatrix = new Matrix();\nconst identityMatrix = new Matrix();\n\nexport { Matrix };\n//# sourceMappingURL=Matrix.mjs.map\n","import { Matrix } from './Matrix.mjs';\n\n\"use strict\";\nconst ux = [1, 1, 0, -1, -1, -1, 0, 1, 1, 1, 0, -1, -1, -1, 0, 1];\nconst uy = [0, 1, 1, 1, 0, -1, -1, -1, 0, 1, 1, 1, 0, -1, -1, -1];\nconst vx = [0, -1, -1, -1, 0, 1, 1, 1, 0, 1, 1, 1, 0, -1, -1, -1];\nconst vy = [1, 1, 0, -1, -1, -1, 0, 1, -1, -1, 0, 1, 1, 1, 0, -1];\nconst rotationCayley = [];\nconst rotationMatrices = [];\nconst signum = Math.sign;\nfunction init() {\n for (let i = 0; i < 16; i++) {\n const row = [];\n rotationCayley.push(row);\n for (let j = 0; j < 16; j++) {\n const _ux = signum(ux[i] * ux[j] + vx[i] * uy[j]);\n const _uy = signum(uy[i] * ux[j] + vy[i] * uy[j]);\n const _vx = signum(ux[i] * vx[j] + vx[i] * vy[j]);\n const _vy = signum(uy[i] * vx[j] + vy[i] * vy[j]);\n for (let k = 0; k < 16; k++) {\n if (ux[k] === _ux && uy[k] === _uy && vx[k] === _vx && vy[k] === _vy) {\n row.push(k);\n break;\n }\n }\n }\n }\n for (let i = 0; i < 16; i++) {\n const mat = new Matrix();\n mat.set(ux[i], uy[i], vx[i], vy[i], 0, 0);\n rotationMatrices.push(mat);\n }\n}\ninit();\nconst groupD8 = {\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 0° | East |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n E: 0,\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 45°↻ | Southeast |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n SE: 1,\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 90°↻ | South |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n S: 2,\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 135°↻ | Southwest |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n SW: 3,\n /**\n * | Rotation | Direction |\n * |----------|-----------|\n * | 180° | West |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n W: 4,\n /**\n * | Rotation | Direction |\n * |-------------|--------------|\n * | -135°/225°↻ | Northwest |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n NW: 5,\n /**\n * | Rotation | Direction |\n * |-------------|--------------|\n * | -90°/270°↻ | North |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n N: 6,\n /**\n * | Rotation | Direction |\n * |-------------|--------------|\n * | -45°/315°↻ | Northeast |\n * @group groupD8\n * @type {GD8Symmetry}\n */\n NE: 7,\n /**\n * Reflection about Y-axis.\n * @group groupD8\n * @type {GD8Symmetry}\n */\n MIRROR_VERTICAL: 8,\n /**\n * Reflection about the main diagonal.\n * @group groupD8\n * @type {GD8Symmetry}\n */\n MAIN_DIAGONAL: 10,\n /**\n * Reflection about X-axis.\n * @group groupD8\n * @type {GD8Symmetry}\n */\n MIRROR_HORIZONTAL: 12,\n /**\n * Reflection about reverse diagonal.\n * @group groupD8\n * @type {GD8Symmetry}\n */\n REVERSE_DIAGONAL: 14,\n /**\n * @group groupD8\n * @param {GD8Symmetry} ind - sprite rotation angle.\n * @returns {GD8Symmetry} The X-component of the U-axis\n * after rotating the axes.\n */\n uX: (ind) => ux[ind],\n /**\n * @group groupD8\n * @param {GD8Symmetry} ind - sprite rotation angle.\n * @returns {GD8Symmetry} The Y-component of the U-axis\n * after rotating the axes.\n */\n uY: (ind) => uy[ind],\n /**\n * @group groupD8\n * @param {GD8Symmetry} ind - sprite rotation angle.\n * @returns {GD8Symmetry} The X-component of the V-axis\n * after rotating the axes.\n */\n vX: (ind) => vx[ind],\n /**\n * @group groupD8\n * @param {GD8Symmetry} ind - sprite rotation angle.\n * @returns {GD8Symmetry} The Y-component of the V-axis\n * after rotating the axes.\n */\n vY: (ind) => vy[ind],\n /**\n * @group groupD8\n * @param {GD8Symmetry} rotation - symmetry whose opposite\n * is needed. Only rotations have opposite symmetries while\n * reflections don't.\n * @returns {GD8Symmetry} The opposite symmetry of `rotation`\n */\n inv: (rotation) => {\n if (rotation & 8) {\n return rotation & 15;\n }\n return -rotation & 7;\n },\n /**\n * Composes the two D8 operations.\n *\n * Taking `^` as reflection:\n *\n * | | E=0 | S=2 | W=4 | N=6 | E^=8 | S^=10 | W^=12 | N^=14 |\n * |-------|-----|-----|-----|-----|------|-------|-------|-------|\n * | E=0 | E | S | W | N | E^ | S^ | W^ | N^ |\n * | S=2 | S | W | N | E | S^ | W^ | N^ | E^ |\n * | W=4 | W | N | E | S | W^ | N^ | E^ | S^ |\n * | N=6 | N | E | S | W | N^ | E^ | S^ | W^ |\n * | E^=8 | E^ | N^ | W^ | S^ | E | N | W | S |\n * | S^=10 | S^ | E^ | N^ | W^ | S | E | N | W |\n * | W^=12 | W^ | S^ | E^ | N^ | W | S | E | N |\n * | N^=14 | N^ | W^ | S^ | E^ | N | W | S | E |\n *\n * [This is a Cayley table]{@link https://en.wikipedia.org/wiki/Cayley_table}\n * @group groupD8\n * @param {GD8Symmetry} rotationSecond - Second operation, which\n * is the row in the above cayley table.\n * @param {GD8Symmetry} rotationFirst - First operation, which\n * is the column in the above cayley table.\n * @returns {GD8Symmetry} Composed operation\n */\n add: (rotationSecond, rotationFirst) => rotationCayley[rotationSecond][rotationFirst],\n /**\n * Reverse of `add`.\n * @group groupD8\n * @param {GD8Symmetry} rotationSecond - Second operation\n * @param {GD8Symmetry} rotationFirst - First operation\n * @returns {GD8Symmetry} Result\n */\n sub: (rotationSecond, rotationFirst) => rotationCayley[rotationSecond][groupD8.inv(rotationFirst)],\n /**\n * Adds 180 degrees to rotation, which is a commutative\n * operation.\n * @group groupD8\n * @param {number} rotation - The number to rotate.\n * @returns {number} Rotated number\n */\n rotate180: (rotation) => rotation ^ 4,\n /**\n * Checks if the rotation angle is vertical, i.e. south\n * or north. It doesn't work for reflections.\n * @group groupD8\n * @param {GD8Symmetry} rotation - The number to check.\n * @returns {boolean} Whether or not the direction is vertical\n */\n isVertical: (rotation) => (rotation & 3) === 2,\n // rotation % 4 === 2\n /**\n * Approximates the vector `V(dx,dy)` into one of the\n * eight directions provided by `groupD8`.\n * @group groupD8\n * @param {number} dx - X-component of the vector\n * @param {number} dy - Y-component of the vector\n * @returns {GD8Symmetry} Approximation of the vector into\n * one of the eight symmetries.\n */\n byDirection: (dx, dy) => {\n if (Math.abs(dx) * 2 <= Math.abs(dy)) {\n if (dy >= 0) {\n return groupD8.S;\n }\n return groupD8.N;\n } else if (Math.abs(dy) * 2 <= Math.abs(dx)) {\n if (dx > 0) {\n return groupD8.E;\n }\n return groupD8.W;\n } else if (dy > 0) {\n if (dx > 0) {\n return groupD8.SE;\n }\n return groupD8.SW;\n } else if (dx > 0) {\n return groupD8.NE;\n }\n return groupD8.NW;\n },\n /**\n * Helps sprite to compensate texture packer rotation.\n * @group groupD8\n * @param {Matrix} matrix - sprite world matrix\n * @param {GD8Symmetry} rotation - The rotation factor to use.\n * @param {number} tx - sprite anchoring\n * @param {number} ty - sprite anchoring\n * @param {number} dw - sprite width\n * @param {number} dh - sprite height\n */\n matrixAppendRotationInv: (matrix, rotation, tx = 0, ty = 0, dw = 0, dh = 0) => {\n const mat = rotationMatrices[groupD8.inv(rotation)];\n const a = mat.a;\n const b = mat.b;\n const c = mat.c;\n const d = mat.d;\n const finalTx = tx - Math.min(0, a * dw, c * dh, a * dw + c * dh);\n const finalTy = ty - Math.min(0, b * dw, d * dh, b * dw + d * dh);\n const a1 = matrix.a;\n const b1 = matrix.b;\n const c1 = matrix.c;\n const d1 = matrix.d;\n matrix.a = a * a1 + b * c1;\n matrix.b = a * b1 + b * d1;\n matrix.c = c * a1 + d * c1;\n matrix.d = c * b1 + d * d1;\n matrix.tx = finalTx * a1 + finalTy * c1 + matrix.tx;\n matrix.ty = finalTx * b1 + finalTy * d1 + matrix.ty;\n },\n /**\n * Transforms rectangle coordinates based on texture packer rotation.\n * Used when texture atlas pages are rotated and coordinates need to be adjusted.\n * @group groupD8\n * @param {RectangleLike} rect - Rectangle with original coordinates to transform\n * @param {RectangleLike} sourceFrame - Source texture frame (includes offset and dimensions)\n * @param {GD8Symmetry} rotation - The groupD8 rotation value\n * @param {Rectangle} out - Rectangle to store the result\n * @returns {Rectangle} Transformed coordinates (includes source frame offset)\n */\n transformRectCoords: (rect, sourceFrame, rotation, out) => {\n const { x, y, width, height } = rect;\n const { x: frameX, y: frameY, width: frameWidth, height: frameHeight } = sourceFrame;\n if (rotation === groupD8.E) {\n out.set(x + frameX, y + frameY, width, height);\n return out;\n } else if (rotation === groupD8.S) {\n return out.set(\n frameWidth - y - height + frameX,\n x + frameY,\n height,\n width\n );\n } else if (rotation === groupD8.W) {\n return out.set(\n frameWidth - x - width + frameX,\n frameHeight - y - height + frameY,\n width,\n height\n );\n } else if (rotation === groupD8.N) {\n return out.set(\n y + frameX,\n frameHeight - x - width + frameY,\n height,\n width\n );\n }\n return out.set(x + frameX, y + frameY, width, height);\n }\n};\n\nexport { groupD8 };\n//# sourceMappingURL=groupD8.mjs.map\n","import { Point } from '../point/Point.mjs';\n\n\"use strict\";\nconst tempPoints = [new Point(), new Point(), new Point(), new Point()];\nclass Rectangle {\n /**\n * @param x - The X coordinate of the upper-left corner of the rectangle\n * @param y - The Y coordinate of the upper-left corner of the rectangle\n * @param width - The overall width of the rectangle\n * @param height - The overall height of the rectangle\n */\n constructor(x = 0, y = 0, width = 0, height = 0) {\n /**\n * The type of the object, mainly used to avoid `instanceof` checks\n * @example\n * ```ts\n * // Check shape type\n * const shape = new Rectangle(0, 0, 100, 100);\n * console.log(shape.type); // 'rectangle'\n *\n * // Use in type guards\n * if (shape.type === 'rectangle') {\n * console.log(shape.width, shape.height);\n * }\n * ```\n * @readonly\n * @default 'rectangle'\n * @see {@link SHAPE_PRIMITIVE} For all shape types\n */\n this.type = \"rectangle\";\n this.x = Number(x);\n this.y = Number(y);\n this.width = Number(width);\n this.height = Number(height);\n }\n /**\n * Returns the left edge (x-coordinate) of the rectangle.\n * @example\n * ```ts\n * // Get left edge position\n * const rect = new Rectangle(100, 100, 200, 150);\n * console.log(rect.left); // 100\n *\n * // Use in alignment calculations\n * sprite.x = rect.left + padding;\n *\n * // Compare positions\n * if (point.x > rect.left) {\n * console.log('Point is right of rectangle');\n * }\n * ```\n * @readonly\n * @returns The x-coordinate of the left edge\n * @see {@link Rectangle.right} For right edge position\n * @see {@link Rectangle.x} For direct x-coordinate access\n */\n get left() {\n return this.x;\n }\n /**\n * Returns the right edge (x + width) of the rectangle.\n * @example\n * ```ts\n * // Get right edge position\n * const rect = new Rectangle(100, 100, 200, 150);\n * console.log(rect.right); // 300\n *\n * // Align to right edge\n * sprite.x = rect.right - sprite.width;\n *\n * // Check boundaries\n * if (point.x < rect.right) {\n * console.log('Point is inside right bound');\n * }\n * ```\n * @readonly\n * @returns The x-coordinate of the right edge\n * @see {@link Rectangle.left} For left edge position\n * @see {@link Rectangle.width} For width value\n */\n get right() {\n return this.x + this.width;\n }\n /**\n * Returns the top edge (y-coordinate) of the rectangle.\n * @example\n * ```ts\n * // Get top edge position\n * const rect = new Rectangle(100, 100, 200, 150);\n * console.log(rect.top); // 100\n *\n * // Position above rectangle\n * sprite.y = rect.top - sprite.height;\n *\n * // Check vertical position\n * if (point.y > rect.top) {\n * console.log('Point is below top edge');\n * }\n * ```\n * @readonly\n * @returns The y-coordinate of the top edge\n * @see {@link Rectangle.bottom} For bottom edge position\n * @see {@link Rectangle.y} For direct y-coordinate access\n */\n get top() {\n return this.y;\n }\n /**\n * Returns the bottom edge (y + height) of the rectangle.\n * @example\n * ```ts\n * // Get bottom edge position\n * const rect = new Rectangle(100, 100, 200, 150);\n * console.log(rect.bottom); // 250\n *\n * // Stack below rectangle\n * sprite.y = rect.bottom + margin;\n *\n * // Check vertical bounds\n * if (point.y < rect.bottom) {\n * console.log('Point is above bottom edge');\n * }\n * ```\n * @readonly\n * @returns The y-coordinate of the bottom edge\n * @see {@link Rectangle.top} For top edge position\n * @see {@link Rectangle.height} For height value\n */\n get bottom() {\n return this.y + this.height;\n }\n /**\n * Determines whether the Rectangle is empty (has no area).\n * @example\n * ```ts\n * // Check zero dimensions\n * const rect = new Rectangle(100, 100, 0, 50);\n * console.log(rect.isEmpty()); // true\n * ```\n * @returns True if the rectangle has no area\n * @see {@link Rectangle.width} For width value\n * @see {@link Rectangle.height} For height value\n */\n isEmpty() {\n return this.left === this.right || this.top === this.bottom;\n }\n /**\n * A constant empty rectangle. This is a new object every time the property is accessed.\n * @example\n * ```ts\n * // Get fresh empty rectangle\n * const empty = Rectangle.EMPTY;\n * console.log(empty.isEmpty()); // true\n * ```\n * @returns A new empty rectangle instance\n * @see {@link Rectangle.isEmpty} For empty state testing\n */\n static get EMPTY() {\n return new Rectangle(0, 0, 0, 0);\n }\n /**\n * Creates a clone of this Rectangle\n * @example\n * ```ts\n * // Basic cloning\n * const original = new Rectangle(100, 100, 200, 150);\n * const copy = original.clone();\n *\n * // Clone and modify\n * const modified = original.clone();\n * modified.width *= 2;\n * modified.height += 50;\n *\n * // Verify independence\n * console.log(original.width); // 200\n * console.log(modified.width); // 400\n * ```\n * @returns A copy of the rectangle\n * @see {@link Rectangle.copyFrom} For copying into existing rectangle\n * @see {@link Rectangle.copyTo} For copying to another rectangle\n */\n clone() {\n return new Rectangle(this.x, this.y, this.width, this.height);\n }\n /**\n * Converts a Bounds object to a Rectangle object.\n * @example\n * ```ts\n * // Convert bounds to rectangle\n * const bounds = container.getBounds();\n * const rect = new Rectangle().copyFromBounds(bounds);\n * ```\n * @param bounds - The bounds to copy and convert to a rectangle\n * @returns Returns itself\n * @see {@link Bounds} For bounds object structure\n * @see {@link Rectangle.getBounds} For getting rectangle bounds\n */\n copyFromBounds(bounds) {\n this.x = bounds.minX;\n this.y = bounds.minY;\n this.width = bounds.maxX - bounds.minX;\n this.height = bounds.maxY - bounds.minY;\n return this;\n }\n /**\n * Copies another rectangle to this one.\n * @example\n * ```ts\n * // Basic copying\n * const source = new Rectangle(100, 100, 200, 150);\n * const target = new Rectangle();\n * target.copyFrom(source);\n *\n * // Chain with other operations\n * const rect = new Rectangle()\n * .copyFrom(source)\n * .pad(10);\n * ```\n * @param rectangle - The rectangle to copy from\n * @returns Returns itself\n * @see {@link Rectangle.copyTo} For copying to another rectangle\n * @see {@link Rectangle.clone} For creating new rectangle copy\n */\n copyFrom(rectangle) {\n this.x = rectangle.x;\n this.y = rectangle.y;\n this.width = rectangle.width;\n this.height = rectangle.height;\n return this;\n }\n /**\n * Copies this rectangle to another one.\n * @example\n * ```ts\n * // Basic copying\n * const source = new Rectangle(100, 100, 200, 150);\n * const target = new Rectangle();\n * source.copyTo(target);\n *\n * // Chain with other operations\n * const result = source\n * .copyTo(new Rectangle())\n * .getBounds();\n * ```\n * @param rectangle - The rectangle to copy to\n * @returns Returns given parameter\n * @see {@link Rectangle.copyFrom} For copying from another rectangle\n * @see {@link Rectangle.clone} For creating new rectangle copy\n */\n copyTo(rectangle) {\n rectangle.copyFrom(this);\n return rectangle;\n }\n /**\n * Checks whether the x and y coordinates given are contained within this Rectangle\n * @example\n * ```ts\n * // Basic containment check\n * const rect = new Rectangle(100, 100, 200, 150);\n * const isInside = rect.contains(150, 125); // true\n * // Check edge cases\n * console.log(rect.contains(100, 100)); // true (on edge)\n * console.log(rect.contains(300, 250)); // false (outside)\n * ```\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @returns Whether the x/y coordinates are within this Rectangle\n * @see {@link Rectangle.containsRect} For rectangle containment\n * @see {@link Rectangle.strokeContains} For checking stroke intersection\n */\n contains(x, y) {\n if (this.width <= 0 || this.height <= 0) {\n return false;\n }\n if (x >= this.x && x < this.x + this.width) {\n if (y >= this.y && y < this.y + this.height) {\n return true;\n }\n }\n return false;\n }\n /**\n * Checks whether the x and y coordinates given are contained within this rectangle including the stroke.\n * @example\n * ```ts\n * // Basic stroke check\n * const rect = new Rectangle(100, 100, 200, 150);\n * const isOnStroke = rect.strokeContains(150, 100, 4); // 4px line width\n *\n * // Check with different alignments\n * const innerStroke = rect.strokeContains(150, 100, 4, 1); // Inside\n * const centerStroke = rect.strokeContains(150, 100, 4, 0.5); // Centered\n * const outerStroke = rect.strokeContains(150, 100, 4, 0); // Outside\n * ```\n * @param x - The X coordinate of the point to test\n * @param y - The Y coordinate of the point to test\n * @param strokeWidth - The width of the line to check\n * @param alignment - The alignment of the stroke (1 = inner, 0.5 = centered, 0 = outer)\n * @returns Whether the x/y coordinates are within this rectangle's stroke\n * @see {@link Rectangle.contains} For checking fill containment\n * @see {@link Rectangle.getBounds} For getting stroke bounds\n */\n strokeContains(x, y, strokeWidth, alignment = 0.5) {\n const { width, height } = this;\n if (width <= 0 || height <= 0) return false;\n const _x = this.x;\n const _y = this.y;\n const strokeWidthOuter = strokeWidth * (1 - alignment);\n const strokeWidthInner = strokeWidth - strokeWidthOuter;\n const outerLeft = _x - strokeWidthOuter;\n const outerRight = _x + width + strokeWidthOuter;\n const outerTop = _y - strokeWidthOuter;\n const outerBottom = _y + height + strokeWidthOuter;\n const innerLeft = _x + strokeWidthInner;\n const innerRight = _x + width - strokeWidthInner;\n const innerTop = _y + strokeWidthInner;\n const innerBottom = _y + height - strokeWidthInner;\n return x >= outerLeft && x <= outerRight && y >= outerTop && y <= outerBottom && !(x > innerLeft && x < innerRight && y > innerTop && y < innerBottom);\n }\n /**\n * Determines whether the `other` Rectangle transformed by `transform` intersects with `this` Rectangle object.\n * Returns true only if the area of the intersection is >0, this means that Rectangles\n * sharing a side are not overlapping. Another side effect is that an arealess rectangle\n * (width or height equal to zero) can't intersect any other rectangle.\n * @param {Rectangle} other - The Rectangle to intersect with `this`.\n * @param {Matrix} transform - The transformation matrix of `other`.\n * @returns {boolean} A value of `true` if the transformed `other` Rectangle intersects with `this`; otherwise `false`.\n */\n /**\n * Determines whether the `other` Rectangle transformed by `transform` intersects with `this` Rectangle object.\n *\n * Returns true only if the area of the intersection is greater than 0.\n * This means that rectangles sharing only a side are not considered intersecting.\n * @example\n * ```ts\n * // Basic intersection check\n * const rect1 = new Rectangle(0, 0, 100, 100);\n * const rect2 = new Rectangle(50, 50, 100, 100);\n * console.log(rect1.intersects(rect2)); // true\n *\n * // With transformation matrix\n * const matrix = new Matrix();\n * matrix.rotate(Math.PI / 4); // 45 degrees\n * console.log(rect1.intersects(rect2, matrix)); // Checks with rotation\n *\n * // Edge cases\n * const zeroWidth = new Rectangle(0, 0, 0, 100);\n * console.log(rect1.intersects(zeroWidth)); // false (no area)\n * ```\n * @remarks\n * - Returns true only if intersection area is > 0\n * - Rectangles sharing only a side are not intersecting\n * - Zero-area rectangles cannot intersect anything\n * - Supports optional transformation matrix\n * @param other - The Rectangle to intersect with `this`\n * @param transform - Optional transformation matrix of `other`\n * @returns True if the transformed `other` Rectangle intersects with `this`\n * @see {@link Rectangle.containsRect} For containment testing\n * @see {@link Rectangle.contains} For point testing\n */\n intersects(other, transform) {\n if (!transform) {\n const x02 = this.x < other.x ? other.x : this.x;\n const x12 = this.right > other.right ? other.right : this.right;\n if (x12 <= x02) {\n return false;\n }\n const y02 = this.y < other.y ? other.y : this.y;\n const y12 = this.bottom > other.bottom ? other.bottom : this.bottom;\n return y12 > y02;\n }\n const x0 = this.left;\n const x1 = this.right;\n const y0 = this.top;\n const y1 = this.bottom;\n if (x1 <= x0 || y1 <= y0) {\n return false;\n }\n const lt = tempPoints[0].set(other.left, other.top);\n const lb = tempPoints[1].set(other.left, other.bottom);\n const rt = tempPoints[2].set(other.right, other.top);\n const rb = tempPoints[3].set(other.right, other.bottom);\n if (rt.x <= lt.x || lb.y <= lt.y) {\n return false;\n }\n const s = Math.sign(transform.a * transform.d - transform.b * transform.c);\n if (s === 0) {\n return false;\n }\n transform.apply(lt, lt);\n transform.apply(lb, lb);\n transform.apply(rt, rt);\n transform.apply(rb, rb);\n if (Math.max(lt.x, lb.x, rt.x, rb.x) <= x0 || Math.min(lt.x, lb.x, rt.x, rb.x) >= x1 || Math.max(lt.y, lb.y, rt.y, rb.y) <= y0 || Math.min(lt.y, lb.y, rt.y, rb.y) >= y1) {\n return false;\n }\n const nx = s * (lb.y - lt.y);\n const ny = s * (lt.x - lb.x);\n const n00 = nx * x0 + ny * y0;\n const n10 = nx * x1 + ny * y0;\n const n01 = nx * x0 + ny * y1;\n const n11 = nx * x1 + ny * y1;\n if (Math.max(n00, n10, n01, n11) <= nx * lt.x + ny * lt.y || Math.min(n00, n10, n01, n11) >= nx * rb.x + ny * rb.y) {\n return false;\n }\n const mx = s * (lt.y - rt.y);\n const my = s * (rt.x - lt.x);\n const m00 = mx * x0 + my * y0;\n const m10 = mx * x1 + my * y0;\n const m01 = mx * x0 + my * y1;\n const m11 = mx * x1 + my * y1;\n if (Math.max(m00, m10, m01, m11) <= mx * lt.x + my * lt.y || Math.min(m00, m10, m01, m11) >= mx * rb.x + my * rb.y) {\n return false;\n }\n return true;\n }\n /**\n * Pads the rectangle making it grow in all directions.\n *\n * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n * @example\n * ```ts\n * // Basic padding\n * const rect = new Rectangle(100, 100, 200, 150);\n * rect.pad(10); // Adds 10px padding on all sides\n *\n * // Different horizontal and vertical padding\n * const uiRect = new Rectangle(0, 0, 100, 50);\n * uiRect.pad(20, 10); // 20px horizontal, 10px vertical\n * ```\n * @remarks\n * - Adjusts x/y by subtracting padding\n * - Increases width/height by padding * 2\n * - Common in UI layout calculations\n * - Chainable with other methods\n * @param paddingX - The horizontal padding amount\n * @param paddingY - The vertical padding amount\n * @returns Returns itself\n * @see {@link Rectangle.enlarge} For growing to include another rectangle\n * @see {@link Rectangle.fit} For shrinking to fit within another rectangle\n */\n pad(paddingX = 0, paddingY = paddingX) {\n this.x -= paddingX;\n this.y -= paddingY;\n this.width += paddingX * 2;\n this.height += paddingY * 2;\n return this;\n }\n /**\n * Fits this rectangle around the passed one.\n * @example\n * ```ts\n * // Basic fitting\n * const container = new Rectangle(0, 0, 100, 100);\n * const content = new Rectangle(25, 25, 200, 200);\n * content.fit(container); // Clips to container bounds\n * ```\n * @param rectangle - The rectangle to fit around\n * @returns Returns itself\n * @see {@link Rectangle.enlarge} For growing to include another rectangle\n * @see {@link Rectangle.pad} For adding padding around the rectangle\n */\n fit(rectangle) {\n const x1 = Math.max(this.x, rectangle.x);\n const x2 = Math.min(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.max(this.y, rectangle.y);\n const y2 = Math.min(this.y + this.height, rectangle.y + rectangle.height);\n this.x = x1;\n this.width = Math.max(x2 - x1, 0);\n this.y = y1;\n this.height = Math.max(y2 - y1, 0);\n return this;\n }\n /**\n * Enlarges rectangle so that its corners lie on a grid defined by resolution.\n * @example\n * ```ts\n * // Basic grid alignment\n * const rect = new Rectangle(10.2, 10.6, 100.8, 100.4);\n * rect.ceil(); // Aligns to whole pixels\n *\n * // Custom resolution grid\n * const uiRect = new Rectangle(5.3, 5.7, 50.2, 50.8);\n * uiRect.ceil(0.5); // Aligns to half pixels\n *\n * // Use with precision value\n * const preciseRect = new Rectangle(20.001, 20.999, 100.001, 100.999);\n * preciseRect.ceil(1, 0.01); // Handles small decimal variations\n * ```\n * @param resolution - The grid size to align to (1 = whole pixels)\n * @param eps - Small number to prevent floating point errors\n * @returns Returns itself\n * @see {@link Rectangle.fit} For constraining to bounds\n * @see {@link Rectangle.enlarge} For growing dimensions\n */\n ceil(resolution = 1, eps = 1e-3) {\n const x2 = Math.ceil((this.x + this.width - eps) * resolution) / resolution;\n const y2 = Math.ceil((this.y + this.height - eps) * resolution) / resolution;\n this.x = Math.floor((this.x + eps) * resolution) / resolution;\n this.y = Math.floor((this.y + eps) * resolution) / resolution;\n this.width = x2 - this.x;\n this.height = y2 - this.y;\n return this;\n }\n /**\n * Scales the rectangle's dimensions and position by the specified factors.\n * @example\n * ```ts\n * const rect = new Rectangle(50, 50, 100, 100);\n *\n * // Scale uniformly\n * rect.scale(0.5, 0.5);\n * // rect is now: x=25, y=25, width=50, height=50\n *\n * // non-uniformly\n * rect.scale(0.5, 1);\n * // rect is now: x=25, y=50, width=50, height=100\n * ```\n * @param x - The factor by which to scale the horizontal properties (x, width).\n * @param y - The factor by which to scale the vertical properties (y, height).\n * @returns Returns itself\n */\n scale(x, y = x) {\n this.x *= x;\n this.y *= y;\n this.width *= x;\n this.height *= y;\n return this;\n }\n /**\n * Enlarges this rectangle to include the passed rectangle.\n * @example\n * ```ts\n * // Basic enlargement\n * const rect = new Rectangle(50, 50, 100, 100);\n * const other = new Rectangle(0, 0, 200, 75);\n * rect.enlarge(other);\n * // rect is now: x=0, y=0, width=200, height=150\n *\n * // Use for bounding box calculation\n * const bounds = new Rectangle();\n * objects.forEach((obj) => {\n * bounds.enlarge(obj.getBounds());\n * });\n * ```\n * @param rectangle - The rectangle to include\n * @returns Returns itself\n * @see {@link Rectangle.fit} For shrinking to fit within another rectangle\n * @see {@link Rectangle.pad} For adding padding around the rectangle\n */\n enlarge(rectangle) {\n const x1 = Math.min(this.x, rectangle.x);\n const x2 = Math.max(this.x + this.width, rectangle.x + rectangle.width);\n const y1 = Math.min(this.y, rectangle.y);\n const y2 = Math.max(this.y + this.height, rectangle.y + rectangle.height);\n this.x = x1;\n this.width = x2 - x1;\n this.y = y1;\n this.height = y2 - y1;\n return this;\n }\n /**\n * Returns the framing rectangle of the rectangle as a Rectangle object\n * @example\n * ```ts\n * // Basic bounds retrieval\n * const rect = new Rectangle(100, 100, 200, 150);\n * const bounds = rect.getBounds();\n *\n * // Reuse existing rectangle\n * const out = new Rectangle();\n * rect.getBounds(out);\n * ```\n * @param out - Optional rectangle to store the result\n * @returns The framing rectangle\n * @see {@link Rectangle.copyFrom} For direct copying\n * @see {@link Rectangle.clone} For creating new copy\n */\n getBounds(out) {\n out || (out = new Rectangle());\n out.copyFrom(this);\n return out;\n }\n /**\n * Determines whether another Rectangle is fully contained within this Rectangle.\n *\n * Rectangles that occupy the same space are considered to be containing each other.\n *\n * Rectangles without area (width or height equal to zero) can't contain anything,\n * not even other arealess rectangles.\n * @example\n * ```ts\n * // Check if one rectangle contains another\n * const container = new Rectangle(0, 0, 100, 100);\n * const inner = new Rectangle(25, 25, 50, 50);\n *\n * console.log(container.containsRect(inner)); // true\n *\n * // Check overlapping rectangles\n * const partial = new Rectangle(75, 75, 50, 50);\n * console.log(container.containsRect(partial)); // false\n *\n * // Zero-area rectangles\n * const empty = new Rectangle(0, 0, 0, 100);\n * console.log(container.containsRect(empty)); // false\n * ```\n * @param other - The Rectangle to check for containment\n * @returns True if other is fully contained within this Rectangle\n * @see {@link Rectangle.contains} For point containment\n * @see {@link Rectangle.intersects} For overlap testing\n */\n containsRect(other) {\n if (this.width <= 0 || this.height <= 0) return false;\n const x1 = other.x;\n const y1 = other.y;\n const x2 = other.x + other.width;\n const y2 = other.y + other.height;\n return x1 >= this.x && x1 < this.x + this.width && y1 >= this.y && y1 < this.y + this.height && x2 >= this.x && x2 < this.x + this.width && y2 >= this.y && y2 < this.y + this.height;\n }\n /**\n * Sets the position and dimensions of the rectangle.\n * @example\n * ```ts\n * // Basic usage\n * const rect = new Rectangle();\n * rect.set(100, 100, 200, 150);\n *\n * // Chain with other operations\n * const bounds = new Rectangle()\n * .set(0, 0, 100, 100)\n * .pad(10);\n * ```\n * @param x - The X coordinate of the upper-left corner of the rectangle\n * @param y - The Y coordinate of the upper-left corner of the rectangle\n * @param width - The overall width of the rectangle\n * @param height - The overall height of the rectangle\n * @returns Returns itself for method chaining\n * @see {@link Rectangle.copyFrom} For copying from another rectangle\n * @see {@link Rectangle.clone} For creating a new copy\n */\n set(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n return this;\n }\n toString() {\n return `[pixi.js/math:Rectangle x=${this.x} y=${this.y} width=${this.width} height=${this.height}]`;\n }\n}\n\nexport { Rectangle };\n//# sourceMappingURL=Rectangle.mjs.map\n","\"use strict\";\nconst uidCache = {\n default: -1\n};\nfunction uid(name = \"default\") {\n if (uidCache[name] === void 0) {\n uidCache[name] = -1;\n }\n return ++uidCache[name];\n}\nfunction resetUids() {\n for (const key in uidCache) {\n delete uidCache[key];\n }\n}\n\nexport { resetUids, uid };\n//# sourceMappingURL=uid.mjs.map\n","\"use strict\";\nconst warnings = /* @__PURE__ */ new Set();\nconst v8_0_0 = \"8.0.0\";\nconst v8_3_4 = \"8.3.4\";\nconst deprecationState = {\n quiet: false,\n noColor: false\n};\nconst deprecation = ((version, message, ignoreDepth = 3) => {\n if (deprecationState.quiet || warnings.has(message)) return;\n let stack = new Error().stack;\n const deprecationMessage = `${message}\nDeprecated since v${version}`;\n const useGroup = typeof console.groupCollapsed === \"function\" && !deprecationState.noColor;\n if (typeof stack === \"undefined\") {\n console.warn(\"PixiJS Deprecation Warning: \", deprecationMessage);\n } else {\n stack = stack.split(\"\\n\").splice(ignoreDepth).join(\"\\n\");\n if (useGroup) {\n console.groupCollapsed(\n \"%cPixiJS Deprecation Warning: %c%s\",\n \"color:#614108;background:#fffbe6\",\n \"font-weight:normal;color:#614108;background:#fffbe6\",\n deprecationMessage\n );\n console.warn(stack);\n console.groupEnd();\n } else {\n console.warn(\"PixiJS Deprecation Warning: \", deprecationMessage);\n console.warn(stack);\n }\n }\n warnings.add(message);\n});\nObject.defineProperties(deprecation, {\n quiet: {\n get: () => deprecationState.quiet,\n set: (value) => {\n deprecationState.quiet = value;\n },\n enumerable: true,\n configurable: false\n },\n noColor: {\n get: () => deprecationState.noColor,\n set: (value) => {\n deprecationState.noColor = value;\n },\n enumerable: true,\n configurable: false\n }\n});\n\nexport { deprecation, v8_0_0, v8_3_4 };\n//# sourceMappingURL=deprecation.mjs.map\n","\"use strict\";\nconst NOOP = () => {\n};\n\nexport { NOOP };\n//# sourceMappingURL=NOOP.mjs.map\n","\"use strict\";\nfunction nextPow2(v) {\n v += v === 0 ? 1 : 0;\n --v;\n v |= v >>> 1;\n v |= v >>> 2;\n v |= v >>> 4;\n v |= v >>> 8;\n v |= v >>> 16;\n return v + 1;\n}\nfunction isPow2(v) {\n return !(v & v - 1) && !!v;\n}\nfunction log2(v) {\n let r = (v > 65535 ? 1 : 0) << 4;\n v >>>= r;\n let shift = (v > 255 ? 1 : 0) << 3;\n v >>>= shift;\n r |= shift;\n shift = (v > 15 ? 1 : 0) << 2;\n v >>>= shift;\n r |= shift;\n shift = (v > 3 ? 1 : 0) << 1;\n v >>>= shift;\n r |= shift;\n return r | v >> 1;\n}\n\nexport { isPow2, log2, nextPow2 };\n//# sourceMappingURL=pow2.mjs.map\n","\"use strict\";\nfunction definedProps(obj) {\n const result = {};\n for (const key in obj) {\n if (obj[key] !== void 0) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\nexport { definedProps };\n//# sourceMappingURL=definedProps.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { uid } from '../../../../utils/data/uid.mjs';\nimport { deprecation, v8_0_0 } from '../../../../utils/logging/deprecation.mjs';\n\n\"use strict\";\nconst idHash = /* @__PURE__ */ Object.create(null);\nfunction createResourceIdFromString(value) {\n const id = idHash[value];\n if (id === void 0) {\n idHash[value] = uid(\"resource\");\n }\n return id;\n}\nconst _TextureStyle = class _TextureStyle extends EventEmitter {\n /**\n * @param options - options for the style\n */\n constructor(options = {}) {\n super();\n /** @internal */\n this._resourceType = \"textureSampler\";\n /** @internal */\n this._touched = 0;\n /**\n * Specifies the maximum anisotropy value clamp used by the sampler.\n * Note: Most implementations support {@link TextureStyle#maxAnisotropy} values in range\n * between 1 and 16, inclusive. The used value of {@link TextureStyle#maxAnisotropy} will\n * be clamped to the maximum value that the platform supports.\n * @internal\n */\n this._maxAnisotropy = 1;\n /**\n * Has the style been destroyed?\n * @readonly\n */\n this.destroyed = false;\n options = { ..._TextureStyle.defaultOptions, ...options };\n this.addressMode = options.addressMode;\n this.addressModeU = options.addressModeU ?? this.addressModeU;\n this.addressModeV = options.addressModeV ?? this.addressModeV;\n this.addressModeW = options.addressModeW ?? this.addressModeW;\n this.scaleMode = options.scaleMode;\n this.magFilter = options.magFilter ?? this.magFilter;\n this.minFilter = options.minFilter ?? this.minFilter;\n this.mipmapFilter = options.mipmapFilter ?? this.mipmapFilter;\n this.lodMinClamp = options.lodMinClamp;\n this.lodMaxClamp = options.lodMaxClamp;\n this.compare = options.compare;\n this.maxAnisotropy = options.maxAnisotropy ?? 1;\n }\n set addressMode(value) {\n this.addressModeU = value;\n this.addressModeV = value;\n this.addressModeW = value;\n }\n /** setting this will set wrapModeU,wrapModeV and wrapModeW all at once! */\n get addressMode() {\n return this.addressModeU;\n }\n set wrapMode(value) {\n deprecation(v8_0_0, \"TextureStyle.wrapMode is now TextureStyle.addressMode\");\n this.addressMode = value;\n }\n get wrapMode() {\n return this.addressMode;\n }\n set scaleMode(value) {\n this.magFilter = value;\n this.minFilter = value;\n this.mipmapFilter = value;\n }\n /** setting this will set magFilter,minFilter and mipmapFilter all at once! */\n get scaleMode() {\n return this.magFilter;\n }\n /** Specifies the maximum anisotropy value clamp used by the sampler. */\n set maxAnisotropy(value) {\n this._maxAnisotropy = Math.min(value, 16);\n if (this._maxAnisotropy > 1) {\n this.scaleMode = \"linear\";\n }\n }\n get maxAnisotropy() {\n return this._maxAnisotropy;\n }\n // TODO - move this to WebGL?\n get _resourceId() {\n return this._sharedResourceId || this._generateResourceId();\n }\n update() {\n this._sharedResourceId = null;\n this.emit(\"change\", this);\n }\n _generateResourceId() {\n const bigKey = `${this.addressModeU}-${this.addressModeV}-${this.addressModeW}-${this.magFilter}-${this.minFilter}-${this.mipmapFilter}-${this.lodMinClamp}-${this.lodMaxClamp}-${this.compare}-${this._maxAnisotropy}`;\n this._sharedResourceId = createResourceIdFromString(bigKey);\n return this._resourceId;\n }\n /** Destroys the style */\n destroy() {\n this.destroyed = true;\n this.emit(\"destroy\", this);\n this.emit(\"change\", this);\n this.removeAllListeners();\n }\n};\n/** default options for the style */\n_TextureStyle.defaultOptions = {\n addressMode: \"clamp-to-edge\",\n scaleMode: \"linear\"\n};\nlet TextureStyle = _TextureStyle;\n\nexport { TextureStyle };\n//# sourceMappingURL=TextureStyle.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { isPow2 } from '../../../../../maths/misc/pow2.mjs';\nimport { definedProps } from '../../../../../scene/container/utils/definedProps.mjs';\nimport { uid } from '../../../../../utils/data/uid.mjs';\nimport { TextureStyle } from '../TextureStyle.mjs';\n\n\"use strict\";\nconst _TextureSource = class _TextureSource extends EventEmitter {\n /**\n * @param options - options for creating a new TextureSource\n */\n constructor(options = {}) {\n super();\n this.options = options;\n /** @internal */\n this._gpuData = /* @__PURE__ */ Object.create(null);\n /** @internal */\n this._gcLastUsed = -1;\n /** unique id for this Texture source */\n this.uid = uid(\"textureSource\");\n /**\n * The resource type used by this TextureSource. This is used by the bind groups to determine\n * how to handle this resource.\n * @internal\n */\n this._resourceType = \"textureSource\";\n /**\n * i unique resource id, used by the bind group systems.\n * This can change if the texture is resized or its resource changes\n * @internal\n */\n this._resourceId = uid(\"resource\");\n /**\n * this is how the backends know how to upload this texture to the GPU\n * It changes depending on the resource type. Classes that extend TextureSource\n * should override this property.\n * @internal\n */\n this.uploadMethodId = \"unknown\";\n /** @internal */\n this._resolution = 1;\n /** the pixel width of this texture source. This is the REAL pure number, not accounting resolution */\n this.pixelWidth = 1;\n /** the pixel height of this texture source. This is the REAL pure number, not accounting resolution */\n this.pixelHeight = 1;\n /**\n * the width of this texture source, accounting for resolution\n * eg pixelWidth 200, resolution 2, then width will be 100\n */\n this.width = 1;\n /**\n * the height of this texture source, accounting for resolution\n * eg pixelHeight 200, resolution 2, then height will be 100\n */\n this.height = 1;\n /**\n * The number of samples of a multisample texture. This is always 1 for non-multisample textures.\n * To enable multisample for a texture, set antialias to true\n * @internal\n */\n this.sampleCount = 1;\n /**\n * The number of mip levels to generate for this texture.\n * this is overridden if autoGenerateMipmaps is true. it is read only!\n */\n this.mipLevelCount = 1;\n /**\n * Should we auto generate mipmaps for this texture? This will automatically generate mipmaps\n * for this texture when uploading to the GPU. Mipmapped textures take up more memory, but\n * can look better when scaled down.\n *\n * For performance reasons, it is recommended to NOT use this with RenderTextures, as they are often updated every frame.\n * If you do, make sure to call `updateMipmaps` after you update the texture.\n */\n this.autoGenerateMipmaps = false;\n /** the format that the texture data has */\n this.format = \"rgba8unorm\";\n /** how many dimensions does this texture have? currently v8 only supports 2d */\n this.dimension = \"2d\";\n /** how this texture is viewed/sampled by shaders (WebGPU view dimension) */\n this.viewDimension = \"2d\";\n /** how many array layers this texture has (WebGPU depthOrArrayLayers) */\n this.arrayLayerCount = 1;\n /**\n * Only really affects RenderTextures.\n * Should we use antialiasing for this texture. It will look better, but may impact performance as a\n * Blit operation will be required to resolve the texture.\n */\n this.antialias = false;\n /**\n * Used by automatic texture Garbage Collection, stores last GC tick when it was bound\n * @protected\n */\n this._touched = 0;\n /**\n * Used by the batcher to build texture batches. faster to have the variable here!\n * @protected\n */\n this._batchTick = -1;\n /**\n * A temporary batch location for the texture batching. Here for performance reasons only!\n * @protected\n */\n this._textureBindLocation = -1;\n options = { ..._TextureSource.defaultOptions, ...options };\n this.label = options.label ?? \"\";\n this.resource = options.resource;\n this.autoGarbageCollect = options.autoGarbageCollect;\n this._resolution = options.resolution;\n if (options.width) {\n this.pixelWidth = options.width * this._resolution;\n } else {\n this.pixelWidth = this.resource ? this.resourceWidth ?? 1 : 1;\n }\n if (options.height) {\n this.pixelHeight = options.height * this._resolution;\n } else {\n this.pixelHeight = this.resource ? this.resourceHeight ?? 1 : 1;\n }\n this.width = this.pixelWidth / this._resolution;\n this.height = this.pixelHeight / this._resolution;\n this.format = options.format;\n this.dimension = options.dimensions;\n this.viewDimension = options.viewDimension ?? options.dimensions;\n this.arrayLayerCount = options.arrayLayerCount;\n this.mipLevelCount = options.mipLevelCount;\n this.autoGenerateMipmaps = options.autoGenerateMipmaps;\n this.sampleCount = options.sampleCount;\n this.antialias = options.antialias;\n this.alphaMode = options.alphaMode;\n this.style = new TextureStyle(definedProps(options));\n this.destroyed = false;\n this._refreshPOT();\n }\n /** returns itself */\n get source() {\n return this;\n }\n /** the style of the texture */\n get style() {\n return this._style;\n }\n set style(value) {\n if (this.style === value) return;\n this._style?.off(\"change\", this._onStyleChange, this);\n this._style = value;\n this._style?.on(\"change\", this._onStyleChange, this);\n this._onStyleChange();\n }\n /** Specifies the maximum anisotropy value clamp used by the sampler. */\n set maxAnisotropy(value) {\n this._style.maxAnisotropy = value;\n }\n get maxAnisotropy() {\n return this._style.maxAnisotropy;\n }\n /** setting this will set wrapModeU, wrapModeV and wrapModeW all at once! */\n get addressMode() {\n return this._style.addressMode;\n }\n set addressMode(value) {\n this._style.addressMode = value;\n }\n /** setting this will set wrapModeU, wrapModeV and wrapModeW all at once! */\n get repeatMode() {\n return this._style.addressMode;\n }\n set repeatMode(value) {\n this._style.addressMode = value;\n }\n /** Specifies the sampling behavior when the sample footprint is smaller than or equal to one texel. */\n get magFilter() {\n return this._style.magFilter;\n }\n set magFilter(value) {\n this._style.magFilter = value;\n }\n /** Specifies the sampling behavior when the sample footprint is larger than one texel. */\n get minFilter() {\n return this._style.minFilter;\n }\n set minFilter(value) {\n this._style.minFilter = value;\n }\n /** Specifies behavior for sampling between mipmap levels. */\n get mipmapFilter() {\n return this._style.mipmapFilter;\n }\n set mipmapFilter(value) {\n this._style.mipmapFilter = value;\n }\n /** Specifies the minimum and maximum levels of detail, respectively, used internally when sampling a texture. */\n get lodMinClamp() {\n return this._style.lodMinClamp;\n }\n set lodMinClamp(value) {\n this._style.lodMinClamp = value;\n }\n /** Specifies the minimum and maximum levels of detail, respectively, used internally when sampling a texture. */\n get lodMaxClamp() {\n return this._style.lodMaxClamp;\n }\n set lodMaxClamp(value) {\n this._style.lodMaxClamp = value;\n }\n _onStyleChange() {\n this.emit(\"styleChange\", this);\n }\n /** call this if you have modified the texture outside of the constructor */\n update() {\n if (this.resource) {\n const resolution = this._resolution;\n const didResize = this.resize(this.resourceWidth / resolution, this.resourceHeight / resolution);\n if (didResize) return;\n }\n this.emit(\"update\", this);\n }\n /** Destroys this texture source */\n destroy() {\n this.destroyed = true;\n this.unload();\n this.emit(\"destroy\", this);\n if (this._style) {\n this._style.destroy();\n this._style = null;\n }\n this.uploadMethodId = null;\n this.resource = null;\n this.removeAllListeners();\n }\n /**\n * This will unload the Texture source from the GPU. This will free up the GPU memory\n * As soon as it is required fore rendering, it will be re-uploaded.\n */\n unload() {\n this._resourceId = uid(\"resource\");\n this.emit(\"change\", this);\n this.emit(\"unload\", this);\n for (const key in this._gpuData) {\n this._gpuData[key]?.destroy?.();\n }\n this._gpuData = /* @__PURE__ */ Object.create(null);\n }\n /** the width of the resource. This is the REAL pure number, not accounting resolution */\n get resourceWidth() {\n const { resource } = this;\n return resource.naturalWidth || resource.videoWidth || resource.displayWidth || resource.width;\n }\n /** the height of the resource. This is the REAL pure number, not accounting resolution */\n get resourceHeight() {\n const { resource } = this;\n return resource.naturalHeight || resource.videoHeight || resource.displayHeight || resource.height;\n }\n /**\n * the resolution of the texture. Changing this number, will not change the number of pixels in the actual texture\n * but will the size of the texture when rendered.\n *\n * changing the resolution of this texture to 2 for example will make it appear twice as small when rendered (as pixel\n * density will have increased)\n */\n get resolution() {\n return this._resolution;\n }\n set resolution(resolution) {\n if (this._resolution === resolution) return;\n this._resolution = resolution;\n this.width = this.pixelWidth / resolution;\n this.height = this.pixelHeight / resolution;\n }\n /**\n * Resize the texture, this is handy if you want to use the texture as a render texture\n * @param width - the new width of the texture\n * @param height - the new height of the texture\n * @param resolution - the new resolution of the texture\n * @returns - if the texture was resized\n */\n resize(width, height, resolution) {\n resolution || (resolution = this._resolution);\n width || (width = this.width);\n height || (height = this.height);\n const newPixelWidth = Math.round(width * resolution);\n const newPixelHeight = Math.round(height * resolution);\n this.width = newPixelWidth / resolution;\n this.height = newPixelHeight / resolution;\n this._resolution = resolution;\n if (this.pixelWidth === newPixelWidth && this.pixelHeight === newPixelHeight) {\n return false;\n }\n this._refreshPOT();\n this.pixelWidth = newPixelWidth;\n this.pixelHeight = newPixelHeight;\n this.emit(\"resize\", this);\n this._resourceId = uid(\"resource\");\n this.emit(\"change\", this);\n return true;\n }\n /**\n * Lets the renderer know that this texture has been updated and its mipmaps should be re-generated.\n * This is only important for RenderTexture instances, as standard Texture instances will have their\n * mipmaps generated on upload. You should call this method after you make any change to the texture\n *\n * The reason for this is is can be quite expensive to update mipmaps for a texture. So by default,\n * We want you, the developer to specify when this action should happen.\n *\n * Generally you don't want to have mipmaps generated on Render targets that are changed every frame,\n */\n updateMipmaps() {\n if (this.autoGenerateMipmaps && this.mipLevelCount > 1) {\n this.emit(\"updateMipmaps\", this);\n }\n }\n set wrapMode(value) {\n this._style.wrapMode = value;\n }\n get wrapMode() {\n return this._style.wrapMode;\n }\n set scaleMode(value) {\n this._style.scaleMode = value;\n }\n /** setting this will set magFilter,minFilter and mipmapFilter all at once! */\n get scaleMode() {\n return this._style.scaleMode;\n }\n /**\n * Refresh check for isPowerOfTwo texture based on size\n * @private\n */\n _refreshPOT() {\n this.isPowerOfTwo = isPow2(this.pixelWidth) && isPow2(this.pixelHeight);\n }\n static test(_resource) {\n throw new Error(\"Unimplemented\");\n }\n};\n/** The default options used when creating a new TextureSource. override these to add your own defaults */\n_TextureSource.defaultOptions = {\n resolution: 1,\n format: \"bgra8unorm\",\n alphaMode: \"premultiply-alpha-on-upload\",\n dimensions: \"2d\",\n viewDimension: \"2d\",\n arrayLayerCount: 1,\n mipLevelCount: 1,\n autoGenerateMipmaps: false,\n sampleCount: 1,\n antialias: false,\n autoGarbageCollect: false\n};\nlet TextureSource = _TextureSource;\n\nexport { TextureSource };\n//# sourceMappingURL=TextureSource.mjs.map\n","import { ExtensionType } from '../../../../../extensions/Extensions.mjs';\nimport { TextureSource } from './TextureSource.mjs';\n\n\"use strict\";\nclass BufferImageSource extends TextureSource {\n constructor(options) {\n const buffer = options.resource || new Float32Array(options.width * options.height * 4);\n let format = options.format;\n if (!format) {\n if (buffer instanceof Float32Array) {\n format = \"rgba32float\";\n } else if (buffer instanceof Int32Array) {\n format = \"rgba32uint\";\n } else if (buffer instanceof Uint32Array) {\n format = \"rgba32uint\";\n } else if (buffer instanceof Int16Array) {\n format = \"rgba16uint\";\n } else if (buffer instanceof Uint16Array) {\n format = \"rgba16uint\";\n } else if (buffer instanceof Int8Array) {\n format = \"bgra8unorm\";\n } else {\n format = \"bgra8unorm\";\n }\n }\n super({\n ...options,\n resource: buffer,\n format\n });\n this.uploadMethodId = \"buffer\";\n }\n static test(resource) {\n return resource instanceof Int8Array || resource instanceof Uint8Array || resource instanceof Uint8ClampedArray || resource instanceof Int16Array || resource instanceof Uint16Array || resource instanceof Int32Array || resource instanceof Uint32Array || resource instanceof Float32Array;\n }\n}\nBufferImageSource.extension = ExtensionType.TextureSource;\n\nexport { BufferImageSource };\n//# sourceMappingURL=BufferImageSource.mjs.map\n","import { Matrix } from '../../../../maths/matrix/Matrix.mjs';\n\n\"use strict\";\nconst tempMat = new Matrix();\nclass TextureMatrix {\n /**\n * @param texture - observed texture\n * @param clampMargin - Changes frame clamping, 0.5 by default. Use -0.5 for extra border.\n */\n constructor(texture, clampMargin) {\n this.mapCoord = new Matrix();\n this.uClampFrame = new Float32Array(4);\n this.uClampOffset = new Float32Array(2);\n this._textureID = -1;\n this._updateID = 0;\n this.clampOffset = 0;\n if (typeof clampMargin === \"undefined\") {\n this.clampMargin = texture.width < 10 ? 0 : 0.5;\n } else {\n this.clampMargin = clampMargin;\n }\n this.isSimple = false;\n this.texture = texture;\n }\n /** Texture property. */\n get texture() {\n return this._texture;\n }\n set texture(value) {\n if (this.texture === value) return;\n this._texture?.removeListener(\"update\", this.update, this);\n this._texture = value;\n this._texture.addListener(\"update\", this.update, this);\n this.update();\n }\n /**\n * Multiplies uvs array to transform\n * @param uvs - mesh uvs\n * @param [out=uvs] - output\n * @returns - output\n */\n multiplyUvs(uvs, out) {\n if (out === void 0) {\n out = uvs;\n }\n const mat = this.mapCoord;\n for (let i = 0; i < uvs.length; i += 2) {\n const x = uvs[i];\n const y = uvs[i + 1];\n out[i] = x * mat.a + y * mat.c + mat.tx;\n out[i + 1] = x * mat.b + y * mat.d + mat.ty;\n }\n return out;\n }\n /**\n * Updates matrices if texture was changed\n * @returns - whether or not it was updated\n */\n update() {\n const tex = this._texture;\n this._updateID++;\n const uvs = tex.uvs;\n this.mapCoord.set(uvs.x1 - uvs.x0, uvs.y1 - uvs.y0, uvs.x3 - uvs.x0, uvs.y3 - uvs.y0, uvs.x0, uvs.y0);\n const orig = tex.orig;\n const trim = tex.trim;\n if (trim) {\n tempMat.set(\n orig.width / trim.width,\n 0,\n 0,\n orig.height / trim.height,\n -trim.x / trim.width,\n -trim.y / trim.height\n );\n this.mapCoord.append(tempMat);\n }\n const texBase = tex.source;\n const frame = this.uClampFrame;\n const margin = this.clampMargin / texBase._resolution;\n const offset = this.clampOffset / texBase._resolution;\n frame[0] = (tex.frame.x + margin + offset) / texBase.width;\n frame[1] = (tex.frame.y + margin + offset) / texBase.height;\n frame[2] = (tex.frame.x + tex.frame.width - margin + offset) / texBase.width;\n frame[3] = (tex.frame.y + tex.frame.height - margin + offset) / texBase.height;\n this.uClampOffset[0] = this.clampOffset / texBase.pixelWidth;\n this.uClampOffset[1] = this.clampOffset / texBase.pixelHeight;\n this.isSimple = tex.frame.width === texBase.width && tex.frame.height === texBase.height && tex.rotate === 0;\n return true;\n }\n}\n\nexport { TextureMatrix };\n//# sourceMappingURL=TextureMatrix.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { groupD8 } from '../../../../maths/matrix/groupD8.mjs';\nimport { Rectangle } from '../../../../maths/shapes/Rectangle.mjs';\nimport { uid } from '../../../../utils/data/uid.mjs';\nimport { deprecation, v8_0_0 } from '../../../../utils/logging/deprecation.mjs';\nimport { NOOP } from '../../../../utils/misc/NOOP.mjs';\nimport { BufferImageSource } from './sources/BufferImageSource.mjs';\nimport { TextureSource } from './sources/TextureSource.mjs';\nimport { TextureMatrix } from './TextureMatrix.mjs';\n\n\"use strict\";\nclass Texture extends EventEmitter {\n /**\n * @param {TextureOptions} options - Options for the texture\n */\n constructor({\n source,\n label,\n frame,\n orig,\n trim,\n defaultAnchor,\n defaultBorders,\n rotate,\n dynamic\n } = {}) {\n super();\n /** unique id for this texture */\n this.uid = uid(\"texture\");\n /** A uvs object based on the given frame and the texture source */\n this.uvs = { x0: 0, y0: 0, x1: 0, y1: 0, x2: 0, y2: 0, x3: 0, y3: 0 };\n /**\n * This is the area of the BaseTexture image to actually copy to the Canvas / WebGL when rendering,\n * irrespective of the actual frame size or placement (which can be influenced by trimmed texture atlases)\n */\n this.frame = new Rectangle();\n /**\n * Does this Texture have any frame data assigned to it?\n *\n * This mode is enabled automatically if no frame was passed inside constructor.\n *\n * In this mode texture is subscribed to baseTexture events, and fires `update` on any change.\n *\n * Beware, after loading or resize of baseTexture event can fired two times!\n * If you want more control, subscribe on baseTexture itself.\n * @example\n * texture.on('update', () => {});\n */\n this.noFrame = false;\n /**\n * Set to true if you plan on modifying the uvs of this texture.\n * When this is the case, sprites and other objects using the texture will\n * make sure to listen for changes to the uvs and update their vertices accordingly.\n */\n this.dynamic = false;\n /** is it a texture? yes! used for type checking */\n this.isTexture = true;\n this.label = label;\n this.source = source?.source ?? new TextureSource();\n this.noFrame = !frame;\n if (frame) {\n this.frame.copyFrom(frame);\n } else {\n const { width, height } = this._source;\n this.frame.width = width;\n this.frame.height = height;\n }\n this.orig = orig || this.frame;\n this.trim = trim;\n this.rotate = rotate ?? 0;\n this.defaultAnchor = defaultAnchor;\n this.defaultBorders = defaultBorders;\n this.destroyed = false;\n this.dynamic = dynamic || false;\n this.updateUvs();\n }\n set source(value) {\n if (this._source) {\n this._source.off(\"resize\", this.update, this);\n }\n this._source = value;\n value.on(\"resize\", this.update, this);\n this.emit(\"update\", this);\n }\n /** the underlying source of the texture (equivalent of baseTexture in v7) */\n get source() {\n return this._source;\n }\n /** returns a TextureMatrix instance for this texture. By default, that object is not created because its heavy. */\n get textureMatrix() {\n if (!this._textureMatrix) {\n this._textureMatrix = new TextureMatrix(this);\n }\n return this._textureMatrix;\n }\n /** The width of the Texture in pixels. */\n get width() {\n return this.orig.width;\n }\n /** The height of the Texture in pixels. */\n get height() {\n return this.orig.height;\n }\n /** Call this function when you have modified the frame of this texture. */\n updateUvs() {\n const { uvs, frame } = this;\n const { width, height } = this._source;\n const nX = frame.x / width;\n const nY = frame.y / height;\n const nW = frame.width / width;\n const nH = frame.height / height;\n let rotate = this.rotate;\n if (rotate) {\n const w2 = nW / 2;\n const h2 = nH / 2;\n const cX = nX + w2;\n const cY = nY + h2;\n rotate = groupD8.add(rotate, groupD8.NW);\n uvs.x0 = cX + w2 * groupD8.uX(rotate);\n uvs.y0 = cY + h2 * groupD8.uY(rotate);\n rotate = groupD8.add(rotate, 2);\n uvs.x1 = cX + w2 * groupD8.uX(rotate);\n uvs.y1 = cY + h2 * groupD8.uY(rotate);\n rotate = groupD8.add(rotate, 2);\n uvs.x2 = cX + w2 * groupD8.uX(rotate);\n uvs.y2 = cY + h2 * groupD8.uY(rotate);\n rotate = groupD8.add(rotate, 2);\n uvs.x3 = cX + w2 * groupD8.uX(rotate);\n uvs.y3 = cY + h2 * groupD8.uY(rotate);\n } else {\n uvs.x0 = nX;\n uvs.y0 = nY;\n uvs.x1 = nX + nW;\n uvs.y1 = nY;\n uvs.x2 = nX + nW;\n uvs.y2 = nY + nH;\n uvs.x3 = nX;\n uvs.y3 = nY + nH;\n }\n }\n /**\n * Destroys this texture\n * @param destroySource - Destroy the source when the texture is destroyed.\n */\n destroy(destroySource = false) {\n if (this._source) {\n this._source.off(\"resize\", this.update, this);\n if (destroySource) {\n this._source.destroy();\n this._source = null;\n }\n }\n this._textureMatrix = null;\n this.destroyed = true;\n this.emit(\"destroy\", this);\n this.removeAllListeners();\n }\n /**\n * Call this if you have modified the `texture outside` of the constructor.\n *\n * If you have modified this texture's source, you must separately call `texture.source.update()` to see those changes.\n */\n update() {\n if (this.noFrame) {\n this.frame.width = this._source.width;\n this.frame.height = this._source.height;\n }\n this.updateUvs();\n this.emit(\"update\", this);\n }\n /** @deprecated since 8.0.0 */\n get baseTexture() {\n deprecation(v8_0_0, \"Texture.baseTexture is now Texture.source\");\n return this._source;\n }\n}\nTexture.EMPTY = new Texture({\n label: \"EMPTY\",\n source: new TextureSource({\n label: \"EMPTY\"\n })\n});\nTexture.EMPTY.destroy = NOOP;\nTexture.WHITE = new Texture({\n source: new BufferImageSource({\n resource: new Uint8Array([255, 255, 255, 255]),\n width: 1,\n height: 1,\n alphaMode: \"premultiply-alpha-on-upload\",\n label: \"WHITE\"\n }),\n label: \"WHITE\"\n});\nTexture.WHITE.destroy = NOOP;\n\nexport { Texture };\n//# sourceMappingURL=Texture.mjs.map\n","\"use strict\";\nfunction updateQuadBounds(bounds, anchor, texture) {\n const { width, height } = texture.orig;\n const trim = texture.trim;\n if (trim) {\n const sourceWidth = trim.width;\n const sourceHeight = trim.height;\n bounds.minX = trim.x - anchor._x * width;\n bounds.maxX = bounds.minX + sourceWidth;\n bounds.minY = trim.y - anchor._y * height;\n bounds.maxY = bounds.minY + sourceHeight;\n } else {\n bounds.minX = -anchor._x * width;\n bounds.maxX = bounds.minX + width;\n bounds.minY = -anchor._y * height;\n bounds.maxY = bounds.minY + height;\n }\n}\n\nexport { updateQuadBounds };\n//# sourceMappingURL=updateQuadBounds.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { Rectangle } from '../../../maths/shapes/Rectangle.mjs';\n\n\"use strict\";\nconst defaultMatrix = new Matrix();\nclass Bounds {\n /**\n * Creates a new Bounds object.\n * @param minX - The minimum X coordinate of the bounds.\n * @param minY - The minimum Y coordinate of the bounds.\n * @param maxX - The maximum X coordinate of the bounds.\n * @param maxY - The maximum Y coordinate of the bounds.\n */\n constructor(minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity) {\n /**\n * The minimum X coordinate of the bounds.\n * Represents the leftmost edge of the bounding box.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * // Set left edge\n * bounds.minX = 100;\n * ```\n * @default Infinity\n */\n this.minX = Infinity;\n /**\n * The minimum Y coordinate of the bounds.\n * Represents the topmost edge of the bounding box.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * // Set top edge\n * bounds.minY = 100;\n * ```\n * @default Infinity\n */\n this.minY = Infinity;\n /**\n * The maximum X coordinate of the bounds.\n * Represents the rightmost edge of the bounding box.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * // Set right edge\n * bounds.maxX = 200;\n * // Get width\n * const width = bounds.maxX - bounds.minX;\n * ```\n * @default -Infinity\n */\n this.maxX = -Infinity;\n /**\n * The maximum Y coordinate of the bounds.\n * Represents the bottommost edge of the bounding box.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * // Set bottom edge\n * bounds.maxY = 200;\n * // Get height\n * const height = bounds.maxY - bounds.minY;\n * ```\n * @default -Infinity\n */\n this.maxY = -Infinity;\n /**\n * The transformation matrix applied to this bounds object.\n * Used when calculating bounds with transforms.\n * @example\n * ```ts\n * const bounds = new Bounds();\n *\n * // Apply translation matrix\n * bounds.matrix = new Matrix()\n * .translate(100, 100);\n *\n * // Combine transformations\n * bounds.matrix = new Matrix()\n * .translate(50, 50)\n * .rotate(Math.PI / 4)\n * .scale(2, 2);\n *\n * // Use in bounds calculations\n * bounds.addFrame(0, 0, 100, 100); // Uses current matrix\n * bounds.addFrame(0, 0, 100, 100, customMatrix); // Override matrix\n * ```\n * @advanced\n */\n this.matrix = defaultMatrix;\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n /**\n * Checks if bounds are empty, meaning either width or height is zero or negative.\n * Empty bounds occur when min values exceed max values on either axis.\n * @example\n * ```ts\n * const bounds = new Bounds();\n *\n * // Check if newly created bounds are empty\n * console.log(bounds.isEmpty()); // true, default bounds are empty\n *\n * // Add frame and check again\n * bounds.addFrame(0, 0, 100, 100);\n * console.log(bounds.isEmpty()); // false, bounds now have area\n *\n * // Clear bounds\n * bounds.clear();\n * console.log(bounds.isEmpty()); // true, bounds are empty again\n * ```\n * @returns True if bounds are empty (have no area)\n * @see {@link Bounds#clear} For resetting bounds\n * @see {@link Bounds#isValid} For checking validity\n */\n isEmpty() {\n return this.minX > this.maxX || this.minY > this.maxY;\n }\n /**\n * The bounding rectangle representation of these bounds.\n * Lazily creates and updates a Rectangle instance based on the current bounds.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n *\n * // Get rectangle representation\n * const rect = bounds.rectangle;\n * console.log(rect.x, rect.y, rect.width, rect.height);\n *\n * // Use for hit testing\n * if (bounds.rectangle.contains(mouseX, mouseY)) {\n * console.log('Mouse is inside bounds!');\n * }\n * ```\n * @see {@link Rectangle} For rectangle methods\n * @see {@link Bounds.isEmpty} For bounds validation\n */\n get rectangle() {\n if (!this._rectangle) {\n this._rectangle = new Rectangle();\n }\n const rectangle = this._rectangle;\n if (this.minX > this.maxX || this.minY > this.maxY) {\n rectangle.x = 0;\n rectangle.y = 0;\n rectangle.width = 0;\n rectangle.height = 0;\n } else {\n rectangle.copyFromBounds(this);\n }\n return rectangle;\n }\n /**\n * Clears the bounds and resets all coordinates to their default values.\n * Resets the transformation matrix back to identity.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * console.log(bounds.isEmpty()); // false\n * // Clear the bounds\n * bounds.clear();\n * console.log(bounds.isEmpty()); // true\n * ```\n * @returns This bounds object for chaining\n */\n clear() {\n this.minX = Infinity;\n this.minY = Infinity;\n this.maxX = -Infinity;\n this.maxY = -Infinity;\n this.matrix = defaultMatrix;\n return this;\n }\n /**\n * Sets the bounds directly using coordinate values.\n * Provides a way to set all bounds values at once.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * bounds.set(0, 0, 100, 100);\n * ```\n * @param x0 - Left X coordinate of frame\n * @param y0 - Top Y coordinate of frame\n * @param x1 - Right X coordinate of frame\n * @param y1 - Bottom Y coordinate of frame\n * @see {@link Bounds#addFrame} For matrix-aware bounds setting\n * @see {@link Bounds#clear} For resetting bounds\n */\n set(x0, y0, x1, y1) {\n this.minX = x0;\n this.minY = y0;\n this.maxX = x1;\n this.maxY = y1;\n }\n /**\n * Adds a rectangular frame to the bounds, optionally transformed by a matrix.\n * Updates the bounds to encompass the new frame coordinates.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * bounds.addFrame(0, 0, 100, 100);\n *\n * // Add transformed frame\n * const matrix = new Matrix()\n * .translate(50, 50)\n * .rotate(Math.PI / 4);\n * bounds.addFrame(0, 0, 100, 100, matrix);\n * ```\n * @param x0 - Left X coordinate of frame\n * @param y0 - Top Y coordinate of frame\n * @param x1 - Right X coordinate of frame\n * @param y1 - Bottom Y coordinate of frame\n * @param matrix - Optional transformation matrix\n * @see {@link Bounds#addRect} For adding Rectangle objects\n * @see {@link Bounds#addBounds} For adding other Bounds\n */\n addFrame(x0, y0, x1, y1, matrix) {\n matrix || (matrix = this.matrix);\n const a = matrix.a;\n const b = matrix.b;\n const c = matrix.c;\n const d = matrix.d;\n const tx = matrix.tx;\n const ty = matrix.ty;\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n let x = a * x0 + c * y0 + tx;\n let y = b * x0 + d * y0 + ty;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n x = a * x1 + c * y0 + tx;\n y = b * x1 + d * y0 + ty;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n x = a * x0 + c * y1 + tx;\n y = b * x0 + d * y1 + ty;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n x = a * x1 + c * y1 + tx;\n y = b * x1 + d * y1 + ty;\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n /**\n * Adds a rectangle to the bounds, optionally transformed by a matrix.\n * Updates the bounds to encompass the given rectangle.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * // Add simple rectangle\n * const rect = new Rectangle(0, 0, 100, 100);\n * bounds.addRect(rect);\n *\n * // Add transformed rectangle\n * const matrix = new Matrix()\n * .translate(50, 50)\n * .rotate(Math.PI / 4);\n * bounds.addRect(rect, matrix);\n * ```\n * @param rect - The rectangle to be added\n * @param matrix - Optional transformation matrix\n * @see {@link Bounds#addFrame} For adding raw coordinates\n * @see {@link Bounds#addBounds} For adding other bounds\n */\n addRect(rect, matrix) {\n this.addFrame(rect.x, rect.y, rect.x + rect.width, rect.y + rect.height, matrix);\n }\n /**\n * Adds another bounds object to this one, optionally transformed by a matrix.\n * Expands the bounds to include the given bounds' area.\n * @example\n * ```ts\n * const bounds = new Bounds();\n *\n * // Add child bounds\n * const childBounds = sprite.getBounds();\n * bounds.addBounds(childBounds);\n *\n * // Add transformed bounds\n * const matrix = new Matrix()\n * .scale(2, 2);\n * bounds.addBounds(childBounds, matrix);\n * ```\n * @param bounds - The bounds to be added\n * @param matrix - Optional transformation matrix\n * @see {@link Bounds#addFrame} For adding raw coordinates\n * @see {@link Bounds#addRect} For adding rectangles\n */\n addBounds(bounds, matrix) {\n this.addFrame(bounds.minX, bounds.minY, bounds.maxX, bounds.maxY, matrix);\n }\n /**\n * Adds other Bounds as a mask, creating an intersection of the two bounds.\n * Only keeps the overlapping region between current bounds and mask bounds.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Create mask bounds\n * const mask = new Bounds();\n * mask.addFrame(50, 50, 150, 150);\n * // Apply mask - results in bounds of (50,50,100,100)\n * bounds.addBoundsMask(mask);\n * ```\n * @param mask - The Bounds to use as a mask\n * @see {@link Bounds#addBounds} For union operation\n * @see {@link Bounds#fit} For fitting to rectangle\n */\n addBoundsMask(mask) {\n this.minX = this.minX > mask.minX ? this.minX : mask.minX;\n this.minY = this.minY > mask.minY ? this.minY : mask.minY;\n this.maxX = this.maxX < mask.maxX ? this.maxX : mask.maxX;\n this.maxY = this.maxY < mask.maxY ? this.maxY : mask.maxY;\n }\n /**\n * Applies a transformation matrix to the bounds, updating its coordinates.\n * Transforms all corners of the bounds using the given matrix.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Apply translation\n * const translateMatrix = new Matrix()\n * .translate(50, 50);\n * bounds.applyMatrix(translateMatrix);\n * ```\n * @param matrix - The matrix to apply to the bounds\n * @see {@link Matrix} For matrix operations\n * @see {@link Bounds#addFrame} For adding transformed frames\n */\n applyMatrix(matrix) {\n const minX = this.minX;\n const minY = this.minY;\n const maxX = this.maxX;\n const maxY = this.maxY;\n const { a, b, c, d, tx, ty } = matrix;\n let x = a * minX + c * minY + tx;\n let y = b * minX + d * minY + ty;\n this.minX = x;\n this.minY = y;\n this.maxX = x;\n this.maxY = y;\n x = a * maxX + c * minY + tx;\n y = b * maxX + d * minY + ty;\n this.minX = x < this.minX ? x : this.minX;\n this.minY = y < this.minY ? y : this.minY;\n this.maxX = x > this.maxX ? x : this.maxX;\n this.maxY = y > this.maxY ? y : this.maxY;\n x = a * minX + c * maxY + tx;\n y = b * minX + d * maxY + ty;\n this.minX = x < this.minX ? x : this.minX;\n this.minY = y < this.minY ? y : this.minY;\n this.maxX = x > this.maxX ? x : this.maxX;\n this.maxY = y > this.maxY ? y : this.maxY;\n x = a * maxX + c * maxY + tx;\n y = b * maxX + d * maxY + ty;\n this.minX = x < this.minX ? x : this.minX;\n this.minY = y < this.minY ? y : this.minY;\n this.maxX = x > this.maxX ? x : this.maxX;\n this.maxY = y > this.maxY ? y : this.maxY;\n }\n /**\n * Resizes the bounds object to fit within the given rectangle.\n * Clips the bounds if they extend beyond the rectangle's edges.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 200, 200);\n * // Fit within viewport\n * const viewport = new Rectangle(50, 50, 100, 100);\n * bounds.fit(viewport);\n * // bounds are now (50, 50, 150, 150)\n * ```\n * @param rect - The rectangle to fit within\n * @returns This bounds object for chaining\n * @see {@link Bounds#addBoundsMask} For intersection\n * @see {@link Bounds#pad} For expanding bounds\n */\n fit(rect) {\n if (this.minX < rect.left) this.minX = rect.left;\n if (this.maxX > rect.right) this.maxX = rect.right;\n if (this.minY < rect.top) this.minY = rect.top;\n if (this.maxY > rect.bottom) this.maxY = rect.bottom;\n return this;\n }\n /**\n * Resizes the bounds object to include the given bounds.\n * Similar to fit() but works with raw coordinate values instead of a Rectangle.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 200, 200);\n * // Fit to specific coordinates\n * bounds.fitBounds(50, 150, 50, 150);\n * // bounds are now (50, 50, 150, 150)\n * ```\n * @param left - The left value of the bounds\n * @param right - The right value of the bounds\n * @param top - The top value of the bounds\n * @param bottom - The bottom value of the bounds\n * @returns This bounds object for chaining\n * @see {@link Bounds#fit} For fitting to Rectangle\n * @see {@link Bounds#addBoundsMask} For intersection\n */\n fitBounds(left, right, top, bottom) {\n if (this.minX < left) this.minX = left;\n if (this.maxX > right) this.maxX = right;\n if (this.minY < top) this.minY = top;\n if (this.maxY > bottom) this.maxY = bottom;\n return this;\n }\n /**\n * Pads bounds object, making it grow in all directions.\n * If paddingY is omitted, both paddingX and paddingY will be set to paddingX.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n *\n * // Add equal padding\n * bounds.pad(10);\n * // bounds are now (-10, -10, 110, 110)\n *\n * // Add different padding for x and y\n * bounds.pad(20, 10);\n * // bounds are now (-30, -20, 130, 120)\n * ```\n * @param paddingX - The horizontal padding amount\n * @param paddingY - The vertical padding amount\n * @returns This bounds object for chaining\n * @see {@link Bounds#fit} For constraining bounds\n * @see {@link Bounds#scale} For uniform scaling\n */\n pad(paddingX, paddingY = paddingX) {\n this.minX -= paddingX;\n this.maxX += paddingX;\n this.minY -= paddingY;\n this.maxY += paddingY;\n return this;\n }\n /**\n * Ceils the bounds by rounding up max values and rounding down min values.\n * Useful for pixel-perfect calculations and avoiding fractional pixels.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * bounds.set(10.2, 10.9, 50.1, 50.8);\n *\n * // Round to whole pixels\n * bounds.ceil();\n * // bounds are now (10, 10, 51, 51)\n * ```\n * @returns This bounds object for chaining\n * @see {@link Bounds#scale} For size adjustments\n * @see {@link Bounds#fit} For constraining bounds\n */\n ceil() {\n this.minX = Math.floor(this.minX);\n this.minY = Math.floor(this.minY);\n this.maxX = Math.ceil(this.maxX);\n this.maxY = Math.ceil(this.maxY);\n return this;\n }\n /**\n * Creates a new Bounds instance with the same values.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n *\n * // Create a copy\n * const copy = bounds.clone();\n *\n * // Original and copy are independent\n * bounds.pad(10);\n * console.log(copy.width === bounds.width); // false\n * ```\n * @returns A new Bounds instance with the same values\n * @see {@link Bounds#copyFrom} For reusing existing bounds\n */\n clone() {\n return new Bounds(this.minX, this.minY, this.maxX, this.maxY);\n }\n /**\n * Scales the bounds by the given values, adjusting all edges proportionally.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n *\n * // Scale uniformly\n * bounds.scale(2);\n * // bounds are now (0, 0, 200, 200)\n *\n * // Scale non-uniformly\n * bounds.scale(0.5, 2);\n * // bounds are now (0, 0, 100, 400)\n * ```\n * @param x - The X value to scale by\n * @param y - The Y value to scale by (defaults to x)\n * @returns This bounds object for chaining\n * @see {@link Bounds#pad} For adding padding\n * @see {@link Bounds#fit} For constraining size\n */\n scale(x, y = x) {\n this.minX *= x;\n this.minY *= y;\n this.maxX *= x;\n this.maxY *= y;\n return this;\n }\n /**\n * The x position of the bounds in local space.\n * Setting this value will move the bounds while maintaining its width.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Get x position\n * console.log(bounds.x); // 0\n *\n * // Move bounds horizontally\n * bounds.x = 50;\n * console.log(bounds.minX, bounds.maxX); // 50, 150\n *\n * // Width stays the same\n * console.log(bounds.width); // Still 100\n * ```\n */\n get x() {\n return this.minX;\n }\n set x(value) {\n const width = this.maxX - this.minX;\n this.minX = value;\n this.maxX = value + width;\n }\n /**\n * The y position of the bounds in local space.\n * Setting this value will move the bounds while maintaining its height.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Get y position\n * console.log(bounds.y); // 0\n *\n * // Move bounds vertically\n * bounds.y = 50;\n * console.log(bounds.minY, bounds.maxY); // 50, 150\n *\n * // Height stays the same\n * console.log(bounds.height); // Still 100\n * ```\n */\n get y() {\n return this.minY;\n }\n set y(value) {\n const height = this.maxY - this.minY;\n this.minY = value;\n this.maxY = value + height;\n }\n /**\n * The width value of the bounds.\n * Represents the distance between minX and maxX coordinates.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Get width\n * console.log(bounds.width); // 100\n * // Resize width\n * bounds.width = 200;\n * console.log(bounds.maxX - bounds.minX); // 200\n * ```\n */\n get width() {\n return this.maxX - this.minX;\n }\n set width(value) {\n this.maxX = this.minX + value;\n }\n /**\n * The height value of the bounds.\n * Represents the distance between minY and maxY coordinates.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Get height\n * console.log(bounds.height); // 100\n * // Resize height\n * bounds.height = 150;\n * console.log(bounds.maxY - bounds.minY); // 150\n * ```\n */\n get height() {\n return this.maxY - this.minY;\n }\n set height(value) {\n this.maxY = this.minY + value;\n }\n /**\n * The left edge coordinate of the bounds.\n * Alias for minX.\n * @example\n * ```ts\n * const bounds = new Bounds(50, 0, 150, 100);\n * console.log(bounds.left); // 50\n * console.log(bounds.left === bounds.minX); // true\n * ```\n * @readonly\n */\n get left() {\n return this.minX;\n }\n /**\n * The right edge coordinate of the bounds.\n * Alias for maxX.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * console.log(bounds.right); // 100\n * console.log(bounds.right === bounds.maxX); // true\n * ```\n * @readonly\n */\n get right() {\n return this.maxX;\n }\n /**\n * The top edge coordinate of the bounds.\n * Alias for minY.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 25, 100, 125);\n * console.log(bounds.top); // 25\n * console.log(bounds.top === bounds.minY); // true\n * ```\n * @readonly\n */\n get top() {\n return this.minY;\n }\n /**\n * The bottom edge coordinate of the bounds.\n * Alias for maxY.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 200);\n * console.log(bounds.bottom); // 200\n * console.log(bounds.bottom === bounds.maxY); // true\n * ```\n * @readonly\n */\n get bottom() {\n return this.maxY;\n }\n /**\n * Whether the bounds has positive width and height.\n * Checks if both dimensions are greater than zero.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Check if bounds are positive\n * console.log(bounds.isPositive); // true\n *\n * // Negative bounds\n * bounds.maxX = bounds.minX;\n * console.log(bounds.isPositive); // false, width is 0\n * ```\n * @readonly\n * @see {@link Bounds#isEmpty} For checking empty state\n * @see {@link Bounds#isValid} For checking validity\n */\n get isPositive() {\n return this.maxX - this.minX > 0 && this.maxY - this.minY > 0;\n }\n /**\n * Whether the bounds has valid coordinates.\n * Checks if the bounds has been initialized with real values.\n * @example\n * ```ts\n * const bounds = new Bounds();\n * console.log(bounds.isValid); // false, default state\n *\n * // Set valid bounds\n * bounds.addFrame(0, 0, 100, 100);\n * console.log(bounds.isValid); // true\n * ```\n * @readonly\n * @see {@link Bounds#isEmpty} For checking empty state\n * @see {@link Bounds#isPositive} For checking dimensions\n */\n get isValid() {\n return this.minX + this.minY !== Infinity;\n }\n /**\n * Adds vertices from a Float32Array to the bounds, optionally transformed by a matrix.\n * Used for efficiently updating bounds from raw vertex data.\n * @example\n * ```ts\n * const bounds = new Bounds();\n *\n * // Add vertices from geometry\n * const vertices = new Float32Array([\n * 0, 0, // Vertex 1\n * 100, 0, // Vertex 2\n * 100, 100 // Vertex 3\n * ]);\n * bounds.addVertexData(vertices, 0, 6);\n *\n * // Add transformed vertices\n * const matrix = new Matrix()\n * .translate(50, 50)\n * .rotate(Math.PI / 4);\n * bounds.addVertexData(vertices, 0, 6, matrix);\n *\n * // Add subset of vertices\n * bounds.addVertexData(vertices, 2, 4); // Only second vertex\n * ```\n * @param vertexData - The array of vertices to add\n * @param beginOffset - Starting index in the vertex array\n * @param endOffset - Ending index in the vertex array (excluded)\n * @param matrix - Optional transformation matrix\n * @see {@link Bounds#addFrame} For adding rectangular frames\n * @see {@link Matrix} For transformation details\n */\n addVertexData(vertexData, beginOffset, endOffset, matrix) {\n let minX = this.minX;\n let minY = this.minY;\n let maxX = this.maxX;\n let maxY = this.maxY;\n matrix || (matrix = this.matrix);\n const a = matrix.a;\n const b = matrix.b;\n const c = matrix.c;\n const d = matrix.d;\n const tx = matrix.tx;\n const ty = matrix.ty;\n for (let i = beginOffset; i < endOffset; i += 2) {\n const localX = vertexData[i];\n const localY = vertexData[i + 1];\n const x = a * localX + c * localY + tx;\n const y = b * localX + d * localY + ty;\n minX = x < minX ? x : minX;\n minY = y < minY ? y : minY;\n maxX = x > maxX ? x : maxX;\n maxY = y > maxY ? y : maxY;\n }\n this.minX = minX;\n this.minY = minY;\n this.maxX = maxX;\n this.maxY = maxY;\n }\n /**\n * Checks if a point is contained within the bounds.\n * Returns true if the point's coordinates fall within the bounds' area.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * // Basic point check\n * console.log(bounds.containsPoint(50, 50)); // true\n * console.log(bounds.containsPoint(150, 150)); // false\n *\n * // Check edges\n * console.log(bounds.containsPoint(0, 0)); // true, includes edges\n * console.log(bounds.containsPoint(100, 100)); // true, includes edges\n * ```\n * @param x - x coordinate to check\n * @param y - y coordinate to check\n * @returns True if the point is inside the bounds\n * @see {@link Bounds#isPositive} For valid bounds check\n * @see {@link Bounds#rectangle} For Rectangle representation\n */\n containsPoint(x, y) {\n if (this.minX <= x && this.minY <= y && this.maxX >= x && this.maxY >= y) {\n return true;\n }\n return false;\n }\n /**\n * Returns a string representation of the bounds.\n * Useful for debugging and logging bounds information.\n * @example\n * ```ts\n * const bounds = new Bounds(0, 0, 100, 100);\n * console.log(bounds.toString()); // \"[pixi.js:Bounds minX=0 minY=0 maxX=100 maxY=100 width=100 height=100]\"\n * ```\n * @returns A string describing the bounds\n * @see {@link Bounds#copyFrom} For copying bounds\n * @see {@link Bounds#clone} For creating a new instance\n */\n toString() {\n return `[pixi.js:Bounds minX=${this.minX} minY=${this.minY} maxX=${this.maxX} maxY=${this.maxY} width=${this.width} height=${this.height}]`;\n }\n /**\n * Copies the bounds from another bounds object.\n * Useful for reusing bounds objects and avoiding allocations.\n * @example\n * ```ts\n * const sourceBounds = new Bounds(0, 0, 100, 100);\n * // Copy bounds\n * const targetBounds = new Bounds();\n * targetBounds.copyFrom(sourceBounds);\n * ```\n * @param bounds - The bounds to copy from\n * @returns This bounds object for chaining\n * @see {@link Bounds#clone} For creating new instances\n */\n copyFrom(bounds) {\n this.minX = bounds.minX;\n this.minY = bounds.minY;\n this.maxX = bounds.maxX;\n this.maxY = bounds.maxY;\n return this;\n }\n}\n\nexport { Bounds };\n//# sourceMappingURL=Bounds.mjs.map\n","var r={grad:.9,turn:360,rad:360/(2*Math.PI)},t=function(r){return\"string\"==typeof r?r.length>0:\"number\"==typeof r},n=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=Math.pow(10,t)),Math.round(n*r)/n+0},e=function(r,t,n){return void 0===t&&(t=0),void 0===n&&(n=1),r>n?n:r>t?r:t},u=function(r){return(r=isFinite(r)?r%360:0)>0?r:r+360},a=function(r){return{r:e(r.r,0,255),g:e(r.g,0,255),b:e(r.b,0,255),a:e(r.a)}},o=function(r){return{r:n(r.r),g:n(r.g),b:n(r.b),a:n(r.a,3)}},i=/^#([0-9a-f]{3,8})$/i,s=function(r){var t=r.toString(16);return t.length<2?\"0\"+t:t},h=function(r){var t=r.r,n=r.g,e=r.b,u=r.a,a=Math.max(t,n,e),o=a-Math.min(t,n,e),i=o?a===t?(n-e)/o:a===n?2+(e-t)/o:4+(t-n)/o:0;return{h:60*(i<0?i+6:i),s:a?o/a*100:0,v:a/255*100,a:u}},b=function(r){var t=r.h,n=r.s,e=r.v,u=r.a;t=t/360*6,n/=100,e/=100;var a=Math.floor(t),o=e*(1-n),i=e*(1-(t-a)*n),s=e*(1-(1-t+a)*n),h=a%6;return{r:255*[e,i,o,o,s,e][h],g:255*[s,e,e,i,o,o][h],b:255*[o,o,s,e,e,i][h],a:u}},g=function(r){return{h:u(r.h),s:e(r.s,0,100),l:e(r.l,0,100),a:e(r.a)}},d=function(r){return{h:n(r.h),s:n(r.s),l:n(r.l),a:n(r.a,3)}},f=function(r){return b((n=(t=r).s,{h:t.h,s:(n*=((e=t.l)<50?e:100-e)/100)>0?2*n/(e+n)*100:0,v:e+n,a:t.a}));var t,n,e},c=function(r){return{h:(t=h(r)).h,s:(u=(200-(n=t.s))*(e=t.v)/100)>0&&u<200?n*e/100/(u<=100?u:200-u)*100:0,l:u/2,a:t.a};var t,n,e,u},l=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*,\\s*([+-]?\\d*\\.?\\d+)%\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,p=/^hsla?\\(\\s*([+-]?\\d*\\.?\\d+)(deg|rad|grad|turn)?\\s+([+-]?\\d*\\.?\\d+)%\\s+([+-]?\\d*\\.?\\d+)%\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,v=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*(?:,\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,m=/^rgba?\\(\\s*([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s+([+-]?\\d*\\.?\\d+)(%)?\\s*(?:\\/\\s*([+-]?\\d*\\.?\\d+)(%)?\\s*)?\\)$/i,y={string:[[function(r){var t=i.exec(r);return t?(r=t[1]).length<=4?{r:parseInt(r[0]+r[0],16),g:parseInt(r[1]+r[1],16),b:parseInt(r[2]+r[2],16),a:4===r.length?n(parseInt(r[3]+r[3],16)/255,2):1}:6===r.length||8===r.length?{r:parseInt(r.substr(0,2),16),g:parseInt(r.substr(2,2),16),b:parseInt(r.substr(4,2),16),a:8===r.length?n(parseInt(r.substr(6,2),16)/255,2):1}:null:null},\"hex\"],[function(r){var t=v.exec(r)||m.exec(r);return t?t[2]!==t[4]||t[4]!==t[6]?null:a({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:void 0===t[7]?1:Number(t[7])/(t[8]?100:1)}):null},\"rgb\"],[function(t){var n=l.exec(t)||p.exec(t);if(!n)return null;var e,u,a=g({h:(e=n[1],u=n[2],void 0===u&&(u=\"deg\"),Number(e)*(r[u]||1)),s:Number(n[3]),l:Number(n[4]),a:void 0===n[5]?1:Number(n[5])/(n[6]?100:1)});return f(a)},\"hsl\"]],object:[[function(r){var n=r.r,e=r.g,u=r.b,o=r.a,i=void 0===o?1:o;return t(n)&&t(e)&&t(u)?a({r:Number(n),g:Number(e),b:Number(u),a:Number(i)}):null},\"rgb\"],[function(r){var n=r.h,e=r.s,u=r.l,a=r.a,o=void 0===a?1:a;if(!t(n)||!t(e)||!t(u))return null;var i=g({h:Number(n),s:Number(e),l:Number(u),a:Number(o)});return f(i)},\"hsl\"],[function(r){var n=r.h,a=r.s,o=r.v,i=r.a,s=void 0===i?1:i;if(!t(n)||!t(a)||!t(o))return null;var h=function(r){return{h:u(r.h),s:e(r.s,0,100),v:e(r.v,0,100),a:e(r.a)}}({h:Number(n),s:Number(a),v:Number(o),a:Number(s)});return b(h)},\"hsv\"]]},N=function(r,t){for(var n=0;n<t.length;n++){var e=t[n][0](r);if(e)return[e,t[n][1]]}return[null,void 0]},x=function(r){return\"string\"==typeof r?N(r.trim(),y.string):\"object\"==typeof r&&null!==r?N(r,y.object):[null,void 0]},I=function(r){return x(r)[1]},M=function(r,t){var n=c(r);return{h:n.h,s:e(n.s+100*t,0,100),l:n.l,a:n.a}},H=function(r){return(299*r.r+587*r.g+114*r.b)/1e3/255},$=function(r,t){var n=c(r);return{h:n.h,s:n.s,l:e(n.l+100*t,0,100),a:n.a}},j=function(){function r(r){this.parsed=x(r)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return r.prototype.isValid=function(){return null!==this.parsed},r.prototype.brightness=function(){return n(H(this.rgba),2)},r.prototype.isDark=function(){return H(this.rgba)<.5},r.prototype.isLight=function(){return H(this.rgba)>=.5},r.prototype.toHex=function(){return r=o(this.rgba),t=r.r,e=r.g,u=r.b,i=(a=r.a)<1?s(n(255*a)):\"\",\"#\"+s(t)+s(e)+s(u)+i;var r,t,e,u,a,i},r.prototype.toRgb=function(){return o(this.rgba)},r.prototype.toRgbString=function(){return r=o(this.rgba),t=r.r,n=r.g,e=r.b,(u=r.a)<1?\"rgba(\"+t+\", \"+n+\", \"+e+\", \"+u+\")\":\"rgb(\"+t+\", \"+n+\", \"+e+\")\";var r,t,n,e,u},r.prototype.toHsl=function(){return d(c(this.rgba))},r.prototype.toHslString=function(){return r=d(c(this.rgba)),t=r.h,n=r.s,e=r.l,(u=r.a)<1?\"hsla(\"+t+\", \"+n+\"%, \"+e+\"%, \"+u+\")\":\"hsl(\"+t+\", \"+n+\"%, \"+e+\"%)\";var r,t,n,e,u},r.prototype.toHsv=function(){return r=h(this.rgba),{h:n(r.h),s:n(r.s),v:n(r.v),a:n(r.a,3)};var r},r.prototype.invert=function(){return w({r:255-(r=this.rgba).r,g:255-r.g,b:255-r.b,a:r.a});var r},r.prototype.saturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,r))},r.prototype.desaturate=function(r){return void 0===r&&(r=.1),w(M(this.rgba,-r))},r.prototype.grayscale=function(){return w(M(this.rgba,-1))},r.prototype.lighten=function(r){return void 0===r&&(r=.1),w($(this.rgba,r))},r.prototype.darken=function(r){return void 0===r&&(r=.1),w($(this.rgba,-r))},r.prototype.rotate=function(r){return void 0===r&&(r=15),this.hue(this.hue()+r)},r.prototype.alpha=function(r){return\"number\"==typeof r?w({r:(t=this.rgba).r,g:t.g,b:t.b,a:r}):n(this.rgba.a,3);var t},r.prototype.hue=function(r){var t=c(this.rgba);return\"number\"==typeof r?w({h:r,s:t.s,l:t.l,a:t.a}):n(t.h)},r.prototype.isEqual=function(r){return this.toHex()===w(r).toHex()},r}(),w=function(r){return r instanceof j?r:new j(r)},S=[],k=function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})},E=function(){return new j({r:255*Math.random(),g:255*Math.random(),b:255*Math.random()})};export{j as Colord,w as colord,k as extend,I as getFormat,E as random};\n","export default function(e,f){var a={white:\"#ffffff\",bisque:\"#ffe4c4\",blue:\"#0000ff\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",antiquewhite:\"#faebd7\",aqua:\"#00ffff\",azure:\"#f0ffff\",whitesmoke:\"#f5f5f5\",papayawhip:\"#ffefd5\",plum:\"#dda0dd\",blanchedalmond:\"#ffebcd\",black:\"#000000\",gold:\"#ffd700\",goldenrod:\"#daa520\",gainsboro:\"#dcdcdc\",cornsilk:\"#fff8dc\",cornflowerblue:\"#6495ed\",burlywood:\"#deb887\",aquamarine:\"#7fffd4\",beige:\"#f5f5dc\",crimson:\"#dc143c\",cyan:\"#00ffff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkkhaki:\"#bdb76b\",darkgray:\"#a9a9a9\",darkgreen:\"#006400\",darkgrey:\"#a9a9a9\",peachpuff:\"#ffdab9\",darkmagenta:\"#8b008b\",darkred:\"#8b0000\",darkorchid:\"#9932cc\",darkorange:\"#ff8c00\",darkslateblue:\"#483d8b\",gray:\"#808080\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",wheat:\"#f5deb3\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",ghostwhite:\"#f8f8ff\",darkviolet:\"#9400d3\",magenta:\"#ff00ff\",green:\"#008000\",dodgerblue:\"#1e90ff\",grey:\"#808080\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",blueviolet:\"#8a2be2\",forestgreen:\"#228b22\",lawngreen:\"#7cfc00\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",fuchsia:\"#ff00ff\",brown:\"#a52a2a\",maroon:\"#800000\",mediumblue:\"#0000cd\",lightcoral:\"#f08080\",darkturquoise:\"#00ced1\",lightcyan:\"#e0ffff\",ivory:\"#fffff0\",lightyellow:\"#ffffe0\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",linen:\"#faf0e6\",mediumaquamarine:\"#66cdaa\",lemonchiffon:\"#fffacd\",lime:\"#00ff00\",khaki:\"#f0e68c\",mediumseagreen:\"#3cb371\",limegreen:\"#32cd32\",mediumspringgreen:\"#00fa9a\",lightskyblue:\"#87cefa\",lightblue:\"#add8e6\",midnightblue:\"#191970\",lightpink:\"#ffb6c1\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",mintcream:\"#f5fffa\",lightslategray:\"#778899\",lightslategrey:\"#778899\",navajowhite:\"#ffdead\",navy:\"#000080\",mediumvioletred:\"#c71585\",powderblue:\"#b0e0e6\",palegoldenrod:\"#eee8aa\",oldlace:\"#fdf5e6\",paleturquoise:\"#afeeee\",mediumturquoise:\"#48d1cc\",mediumorchid:\"#ba55d3\",rebeccapurple:\"#663399\",lightsteelblue:\"#b0c4de\",mediumslateblue:\"#7b68ee\",thistle:\"#d8bfd8\",tan:\"#d2b48c\",orchid:\"#da70d6\",mediumpurple:\"#9370db\",purple:\"#800080\",pink:\"#ffc0cb\",skyblue:\"#87ceeb\",springgreen:\"#00ff7f\",palegreen:\"#98fb98\",red:\"#ff0000\",yellow:\"#ffff00\",slateblue:\"#6a5acd\",lavenderblush:\"#fff0f5\",peru:\"#cd853f\",palevioletred:\"#db7093\",violet:\"#ee82ee\",teal:\"#008080\",slategray:\"#708090\",slategrey:\"#708090\",aliceblue:\"#f0f8ff\",darkseagreen:\"#8fbc8f\",darkolivegreen:\"#556b2f\",greenyellow:\"#adff2f\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",tomato:\"#ff6347\",silver:\"#c0c0c0\",sienna:\"#a0522d\",lavender:\"#e6e6fa\",lightgreen:\"#90ee90\",orange:\"#ffa500\",orangered:\"#ff4500\",steelblue:\"#4682b4\",royalblue:\"#4169e1\",turquoise:\"#40e0d0\",yellowgreen:\"#9acd32\",salmon:\"#fa8072\",saddlebrown:\"#8b4513\",sandybrown:\"#f4a460\",rosybrown:\"#bc8f8f\",darksalmon:\"#e9967a\",lightgoldenrodyellow:\"#fafad2\",snow:\"#fffafa\",lightgrey:\"#d3d3d3\",lightgray:\"#d3d3d3\",dimgray:\"#696969\",dimgrey:\"#696969\",olivedrab:\"#6b8e23\",olive:\"#808000\"},r={};for(var d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return\"transparent\";var d,i,n=r[this.toHex()];if(n)return n;if(null==f?void 0:f.closest){var o=this.toRgb(),t=1/0,b=\"black\";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(var g in a){var u=(d=o,i=l[g],Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2));u<t&&(t=u,b=g)}return b}};f.string.push([function(f){var r=f.toLowerCase(),d=\"transparent\"===r?\"#0000\":a[r];return d?new e(d).toRgb():null},\"name\"])}\n","import { extend, colord } from '@pixi/colord';\nimport namesPlugin from '@pixi/colord/plugins/names';\n\n\"use strict\";\nextend([namesPlugin]);\nconst _Color = class _Color {\n /**\n * @param {ColorSource} value - Optional value to use, if not provided, white is used.\n */\n constructor(value = 16777215) {\n this._value = null;\n this._components = new Float32Array(4);\n this._components.fill(1);\n this._int = 16777215;\n this.value = value;\n }\n /**\n * Get the red component of the color, normalized between 0 and 1.\n * @example\n * ```ts\n * const color = new Color('red');\n * console.log(color.red); // 1\n *\n * const green = new Color('#00ff00');\n * console.log(green.red); // 0\n * ```\n */\n get red() {\n return this._components[0];\n }\n /**\n * Get the green component of the color, normalized between 0 and 1.\n * @example\n * ```ts\n * const color = new Color('lime');\n * console.log(color.green); // 1\n *\n * const red = new Color('#ff0000');\n * console.log(red.green); // 0\n * ```\n */\n get green() {\n return this._components[1];\n }\n /**\n * Get the blue component of the color, normalized between 0 and 1.\n * @example\n * ```ts\n * const color = new Color('blue');\n * console.log(color.blue); // 1\n *\n * const yellow = new Color('#ffff00');\n * console.log(yellow.blue); // 0\n * ```\n */\n get blue() {\n return this._components[2];\n }\n /**\n * Get the alpha component of the color, normalized between 0 and 1.\n * @example\n * ```ts\n * const color = new Color('red');\n * console.log(color.alpha); // 1 (fully opaque)\n *\n * const transparent = new Color('rgba(255, 0, 0, 0.5)');\n * console.log(transparent.alpha); // 0.5 (semi-transparent)\n * ```\n */\n get alpha() {\n return this._components[3];\n }\n /**\n * Sets the color value and returns the instance for chaining.\n *\n * This is a chainable version of setting the `value` property.\n * @param value - The color to set. Accepts various formats:\n * - Hex strings/numbers (e.g., '#ff0000', 0xff0000)\n * - RGB/RGBA values (arrays, objects)\n * - CSS color names\n * - HSL/HSLA values\n * - HSV/HSVA values\n * @returns The Color instance for chaining\n * @example\n * ```ts\n * // Basic usage\n * const color = new Color();\n * color.setValue('#ff0000')\n * .setAlpha(0.5)\n * .premultiply(0.8);\n *\n * // Different formats\n * color.setValue(0xff0000); // Hex number\n * color.setValue('#ff0000'); // Hex string\n * color.setValue([1, 0, 0]); // RGB array\n * color.setValue([1, 0, 0, 0.5]); // RGBA array\n * color.setValue({ r: 1, g: 0, b: 0 }); // RGB object\n *\n * // Copy from another color\n * const red = new Color('red');\n * color.setValue(red);\n * ```\n * @throws {Error} If the color value is invalid or null\n * @see {@link Color.value} For the underlying value property\n */\n setValue(value) {\n this.value = value;\n return this;\n }\n /**\n * The current color source. This property allows getting and setting the color value\n * while preserving the original format where possible.\n * @remarks\n * When setting:\n * - Setting to a `Color` instance copies its source and components\n * - Setting to other valid sources normalizes and stores the value\n * - Setting to `null` throws an Error\n * - The color remains unchanged if normalization fails\n *\n * When getting:\n * - Returns `null` if color was modified by {@link Color.multiply} or {@link Color.premultiply}\n * - Otherwise returns the original color source\n * @example\n * ```ts\n * // Setting different color formats\n * const color = new Color();\n *\n * color.value = 0xff0000; // Hex number\n * color.value = '#ff0000'; // Hex string\n * color.value = [1, 0, 0]; // RGB array\n * color.value = [1, 0, 0, 0.5]; // RGBA array\n * color.value = { r: 1, g: 0, b: 0 }; // RGB object\n *\n * // Copying from another color\n * const red = new Color('red');\n * color.value = red; // Copies red's components\n *\n * // Getting the value\n * console.log(color.value); // Returns original format\n *\n * // After modifications\n * color.multiply([0.5, 0.5, 0.5]);\n * console.log(color.value); // Returns null\n * ```\n * @throws {Error} When attempting to set `null`\n */\n set value(value) {\n if (value instanceof _Color) {\n this._value = this._cloneSource(value._value);\n this._int = value._int;\n this._components.set(value._components);\n } else if (value === null) {\n throw new Error(\"Cannot set Color#value to null\");\n } else if (this._value === null || !this._isSourceEqual(this._value, value)) {\n this._value = this._cloneSource(value);\n this._normalize(this._value);\n }\n }\n get value() {\n return this._value;\n }\n /**\n * Copy a color source internally.\n * @param value - Color source\n */\n _cloneSource(value) {\n if (typeof value === \"string\" || typeof value === \"number\" || value instanceof Number || value === null) {\n return value;\n } else if (Array.isArray(value) || ArrayBuffer.isView(value)) {\n return value.slice(0);\n } else if (typeof value === \"object\" && value !== null) {\n return { ...value };\n }\n return value;\n }\n /**\n * Equality check for color sources.\n * @param value1 - First color source\n * @param value2 - Second color source\n * @returns `true` if the color sources are equal, `false` otherwise.\n */\n _isSourceEqual(value1, value2) {\n const type1 = typeof value1;\n const type2 = typeof value2;\n if (type1 !== type2) {\n return false;\n } else if (type1 === \"number\" || type1 === \"string\" || value1 instanceof Number) {\n return value1 === value2;\n } else if (Array.isArray(value1) && Array.isArray(value2) || ArrayBuffer.isView(value1) && ArrayBuffer.isView(value2)) {\n if (value1.length !== value2.length) {\n return false;\n }\n return value1.every((v, i) => v === value2[i]);\n } else if (value1 !== null && value2 !== null) {\n const keys1 = Object.keys(value1);\n const keys2 = Object.keys(value2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n return keys1.every((key) => value1[key] === value2[key]);\n }\n return value1 === value2;\n }\n /**\n * Convert to a RGBA color object with normalized components (0-1).\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Convert colors to RGBA objects\n * new Color('white').toRgba(); // returns { r: 1, g: 1, b: 1, a: 1 }\n * new Color('#ff0000').toRgba(); // returns { r: 1, g: 0, b: 0, a: 1 }\n *\n * // With transparency\n * new Color('rgba(255,0,0,0.5)').toRgba(); // returns { r: 1, g: 0, b: 0, a: 0.5 }\n * ```\n * @returns An RGBA object with normalized components\n */\n toRgba() {\n const [r, g, b, a] = this._components;\n return { r, g, b, a };\n }\n /**\n * Convert to a RGB color object with normalized components (0-1).\n *\n * Alpha component is omitted in the output.\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Convert colors to RGB objects\n * new Color('white').toRgb(); // returns { r: 1, g: 1, b: 1 }\n * new Color('#ff0000').toRgb(); // returns { r: 1, g: 0, b: 0 }\n *\n * // Alpha is ignored\n * new Color('rgba(255,0,0,0.5)').toRgb(); // returns { r: 1, g: 0, b: 0 }\n * ```\n * @returns An RGB object with normalized components\n */\n toRgb() {\n const [r, g, b] = this._components;\n return { r, g, b };\n }\n /**\n * Convert to a CSS-style rgba string representation.\n *\n * RGB components are scaled to 0-255 range, alpha remains 0-1.\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Convert colors to RGBA strings\n * new Color('white').toRgbaString(); // returns \"rgba(255,255,255,1)\"\n * new Color('#ff0000').toRgbaString(); // returns \"rgba(255,0,0,1)\"\n *\n * // With transparency\n * new Color([1, 0, 0, 0.5]).toRgbaString(); // returns \"rgba(255,0,0,0.5)\"\n * ```\n * @returns A CSS-compatible rgba string\n */\n toRgbaString() {\n const [r, g, b] = this.toUint8RgbArray();\n return `rgba(${r},${g},${b},${this.alpha})`;\n }\n /**\n * Convert to an [R, G, B] array of clamped uint8 values (0 to 255).\n * @param {number[]|Uint8Array|Uint8ClampedArray} [out] - Optional output array. If not provided,\n * a cached array will be used and returned.\n * @returns Array containing RGB components as integers between 0-255\n * @example\n * ```ts\n * // Basic usage\n * new Color('white').toUint8RgbArray(); // returns [255, 255, 255]\n * new Color('#ff0000').toUint8RgbArray(); // returns [255, 0, 0]\n *\n * // Using custom output array\n * const rgb = new Uint8Array(3);\n * new Color('blue').toUint8RgbArray(rgb); // rgb is now [0, 0, 255]\n *\n * // Using different array types\n * new Color('red').toUint8RgbArray(new Uint8ClampedArray(3)); // [255, 0, 0]\n * new Color('red').toUint8RgbArray([]); // [255, 0, 0]\n * ```\n * @remarks\n * - Output values are always clamped between 0-255\n * - Alpha component is not included in output\n * - Reuses internal cache array if no output array provided\n */\n toUint8RgbArray(out) {\n const [r, g, b] = this._components;\n if (!this._arrayRgb) {\n this._arrayRgb = [];\n }\n out || (out = this._arrayRgb);\n out[0] = Math.round(r * 255);\n out[1] = Math.round(g * 255);\n out[2] = Math.round(b * 255);\n return out;\n }\n /**\n * Convert to an [R, G, B, A] array of normalized floats (numbers from 0.0 to 1.0).\n * @param {number[]|Float32Array} [out] - Optional output array. If not provided,\n * a cached array will be used and returned.\n * @returns Array containing RGBA components as floats between 0-1\n * @example\n * ```ts\n * // Basic usage\n * new Color('white').toArray(); // returns [1, 1, 1, 1]\n * new Color('red').toArray(); // returns [1, 0, 0, 1]\n *\n * // With alpha\n * new Color('rgba(255,0,0,0.5)').toArray(); // returns [1, 0, 0, 0.5]\n *\n * // Using custom output array\n * const rgba = new Float32Array(4);\n * new Color('blue').toArray(rgba); // rgba is now [0, 0, 1, 1]\n * ```\n * @remarks\n * - Output values are normalized between 0-1\n * - Includes alpha component as the fourth value\n * - Reuses internal cache array if no output array provided\n */\n toArray(out) {\n if (!this._arrayRgba) {\n this._arrayRgba = [];\n }\n out || (out = this._arrayRgba);\n const [r, g, b, a] = this._components;\n out[0] = r;\n out[1] = g;\n out[2] = b;\n out[3] = a;\n return out;\n }\n /**\n * Convert to an [R, G, B] array of normalized floats (numbers from 0.0 to 1.0).\n * @param {number[]|Float32Array} [out] - Optional output array. If not provided,\n * a cached array will be used and returned.\n * @returns Array containing RGB components as floats between 0-1\n * @example\n * ```ts\n * // Basic usage\n * new Color('white').toRgbArray(); // returns [1, 1, 1]\n * new Color('red').toRgbArray(); // returns [1, 0, 0]\n *\n * // Using custom output array\n * const rgb = new Float32Array(3);\n * new Color('blue').toRgbArray(rgb); // rgb is now [0, 0, 1]\n * ```\n * @remarks\n * - Output values are normalized between 0-1\n * - Alpha component is omitted from output\n * - Reuses internal cache array if no output array provided\n */\n toRgbArray(out) {\n if (!this._arrayRgb) {\n this._arrayRgb = [];\n }\n out || (out = this._arrayRgb);\n const [r, g, b] = this._components;\n out[0] = r;\n out[1] = g;\n out[2] = b;\n return out;\n }\n /**\n * Convert to a hexadecimal number.\n * @returns The color as a 24-bit RGB integer\n * @example\n * ```ts\n * // Basic usage\n * new Color('white').toNumber(); // returns 0xffffff\n * new Color('red').toNumber(); // returns 0xff0000\n *\n * // Store as hex\n * const color = new Color('blue');\n * const hex = color.toNumber(); // 0x0000ff\n * ```\n */\n toNumber() {\n return this._int;\n }\n /**\n * Convert to a BGR number.\n *\n * Useful for platforms that expect colors in BGR format.\n * @returns The color as a 24-bit BGR integer\n * @example\n * ```ts\n * // Convert RGB to BGR\n * new Color(0xffcc99).toBgrNumber(); // returns 0x99ccff\n *\n * // Common use case: platform-specific color format\n * const color = new Color('orange');\n * const bgrColor = color.toBgrNumber(); // Color with swapped R/B channels\n * ```\n * @remarks\n * This swaps the red and blue channels compared to the normal RGB format:\n * - RGB 0xRRGGBB becomes BGR 0xBBGGRR\n */\n toBgrNumber() {\n const [r, g, b] = this.toUint8RgbArray();\n return (b << 16) + (g << 8) + r;\n }\n /**\n * Convert to a hexadecimal number in little endian format (e.g., BBGGRR).\n *\n * Useful for platforms that expect colors in little endian byte order.\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Convert RGB color to little endian format\n * new Color(0xffcc99).toLittleEndianNumber(); // returns 0x99ccff\n *\n * // Common use cases:\n * const color = new Color('orange');\n * const leColor = color.toLittleEndianNumber(); // Swaps byte order for LE systems\n *\n * // Multiple conversions\n * const colors = {\n * normal: 0xffcc99,\n * littleEndian: new Color(0xffcc99).toLittleEndianNumber(), // 0x99ccff\n * backToNormal: new Color(0x99ccff).toLittleEndianNumber() // 0xffcc99\n * };\n * ```\n * @remarks\n * - Swaps R and B channels in the color value\n * - RGB 0xRRGGBB becomes 0xBBGGRR\n * - Useful for systems that use little endian byte order\n * - Can be used to convert back and forth between formats\n * @returns The color as a number in little endian format (BBGGRR)\n * @see {@link Color.toBgrNumber} For BGR format without byte swapping\n */\n toLittleEndianNumber() {\n const value = this._int;\n return (value >> 16) + (value & 65280) + ((value & 255) << 16);\n }\n /**\n * Multiply with another color.\n *\n * This action is destructive and modifies the original color.\n * @param {ColorSource} value - The color to multiply by. Accepts any valid color format:\n * - Hex strings/numbers (e.g., '#ff0000', 0xff0000)\n * - RGB/RGBA arrays ([1, 0, 0], [1, 0, 0, 1])\n * - Color objects ({ r: 1, g: 0, b: 0 })\n * - CSS color names ('red', 'blue')\n * @returns this - The Color instance for chaining\n * @example\n * ```ts\n * // Basic multiplication\n * const color = new Color('#ff0000');\n * color.multiply(0x808080); // 50% darker red\n *\n * // With transparency\n * color.multiply([1, 1, 1, 0.5]); // 50% transparent\n *\n * // Chain operations\n * color\n * .multiply('#808080')\n * .multiply({ r: 1, g: 1, b: 1, a: 0.5 });\n * ```\n * @remarks\n * - Multiplies each RGB component and alpha separately\n * - Values are clamped between 0-1\n * - Original color format is lost (value becomes null)\n * - Operation cannot be undone\n */\n multiply(value) {\n const [r, g, b, a] = _Color._temp.setValue(value)._components;\n this._components[0] *= r;\n this._components[1] *= g;\n this._components[2] *= b;\n this._components[3] *= a;\n this._refreshInt();\n this._value = null;\n return this;\n }\n /**\n * Converts color to a premultiplied alpha format.\n *\n * This action is destructive and modifies the original color.\n * @param alpha - The alpha value to multiply by (0-1)\n * @param {boolean} [applyToRGB=true] - Whether to premultiply RGB channels\n * @returns {Color} The Color instance for chaining\n * @example\n * ```ts\n * // Basic premultiplication\n * const color = new Color('red');\n * color.premultiply(0.5); // 50% transparent red with premultiplied RGB\n *\n * // Alpha only (RGB unchanged)\n * color.premultiply(0.5, false); // 50% transparent, original RGB\n *\n * // Chain with other operations\n * color\n * .multiply(0x808080)\n * .premultiply(0.5)\n * .toNumber();\n * ```\n * @remarks\n * - RGB channels are multiplied by alpha when applyToRGB is true\n * - Alpha is always set to the provided value\n * - Values are clamped between 0-1\n * - Original color format is lost (value becomes null)\n * - Operation cannot be undone\n */\n premultiply(alpha, applyToRGB = true) {\n if (applyToRGB) {\n this._components[0] *= alpha;\n this._components[1] *= alpha;\n this._components[2] *= alpha;\n }\n this._components[3] = alpha;\n this._refreshInt();\n this._value = null;\n return this;\n }\n /**\n * Returns the color as a 32-bit premultiplied alpha integer.\n *\n * Format: 0xAARRGGBB\n * @param {number} alpha - The alpha value to multiply by (0-1)\n * @param {boolean} [applyToRGB=true] - Whether to premultiply RGB channels\n * @returns {number} The premultiplied color as a 32-bit integer\n * @example\n * ```ts\n * // Convert to premultiplied format\n * const color = new Color('red');\n *\n * // Full opacity (0xFFRRGGBB)\n * color.toPremultiplied(1.0); // 0xFFFF0000\n *\n * // 50% transparency with premultiplied RGB\n * color.toPremultiplied(0.5); // 0x7F7F0000\n *\n * // 50% transparency without RGB premultiplication\n * color.toPremultiplied(0.5, false); // 0x7FFF0000\n * ```\n * @remarks\n * - Returns full opacity (0xFF000000) when alpha is 1.0\n * - Returns 0 when alpha is 0.0 and applyToRGB is true\n * - RGB values are rounded during premultiplication\n */\n toPremultiplied(alpha, applyToRGB = true) {\n if (alpha === 1) {\n return (255 << 24) + this._int;\n }\n if (alpha === 0) {\n return applyToRGB ? 0 : this._int;\n }\n let r = this._int >> 16 & 255;\n let g = this._int >> 8 & 255;\n let b = this._int & 255;\n if (applyToRGB) {\n r = r * alpha + 0.5 | 0;\n g = g * alpha + 0.5 | 0;\n b = b * alpha + 0.5 | 0;\n }\n return (alpha * 255 << 24) + (r << 16) + (g << 8) + b;\n }\n /**\n * Convert to a hexadecimal string (6 characters).\n * @returns A CSS-compatible hex color string (e.g., \"#ff0000\")\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Basic colors\n * new Color('red').toHex(); // returns \"#ff0000\"\n * new Color('white').toHex(); // returns \"#ffffff\"\n * new Color('black').toHex(); // returns \"#000000\"\n *\n * // From different formats\n * new Color(0xff0000).toHex(); // returns \"#ff0000\"\n * new Color([1, 0, 0]).toHex(); // returns \"#ff0000\"\n * new Color({ r: 1, g: 0, b: 0 }).toHex(); // returns \"#ff0000\"\n * ```\n * @remarks\n * - Always returns a 6-character hex string\n * - Includes leading \"#\" character\n * - Alpha channel is ignored\n * - Values are rounded to nearest hex value\n */\n toHex() {\n const hexString = this._int.toString(16);\n return `#${\"000000\".substring(0, 6 - hexString.length) + hexString}`;\n }\n /**\n * Convert to a hexadecimal string with alpha (8 characters).\n * @returns A CSS-compatible hex color string with alpha (e.g., \"#ff0000ff\")\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Fully opaque colors\n * new Color('red').toHexa(); // returns \"#ff0000ff\"\n * new Color('white').toHexa(); // returns \"#ffffffff\"\n *\n * // With transparency\n * new Color('rgba(255, 0, 0, 0.5)').toHexa(); // returns \"#ff00007f\"\n * new Color([1, 0, 0, 0]).toHexa(); // returns \"#ff000000\"\n * ```\n * @remarks\n * - Returns an 8-character hex string\n * - Includes leading \"#\" character\n * - Alpha is encoded in last two characters\n * - Values are rounded to nearest hex value\n */\n toHexa() {\n const alphaValue = Math.round(this._components[3] * 255);\n const alphaString = alphaValue.toString(16);\n return this.toHex() + \"00\".substring(0, 2 - alphaString.length) + alphaString;\n }\n /**\n * Set alpha (transparency) value while preserving color components.\n *\n * Provides a chainable interface for setting alpha.\n * @param alpha - Alpha value between 0 (fully transparent) and 1 (fully opaque)\n * @returns The Color instance for chaining\n * @example\n * ```ts\n * // Basic alpha setting\n * const color = new Color('red');\n * color.setAlpha(0.5); // 50% transparent red\n *\n * // Chain with other operations\n * color\n * .setValue('#ff0000')\n * .setAlpha(0.8) // 80% opaque\n * .premultiply(0.5); // Further modify alpha\n *\n * // Reset to fully opaque\n * color.setAlpha(1);\n * ```\n * @remarks\n * - Alpha value is clamped between 0-1\n * - Can be chained with other color operations\n */\n setAlpha(alpha) {\n this._components[3] = this._clamp(alpha);\n this._value = null;\n return this;\n }\n /**\n * Normalize the input value into rgba\n * @param value - Input value\n */\n _normalize(value) {\n let r;\n let g;\n let b;\n let a;\n if ((typeof value === \"number\" || value instanceof Number) && value >= 0 && value <= 16777215) {\n const int = value;\n r = (int >> 16 & 255) / 255;\n g = (int >> 8 & 255) / 255;\n b = (int & 255) / 255;\n a = 1;\n } else if ((Array.isArray(value) || value instanceof Float32Array) && value.length >= 3 && value.length <= 4) {\n value = this._clamp(value);\n [r, g, b, a = 1] = value;\n } else if ((value instanceof Uint8Array || value instanceof Uint8ClampedArray) && value.length >= 3 && value.length <= 4) {\n value = this._clamp(value, 0, 255);\n [r, g, b, a = 255] = value;\n r /= 255;\n g /= 255;\n b /= 255;\n a /= 255;\n } else if (typeof value === \"string\" || typeof value === \"object\") {\n if (typeof value === \"string\") {\n const match = _Color.HEX_PATTERN.exec(value);\n if (match) {\n value = `#${match[2]}`;\n }\n }\n const color = colord(value);\n if (color.isValid()) {\n ({ r, g, b, a } = color.rgba);\n r /= 255;\n g /= 255;\n b /= 255;\n }\n }\n if (r !== void 0) {\n this._components[0] = r;\n this._components[1] = g;\n this._components[2] = b;\n this._components[3] = a;\n this._refreshInt();\n } else {\n throw new Error(`Unable to convert color ${value}`);\n }\n }\n /** Refresh the internal color rgb number */\n _refreshInt() {\n this._clamp(this._components);\n const [r, g, b] = this._components;\n this._int = (r * 255 << 16) + (g * 255 << 8) + (b * 255 | 0);\n }\n /**\n * Clamps values to a range. Will override original values\n * @param value - Value(s) to clamp\n * @param min - Minimum value\n * @param max - Maximum value\n */\n _clamp(value, min = 0, max = 1) {\n if (typeof value === \"number\") {\n return Math.min(Math.max(value, min), max);\n }\n value.forEach((v, i) => {\n value[i] = Math.min(Math.max(v, min), max);\n });\n return value;\n }\n /**\n * Check if a value can be interpreted as a valid color format.\n * Supports all color formats that can be used with the Color class.\n * @param value - Value to check\n * @returns True if the value can be used as a color\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // CSS colors and hex values\n * Color.isColorLike('red'); // true\n * Color.isColorLike('#ff0000'); // true\n * Color.isColorLike(0xff0000); // true\n *\n * // Arrays (RGB/RGBA)\n * Color.isColorLike([1, 0, 0]); // true\n * Color.isColorLike([1, 0, 0, 0.5]); // true\n *\n * // TypedArrays\n * Color.isColorLike(new Float32Array([1, 0, 0])); // true\n * Color.isColorLike(new Uint8Array([255, 0, 0])); // true\n * Color.isColorLike(new Uint8ClampedArray([255, 0, 0])); // true\n *\n * // Object formats\n * Color.isColorLike({ r: 1, g: 0, b: 0 }); // true (RGB)\n * Color.isColorLike({ r: 1, g: 0, b: 0, a: 0.5 }); // true (RGBA)\n * Color.isColorLike({ h: 0, s: 100, l: 50 }); // true (HSL)\n * Color.isColorLike({ h: 0, s: 100, l: 50, a: 0.5 }); // true (HSLA)\n * Color.isColorLike({ h: 0, s: 100, v: 100 }); // true (HSV)\n * Color.isColorLike({ h: 0, s: 100, v: 100, a: 0.5 });// true (HSVA)\n *\n * // Color instances\n * Color.isColorLike(new Color('red')); // true\n *\n * // Invalid values\n * Color.isColorLike(null); // false\n * Color.isColorLike(undefined); // false\n * Color.isColorLike({}); // false\n * Color.isColorLike([]); // false\n * Color.isColorLike('not-a-color'); // false\n * ```\n * @remarks\n * Checks for the following formats:\n * - Numbers (0x000000 to 0xffffff)\n * - CSS color strings\n * - RGB/RGBA arrays and objects\n * - HSL/HSLA objects\n * - HSV/HSVA objects\n * - TypedArrays (Float32Array, Uint8Array, Uint8ClampedArray)\n * - Color instances\n * @see {@link ColorSource} For supported color format types\n * @see {@link Color.setValue} For setting color values\n * @category utility\n */\n static isColorLike(value) {\n return typeof value === \"number\" || typeof value === \"string\" || value instanceof Number || value instanceof _Color || Array.isArray(value) || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Float32Array || value.r !== void 0 && value.g !== void 0 && value.b !== void 0 || value.r !== void 0 && value.g !== void 0 && value.b !== void 0 && value.a !== void 0 || value.h !== void 0 && value.s !== void 0 && value.l !== void 0 || value.h !== void 0 && value.s !== void 0 && value.l !== void 0 && value.a !== void 0 || value.h !== void 0 && value.s !== void 0 && value.v !== void 0 || value.h !== void 0 && value.s !== void 0 && value.v !== void 0 && value.a !== void 0;\n }\n};\n/**\n * Static shared Color instance used for utility operations. This is a singleton color object\n * that can be reused to avoid creating unnecessary Color instances.\n * > [!IMPORTANT] You should be careful when using this shared instance, as it is mutable and can be\n * > changed by any code that uses it.\n * >\n * > It is best used for one-off color operations or temporary transformations.\n * > For persistent colors, create your own Color instance instead.\n * @example\n * ```ts\n * import { Color } from 'pixi.js';\n *\n * // Use shared instance for one-off color operations\n * Color.shared.setValue(0xff0000);\n * const redHex = Color.shared.toHex(); // \"#ff0000\"\n * const redRgb = Color.shared.toRgbArray(); // [1, 0, 0]\n *\n * // Temporary color transformations\n * const colorNumber = Color.shared\n * .setValue('#ff0000') // Set to red\n * .setAlpha(0.5) // Make semi-transparent\n * .premultiply(0.8) // Apply premultiplication\n * .toNumber(); // Convert to number\n *\n * // Chain multiple operations\n * const result = Color.shared\n * .setValue(someColor)\n * .multiply(tintColor)\n * .toPremultiplied(alpha);\n * ```\n * @remarks\n * - This is a shared instance - be careful about multiple code paths using it simultaneously\n * - Use for temporary color operations to avoid allocating new Color instances\n * - The value is preserved between operations, so reset if needed\n * - For persistent colors, create your own Color instance instead\n */\n_Color.shared = new _Color();\n/**\n * Temporary Color object for static uses internally.\n * As to not conflict with Color.shared.\n * @ignore\n */\n_Color._temp = new _Color();\n/** Pattern for hex strings */\n// eslint-disable-next-line @typescript-eslint/naming-convention\n_Color.HEX_PATTERN = /^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;\nlet Color = _Color;\n\nexport { Color };\n//# sourceMappingURL=Color.mjs.map\n","\"use strict\";\nconst cullingMixin = {\n cullArea: null,\n cullable: false,\n cullableChildren: true\n};\n\nexport { cullingMixin };\n//# sourceMappingURL=cullingMixin.mjs.map\n","\"use strict\";\nlet warnCount = 0;\nconst maxWarnings = 500;\nfunction warn(...args) {\n if (warnCount === maxWarnings) return;\n warnCount++;\n if (warnCount === maxWarnings) {\n console.warn(\"PixiJS Warning: too many warnings, no more warnings will be reported to the console by PixiJS.\");\n } else {\n console.warn(\"PixiJS Warning: \", ...args);\n }\n}\n\nexport { warn };\n//# sourceMappingURL=warn.mjs.map\n","\"use strict\";\nconst GlobalResourceRegistry = {\n /**\n * Set of registered pools and cleanable objects.\n * @private\n */\n _registeredResources: /* @__PURE__ */ new Set(),\n /**\n * Registers a pool or cleanable object for cleanup.\n * @param {Cleanable} pool - The pool or object to register.\n */\n register(pool) {\n this._registeredResources.add(pool);\n },\n /**\n * Unregisters a pool or cleanable object from cleanup.\n * @param {Cleanable} pool - The pool or object to unregister.\n */\n unregister(pool) {\n this._registeredResources.delete(pool);\n },\n /** Clears all registered pools and cleanable objects. This will call clear() on each registered item. */\n release() {\n this._registeredResources.forEach((pool) => pool.clear());\n },\n /**\n * Gets the number of registered pools and cleanable objects.\n * @returns {number} The count of registered items.\n */\n get registeredCount() {\n return this._registeredResources.size;\n },\n /**\n * Checks if a specific pool or cleanable object is registered.\n * @param {Cleanable} pool - The pool or object to check.\n * @returns {boolean} True if the item is registered, false otherwise.\n */\n isRegistered(pool) {\n return this._registeredResources.has(pool);\n },\n /**\n * Removes all registrations without clearing the pools.\n * Useful if you want to reset the collector without affecting the pools.\n */\n reset() {\n this._registeredResources.clear();\n }\n};\n\nexport { GlobalResourceRegistry };\n//# sourceMappingURL=GlobalResourceRegistry.mjs.map\n","\"use strict\";\nclass Pool {\n /**\n * Constructs a new Pool.\n * @param ClassType - The constructor of the items in the pool.\n * @param {number} [initialSize] - The initial size of the pool.\n */\n constructor(ClassType, initialSize) {\n this._pool = [];\n this._count = 0;\n this._index = 0;\n this._classType = ClassType;\n if (initialSize) {\n this.prepopulate(initialSize);\n }\n }\n /**\n * Prepopulates the pool with a given number of items.\n * @param total - The number of items to add to the pool.\n */\n prepopulate(total) {\n for (let i = 0; i < total; i++) {\n this._pool[this._index++] = new this._classType();\n }\n this._count += total;\n }\n /**\n * Gets an item from the pool. Calls the item's `init` method if it exists.\n * If there are no items left in the pool, a new one will be created.\n * @param {I} [data] - Optional data to pass to the item's constructor.\n * @returns {T} The item from the pool.\n */\n get(data) {\n let item;\n if (this._index > 0) {\n item = this._pool[--this._index];\n } else {\n item = new this._classType();\n this._count++;\n }\n item.init?.(data);\n return item;\n }\n /**\n * Returns an item to the pool. Calls the item's `reset` method if it exists.\n * @param {T} item - The item to return to the pool.\n */\n return(item) {\n item.reset?.();\n this._pool[this._index++] = item;\n }\n /**\n * Gets the number of items in the pool.\n * @readonly\n */\n get totalSize() {\n return this._count;\n }\n /**\n * Gets the number of items in the pool that are free to use without needing to create more.\n * @readonly\n */\n get totalFree() {\n return this._index;\n }\n /**\n * Gets the number of items in the pool that are currently in use.\n * @readonly\n */\n get totalUsed() {\n return this._count - this._index;\n }\n /** clears the pool */\n clear() {\n if (this._pool.length > 0 && this._pool[0].destroy) {\n for (let i = 0; i < this._index; i++) {\n this._pool[i].destroy();\n }\n }\n this._pool.length = 0;\n this._count = 0;\n this._index = 0;\n }\n}\n\nexport { Pool };\n//# sourceMappingURL=Pool.mjs.map\n","import { GlobalResourceRegistry } from './GlobalResourceRegistry.mjs';\nimport { Pool } from './Pool.mjs';\n\n\"use strict\";\nclass PoolGroupClass {\n constructor() {\n /**\n * A map to store the pools by their class type.\n * @private\n */\n this._poolsByClass = /* @__PURE__ */ new Map();\n }\n /**\n * Prepopulates a specific pool with a given number of items.\n * @template T The type of items in the pool. Must extend PoolItem.\n * @param {PoolItemConstructor<T>} Class - The constructor of the items in the pool.\n * @param {number} total - The number of items to add to the pool.\n */\n prepopulate(Class, total) {\n const classPool = this.getPool(Class);\n classPool.prepopulate(total);\n }\n /**\n * Gets an item from a specific pool.\n * @template T The type of items in the pool. Must extend PoolItem.\n * @param {PoolItemConstructor<T>} Class - The constructor of the items in the pool.\n * @param {unknown} [data] - Optional data to pass to the item's constructor.\n * @returns {T} The item from the pool.\n */\n get(Class, data) {\n const pool = this.getPool(Class);\n return pool.get(data);\n }\n /**\n * Returns an item to its respective pool.\n * @param {PoolItem} item - The item to return to the pool.\n */\n return(item) {\n const pool = this.getPool(item.constructor);\n pool.return(item);\n }\n /**\n * Gets a specific pool based on the class type.\n * @template T The type of items in the pool. Must extend PoolItem.\n * @param {PoolItemConstructor<T>} ClassType - The constructor of the items in the pool.\n * @returns {Pool<T>} The pool of the given class type.\n */\n getPool(ClassType) {\n if (!this._poolsByClass.has(ClassType)) {\n this._poolsByClass.set(ClassType, new Pool(ClassType));\n }\n return this._poolsByClass.get(ClassType);\n }\n /** gets the usage stats of each pool in the system */\n stats() {\n const stats = {};\n this._poolsByClass.forEach((pool) => {\n const name = stats[pool._classType.name] ? pool._classType.name + pool._classType.ID : pool._classType.name;\n stats[name] = {\n free: pool.totalFree,\n used: pool.totalUsed,\n size: pool.totalSize\n };\n });\n return stats;\n }\n /** Clears all pools in the group. This will reset all pools and free their resources. */\n clear() {\n this._poolsByClass.forEach((pool) => pool.clear());\n this._poolsByClass.clear();\n }\n}\nconst BigPool = new PoolGroupClass();\nGlobalResourceRegistry.register(BigPool);\n\nexport { BigPool, PoolGroupClass };\n//# sourceMappingURL=PoolGroup.mjs.map\n","import { deprecation } from '../../../utils/logging/deprecation.mjs';\n\n\"use strict\";\nconst cacheAsTextureMixin = {\n get isCachedAsTexture() {\n return !!this.renderGroup?.isCachedAsTexture;\n },\n cacheAsTexture(val) {\n if (typeof val === \"boolean\" && val === false) {\n this.disableRenderGroup();\n } else {\n this.enableRenderGroup();\n this.renderGroup.enableCacheAsTexture(val === true ? {} : val);\n }\n },\n updateCacheTexture() {\n this.renderGroup?.updateCacheTexture();\n },\n get cacheAsBitmap() {\n return this.isCachedAsTexture;\n },\n set cacheAsBitmap(val) {\n deprecation(\"v8.6.0\", \"cacheAsBitmap is deprecated, use cacheAsTexture instead.\");\n this.cacheAsTexture(val);\n }\n};\n\nexport { cacheAsTextureMixin };\n//# sourceMappingURL=cacheAsTextureMixin.mjs.map\n","\"use strict\";\nfunction removeItems(arr, startIdx, removeCount) {\n const length = arr.length;\n let i;\n if (startIdx >= length || removeCount === 0) {\n return;\n }\n removeCount = startIdx + removeCount > length ? length - startIdx : removeCount;\n const len = length - removeCount;\n for (i = startIdx; i < len; ++i) {\n arr[i] = arr[i + removeCount];\n }\n arr.length = len;\n}\n\nexport { removeItems };\n//# sourceMappingURL=removeItems.mjs.map\n","import { removeItems } from '../../../utils/data/removeItems.mjs';\nimport { deprecation, v8_0_0 } from '../../../utils/logging/deprecation.mjs';\n\n\"use strict\";\nconst childrenHelperMixin = {\n allowChildren: true,\n removeChildren(beginIndex = 0, endIndex) {\n const end = endIndex ?? this.children.length;\n const range = end - beginIndex;\n const removed = [];\n if (range > 0 && range <= end) {\n for (let i = end - 1; i >= beginIndex; i--) {\n const child = this.children[i];\n if (!child) continue;\n removed.push(child);\n child.parent = null;\n }\n removeItems(this.children, beginIndex, end);\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (renderGroup) {\n renderGroup.removeChildren(removed);\n }\n for (let i = 0; i < removed.length; ++i) {\n const child = removed[i];\n child.parentRenderLayer?.detach(child);\n this.emit(\"childRemoved\", child, this, i);\n removed[i].emit(\"removed\", this);\n }\n if (removed.length > 0) {\n this._didViewChangeTick++;\n }\n return removed;\n } else if (range === 0 && this.children.length === 0) {\n return removed;\n }\n throw new RangeError(\"removeChildren: numeric values are outside the acceptable range.\");\n },\n removeChildAt(index) {\n const child = this.getChildAt(index);\n return this.removeChild(child);\n },\n getChildAt(index) {\n if (index < 0 || index >= this.children.length) {\n throw new Error(`getChildAt: Index (${index}) does not exist.`);\n }\n return this.children[index];\n },\n setChildIndex(child, index) {\n if (index < 0 || index >= this.children.length) {\n throw new Error(`The index ${index} supplied is out of bounds ${this.children.length}`);\n }\n this.getChildIndex(child);\n this.addChildAt(child, index);\n },\n getChildIndex(child) {\n const index = this.children.indexOf(child);\n if (index === -1) {\n throw new Error(\"The supplied Container must be a child of the caller\");\n }\n return index;\n },\n addChildAt(child, index) {\n if (!this.allowChildren) {\n deprecation(v8_0_0, \"addChildAt: Only Containers will be allowed to add children in v8.0.0\");\n }\n const { children } = this;\n if (index < 0 || index > children.length) {\n throw new Error(`${child}addChildAt: The index ${index} supplied is out of bounds ${children.length}`);\n }\n const sameParent = child.parent === this;\n if (child.parent) {\n const currentIndex = child.parent.children.indexOf(child);\n if (sameParent) {\n if (currentIndex === index) {\n return child;\n }\n child.parent.children.splice(currentIndex, 1);\n } else {\n child.removeFromParent();\n }\n }\n if (index === children.length) {\n children.push(child);\n } else {\n children.splice(index, 0, child);\n }\n child.parent = this;\n child.didChange = true;\n child._updateFlags = 15;\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (renderGroup) {\n renderGroup.addChild(child);\n }\n if (this.sortableChildren) this.sortDirty = true;\n if (sameParent) {\n return child;\n }\n this.emit(\"childAdded\", child, this, index);\n child.emit(\"added\", this);\n return child;\n },\n swapChildren(child, child2) {\n if (child === child2) {\n return;\n }\n const index1 = this.getChildIndex(child);\n const index2 = this.getChildIndex(child2);\n this.children[index1] = child2;\n this.children[index2] = child;\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (renderGroup) {\n renderGroup.structureDidChange = true;\n }\n this._didContainerChangeTick++;\n },\n removeFromParent() {\n this.parent?.removeChild(this);\n },\n reparentChild(...child) {\n if (child.length === 1) {\n return this.reparentChildAt(child[0], this.children.length);\n }\n child.forEach((c) => this.reparentChildAt(c, this.children.length));\n return child[0];\n },\n reparentChildAt(child, index) {\n if (child.parent === this) {\n this.setChildIndex(child, index);\n return child;\n }\n const childMat = child.worldTransform.clone();\n child.removeFromParent();\n this.addChildAt(child, index);\n const newMatrix = this.worldTransform.clone();\n newMatrix.invert();\n childMat.prepend(newMatrix);\n child.setFromMatrix(childMat);\n return child;\n },\n replaceChild(oldChild, newChild) {\n oldChild.updateLocalTransform();\n this.addChildAt(newChild, this.getChildIndex(oldChild));\n newChild.setFromMatrix(oldChild.localTransform);\n newChild.updateLocalTransform();\n this.removeChild(oldChild);\n }\n};\n\nexport { childrenHelperMixin };\n//# sourceMappingURL=childrenHelperMixin.mjs.map\n","\"use strict\";\nconst collectRenderablesMixin = {\n collectRenderables(instructionSet, renderer, currentLayer) {\n if (this.parentRenderLayer && this.parentRenderLayer !== currentLayer || this.globalDisplayStatus < 7 || !this.includeInBuild) return;\n if (this.sortableChildren) {\n this.sortChildren();\n }\n if (this.isSimple) {\n this.collectRenderablesSimple(instructionSet, renderer, currentLayer);\n } else if (this.renderGroup) {\n renderer.renderPipes.renderGroup.addRenderGroup(this.renderGroup, instructionSet);\n } else {\n this.collectRenderablesWithEffects(instructionSet, renderer, currentLayer);\n }\n },\n collectRenderablesSimple(instructionSet, renderer, currentLayer) {\n const children = this.children;\n const length = children.length;\n for (let i = 0; i < length; i++) {\n children[i].collectRenderables(instructionSet, renderer, currentLayer);\n }\n },\n collectRenderablesWithEffects(instructionSet, renderer, currentLayer) {\n const { renderPipes } = renderer;\n for (let i = 0; i < this.effects.length; i++) {\n const effect = this.effects[i];\n const pipe = renderPipes[effect.pipe];\n pipe.push(effect, this, instructionSet);\n }\n this.collectRenderablesSimple(instructionSet, renderer, currentLayer);\n for (let i = this.effects.length - 1; i >= 0; i--) {\n const effect = this.effects[i];\n const pipe = renderPipes[effect.pipe];\n pipe.pop(effect, this, instructionSet);\n }\n }\n};\n\nexport { collectRenderablesMixin };\n//# sourceMappingURL=collectRenderablesMixin.mjs.map\n","\"use strict\";\nclass FilterEffect {\n constructor() {\n /** the pipe that knows how to handle this effect */\n this.pipe = \"filter\";\n /** the priority of this effect */\n this.priority = 1;\n }\n destroy() {\n for (let i = 0; i < this.filters.length; i++) {\n this.filters[i].destroy();\n }\n this.filters = null;\n this.filterArea = null;\n }\n}\n\nexport { FilterEffect };\n//# sourceMappingURL=FilterEffect.mjs.map\n","import { extensions, ExtensionType } from '../../extensions/Extensions.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\n\n\"use strict\";\nclass MaskEffectManagerClass {\n constructor() {\n /** @private */\n this._effectClasses = [];\n this._tests = [];\n this._initialized = false;\n }\n init() {\n if (this._initialized) return;\n this._initialized = true;\n this._effectClasses.forEach((test) => {\n this.add({\n test: test.test,\n maskClass: test\n });\n });\n }\n add(test) {\n this._tests.push(test);\n }\n getMaskEffect(item) {\n if (!this._initialized) this.init();\n for (let i = 0; i < this._tests.length; i++) {\n const test = this._tests[i];\n if (test.test(item)) {\n return BigPool.get(test.maskClass, item);\n }\n }\n return item;\n }\n returnMaskEffect(effect) {\n BigPool.return(effect);\n }\n}\nconst MaskEffectManager = new MaskEffectManagerClass();\nextensions.handleByList(ExtensionType.MaskEffect, MaskEffectManager._effectClasses);\n\nexport { MaskEffectManager, MaskEffectManagerClass };\n//# sourceMappingURL=MaskEffectManager.mjs.map\n","import { FilterEffect } from '../../../filters/FilterEffect.mjs';\nimport { MaskEffectManager } from '../../../rendering/mask/MaskEffectManager.mjs';\n\n\"use strict\";\nconst effectsMixin = {\n _maskEffect: null,\n _maskOptions: {\n inverse: false\n },\n _filterEffect: null,\n effects: [],\n _markStructureAsChanged() {\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (renderGroup) {\n renderGroup.structureDidChange = true;\n }\n },\n addEffect(effect) {\n const index = this.effects.indexOf(effect);\n if (index !== -1) return;\n this.effects.push(effect);\n this.effects.sort((a, b) => a.priority - b.priority);\n this._markStructureAsChanged();\n this._updateIsSimple();\n },\n removeEffect(effect) {\n const index = this.effects.indexOf(effect);\n if (index === -1) return;\n this.effects.splice(index, 1);\n this._markStructureAsChanged();\n this._updateIsSimple();\n },\n set mask(value) {\n const effect = this._maskEffect;\n if (effect?.mask === value) return;\n if (effect) {\n this.removeEffect(effect);\n MaskEffectManager.returnMaskEffect(effect);\n this._maskEffect = null;\n }\n if (value === null || value === void 0) return;\n this._maskEffect = MaskEffectManager.getMaskEffect(value);\n this.addEffect(this._maskEffect);\n },\n get mask() {\n return this._maskEffect?.mask;\n },\n setMask(options) {\n this._maskOptions = {\n ...this._maskOptions,\n ...options\n };\n if (options.mask) {\n this.mask = options.mask;\n }\n this._markStructureAsChanged();\n },\n set filters(value) {\n if (!Array.isArray(value) && value) value = [value];\n const effect = this._filterEffect || (this._filterEffect = new FilterEffect());\n value = value;\n const hasFilters = value?.length > 0;\n const hadFilters = effect.filters?.length > 0;\n const didChange = hasFilters !== hadFilters;\n value = Array.isArray(value) ? value.slice(0) : value;\n effect.filters = Object.freeze(value);\n if (didChange) {\n if (hasFilters) {\n this.addEffect(effect);\n } else {\n this.removeEffect(effect);\n effect.filters = value ?? null;\n }\n }\n },\n get filters() {\n return this._filterEffect?.filters;\n },\n set filterArea(value) {\n this._filterEffect || (this._filterEffect = new FilterEffect());\n this._filterEffect.filterArea = value;\n },\n get filterArea() {\n return this._filterEffect?.filterArea;\n }\n};\n\nexport { effectsMixin };\n//# sourceMappingURL=effectsMixin.mjs.map\n","import { deprecation, v8_0_0 } from '../../../utils/logging/deprecation.mjs';\n\n\"use strict\";\nconst findMixin = {\n label: null,\n get name() {\n deprecation(v8_0_0, \"Container.name property has been removed, use Container.label instead\");\n return this.label;\n },\n set name(value) {\n deprecation(v8_0_0, \"Container.name property has been removed, use Container.label instead\");\n this.label = value;\n },\n getChildByName(name, deep = false) {\n return this.getChildByLabel(name, deep);\n },\n getChildByLabel(label, deep = false) {\n const children = this.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.label === label || label instanceof RegExp && label.test(child.label)) return child;\n }\n if (deep) {\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const found = child.getChildByLabel(label, true);\n if (found) {\n return found;\n }\n }\n }\n return null;\n },\n getChildrenByLabel(label, deep = false, out = []) {\n const children = this.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.label === label || label instanceof RegExp && label.test(child.label)) {\n out.push(child);\n }\n }\n if (deep) {\n for (let i = 0; i < children.length; i++) {\n children[i].getChildrenByLabel(label, true, out);\n }\n }\n return out;\n }\n};\n\nexport { findMixin };\n//# sourceMappingURL=findMixin.mjs.map\n","import { Matrix } from '../../../../maths/matrix/Matrix.mjs';\nimport { BigPool } from '../../../../utils/pool/PoolGroup.mjs';\nimport { Bounds } from '../Bounds.mjs';\n\n\"use strict\";\nconst matrixPool = BigPool.getPool(Matrix);\nconst boundsPool = BigPool.getPool(Bounds);\n\nexport { boundsPool, matrixPool };\n//# sourceMappingURL=matrixAndBoundsPool.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { Bounds } from '../bounds/Bounds.mjs';\nimport { boundsPool } from '../bounds/utils/matrixAndBoundsPool.mjs';\n\n\"use strict\";\nconst tempMatrix = new Matrix();\nconst getFastGlobalBoundsMixin = {\n getFastGlobalBounds(factorRenderLayers, bounds) {\n bounds || (bounds = new Bounds());\n bounds.clear();\n this._getGlobalBoundsRecursive(!!factorRenderLayers, bounds, this.parentRenderLayer);\n if (!bounds.isValid) {\n bounds.set(0, 0, 0, 0);\n }\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n bounds.applyMatrix(renderGroup.worldTransform);\n return bounds;\n },\n _getGlobalBoundsRecursive(factorRenderLayers, bounds, currentLayer) {\n let localBounds = bounds;\n if (factorRenderLayers && this.parentRenderLayer && this.parentRenderLayer !== currentLayer) return;\n if (this.localDisplayStatus !== 7 || !this.measurable) {\n return;\n }\n const manageEffects = !!this.effects.length;\n if (this.renderGroup || manageEffects) {\n localBounds = boundsPool.get().clear();\n }\n if (this.boundsArea) {\n bounds.addRect(this.boundsArea, this.worldTransform);\n } else {\n if (this.renderPipeId) {\n const viewBounds = this.bounds;\n localBounds.addFrame(\n viewBounds.minX,\n viewBounds.minY,\n viewBounds.maxX,\n viewBounds.maxY,\n this.groupTransform\n );\n }\n const children = this.children;\n for (let i = 0; i < children.length; i++) {\n children[i]._getGlobalBoundsRecursive(factorRenderLayers, localBounds, currentLayer);\n }\n }\n if (manageEffects) {\n let advanced = false;\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n for (let i = 0; i < this.effects.length; i++) {\n if (this.effects[i].addBounds) {\n if (!advanced) {\n advanced = true;\n localBounds.applyMatrix(renderGroup.worldTransform);\n }\n this.effects[i].addBounds(localBounds, true);\n }\n }\n if (advanced) {\n localBounds.applyMatrix(renderGroup.worldTransform.copyTo(tempMatrix).invert());\n }\n bounds.addBounds(localBounds);\n boundsPool.return(localBounds);\n } else if (this.renderGroup) {\n bounds.addBounds(localBounds, this.relativeGroupTransform);\n boundsPool.return(localBounds);\n }\n }\n};\n\nexport { getFastGlobalBoundsMixin };\n//# sourceMappingURL=getFastGlobalBoundsMixin.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { matrixPool, boundsPool } from './utils/matrixAndBoundsPool.mjs';\n\n\"use strict\";\nfunction getGlobalBounds(target, skipUpdateTransform, bounds) {\n bounds.clear();\n let parentTransform;\n let pooledMatrix;\n if (target.parent) {\n if (!skipUpdateTransform) {\n pooledMatrix = matrixPool.get().identity();\n parentTransform = updateTransformBackwards(target, pooledMatrix);\n } else {\n parentTransform = target.parent.worldTransform;\n }\n } else {\n parentTransform = Matrix.IDENTITY;\n }\n _getGlobalBounds(target, bounds, parentTransform, skipUpdateTransform);\n if (pooledMatrix) {\n matrixPool.return(pooledMatrix);\n }\n if (!bounds.isValid) {\n bounds.set(0, 0, 0, 0);\n }\n return bounds;\n}\nfunction _getGlobalBounds(target, bounds, parentTransform, skipUpdateTransform) {\n if (!target.visible || !target.measurable) return;\n let worldTransform;\n if (!skipUpdateTransform) {\n target.updateLocalTransform();\n worldTransform = matrixPool.get();\n worldTransform.appendFrom(target.localTransform, parentTransform);\n } else {\n worldTransform = target.worldTransform;\n }\n const parentBounds = bounds;\n const preserveBounds = !!target.effects.length;\n if (preserveBounds) {\n bounds = boundsPool.get().clear();\n }\n if (target.boundsArea) {\n bounds.addRect(target.boundsArea, worldTransform);\n } else {\n const renderableBounds = target.bounds;\n if (renderableBounds && !renderableBounds.isEmpty()) {\n bounds.matrix = worldTransform;\n bounds.addBounds(renderableBounds);\n }\n for (let i = 0; i < target.children.length; i++) {\n _getGlobalBounds(target.children[i], bounds, worldTransform, skipUpdateTransform);\n }\n }\n if (preserveBounds) {\n for (let i = 0; i < target.effects.length; i++) {\n target.effects[i].addBounds?.(bounds);\n }\n parentBounds.addBounds(bounds, Matrix.IDENTITY);\n boundsPool.return(bounds);\n }\n if (!skipUpdateTransform) {\n matrixPool.return(worldTransform);\n }\n}\nfunction updateTransformBackwards(target, parentTransform) {\n const parent = target.parent;\n if (parent) {\n updateTransformBackwards(parent, parentTransform);\n parent.updateLocalTransform();\n parentTransform.append(parent.localTransform);\n }\n return parentTransform;\n}\n\nexport { getGlobalBounds, updateTransformBackwards };\n//# sourceMappingURL=getGlobalBounds.mjs.map\n","\"use strict\";\nfunction multiplyHexColors(color1, color2) {\n if (color1 === 16777215 || !color2) return color2;\n if (color2 === 16777215 || !color1) return color1;\n const r1 = color1 >> 16 & 255;\n const g1 = color1 >> 8 & 255;\n const b1 = color1 & 255;\n const r2 = color2 >> 16 & 255;\n const g2 = color2 >> 8 & 255;\n const b2 = color2 & 255;\n const r = r1 * r2 / 255 | 0;\n const g = g1 * g2 / 255 | 0;\n const b = b1 * b2 / 255 | 0;\n return (r << 16) + (g << 8) + b;\n}\n\nexport { multiplyHexColors };\n//# sourceMappingURL=multiplyHexColors.mjs.map\n","import { multiplyHexColors } from './multiplyHexColors.mjs';\n\n\"use strict\";\nconst WHITE_BGR = 16777215;\nfunction multiplyColors(localBGRColor, parentBGRColor) {\n if (localBGRColor === WHITE_BGR) {\n return parentBGRColor;\n }\n if (parentBGRColor === WHITE_BGR) {\n return localBGRColor;\n }\n return multiplyHexColors(localBGRColor, parentBGRColor);\n}\n\nexport { multiplyColors };\n//# sourceMappingURL=multiplyColors.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { updateTransformBackwards } from '../bounds/getGlobalBounds.mjs';\nimport { matrixPool } from '../bounds/utils/matrixAndBoundsPool.mjs';\nimport { multiplyColors } from '../utils/multiplyColors.mjs';\n\n\"use strict\";\nfunction bgr2rgb(color) {\n return ((color & 255) << 16) + (color & 65280) + (color >> 16 & 255);\n}\nconst getGlobalMixin = {\n getGlobalAlpha(skipUpdate) {\n if (skipUpdate) {\n if (this.renderGroup) {\n return this.renderGroup.worldAlpha;\n }\n if (this.parentRenderGroup) {\n return this.parentRenderGroup.worldAlpha * this.alpha;\n }\n return this.alpha;\n }\n let alpha = this.alpha;\n let current = this.parent;\n while (current) {\n alpha *= current.alpha;\n current = current.parent;\n }\n return alpha;\n },\n getGlobalTransform(matrix = new Matrix(), skipUpdate) {\n if (skipUpdate) {\n return matrix.copyFrom(this.worldTransform);\n }\n this.updateLocalTransform();\n const parentTransform = updateTransformBackwards(this, matrixPool.get().identity());\n matrix.appendFrom(this.localTransform, parentTransform);\n matrixPool.return(parentTransform);\n return matrix;\n },\n getGlobalTint(skipUpdate) {\n if (skipUpdate) {\n if (this.renderGroup) {\n return bgr2rgb(this.renderGroup.worldColor);\n }\n if (this.parentRenderGroup) {\n return bgr2rgb(\n multiplyColors(this.localColor, this.parentRenderGroup.worldColor)\n );\n }\n return this.tint;\n }\n let color = this.localColor;\n let parent = this.parent;\n while (parent) {\n color = multiplyColors(color, parent.localColor);\n parent = parent.parent;\n }\n return bgr2rgb(color);\n }\n};\n\nexport { bgr2rgb, getGlobalMixin };\n//# sourceMappingURL=getGlobalMixin.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { matrixPool, boundsPool } from './utils/matrixAndBoundsPool.mjs';\n\n\"use strict\";\nfunction getLocalBounds(target, bounds, relativeMatrix) {\n bounds.clear();\n relativeMatrix || (relativeMatrix = Matrix.IDENTITY);\n _getLocalBounds(target, bounds, relativeMatrix, target, true);\n if (!bounds.isValid) {\n bounds.set(0, 0, 0, 0);\n }\n return bounds;\n}\nfunction _getLocalBounds(target, bounds, parentTransform, rootContainer, isRoot) {\n let relativeTransform;\n if (!isRoot) {\n if (!target.visible || !target.measurable) return;\n target.updateLocalTransform();\n const localTransform = target.localTransform;\n relativeTransform = matrixPool.get();\n relativeTransform.appendFrom(localTransform, parentTransform);\n } else {\n relativeTransform = matrixPool.get();\n relativeTransform = parentTransform.copyTo(relativeTransform);\n }\n const parentBounds = bounds;\n const preserveBounds = !!target.effects.length;\n if (preserveBounds) {\n bounds = boundsPool.get().clear();\n }\n if (target.boundsArea) {\n bounds.addRect(target.boundsArea, relativeTransform);\n } else {\n if (target.renderPipeId) {\n bounds.matrix = relativeTransform;\n bounds.addBounds(target.bounds);\n }\n const children = target.children;\n for (let i = 0; i < children.length; i++) {\n _getLocalBounds(children[i], bounds, relativeTransform, rootContainer, false);\n }\n }\n if (preserveBounds) {\n for (let i = 0; i < target.effects.length; i++) {\n target.effects[i].addLocalBounds?.(bounds, rootContainer);\n }\n parentBounds.addBounds(bounds, Matrix.IDENTITY);\n boundsPool.return(bounds);\n }\n matrixPool.return(relativeTransform);\n}\n\nexport { getLocalBounds };\n//# sourceMappingURL=getLocalBounds.mjs.map\n","\"use strict\";\nfunction checkChildrenDidChange(container, previousData) {\n const children = container.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const uid = child.uid;\n const didChange = (child._didViewChangeTick & 65535) << 16 | child._didContainerChangeTick & 65535;\n const index = previousData.index;\n if (previousData.data[index] !== uid || previousData.data[index + 1] !== didChange) {\n previousData.data[previousData.index] = uid;\n previousData.data[previousData.index + 1] = didChange;\n previousData.didChange = true;\n }\n previousData.index = index + 2;\n if (child.children.length) {\n checkChildrenDidChange(child, previousData);\n }\n }\n return previousData.didChange;\n}\n\nexport { checkChildrenDidChange };\n//# sourceMappingURL=checkChildrenDidChange.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { Bounds } from '../bounds/Bounds.mjs';\nimport { getGlobalBounds } from '../bounds/getGlobalBounds.mjs';\nimport { getLocalBounds } from '../bounds/getLocalBounds.mjs';\nimport { checkChildrenDidChange } from '../utils/checkChildrenDidChange.mjs';\n\n\"use strict\";\nconst tempMatrix = new Matrix();\nconst measureMixin = {\n _localBoundsCacheId: -1,\n _localBoundsCacheData: null,\n _setWidth(value, localWidth) {\n const sign = Math.sign(this.scale.x) || 1;\n if (localWidth !== 0) {\n this.scale.x = value / localWidth * sign;\n } else {\n this.scale.x = sign;\n }\n },\n _setHeight(value, localHeight) {\n const sign = Math.sign(this.scale.y) || 1;\n if (localHeight !== 0) {\n this.scale.y = value / localHeight * sign;\n } else {\n this.scale.y = sign;\n }\n },\n getLocalBounds() {\n if (!this._localBoundsCacheData) {\n this._localBoundsCacheData = {\n data: [],\n index: 1,\n didChange: false,\n localBounds: new Bounds()\n };\n }\n const localBoundsCacheData = this._localBoundsCacheData;\n localBoundsCacheData.index = 1;\n localBoundsCacheData.didChange = false;\n if (localBoundsCacheData.data[0] !== this._didViewChangeTick) {\n localBoundsCacheData.didChange = true;\n localBoundsCacheData.data[0] = this._didViewChangeTick;\n }\n checkChildrenDidChange(this, localBoundsCacheData);\n if (localBoundsCacheData.didChange) {\n getLocalBounds(this, localBoundsCacheData.localBounds, tempMatrix);\n }\n return localBoundsCacheData.localBounds;\n },\n getBounds(skipUpdate, bounds) {\n return getGlobalBounds(this, skipUpdate, bounds || new Bounds());\n }\n};\n\nexport { measureMixin };\n//# sourceMappingURL=measureMixin.mjs.map\n","\"use strict\";\nconst onRenderMixin = {\n _onRender: null,\n set onRender(func) {\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (!func) {\n if (this._onRender) {\n renderGroup?.removeOnRender(this);\n }\n this._onRender = null;\n return;\n }\n if (!this._onRender) {\n renderGroup?.addOnRender(this);\n }\n this._onRender = func;\n },\n get onRender() {\n return this._onRender;\n }\n};\n\nexport { onRenderMixin };\n//# sourceMappingURL=onRenderMixin.mjs.map\n","\"use strict\";\nconst sortMixin = {\n _zIndex: 0,\n sortDirty: false,\n sortableChildren: false,\n get zIndex() {\n return this._zIndex;\n },\n set zIndex(value) {\n if (this._zIndex === value) return;\n this._zIndex = value;\n this.depthOfChildModified();\n },\n depthOfChildModified() {\n if (this.parent) {\n this.parent.sortableChildren = true;\n this.parent.sortDirty = true;\n }\n if (this.parentRenderGroup) {\n this.parentRenderGroup.structureDidChange = true;\n }\n },\n sortChildren() {\n if (!this.sortDirty) return;\n this.sortDirty = false;\n this.children.sort(sortChildren);\n }\n};\nfunction sortChildren(a, b) {\n return a._zIndex - b._zIndex;\n}\n\nexport { sortMixin };\n//# sourceMappingURL=sortMixin.mjs.map\n","import { Point } from '../../../maths/point/Point.mjs';\nimport { matrixPool } from '../bounds/utils/matrixAndBoundsPool.mjs';\n\n\"use strict\";\nconst toLocalGlobalMixin = {\n getGlobalPosition(point = new Point(), skipUpdate = false) {\n if (this.parent) {\n this.parent.toGlobal(this._position, point, skipUpdate);\n } else {\n point.x = this._position.x;\n point.y = this._position.y;\n }\n return point;\n },\n toGlobal(position, point, skipUpdate = false) {\n const globalMatrix = this.getGlobalTransform(matrixPool.get(), skipUpdate);\n point = globalMatrix.apply(position, point);\n matrixPool.return(globalMatrix);\n return point;\n },\n toLocal(position, from, point, skipUpdate) {\n if (from) {\n position = from.toGlobal(position, point, skipUpdate);\n }\n const globalMatrix = this.getGlobalTransform(matrixPool.get(), skipUpdate);\n point = globalMatrix.applyInverse(position, point);\n matrixPool.return(globalMatrix);\n return point;\n }\n};\n\nexport { toLocalGlobalMixin };\n//# sourceMappingURL=toLocalGlobalMixin.mjs.map\n","import { uid } from '../../../../utils/data/uid.mjs';\n\n\"use strict\";\nclass InstructionSet {\n constructor() {\n /** a unique id for this instruction set used through the renderer */\n this.uid = uid(\"instructionSet\");\n /** the array of instructions */\n this.instructions = [];\n /** the actual size of the array (any instructions passed this should be ignored) */\n this.instructionSize = 0;\n this.renderables = [];\n /** used by the garbage collector to track when the instruction set was last used */\n this.gcTick = 0;\n }\n /** reset the instruction set so it can be reused set size back to 0 */\n reset() {\n this.instructionSize = 0;\n }\n /**\n * Destroy the instruction set, clearing the instructions and renderables.\n * @internal\n */\n destroy() {\n this.instructions.length = 0;\n this.renderables.length = 0;\n this.renderPipes = null;\n this.gcTick = 0;\n }\n /**\n * Add an instruction to the set\n * @param instruction - add an instruction to the set\n */\n add(instruction) {\n this.instructions[this.instructionSize++] = instruction;\n }\n /**\n * Log the instructions to the console (for debugging)\n * @internal\n */\n log() {\n this.instructions.length = this.instructionSize;\n console.table(this.instructions, [\"type\", \"action\"]);\n }\n}\n\nexport { InstructionSet };\n//# sourceMappingURL=InstructionSet.mjs.map\n","import { nextPow2 } from '../../../../maths/misc/pow2.mjs';\nimport { GlobalResourceRegistry } from '../../../../utils/pool/GlobalResourceRegistry.mjs';\nimport { TextureSource } from './sources/TextureSource.mjs';\nimport { Texture } from './Texture.mjs';\nimport { TextureStyle } from './TextureStyle.mjs';\n\n\"use strict\";\nlet count = 0;\nclass TexturePoolClass {\n /**\n * @param textureOptions - options that will be passed to BaseRenderTexture constructor\n * @param {SCALE_MODE} [textureOptions.scaleMode] - See {@link SCALE_MODE} for possible values.\n */\n constructor(textureOptions) {\n this._poolKeyHash = /* @__PURE__ */ Object.create(null);\n this._texturePool = {};\n this.textureOptions = textureOptions || {};\n this.enableFullScreen = false;\n this.textureStyle = new TextureStyle(this.textureOptions);\n }\n /**\n * Creates texture with params that were specified in pool constructor.\n * @param pixelWidth - Width of texture in pixels.\n * @param pixelHeight - Height of texture in pixels.\n * @param antialias\n * @param autoGenerateMipmaps - Whether to automatically generate mipmaps for this texture\n */\n createTexture(pixelWidth, pixelHeight, antialias, autoGenerateMipmaps) {\n const textureSource = new TextureSource({\n ...this.textureOptions,\n width: pixelWidth,\n height: pixelHeight,\n resolution: 1,\n antialias,\n autoGarbageCollect: false,\n autoGenerateMipmaps\n });\n return new Texture({\n source: textureSource,\n label: `texturePool_${count++}`\n });\n }\n /**\n * Gets a Power-of-Two render texture or fullScreen texture\n * @param frameWidth - The minimum width of the render texture.\n * @param frameHeight - The minimum height of the render texture.\n * @param resolution - The resolution of the render texture.\n * @param antialias\n * @param autoGenerateMipmaps - Whether to automatically generate mipmaps. Defaults to false.\n * @returns The new render texture.\n */\n getOptimalTexture(frameWidth, frameHeight, resolution = 1, antialias, autoGenerateMipmaps = false) {\n let po2Width = Math.ceil(frameWidth * resolution - 1e-6);\n let po2Height = Math.ceil(frameHeight * resolution - 1e-6);\n po2Width = nextPow2(po2Width);\n po2Height = nextPow2(po2Height);\n const antialiasFlag = antialias ? 1 : 0;\n const mipmapFlag = autoGenerateMipmaps ? 1 : 0;\n const key = (po2Width << 17) + (po2Height << 2) + (mipmapFlag << 1) + antialiasFlag;\n if (!this._texturePool[key]) {\n this._texturePool[key] = [];\n }\n let texture = this._texturePool[key].pop();\n if (!texture) {\n texture = this.createTexture(po2Width, po2Height, antialias, autoGenerateMipmaps);\n }\n texture.source._resolution = resolution;\n texture.source.width = po2Width / resolution;\n texture.source.height = po2Height / resolution;\n texture.source.pixelWidth = po2Width;\n texture.source.pixelHeight = po2Height;\n texture.frame.x = 0;\n texture.frame.y = 0;\n texture.frame.width = frameWidth;\n texture.frame.height = frameHeight;\n texture.updateUvs();\n this._poolKeyHash[texture.uid] = key;\n return texture;\n }\n /**\n * Gets a pooled texture matching the dimensions and resolution of the given texture.\n *\n * This is a convenience wrapper around {@link TexturePoolClass#getOptimalTexture|getOptimalTexture}\n * that copies width, height, and resolution from an existing texture. Useful when a filter needs\n * a temporary texture the same size as its input (e.g., for multi-pass blur).\n * @param texture - The texture whose dimensions to match.\n * @param antialias - Whether to use antialias on the pooled texture. Defaults to `false`.\n * @returns A pooled texture with power-of-two backing dimensions at the source resolution.\n */\n getSameSizeTexture(texture, antialias = false) {\n const source = texture.source;\n return this.getOptimalTexture(texture.width, texture.height, source._resolution, antialias);\n }\n /**\n * Returns a texture to the pool so it can be reused by future\n * {@link TexturePoolClass#getOptimalTexture|getOptimalTexture}\n * or {@link TexturePoolClass#getSameSizeTexture|getSameSizeTexture} calls.\n *\n * If you modified the texture's style after obtaining it (e.g., changed filtering or wrapping),\n * pass `resetStyle = true` to restore the pool's default {@link TexturePoolClass#textureStyle|textureStyle}.\n * This prevents style changes from leaking into subsequent consumers of the same pooled texture.\n * @param renderTexture - The texture to return to the pool.\n * @param resetStyle - When `true`, replaces the texture source's style with the pool default. Defaults to `false`.\n */\n returnTexture(renderTexture, resetStyle = false) {\n const key = this._poolKeyHash[renderTexture.uid];\n if (resetStyle) {\n renderTexture.source.style = this.textureStyle;\n }\n this._texturePool[key].push(renderTexture);\n }\n /**\n * Clears the pool.\n * @param destroyTextures - Destroy all stored textures.\n */\n clear(destroyTextures) {\n destroyTextures = destroyTextures !== false;\n if (destroyTextures) {\n for (const i in this._texturePool) {\n const textures = this._texturePool[i];\n if (textures) {\n for (let j = 0; j < textures.length; j++) {\n textures[j].destroy(true);\n }\n }\n }\n }\n this._texturePool = {};\n }\n}\nconst TexturePool = new TexturePoolClass();\nGlobalResourceRegistry.register(TexturePool);\n\nexport { TexturePool, TexturePoolClass };\n//# sourceMappingURL=TexturePool.mjs.map\n","import { Matrix } from '../../maths/matrix/Matrix.mjs';\nimport { InstructionSet } from '../../rendering/renderers/shared/instructions/InstructionSet.mjs';\nimport { TexturePool } from '../../rendering/renderers/shared/texture/TexturePool.mjs';\n\n\"use strict\";\nclass RenderGroup {\n constructor() {\n this.renderPipeId = \"renderGroup\";\n this.root = null;\n this.canBundle = false;\n this.renderGroupParent = null;\n this.renderGroupChildren = [];\n this.worldTransform = new Matrix();\n this.worldColorAlpha = 4294967295;\n this.worldColor = 16777215;\n this.worldAlpha = 1;\n // these updates are transform changes..\n this.childrenToUpdate = /* @__PURE__ */ Object.create(null);\n this.updateTick = 0;\n this.gcTick = 0;\n // these update are renderable changes..\n this.childrenRenderablesToUpdate = { list: [], index: 0 };\n // other\n this.structureDidChange = true;\n this.instructionSet = new InstructionSet();\n this._onRenderContainers = [];\n /**\n * Indicates if the cached texture needs to be updated.\n * @default true\n */\n this.textureNeedsUpdate = true;\n /**\n * Indicates if the container should be cached as a texture.\n * @default false\n */\n this.isCachedAsTexture = false;\n this._matrixDirty = 7;\n }\n init(root) {\n this.root = root;\n if (root._onRender) this.addOnRender(root);\n root.didChange = true;\n const children = root.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n child._updateFlags = 15;\n this.addChild(child);\n }\n }\n enableCacheAsTexture(options = {}) {\n this.textureOptions = options;\n this.isCachedAsTexture = true;\n this.textureNeedsUpdate = true;\n }\n disableCacheAsTexture() {\n this.isCachedAsTexture = false;\n if (this.texture) {\n TexturePool.returnTexture(this.texture, true);\n this.texture = null;\n }\n }\n updateCacheTexture() {\n this.textureNeedsUpdate = true;\n const cachedParent = this._parentCacheAsTextureRenderGroup;\n if (cachedParent && !cachedParent.textureNeedsUpdate) {\n cachedParent.updateCacheTexture();\n }\n }\n reset() {\n this.renderGroupChildren.length = 0;\n for (const i in this.childrenToUpdate) {\n const childrenAtDepth = this.childrenToUpdate[i];\n childrenAtDepth.list.fill(null);\n childrenAtDepth.index = 0;\n }\n this.childrenRenderablesToUpdate.index = 0;\n this.childrenRenderablesToUpdate.list.fill(null);\n this.root = null;\n this.updateTick = 0;\n this.structureDidChange = true;\n this._onRenderContainers.length = 0;\n this.renderGroupParent = null;\n this.disableCacheAsTexture();\n }\n get localTransform() {\n return this.root.localTransform;\n }\n addRenderGroupChild(renderGroupChild) {\n if (renderGroupChild.renderGroupParent) {\n renderGroupChild.renderGroupParent._removeRenderGroupChild(renderGroupChild);\n }\n renderGroupChild.renderGroupParent = this;\n this.renderGroupChildren.push(renderGroupChild);\n }\n _removeRenderGroupChild(renderGroupChild) {\n const index = this.renderGroupChildren.indexOf(renderGroupChild);\n if (index > -1) {\n this.renderGroupChildren.splice(index, 1);\n }\n renderGroupChild.renderGroupParent = null;\n }\n addChild(child) {\n this.structureDidChange = true;\n child.parentRenderGroup = this;\n child.updateTick = -1;\n if (child.parent === this.root) {\n child.relativeRenderGroupDepth = 1;\n } else {\n child.relativeRenderGroupDepth = child.parent.relativeRenderGroupDepth + 1;\n }\n child.didChange = true;\n this.onChildUpdate(child);\n if (child.renderGroup) {\n this.addRenderGroupChild(child.renderGroup);\n return;\n }\n if (child._onRender) this.addOnRender(child);\n const children = child.children;\n for (let i = 0; i < children.length; i++) {\n this.addChild(children[i]);\n }\n }\n removeChild(child) {\n this.structureDidChange = true;\n if (child._onRender) {\n if (!child.renderGroup) {\n this.removeOnRender(child);\n }\n }\n child.parentRenderGroup = null;\n if (child.renderGroup) {\n this._removeRenderGroupChild(child.renderGroup);\n return;\n }\n const children = child.children;\n for (let i = 0; i < children.length; i++) {\n this.removeChild(children[i]);\n }\n }\n removeChildren(children) {\n for (let i = 0; i < children.length; i++) {\n this.removeChild(children[i]);\n }\n }\n onChildUpdate(child) {\n let childrenToUpdate = this.childrenToUpdate[child.relativeRenderGroupDepth];\n if (!childrenToUpdate) {\n childrenToUpdate = this.childrenToUpdate[child.relativeRenderGroupDepth] = {\n index: 0,\n list: []\n };\n }\n childrenToUpdate.list[childrenToUpdate.index++] = child;\n }\n updateRenderable(renderable) {\n if (renderable.globalDisplayStatus < 7) return;\n this.instructionSet.renderPipes[renderable.renderPipeId].updateRenderable(renderable);\n renderable.didViewUpdate = false;\n }\n onChildViewUpdate(child) {\n this.childrenRenderablesToUpdate.list[this.childrenRenderablesToUpdate.index++] = child;\n }\n get isRenderable() {\n return this.root.localDisplayStatus === 7 && this.worldAlpha > 0;\n }\n /**\n * adding a container to the onRender list will make sure the user function\n * passed in to the user defined 'onRender` callBack\n * @param container - the container to add to the onRender list\n */\n addOnRender(container) {\n this._onRenderContainers.push(container);\n }\n removeOnRender(container) {\n this._onRenderContainers.splice(this._onRenderContainers.indexOf(container), 1);\n }\n runOnRender(renderer) {\n for (let i = 0; i < this._onRenderContainers.length; i++) {\n this._onRenderContainers[i]._onRender(renderer);\n }\n }\n destroy() {\n this.disableCacheAsTexture();\n this.renderGroupParent = null;\n this.root = null;\n this.childrenRenderablesToUpdate = null;\n this.childrenToUpdate = null;\n this.renderGroupChildren = null;\n this._onRenderContainers = null;\n this.instructionSet = null;\n }\n getChildren(out = []) {\n const children = this.root.children;\n for (let i = 0; i < children.length; i++) {\n this._getChildren(children[i], out);\n }\n return out;\n }\n _getChildren(container, out = []) {\n out.push(container);\n if (container.renderGroup) return out;\n const children = container.children;\n for (let i = 0; i < children.length; i++) {\n this._getChildren(children[i], out);\n }\n return out;\n }\n invalidateMatrices() {\n this._matrixDirty = 7;\n }\n /**\n * Returns the inverse of the world transform matrix.\n * @returns {Matrix} The inverse of the world transform matrix.\n */\n get inverseWorldTransform() {\n if ((this._matrixDirty & 1) === 0) return this._inverseWorldTransform;\n this._matrixDirty &= ~1;\n this._inverseWorldTransform || (this._inverseWorldTransform = new Matrix());\n return this._inverseWorldTransform.copyFrom(this.worldTransform).invert();\n }\n /**\n * Returns the inverse of the texture offset transform matrix.\n * @returns {Matrix} The inverse of the texture offset transform matrix.\n */\n get textureOffsetInverseTransform() {\n if ((this._matrixDirty & 2) === 0) return this._textureOffsetInverseTransform;\n this._matrixDirty &= ~2;\n this._textureOffsetInverseTransform || (this._textureOffsetInverseTransform = new Matrix());\n return this._textureOffsetInverseTransform.copyFrom(this.inverseWorldTransform).translate(\n -this._textureBounds.x,\n -this._textureBounds.y\n );\n }\n /**\n * Returns the inverse of the parent texture transform matrix.\n * This is used to properly transform coordinates when rendering into cached textures.\n * @returns {Matrix} The inverse of the parent texture transform matrix.\n */\n get inverseParentTextureTransform() {\n if ((this._matrixDirty & 4) === 0) return this._inverseParentTextureTransform;\n this._matrixDirty &= ~4;\n const parentCacheAsTexture = this._parentCacheAsTextureRenderGroup;\n if (parentCacheAsTexture) {\n this._inverseParentTextureTransform || (this._inverseParentTextureTransform = new Matrix());\n return this._inverseParentTextureTransform.copyFrom(this.worldTransform).prepend(parentCacheAsTexture.inverseWorldTransform).translate(\n -parentCacheAsTexture._textureBounds.x,\n -parentCacheAsTexture._textureBounds.y\n );\n }\n return this.worldTransform;\n }\n /**\n * Returns a matrix that transforms coordinates to the correct coordinate space of the texture being rendered to.\n * This is the texture offset inverse transform of the closest parent RenderGroup that is cached as a texture.\n * @returns {Matrix | null} The transform matrix for the cached texture coordinate space,\n * or null if no parent is cached as texture.\n */\n get cacheToLocalTransform() {\n if (this.isCachedAsTexture) {\n return this.textureOffsetInverseTransform;\n }\n if (!this._parentCacheAsTextureRenderGroup) return null;\n return this._parentCacheAsTextureRenderGroup.textureOffsetInverseTransform;\n }\n}\n\nexport { RenderGroup };\n//# sourceMappingURL=RenderGroup.mjs.map\n","\"use strict\";\nfunction assignWithIgnore(target, options, ignore = {}) {\n for (const key in options) {\n if (!ignore[key] && options[key] !== void 0) {\n target[key] = options[key];\n }\n }\n}\n\nexport { assignWithIgnore };\n//# sourceMappingURL=assignWithIgnore.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { Color } from '../../color/Color.mjs';\nimport { cullingMixin } from '../../culling/cullingMixin.mjs';\nimport { extensions } from '../../extensions/Extensions.mjs';\nimport { Matrix } from '../../maths/matrix/Matrix.mjs';\nimport { RAD_TO_DEG, DEG_TO_RAD } from '../../maths/misc/const.mjs';\nimport { ObservablePoint } from '../../maths/point/ObservablePoint.mjs';\nimport { uid } from '../../utils/data/uid.mjs';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs';\nimport { warn } from '../../utils/logging/warn.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\nimport { cacheAsTextureMixin } from './container-mixins/cacheAsTextureMixin.mjs';\nimport { childrenHelperMixin } from './container-mixins/childrenHelperMixin.mjs';\nimport { collectRenderablesMixin } from './container-mixins/collectRenderablesMixin.mjs';\nimport { effectsMixin } from './container-mixins/effectsMixin.mjs';\nimport { findMixin } from './container-mixins/findMixin.mjs';\nimport { getFastGlobalBoundsMixin } from './container-mixins/getFastGlobalBoundsMixin.mjs';\nimport { bgr2rgb, getGlobalMixin } from './container-mixins/getGlobalMixin.mjs';\nimport { measureMixin } from './container-mixins/measureMixin.mjs';\nimport { onRenderMixin } from './container-mixins/onRenderMixin.mjs';\nimport { sortMixin } from './container-mixins/sortMixin.mjs';\nimport { toLocalGlobalMixin } from './container-mixins/toLocalGlobalMixin.mjs';\nimport { RenderGroup } from './RenderGroup.mjs';\nimport { assignWithIgnore } from './utils/assignWithIgnore.mjs';\n\n\"use strict\";\nconst defaultSkew = new ObservablePoint(null);\nconst defaultPivot = new ObservablePoint(null);\nconst defaultScale = new ObservablePoint(null, 1, 1);\nconst defaultOrigin = new ObservablePoint(null);\nconst UPDATE_COLOR = 1;\nconst UPDATE_BLEND = 2;\nconst UPDATE_VISIBLE = 4;\nconst UPDATE_TRANSFORM = 8;\nclass Container extends EventEmitter {\n constructor(options = {}) {\n super();\n /**\n * unique id for this container\n * @internal\n */\n this.uid = uid(\"renderable\");\n /** @private */\n this._updateFlags = 15;\n // the render group this container owns\n /** @private */\n this.renderGroup = null;\n // the render group this container belongs to\n /** @private */\n this.parentRenderGroup = null;\n // the index of the container in the render group\n /** @private */\n this.parentRenderGroupIndex = 0;\n // set to true if the container has changed. It is reset once the changes have been applied\n // by the transform system\n // its here to stop ensure that when things change, only one update gets registers with the transform system\n /** @private */\n this.didChange = false;\n // same as above, but for the renderable\n /** @private */\n this.didViewUpdate = false;\n // how deep is the container relative to its render group..\n // unless the element is the root render group - it will be relative to its parent\n /** @private */\n this.relativeRenderGroupDepth = 0;\n /**\n * The array of children of this container. Each child must be a Container or extend from it.\n *\n * The array is read-only, but its contents can be modified using Container methods.\n * @example\n * ```ts\n * // Access children\n * const firstChild = container.children[0];\n * const lastChild = container.children[container.children.length - 1];\n * ```\n * @readonly\n * @see {@link Container#addChild} For adding children\n * @see {@link Container#removeChild} For removing children\n */\n this.children = [];\n /**\n * The display object container that contains this display object.\n * This represents the parent-child relationship in the display tree.\n * @example\n * ```ts\n * // Basic parent access\n * const parent = sprite.parent;\n *\n * // Walk up the tree\n * let current = sprite;\n * while (current.parent) {\n * console.log('Level up:', current.parent.constructor.name);\n * current = current.parent;\n * }\n * ```\n * @readonly\n * @see {@link Container#addChild} For adding to a parent\n * @see {@link Container#removeChild} For removing from parent\n */\n this.parent = null;\n // used internally for changing up the render order.. mainly for masks and filters\n // TODO setting this should cause a rebuild??\n /** @private */\n this.includeInBuild = true;\n /** @private */\n this.measurable = true;\n /** @private */\n this.isSimple = true;\n /**\n * The RenderLayer this container belongs to, if any.\n * If it belongs to a RenderLayer, it will be rendered from the RenderLayer's position in the scene.\n * @readonly\n * @advanced\n */\n this.parentRenderLayer = null;\n // / /////////////Transform related props//////////////\n // used by the transform system to check if a container needs to be updated that frame\n // if the tick matches the current transform system tick, it is not updated again\n /** @internal */\n this.updateTick = -1;\n /**\n * Current transform of the object based on local factors: position, scale, other stuff.\n * This matrix represents the local transformation without any parent influence.\n * @example\n * ```ts\n * // Basic transform access\n * const localMatrix = sprite.localTransform;\n * console.log(localMatrix.toString());\n * ```\n * @readonly\n * @see {@link Container#worldTransform} For global transform\n * @see {@link Container#groupTransform} For render group transform\n */\n this.localTransform = new Matrix();\n /**\n * The relative group transform is a transform relative to the render group it belongs too. It will include all parent\n * transforms and up to the render group (think of it as kind of like a stage - but the stage can be nested).\n * If this container is is self a render group matrix will be relative to its parent render group\n * @readonly\n * @advanced\n */\n this.relativeGroupTransform = new Matrix();\n /**\n * The group transform is a transform relative to the render group it belongs too.\n * If this container is render group then this will be an identity matrix. other wise it\n * will be the same as the relativeGroupTransform.\n * Use this value when actually rendering things to the screen\n * @readonly\n * @advanced\n */\n this.groupTransform = this.relativeGroupTransform;\n /**\n * Whether this object has been destroyed. If true, the object should no longer be used.\n * After an object is destroyed, all of its functionality is disabled and references are removed.\n * @example\n * ```ts\n * // Cleanup with destroy\n * sprite.destroy();\n * console.log(sprite.destroyed); // true\n * ```\n * @default false\n * @see {@link Container#destroy} For destroying objects\n */\n this.destroyed = false;\n // transform data..\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n * @internal\n */\n this._position = new ObservablePoint(this, 0, 0);\n /**\n * The scale factor of the object.\n * @internal\n */\n this._scale = defaultScale;\n /**\n * The pivot point of the container that it rotates around.\n * @internal\n */\n this._pivot = defaultPivot;\n /**\n * The origin point around which the container rotates and scales.\n * Unlike pivot, changing origin will not move the container's position.\n * @private\n */\n this._origin = defaultOrigin;\n /**\n * The skew amount, on the x and y axis.\n * @internal\n */\n this._skew = defaultSkew;\n /**\n * The X-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n * @internal\n */\n this._cx = 1;\n /**\n * The Y-coordinate value of the normalized local X axis,\n * the first column of the local transformation matrix without a scale.\n * @internal\n */\n this._sx = 0;\n /**\n * The X-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n * @internal\n */\n this._cy = 0;\n /**\n * The Y-coordinate value of the normalized local Y axis,\n * the second column of the local transformation matrix without a scale.\n * @internal\n */\n this._sy = 1;\n /**\n * The rotation amount.\n * @internal\n */\n this._rotation = 0;\n // / COLOR related props //////////////\n // color stored as ABGR\n /** @internal */\n this.localColor = 16777215;\n /** @internal */\n this.localAlpha = 1;\n /** @internal */\n this.groupAlpha = 1;\n // A\n /** @internal */\n this.groupColor = 16777215;\n // BGR\n /** @internal */\n this.groupColorAlpha = 4294967295;\n // ABGR\n // / BLEND related props //////////////\n /** @internal */\n this.localBlendMode = \"inherit\";\n /** @internal */\n this.groupBlendMode = \"normal\";\n // / VISIBILITY related props //////////////\n // visibility\n // 0b11\n // first bit is visible, second bit is renderable\n /**\n * This property holds three bits: culled, visible, renderable\n * the third bit represents culling (0 = culled, 1 = not culled) 0b100\n * the second bit represents visibility (0 = not visible, 1 = visible) 0b010\n * the first bit represents renderable (0 = not renderable, 1 = renderable) 0b001\n * @internal\n */\n this.localDisplayStatus = 7;\n // 0b11 | 0b10 | 0b01 | 0b00\n /** @internal */\n this.globalDisplayStatus = 7;\n /**\n * A value that increments each time the containe is modified\n * eg children added, removed etc\n * @ignore\n */\n this._didContainerChangeTick = 0;\n /**\n * A value that increments each time the container view is modified\n * eg texture swap, geometry change etc\n * @ignore\n */\n this._didViewChangeTick = 0;\n /**\n * property that tracks if the container transform has changed\n * @ignore\n */\n this._didLocalTransformChangeId = -1;\n this.effects = [];\n assignWithIgnore(this, options, {\n children: true,\n parent: true,\n effects: true\n });\n options.children?.forEach((child) => this.addChild(child));\n options.parent?.addChild(this);\n }\n /**\n * Mixes all enumerable properties and methods from a source object to Container.\n * @param source - The source of properties and methods to mix in.\n * @deprecated since 8.8.0\n */\n static mixin(source) {\n deprecation(\"8.8.0\", \"Container.mixin is deprecated, please use extensions.mixin instead.\");\n extensions.mixin(Container, source);\n }\n // = 'default';\n /**\n * We now use the _didContainerChangeTick and _didViewChangeTick to track changes\n * @deprecated since 8.2.6\n * @ignore\n */\n set _didChangeId(value) {\n this._didViewChangeTick = value >> 12 & 4095;\n this._didContainerChangeTick = value & 4095;\n }\n /** @ignore */\n get _didChangeId() {\n return this._didContainerChangeTick & 4095 | (this._didViewChangeTick & 4095) << 12;\n }\n /**\n * Adds one or more children to the container.\n * The children will be rendered as part of this container's display list.\n * @example\n * ```ts\n * // Add a single child\n * container.addChild(sprite);\n *\n * // Add multiple children\n * container.addChild(background, player, foreground);\n *\n * // Add with type checking\n * const sprite = container.addChild<Sprite>(new Sprite(texture));\n * sprite.tint = 'red';\n * ```\n * @param children - The Container(s) to add to the container\n * @returns The first child that was added\n * @see {@link Container#removeChild} For removing children\n * @see {@link Container#addChildAt} For adding at specific index\n */\n addChild(...children) {\n if (!this.allowChildren) {\n deprecation(v8_0_0, \"addChild: Only Containers will be allowed to add children in v8.0.0\");\n }\n if (children.length > 1) {\n for (let i = 0; i < children.length; i++) {\n this.addChild(children[i]);\n }\n return children[0];\n }\n const child = children[0];\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (child.parent === this) {\n this.children.splice(this.children.indexOf(child), 1);\n this.children.push(child);\n if (renderGroup) {\n renderGroup.structureDidChange = true;\n }\n return child;\n }\n if (child.parent) {\n child.parent.removeChild(child);\n }\n this.children.push(child);\n if (this.sortableChildren) this.sortDirty = true;\n child.parent = this;\n child.didChange = true;\n child._updateFlags = 15;\n if (renderGroup) {\n renderGroup.addChild(child);\n }\n this.emit(\"childAdded\", child, this, this.children.length - 1);\n child.emit(\"added\", this);\n this._didViewChangeTick++;\n if (child._zIndex !== 0) {\n child.depthOfChildModified();\n }\n return child;\n }\n /**\n * Removes one or more children from the container.\n * When removing multiple children, events will be triggered for each child in sequence.\n * @example\n * ```ts\n * // Remove a single child\n * const removed = container.removeChild(sprite);\n *\n * // Remove multiple children\n * const bg = container.removeChild(background, player, userInterface);\n *\n * // Remove with type checking\n * const sprite = container.removeChild<Sprite>(childSprite);\n * sprite.texture = newTexture;\n * ```\n * @param children - The Container(s) to remove\n * @returns The first child that was removed\n * @see {@link Container#addChild} For adding children\n * @see {@link Container#removeChildren} For removing multiple children\n */\n removeChild(...children) {\n if (children.length > 1) {\n for (let i = 0; i < children.length; i++) {\n this.removeChild(children[i]);\n }\n return children[0];\n }\n const child = children[0];\n const index = this.children.indexOf(child);\n if (index > -1) {\n this._didViewChangeTick++;\n this.children.splice(index, 1);\n if (this.renderGroup) {\n this.renderGroup.removeChild(child);\n } else if (this.parentRenderGroup) {\n this.parentRenderGroup.removeChild(child);\n }\n if (child.parentRenderLayer) {\n child.parentRenderLayer.detach(child);\n }\n child.parent = null;\n this.emit(\"childRemoved\", child, this, index);\n child.emit(\"removed\", this);\n }\n return child;\n }\n /** @ignore */\n _onUpdate(point) {\n if (point) {\n if (point === this._skew) {\n this._updateSkew();\n }\n }\n this._didContainerChangeTick++;\n if (this.didChange) return;\n this.didChange = true;\n if (this.parentRenderGroup) {\n this.parentRenderGroup.onChildUpdate(this);\n }\n }\n set isRenderGroup(value) {\n if (!!this.renderGroup === value) return;\n if (value) {\n this.enableRenderGroup();\n } else {\n this.disableRenderGroup();\n }\n }\n /**\n * Returns true if this container is a render group.\n * This means that it will be rendered as a separate pass, with its own set of instructions\n * @advanced\n */\n get isRenderGroup() {\n return !!this.renderGroup;\n }\n /**\n * Calling this enables a render group for this container.\n * This means it will be rendered as a separate set of instructions.\n * The transform of the container will also be handled on the GPU rather than the CPU.\n * @advanced\n */\n enableRenderGroup() {\n if (this.renderGroup) return;\n const parentRenderGroup = this.parentRenderGroup;\n parentRenderGroup?.removeChild(this);\n this.renderGroup = BigPool.get(RenderGroup, this);\n this.groupTransform = Matrix.IDENTITY;\n parentRenderGroup?.addChild(this);\n this._updateIsSimple();\n }\n /**\n * This will disable the render group for this container.\n * @advanced\n */\n disableRenderGroup() {\n if (!this.renderGroup) return;\n const parentRenderGroup = this.parentRenderGroup;\n parentRenderGroup?.removeChild(this);\n BigPool.return(this.renderGroup);\n this.renderGroup = null;\n this.groupTransform = this.relativeGroupTransform;\n parentRenderGroup?.addChild(this);\n this._updateIsSimple();\n }\n /** @ignore */\n _updateIsSimple() {\n this.isSimple = !this.renderGroup && this.effects.length === 0;\n }\n /**\n * Current transform of the object based on world (parent) factors.\n *\n * This matrix represents the absolute transformation in the scene graph.\n * @example\n * ```ts\n * // Get world position\n * const worldPos = container.worldTransform;\n * console.log(`World position: (${worldPos.tx}, ${worldPos.ty})`);\n * ```\n * @readonly\n * @see {@link Container#localTransform} For local space transform\n */\n get worldTransform() {\n this._worldTransform || (this._worldTransform = new Matrix());\n if (this.renderGroup) {\n this._worldTransform.copyFrom(this.renderGroup.worldTransform);\n } else if (this.parentRenderGroup) {\n this._worldTransform.appendFrom(this.relativeGroupTransform, this.parentRenderGroup.worldTransform);\n }\n return this._worldTransform;\n }\n /**\n * The position of the container on the x axis relative to the local coordinates of the parent.\n *\n * An alias to position.x\n * @example\n * ```ts\n * // Basic position\n * container.x = 100;\n * ```\n */\n get x() {\n return this._position.x;\n }\n set x(value) {\n this._position.x = value;\n }\n /**\n * The position of the container on the y axis relative to the local coordinates of the parent.\n *\n * An alias to position.y\n * @example\n * ```ts\n * // Basic position\n * container.y = 200;\n * ```\n */\n get y() {\n return this._position.y;\n }\n set y(value) {\n this._position.y = value;\n }\n /**\n * The coordinate of the object relative to the local coordinates of the parent.\n * @example\n * ```ts\n * // Basic position setting\n * container.position.set(100, 200);\n * container.position.set(100); // Sets both x and y to 100\n * // Using point data\n * container.position = { x: 50, y: 75 };\n * ```\n * @since 4.0.0\n */\n get position() {\n return this._position;\n }\n set position(value) {\n this._position.copyFrom(value);\n }\n /**\n * The rotation of the object in radians.\n *\n * > [!NOTE] 'rotation' and 'angle' have the same effect on a display object;\n * > rotation is in radians, angle is in degrees.\n * @example\n * ```ts\n * // Basic rotation\n * container.rotation = Math.PI / 4; // 45 degrees\n *\n * // Convert from degrees\n * const degrees = 45;\n * container.rotation = degrees * Math.PI / 180;\n *\n * // Rotate around center\n * container.pivot.set(container.width / 2, container.height / 2);\n * container.rotation = Math.PI; // 180 degrees\n *\n * // Rotate around center with origin\n * container.origin.set(container.width / 2, container.height / 2);\n * container.rotation = Math.PI; // 180 degrees\n * ```\n */\n get rotation() {\n return this._rotation;\n }\n set rotation(value) {\n if (this._rotation !== value) {\n this._rotation = value;\n this._onUpdate(this._skew);\n }\n }\n /**\n * The angle of the object in degrees.\n *\n * > [!NOTE] 'rotation' and 'angle' have the same effect on a display object;\n * > rotation is in radians, angle is in degrees.\n * @example\n * ```ts\n * // Basic angle rotation\n * sprite.angle = 45; // 45 degrees\n *\n * // Rotate around center\n * sprite.pivot.set(sprite.width / 2, sprite.height / 2);\n * sprite.angle = 180; // Half rotation\n *\n * // Rotate around center with origin\n * sprite.origin.set(sprite.width / 2, sprite.height / 2);\n * sprite.angle = 180; // Half rotation\n *\n * // Reset rotation\n * sprite.angle = 0;\n * ```\n */\n get angle() {\n return this.rotation * RAD_TO_DEG;\n }\n set angle(value) {\n this.rotation = value * DEG_TO_RAD;\n }\n /**\n * The center of rotation, scaling, and skewing for this display object in its local space.\n * The `position` is the projection of `pivot` in the parent's local space.\n *\n * By default, the pivot is the origin (0, 0).\n * @example\n * ```ts\n * // Rotate around center\n * container.pivot.set(container.width / 2, container.height / 2);\n * container.rotation = Math.PI; // Rotates around center\n * ```\n * @since 4.0.0\n */\n get pivot() {\n if (this._pivot === defaultPivot) {\n this._pivot = new ObservablePoint(this, 0, 0);\n }\n return this._pivot;\n }\n set pivot(value) {\n if (this._pivot === defaultPivot) {\n this._pivot = new ObservablePoint(this, 0, 0);\n if (this._origin !== defaultOrigin) {\n warn(`Setting both a pivot and origin on a Container is not recommended. This can lead to unexpected behavior if not handled carefully.`);\n }\n }\n typeof value === \"number\" ? this._pivot.set(value) : this._pivot.copyFrom(value);\n }\n /**\n * The skew factor for the object in radians. Skewing is a transformation that distorts\n * the object by rotating it differently at each point, creating a non-uniform shape.\n * @example\n * ```ts\n * // Basic skewing\n * container.skew.set(0.5, 0); // Skew horizontally\n * container.skew.set(0, 0.5); // Skew vertically\n *\n * // Skew with point data\n * container.skew = { x: 0.3, y: 0.3 }; // Diagonal skew\n *\n * // Reset skew\n * container.skew.set(0, 0);\n *\n * // Animate skew\n * app.ticker.add(() => {\n * // Create wave effect\n * container.skew.x = Math.sin(Date.now() / 1000) * 0.3;\n * });\n *\n * // Combine with rotation\n * container.rotation = Math.PI / 4; // 45 degrees\n * container.skew.set(0.2, 0.2); // Skew the rotated object\n * ```\n * @since 4.0.0\n * @type {ObservablePoint} Point-like object with x/y properties in radians\n * @default {x: 0, y: 0}\n */\n get skew() {\n if (this._skew === defaultSkew) {\n this._skew = new ObservablePoint(this, 0, 0);\n }\n return this._skew;\n }\n set skew(value) {\n if (this._skew === defaultSkew) {\n this._skew = new ObservablePoint(this, 0, 0);\n }\n this._skew.copyFrom(value);\n }\n /**\n * The scale factors of this object along the local coordinate axes.\n *\n * The default scale is (1, 1).\n * @example\n * ```ts\n * // Basic scaling\n * container.scale.set(2, 2); // Scales to double size\n * container.scale.set(2); // Scales uniformly to double size\n * container.scale = 2; // Scales uniformly to double size\n * // Scale to a specific width and height\n * container.setSize(200, 100); // Sets width to 200 and height to 100\n * ```\n * @since 4.0.0\n */\n get scale() {\n if (this._scale === defaultScale) {\n this._scale = new ObservablePoint(this, 1, 1);\n }\n return this._scale;\n }\n set scale(value) {\n if (this._scale === defaultScale) {\n this._scale = new ObservablePoint(this, 0, 0);\n }\n if (typeof value === \"string\") {\n value = parseFloat(value);\n }\n typeof value === \"number\" ? this._scale.set(value) : this._scale.copyFrom(value);\n }\n /**\n * @experimental\n * The origin point around which the container rotates and scales without affecting its position.\n * Unlike pivot, changing the origin will not move the container's position.\n * @example\n * ```ts\n * // Rotate around center point\n * container.origin.set(container.width / 2, container.height / 2);\n * container.rotation = Math.PI; // Rotates around center\n *\n * // Reset origin\n * container.origin.set(0, 0);\n * ```\n */\n get origin() {\n if (this._origin === defaultOrigin) {\n this._origin = new ObservablePoint(this, 0, 0);\n }\n return this._origin;\n }\n set origin(value) {\n if (this._origin === defaultOrigin) {\n this._origin = new ObservablePoint(this, 0, 0);\n if (this._pivot !== defaultPivot) {\n warn(`Setting both a pivot and origin on a Container is not recommended. This can lead to unexpected behavior if not handled carefully.`);\n }\n }\n typeof value === \"number\" ? this._origin.set(value) : this._origin.copyFrom(value);\n }\n /**\n * The width of the Container, setting this will actually modify the scale to achieve the value set.\n * > [!NOTE] Changing the width will adjust the scale.x property of the container while maintaining its aspect ratio.\n * > [!NOTE] If you want to set both width and height at the same time, use {@link Container#setSize}\n * as it is more optimized by not recalculating the local bounds twice.\n * @example\n * ```ts\n * // Basic width setting\n * container.width = 100;\n * // Optimized width setting\n * container.setSize(100, 100);\n * ```\n */\n get width() {\n return Math.abs(this.scale.x * this.getLocalBounds().width);\n }\n set width(value) {\n const localWidth = this.getLocalBounds().width;\n this._setWidth(value, localWidth);\n }\n /**\n * The height of the Container,\n * > [!NOTE] Changing the height will adjust the scale.y property of the container while maintaining its aspect ratio.\n * > [!NOTE] If you want to set both width and height at the same time, use {@link Container#setSize}\n * as it is more optimized by not recalculating the local bounds twice.\n * @example\n * ```ts\n * // Basic height setting\n * container.height = 200;\n * // Optimized height setting\n * container.setSize(100, 200);\n * ```\n */\n get height() {\n return Math.abs(this.scale.y * this.getLocalBounds().height);\n }\n set height(value) {\n const localHeight = this.getLocalBounds().height;\n this._setHeight(value, localHeight);\n }\n /**\n * Retrieves the size of the container as a [Size]{@link Size} object.\n *\n * This is faster than get the width and height separately.\n * @example\n * ```ts\n * // Basic size retrieval\n * const size = container.getSize();\n * console.log(`Size: ${size.width}x${size.height}`);\n *\n * // Reuse existing size object\n * const reuseSize = { width: 0, height: 0 };\n * container.getSize(reuseSize);\n * ```\n * @param out - Optional object to store the size in.\n * @returns The size of the container.\n */\n getSize(out) {\n if (!out) {\n out = {};\n }\n const bounds = this.getLocalBounds();\n out.width = Math.abs(this.scale.x * bounds.width);\n out.height = Math.abs(this.scale.y * bounds.height);\n return out;\n }\n /**\n * Sets the size of the container to the specified width and height.\n * This is more efficient than setting width and height separately as it only recalculates bounds once.\n * @example\n * ```ts\n * // Basic size setting\n * container.setSize(100, 200);\n *\n * // Set uniform size\n * container.setSize(100); // Sets both width and height to 100\n * ```\n * @param value - This can be either a number or a [Size]{@link Size} object.\n * @param height - The height to set. Defaults to the value of `width` if not provided.\n */\n setSize(value, height) {\n const size = this.getLocalBounds();\n if (typeof value === \"object\") {\n height = value.height ?? value.width;\n value = value.width;\n } else {\n height ?? (height = value);\n }\n value !== void 0 && this._setWidth(value, size.width);\n height !== void 0 && this._setHeight(height, size.height);\n }\n /** Called when the skew or the rotation changes. */\n _updateSkew() {\n const rotation = this._rotation;\n const skew = this._skew;\n this._cx = Math.cos(rotation + skew._y);\n this._sx = Math.sin(rotation + skew._y);\n this._cy = -Math.sin(rotation - skew._x);\n this._sy = Math.cos(rotation - skew._x);\n }\n /**\n * Updates the transform properties of the container.\n * Allows partial updates of transform properties for optimized manipulation.\n * @example\n * ```ts\n * // Basic transform update\n * container.updateTransform({\n * x: 100,\n * y: 200,\n * rotation: Math.PI / 4\n * });\n *\n * // Scale and rotate around center\n * sprite.updateTransform({\n * pivotX: sprite.width / 2,\n * pivotY: sprite.height / 2,\n * scaleX: 2,\n * scaleY: 2,\n * rotation: Math.PI\n * });\n *\n * // Update position only\n * button.updateTransform({\n * x: button.x + 10, // Move right\n * y: button.y // Keep same y\n * });\n * ```\n * @param opts - Transform options to update\n * @param opts.x - The x position\n * @param opts.y - The y position\n * @param opts.scaleX - The x-axis scale factor\n * @param opts.scaleY - The y-axis scale factor\n * @param opts.rotation - The rotation in radians\n * @param opts.skewX - The x-axis skew factor\n * @param opts.skewY - The y-axis skew factor\n * @param opts.pivotX - The x-axis pivot point\n * @param opts.pivotY - The y-axis pivot point\n * @returns This container, for chaining\n * @see {@link Container#setFromMatrix} For matrix-based transforms\n * @see {@link Container#position} For direct position access\n */\n updateTransform(opts) {\n this.position.set(\n typeof opts.x === \"number\" ? opts.x : this.position.x,\n typeof opts.y === \"number\" ? opts.y : this.position.y\n );\n this.scale.set(\n typeof opts.scaleX === \"number\" ? opts.scaleX || 1 : this.scale.x,\n typeof opts.scaleY === \"number\" ? opts.scaleY || 1 : this.scale.y\n );\n this.rotation = typeof opts.rotation === \"number\" ? opts.rotation : this.rotation;\n this.skew.set(\n typeof opts.skewX === \"number\" ? opts.skewX : this.skew.x,\n typeof opts.skewY === \"number\" ? opts.skewY : this.skew.y\n );\n this.pivot.set(\n typeof opts.pivotX === \"number\" ? opts.pivotX : this.pivot.x,\n typeof opts.pivotY === \"number\" ? opts.pivotY : this.pivot.y\n );\n this.origin.set(\n typeof opts.originX === \"number\" ? opts.originX : this.origin.x,\n typeof opts.originY === \"number\" ? opts.originY : this.origin.y\n );\n return this;\n }\n /**\n * Updates the local transform properties by decomposing the given matrix.\n * Extracts position, scale, rotation, and skew from a transformation matrix.\n * @example\n * ```ts\n * // Basic matrix transform\n * const matrix = new Matrix()\n * .translate(100, 100)\n * .rotate(Math.PI / 4)\n * .scale(2, 2);\n *\n * container.setFromMatrix(matrix);\n *\n * // Copy transform from another container\n * const source = new Container();\n * source.position.set(100, 100);\n * source.rotation = Math.PI / 2;\n *\n * target.setFromMatrix(source.localTransform);\n *\n * // Reset transform\n * container.setFromMatrix(Matrix.IDENTITY);\n * ```\n * @param matrix - The matrix to use for updating the transform\n * @see {@link Container#updateTransform} For property-based updates\n * @see {@link Matrix#decompose} For matrix decomposition details\n */\n setFromMatrix(matrix) {\n matrix.decompose(this);\n }\n /** Updates the local transform. */\n updateLocalTransform() {\n const localTransformChangeId = this._didContainerChangeTick;\n if (this._didLocalTransformChangeId === localTransformChangeId) return;\n this._didLocalTransformChangeId = localTransformChangeId;\n const lt = this.localTransform;\n const scale = this._scale;\n const pivot = this._pivot;\n const origin = this._origin;\n const position = this._position;\n const sx = scale._x;\n const sy = scale._y;\n const px = pivot._x;\n const py = pivot._y;\n const ox = -origin._x;\n const oy = -origin._y;\n lt.a = this._cx * sx;\n lt.b = this._sx * sx;\n lt.c = this._cy * sy;\n lt.d = this._sy * sy;\n lt.tx = position._x - (px * lt.a + py * lt.c) + (ox * lt.a + oy * lt.c) - ox;\n lt.ty = position._y - (px * lt.b + py * lt.d) + (ox * lt.b + oy * lt.d) - oy;\n }\n // / ///// color related stuff\n set alpha(value) {\n if (value === this.localAlpha) return;\n this.localAlpha = value;\n this._updateFlags |= UPDATE_COLOR;\n this._onUpdate();\n }\n /**\n * The opacity of the object relative to its parent's opacity.\n * Value ranges from 0 (fully transparent) to 1 (fully opaque).\n * @example\n * ```ts\n * // Basic transparency\n * sprite.alpha = 0.5; // 50% opacity\n *\n * // Inherited opacity\n * container.alpha = 0.5;\n * const child = new Sprite(texture);\n * child.alpha = 0.5;\n * container.addChild(child);\n * // child's effective opacity is 0.25 (0.5 * 0.5)\n * ```\n * @default 1\n * @see {@link Container#visible} For toggling visibility\n * @see {@link Container#renderable} For render control\n */\n get alpha() {\n return this.localAlpha;\n }\n set tint(value) {\n const tempColor = Color.shared.setValue(value ?? 16777215);\n const bgr = tempColor.toBgrNumber();\n if (bgr === this.localColor) return;\n this.localColor = bgr;\n this._updateFlags |= UPDATE_COLOR;\n this._onUpdate();\n }\n /**\n * The tint applied to the sprite.\n *\n * This can be any valid {@link ColorSource}.\n * @example\n * ```ts\n * // Basic color tinting\n * container.tint = 0xff0000; // Red tint\n * container.tint = 'red'; // Same as above\n * container.tint = '#00ff00'; // Green\n * container.tint = 'rgb(0,0,255)'; // Blue\n *\n * // Remove tint\n * container.tint = 0xffffff; // White = no tint\n * container.tint = null; // Also removes tint\n * ```\n * @default 0xFFFFFF\n * @see {@link Container#alpha} For transparency\n * @see {@link Container#visible} For visibility control\n */\n get tint() {\n return bgr2rgb(this.localColor);\n }\n // / //////////////// blend related stuff\n set blendMode(value) {\n if (this.localBlendMode === value) return;\n if (this.parentRenderGroup) {\n this.parentRenderGroup.structureDidChange = true;\n }\n this._updateFlags |= UPDATE_BLEND;\n this.localBlendMode = value;\n this._onUpdate();\n }\n /**\n * The blend mode to be applied to the sprite. Controls how pixels are blended when rendering.\n *\n * Setting to 'normal' will reset to default blending.\n * > [!NOTE] More blend modes are available after importing the `pixi.js/advanced-blend-modes` sub-export.\n * @example\n * ```ts\n * // Basic blend modes\n * sprite.blendMode = 'add'; // Additive blending\n * sprite.blendMode = 'multiply'; // Multiply colors\n * sprite.blendMode = 'screen'; // Screen blend\n *\n * // Reset blend mode\n * sprite.blendMode = 'normal'; // Normal blending\n * ```\n * @default 'normal'\n * @see {@link Container#alpha} For transparency\n * @see {@link Container#tint} For color adjustments\n */\n get blendMode() {\n return this.localBlendMode;\n }\n // / ///////// VISIBILITY / RENDERABLE /////////////////\n /**\n * The visibility of the object. If false the object will not be drawn,\n * and the transform will not be updated.\n * @example\n * ```ts\n * // Basic visibility toggle\n * sprite.visible = false; // Hide sprite\n * sprite.visible = true; // Show sprite\n * ```\n * @default true\n * @see {@link Container#renderable} For render-only control\n * @see {@link Container#alpha} For transparency\n */\n get visible() {\n return !!(this.localDisplayStatus & 2);\n }\n set visible(value) {\n const valueNumber = value ? 2 : 0;\n if ((this.localDisplayStatus & 2) === valueNumber) return;\n if (this.parentRenderGroup) {\n this.parentRenderGroup.structureDidChange = true;\n }\n this._updateFlags |= UPDATE_VISIBLE;\n this.localDisplayStatus ^= 2;\n this._onUpdate();\n this.emit(\"visibleChanged\", value);\n }\n /** @ignore */\n get culled() {\n return !(this.localDisplayStatus & 4);\n }\n /** @ignore */\n set culled(value) {\n const valueNumber = value ? 0 : 4;\n if ((this.localDisplayStatus & 4) === valueNumber) return;\n if (this.parentRenderGroup) {\n this.parentRenderGroup.structureDidChange = true;\n }\n this._updateFlags |= UPDATE_VISIBLE;\n this.localDisplayStatus ^= 4;\n this._onUpdate();\n }\n /**\n * Controls whether this object can be rendered. If false the object will not be drawn,\n * but the transform will still be updated. This is different from visible, which skips\n * transform updates.\n * @example\n * ```ts\n * // Basic render control\n * sprite.renderable = false; // Skip rendering\n * sprite.renderable = true; // Enable rendering\n * ```\n * @default true\n * @see {@link Container#visible} For skipping transform updates\n * @see {@link Container#alpha} For transparency\n */\n get renderable() {\n return !!(this.localDisplayStatus & 1);\n }\n set renderable(value) {\n const valueNumber = value ? 1 : 0;\n if ((this.localDisplayStatus & 1) === valueNumber) return;\n this._updateFlags |= UPDATE_VISIBLE;\n this.localDisplayStatus ^= 1;\n if (this.parentRenderGroup) {\n this.parentRenderGroup.structureDidChange = true;\n }\n this._onUpdate();\n }\n /**\n * Whether or not the object should be rendered.\n * @advanced\n */\n get isRenderable() {\n return this.localDisplayStatus === 7 && this.groupAlpha > 0;\n }\n /**\n * Removes all internal references and listeners as well as removes children from the display list.\n * Do not use a Container after calling `destroy`.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @example\n * ```ts\n * container.destroy();\n * container.destroy(true);\n * container.destroy({ children: true });\n * container.destroy({ children: true, texture: true, textureSource: true });\n * ```\n */\n destroy(options = false) {\n if (this.destroyed) return;\n this.destroyed = true;\n let oldChildren;\n if (this.children.length) {\n oldChildren = this.removeChildren(0, this.children.length);\n }\n this.removeFromParent();\n this.parent = null;\n this._maskEffect = null;\n this._filterEffect = null;\n this.effects = null;\n this._position = null;\n this._scale = null;\n this._pivot = null;\n this._origin = null;\n this._skew = null;\n this.emit(\"destroyed\", this);\n this.removeAllListeners();\n const destroyChildren = typeof options === \"boolean\" ? options : options?.children;\n if (destroyChildren && oldChildren) {\n for (let i = 0; i < oldChildren.length; ++i) {\n oldChildren[i].destroy(options);\n }\n }\n this.renderGroup?.destroy();\n this.renderGroup = null;\n }\n}\nextensions.mixin(\n Container,\n childrenHelperMixin,\n getFastGlobalBoundsMixin,\n toLocalGlobalMixin,\n onRenderMixin,\n measureMixin,\n effectsMixin,\n findMixin,\n sortMixin,\n cullingMixin,\n cacheAsTextureMixin,\n getGlobalMixin,\n collectRenderablesMixin\n);\n\nexport { Container, UPDATE_BLEND, UPDATE_COLOR, UPDATE_TRANSFORM, UPDATE_VISIBLE };\n//# sourceMappingURL=Container.mjs.map\n","import { Bounds } from '../container/bounds/Bounds.mjs';\nimport { Container } from '../container/Container.mjs';\n\n\"use strict\";\nclass ViewContainer extends Container {\n constructor(options) {\n super(options);\n /** @internal */\n this.canBundle = true;\n /** @internal */\n this.allowChildren = false;\n /** @internal */\n this._roundPixels = 0;\n /** @internal */\n this._lastUsed = -1;\n /** @internal */\n this._gpuData = /* @__PURE__ */ Object.create(null);\n /** If set to true, the resource will be garbage collected automatically when it is not used. */\n this.autoGarbageCollect = true;\n /** @internal */\n this._gcLastUsed = -1;\n this._bounds = new Bounds(0, 1, 0, 0);\n this._boundsDirty = true;\n this.autoGarbageCollect = options.autoGarbageCollect ?? true;\n }\n /**\n * The local bounds of the view in its own coordinate space.\n * Bounds are automatically updated when the view's content changes.\n * @example\n * ```ts\n * // Get bounds dimensions\n * const bounds = view.bounds;\n * console.log(`Width: ${bounds.maxX - bounds.minX}`);\n * console.log(`Height: ${bounds.maxY - bounds.minY}`);\n * ```\n * @returns The rectangular bounds of the view\n * @see {@link Bounds} For bounds operations\n */\n get bounds() {\n if (!this._boundsDirty) return this._bounds;\n this.updateBounds();\n this._boundsDirty = false;\n return this._bounds;\n }\n /**\n * Whether or not to round the x/y position of the sprite.\n * @example\n * ```ts\n * // Enable pixel rounding for crisp rendering\n * view.roundPixels = true;\n * ```\n * @default false\n */\n get roundPixels() {\n return !!this._roundPixels;\n }\n set roundPixels(value) {\n this._roundPixels = value ? 1 : 0;\n }\n /**\n * Checks if the object contains the given point in local coordinates.\n * Uses the view's bounds for hit testing.\n * @example\n * ```ts\n * // Basic point check\n * const localPoint = { x: 50, y: 25 };\n * const contains = view.containsPoint(localPoint);\n * console.log('Point is inside:', contains);\n * ```\n * @param point - The point to check in local coordinates\n * @returns True if the point is within the view's bounds\n * @see {@link ViewContainer#bounds} For the bounds used in hit testing\n * @see {@link Container#toLocal} For converting global coordinates to local\n */\n containsPoint(point) {\n const bounds = this.bounds;\n const { x, y } = point;\n return x >= bounds.minX && x <= bounds.maxX && y >= bounds.minY && y <= bounds.maxY;\n }\n /** @private */\n onViewUpdate() {\n this._didViewChangeTick++;\n this._boundsDirty = true;\n if (this.didViewUpdate) return;\n this.didViewUpdate = true;\n const renderGroup = this.renderGroup || this.parentRenderGroup;\n if (renderGroup) {\n renderGroup.onChildViewUpdate(this);\n }\n }\n /** Unloads the GPU data from the view. */\n unload() {\n this.emit(\"unload\", this);\n for (const key in this._gpuData) {\n this._gpuData[key]?.destroy();\n }\n this._gpuData = /* @__PURE__ */ Object.create(null);\n this.onViewUpdate();\n }\n destroy(options) {\n this.unload();\n super.destroy(options);\n this._bounds = null;\n }\n /**\n * Collects renderables for the view container.\n * @param instructionSet - The instruction set to collect renderables for.\n * @param renderer - The renderer to collect renderables for.\n * @param currentLayer - The current render layer.\n * @internal\n */\n collectRenderablesSimple(instructionSet, renderer, currentLayer) {\n const { renderPipes } = renderer;\n renderPipes.blendMode.pushBlendMode(this, this.groupBlendMode, instructionSet);\n const rp = renderPipes;\n const pipe = rp[this.renderPipeId];\n if (pipe?.addRenderable) {\n pipe.addRenderable(this, instructionSet);\n }\n this.didViewUpdate = false;\n const children = this.children;\n const length = children.length;\n for (let i = 0; i < length; i++) {\n children[i].collectRenderables(instructionSet, renderer, currentLayer);\n }\n renderPipes.blendMode.popBlendMode(instructionSet);\n }\n}\n\nexport { ViewContainer };\n//# sourceMappingURL=ViewContainer.mjs.map\n","import { ObservablePoint } from '../../maths/point/ObservablePoint.mjs';\nimport { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';\nimport { updateQuadBounds } from '../../utils/data/updateQuadBounds.mjs';\nimport { deprecation } from '../../utils/logging/deprecation.mjs';\nimport { ViewContainer } from '../view/ViewContainer.mjs';\n\n\"use strict\";\nclass Sprite extends ViewContainer {\n /**\n * @param options - The options for creating the sprite.\n */\n constructor(options = Texture.EMPTY) {\n if (options instanceof Texture) {\n options = { texture: options };\n }\n const { texture = Texture.EMPTY, anchor, roundPixels, width, height, ...rest } = options;\n super({\n label: \"Sprite\",\n ...rest\n });\n /** @internal */\n this.renderPipeId = \"sprite\";\n /** @internal */\n this.batched = true;\n this._visualBounds = { minX: 0, maxX: 1, minY: 0, maxY: 0 };\n this._anchor = new ObservablePoint(\n {\n _onUpdate: () => {\n this.onViewUpdate();\n }\n }\n );\n if (anchor) {\n this.anchor = anchor;\n } else if (texture.defaultAnchor) {\n this.anchor = texture.defaultAnchor;\n }\n this.texture = texture;\n this.allowChildren = false;\n this.roundPixels = roundPixels ?? false;\n if (width !== void 0) this.width = width;\n if (height !== void 0) this.height = height;\n }\n /**\n * Creates a new sprite based on a source texture, image, video, or canvas element.\n * This is a convenience method that automatically creates and manages textures.\n * @example\n * ```ts\n * // Create from path or URL\n * const sprite = Sprite.from('assets/image.png');\n *\n * // Create from existing texture\n * const sprite = Sprite.from(texture);\n *\n * // Create from canvas\n * const canvas = document.createElement('canvas');\n * const sprite = Sprite.from(canvas, true); // Skip caching new texture\n * ```\n * @param source - The source to create the sprite from. Can be a path to an image, a texture,\n * or any valid texture source (canvas, video, etc.)\n * @param skipCache - Whether to skip adding to the texture cache when creating a new texture\n * @returns A new sprite based on the source\n * @see {@link Texture.from} For texture creation details\n * @see {@link Assets} For asset loading and management\n */\n static from(source, skipCache = false) {\n if (source instanceof Texture) {\n return new Sprite(source);\n }\n return new Sprite(Texture.from(source, skipCache));\n }\n set texture(value) {\n value || (value = Texture.EMPTY);\n const currentTexture = this._texture;\n if (currentTexture === value) return;\n if (currentTexture && currentTexture.dynamic) currentTexture.off(\"update\", this.onViewUpdate, this);\n if (value.dynamic) value.on(\"update\", this.onViewUpdate, this);\n this._texture = value;\n if (this._width) {\n this._setWidth(this._width, this._texture.orig.width);\n }\n if (this._height) {\n this._setHeight(this._height, this._texture.orig.height);\n }\n this.onViewUpdate();\n }\n /**\n * The texture that is displayed by the sprite. When changed, automatically updates\n * the sprite dimensions and manages texture event listeners.\n * @example\n * ```ts\n * // Create sprite with texture\n * const sprite = new Sprite({\n * texture: Texture.from('sprite.png')\n * });\n *\n * // Update texture\n * sprite.texture = Texture.from('newSprite.png');\n *\n * // Use texture from spritesheet\n * const sheet = await Assets.load('spritesheet.json');\n * sprite.texture = sheet.textures['frame1.png'];\n *\n * // Reset to empty texture\n * sprite.texture = Texture.EMPTY;\n * ```\n * @see {@link Texture} For texture creation and management\n * @see {@link Assets} For asset loading\n */\n get texture() {\n return this._texture;\n }\n /**\n * The bounds of the sprite, taking into account the texture's trim area.\n * @example\n * ```ts\n * const texture = new Texture({\n * source: new TextureSource({ width: 300, height: 300 }),\n * frame: new Rectangle(196, 66, 58, 56),\n * trim: new Rectangle(4, 4, 58, 56),\n * orig: new Rectangle(0, 0, 64, 64),\n * rotate: 2,\n * });\n * const sprite = new Sprite(texture);\n * const visualBounds = sprite.visualBounds;\n * // console.log(visualBounds); // { minX: -4, maxX: 62, minY: -4, maxY: 60 }\n */\n get visualBounds() {\n updateQuadBounds(this._visualBounds, this._anchor, this._texture);\n return this._visualBounds;\n }\n /**\n * @deprecated\n * @ignore\n */\n get sourceBounds() {\n deprecation(\"8.6.1\", \"Sprite.sourceBounds is deprecated, use visualBounds instead.\");\n return this.visualBounds;\n }\n /** @private */\n updateBounds() {\n const anchor = this._anchor;\n const texture = this._texture;\n const bounds = this._bounds;\n const { width, height } = texture.orig;\n bounds.minX = -anchor._x * width;\n bounds.maxX = bounds.minX + width;\n bounds.minY = -anchor._y * height;\n bounds.maxY = bounds.minY + height;\n }\n /**\n * Destroys this sprite renderable and optionally its texture.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @example\n * sprite.destroy();\n * sprite.destroy(true);\n * sprite.destroy({ texture: true, textureSource: true });\n */\n destroy(options = false) {\n super.destroy(options);\n const destroyTexture = typeof options === \"boolean\" ? options : options?.texture;\n if (destroyTexture) {\n const destroyTextureSource = typeof options === \"boolean\" ? options : options?.textureSource;\n this._texture.destroy(destroyTextureSource);\n }\n this._texture = null;\n this._visualBounds = null;\n this._bounds = null;\n this._anchor = null;\n }\n /**\n * The anchor sets the origin point of the sprite. The default value is taken from the {@link Texture}\n * and passed to the constructor.\n *\n * - The default is `(0,0)`, this means the sprite's origin is the top left.\n * - Setting the anchor to `(0.5,0.5)` means the sprite's origin is centered.\n * - Setting the anchor to `(1,1)` would mean the sprite's origin point will be the bottom right corner.\n *\n * If you pass only single parameter, it will set both x and y to the same value as shown in the example below.\n * @example\n * ```ts\n * // Center the anchor point\n * sprite.anchor = 0.5; // Sets both x and y to 0.5\n * sprite.position.set(400, 300); // Sprite will be centered at this position\n *\n * // Set specific x/y anchor points\n * sprite.anchor = {\n * x: 1, // Right edge\n * y: 0 // Top edge\n * };\n *\n * // Using individual coordinates\n * sprite.anchor.set(0.5, 1); // Center-bottom\n *\n * // For rotation around center\n * sprite.anchor.set(0.5);\n * sprite.rotation = Math.PI / 4; // 45 degrees around center\n *\n * // For scaling from center\n * sprite.anchor.set(0.5);\n * sprite.scale.set(2); // Scales from center point\n * ```\n */\n get anchor() {\n return this._anchor;\n }\n set anchor(value) {\n typeof value === \"number\" ? this._anchor.set(value) : this._anchor.copyFrom(value);\n }\n /**\n * The width of the sprite, setting this will actually modify the scale to achieve the value set.\n * @example\n * ```ts\n * // Set width directly\n * sprite.width = 200;\n * console.log(sprite.scale.x); // Scale adjusted to match width\n *\n * // Set width while preserving aspect ratio\n * const ratio = sprite.height / sprite.width;\n * sprite.width = 300;\n * sprite.height = 300 * ratio;\n *\n * // For better performance when setting both width and height\n * sprite.setSize(300, 400); // Avoids recalculating bounds twice\n *\n * // Reset to original texture size\n * sprite.width = sprite.texture.orig.width;\n * ```\n */\n get width() {\n return Math.abs(this.scale.x) * this._texture.orig.width;\n }\n set width(value) {\n this._setWidth(value, this._texture.orig.width);\n this._width = value;\n }\n /**\n * The height of the sprite, setting this will actually modify the scale to achieve the value set.\n * @example\n * ```ts\n * // Set height directly\n * sprite.height = 150;\n * console.log(sprite.scale.y); // Scale adjusted to match height\n *\n * // Set height while preserving aspect ratio\n * const ratio = sprite.width / sprite.height;\n * sprite.height = 200;\n * sprite.width = 200 * ratio;\n *\n * // For better performance when setting both width and height\n * sprite.setSize(300, 400); // Avoids recalculating bounds twice\n *\n * // Reset to original texture size\n * sprite.height = sprite.texture.orig.height;\n * ```\n */\n get height() {\n return Math.abs(this.scale.y) * this._texture.orig.height;\n }\n set height(value) {\n this._setHeight(value, this._texture.orig.height);\n this._height = value;\n }\n /**\n * Retrieves the size of the Sprite as a [Size]{@link Size} object based on the texture dimensions and scale.\n * This is faster than getting width and height separately as it only calculates the bounds once.\n * @example\n * ```ts\n * // Basic size retrieval\n * const sprite = new Sprite(Texture.from('sprite.png'));\n * const size = sprite.getSize();\n * console.log(`Size: ${size.width}x${size.height}`);\n *\n * // Reuse existing size object\n * const reuseSize = { width: 0, height: 0 };\n * sprite.getSize(reuseSize);\n * ```\n * @param out - Optional object to store the size in, to avoid allocating a new object\n * @returns The size of the Sprite\n * @see {@link Sprite#width} For getting just the width\n * @see {@link Sprite#height} For getting just the height\n * @see {@link Sprite#setSize} For setting both width and height\n */\n getSize(out) {\n out || (out = {});\n out.width = Math.abs(this.scale.x) * this._texture.orig.width;\n out.height = Math.abs(this.scale.y) * this._texture.orig.height;\n return out;\n }\n /**\n * Sets the size of the Sprite to the specified width and height.\n * This is faster than setting width and height separately as it only recalculates bounds once.\n * @example\n * ```ts\n * // Basic size setting\n * const sprite = new Sprite(Texture.from('sprite.png'));\n * sprite.setSize(100, 200); // Width: 100, Height: 200\n *\n * // Set uniform size\n * sprite.setSize(100); // Sets both width and height to 100\n *\n * // Set size with object\n * sprite.setSize({\n * width: 200,\n * height: 300\n * });\n *\n * // Reset to texture size\n * sprite.setSize(\n * sprite.texture.orig.width,\n * sprite.texture.orig.height\n * );\n * ```\n * @param value - This can be either a number or a {@link Size} object\n * @param height - The height to set. Defaults to the value of `width` if not provided\n * @see {@link Sprite#width} For setting width only\n * @see {@link Sprite#height} For setting height only\n * @see {@link Sprite#texture} For the source dimensions\n */\n setSize(value, height) {\n if (typeof value === \"object\") {\n height = value.height ?? value.width;\n value = value.width;\n } else {\n height ?? (height = value);\n }\n value !== void 0 && this._setWidth(value, this._texture.orig.width);\n height !== void 0 && this._setHeight(height, this._texture.orig.height);\n }\n}\n\nexport { Sprite };\n//# sourceMappingURL=Sprite.mjs.map\n","import { Bounds } from '../../../scene/container/bounds/Bounds.mjs';\nimport { getGlobalBounds } from '../../../scene/container/bounds/getGlobalBounds.mjs';\n\n\"use strict\";\nconst tempBounds = new Bounds();\nfunction addMaskBounds(mask, bounds, skipUpdateTransform) {\n const boundsToMask = tempBounds;\n mask.measurable = true;\n getGlobalBounds(mask, skipUpdateTransform, boundsToMask);\n bounds.addBoundsMask(boundsToMask);\n mask.measurable = false;\n}\n\nexport { addMaskBounds };\n//# sourceMappingURL=addMaskBounds.mjs.map\n","import { getLocalBounds } from '../../../scene/container/bounds/getLocalBounds.mjs';\nimport { boundsPool, matrixPool } from '../../../scene/container/bounds/utils/matrixAndBoundsPool.mjs';\nimport { warn } from '../../../utils/logging/warn.mjs';\n\n\"use strict\";\nfunction addMaskLocalBounds(mask, bounds, localRoot) {\n const boundsToMask = boundsPool.get();\n mask.measurable = true;\n const tempMatrix = matrixPool.get().identity();\n const relativeMask = getMatrixRelativeToParent(mask, localRoot, tempMatrix);\n getLocalBounds(mask, boundsToMask, relativeMask);\n mask.measurable = false;\n bounds.addBoundsMask(boundsToMask);\n matrixPool.return(tempMatrix);\n boundsPool.return(boundsToMask);\n}\nfunction getMatrixRelativeToParent(target, root, matrix) {\n if (!target) {\n warn(\"Mask bounds, renderable is not inside the root container\");\n return matrix;\n }\n if (target !== root) {\n getMatrixRelativeToParent(target.parent, root, matrix);\n target.updateLocalTransform();\n matrix.append(target.localTransform);\n }\n return matrix;\n}\n\nexport { addMaskLocalBounds };\n//# sourceMappingURL=addMaskLocalBounds.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { Sprite } from '../../../scene/sprite/Sprite.mjs';\nimport { addMaskBounds } from '../utils/addMaskBounds.mjs';\nimport { addMaskLocalBounds } from '../utils/addMaskLocalBounds.mjs';\n\n\"use strict\";\nclass AlphaMask {\n constructor(options) {\n this.priority = 0;\n this.inverse = false;\n this.pipe = \"alphaMask\";\n if (options?.mask) {\n this.init(options.mask);\n }\n }\n init(mask) {\n this.mask = mask;\n this.renderMaskToTexture = !(mask instanceof Sprite);\n this.mask.renderable = this.renderMaskToTexture;\n this.mask.includeInBuild = !this.renderMaskToTexture;\n this.mask.measurable = false;\n }\n reset() {\n if (this.mask === null) return;\n this.mask.measurable = true;\n this.mask = null;\n }\n addBounds(bounds, skipUpdateTransform) {\n if (!this.inverse) {\n addMaskBounds(this.mask, bounds, skipUpdateTransform);\n }\n }\n addLocalBounds(bounds, localRoot) {\n addMaskLocalBounds(this.mask, bounds, localRoot);\n }\n containsPoint(point, hitTestFn) {\n const mask = this.mask;\n return hitTestFn(mask, point);\n }\n destroy() {\n this.reset();\n }\n static test(mask) {\n return mask instanceof Sprite;\n }\n}\nAlphaMask.extension = ExtensionType.MaskEffect;\n\nexport { AlphaMask };\n//# sourceMappingURL=AlphaMask.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\n\n\"use strict\";\nclass ColorMask {\n constructor(options) {\n this.priority = 0;\n this.pipe = \"colorMask\";\n if (options?.mask) {\n this.init(options.mask);\n }\n }\n init(mask) {\n this.mask = mask;\n }\n destroy() {\n }\n static test(mask) {\n return typeof mask === \"number\";\n }\n}\nColorMask.extension = ExtensionType.MaskEffect;\n\nexport { ColorMask };\n//# sourceMappingURL=ColorMask.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { Container } from '../../../scene/container/Container.mjs';\nimport { addMaskBounds } from '../utils/addMaskBounds.mjs';\nimport { addMaskLocalBounds } from '../utils/addMaskLocalBounds.mjs';\n\n\"use strict\";\nclass StencilMask {\n constructor(options) {\n this.priority = 0;\n this.pipe = \"stencilMask\";\n if (options?.mask) {\n this.init(options.mask);\n }\n }\n init(mask) {\n this.mask = mask;\n this.mask.includeInBuild = false;\n this.mask.measurable = false;\n }\n reset() {\n if (this.mask === null) return;\n this.mask.measurable = true;\n this.mask.includeInBuild = true;\n this.mask = null;\n }\n addBounds(bounds, skipUpdateTransform) {\n addMaskBounds(this.mask, bounds, skipUpdateTransform);\n }\n addLocalBounds(bounds, localRoot) {\n addMaskLocalBounds(this.mask, bounds, localRoot);\n }\n containsPoint(point, hitTestFn) {\n const mask = this.mask;\n return hitTestFn(mask, point);\n }\n destroy() {\n this.reset();\n }\n static test(mask) {\n return mask instanceof Container;\n }\n}\nStencilMask.extension = ExtensionType.MaskEffect;\n\nexport { StencilMask };\n//# sourceMappingURL=StencilMask.mjs.map\n","\"use strict\";\nconst BrowserAdapter = {\n createCanvas: (width, height) => {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n return canvas;\n },\n createImage: () => new Image(),\n getCanvasRenderingContext2D: () => CanvasRenderingContext2D,\n getWebGLRenderingContext: () => WebGLRenderingContext,\n getNavigator: () => navigator,\n getBaseUrl: () => document.baseURI ?? window.location.href,\n getFontFaceSet: () => document.fonts,\n fetch: (url, options) => fetch(url, options),\n parseXML: (xml) => {\n const parser = new DOMParser();\n return parser.parseFromString(xml, \"text/xml\");\n }\n};\n\nexport { BrowserAdapter };\n//# sourceMappingURL=BrowserAdapter.mjs.map\n","import { BrowserAdapter } from '../environment-browser/BrowserAdapter.mjs';\n\n\"use strict\";\nlet currentAdapter = BrowserAdapter;\nconst DOMAdapter = {\n /**\n * Returns the current adapter.\n * @returns {environment.Adapter} The current adapter.\n */\n get() {\n return currentAdapter;\n },\n /**\n * Sets the current adapter.\n * @param adapter - The new adapter.\n */\n set(adapter) {\n currentAdapter = adapter;\n }\n};\n\nexport { DOMAdapter };\n//# sourceMappingURL=adapter.mjs.map\n","import { DOMAdapter } from '../../../../../environment/adapter.mjs';\nimport { ExtensionType } from '../../../../../extensions/Extensions.mjs';\nimport { TextureSource } from './TextureSource.mjs';\n\n\"use strict\";\nclass CanvasSource extends TextureSource {\n constructor(options) {\n if (!options.resource) {\n options.resource = DOMAdapter.get().createCanvas();\n }\n if (!options.width) {\n options.width = options.resource.width;\n if (!options.autoDensity) {\n options.width /= options.resolution;\n }\n }\n if (!options.height) {\n options.height = options.resource.height;\n if (!options.autoDensity) {\n options.height /= options.resolution;\n }\n }\n super(options);\n this.uploadMethodId = \"image\";\n this.autoDensity = options.autoDensity;\n this.resizeCanvas();\n this.transparent = !!options.transparent;\n }\n resizeCanvas() {\n if (this.autoDensity && \"style\" in this.resource) {\n this.resource.style.width = `${this.width}px`;\n this.resource.style.height = `${this.height}px`;\n }\n if (this.resource.width !== this.pixelWidth || this.resource.height !== this.pixelHeight) {\n this.resource.width = this.pixelWidth;\n this.resource.height = this.pixelHeight;\n }\n }\n resize(width = this.width, height = this.height, resolution = this._resolution) {\n const didResize = super.resize(width, height, resolution);\n if (didResize) {\n this.resizeCanvas();\n }\n return didResize;\n }\n static test(resource) {\n return globalThis.HTMLCanvasElement && resource instanceof HTMLCanvasElement || globalThis.OffscreenCanvas && resource instanceof OffscreenCanvas;\n }\n /**\n * Returns the 2D rendering context for the canvas.\n * Caches the context after creating it.\n * @returns The 2D rendering context of the canvas.\n */\n get context2D() {\n return this._context2D || (this._context2D = this.resource.getContext(\"2d\"));\n }\n}\nCanvasSource.extension = ExtensionType.TextureSource;\n\nexport { CanvasSource };\n//# sourceMappingURL=CanvasSource.mjs.map\n","import { ExtensionType } from '../../../../../extensions/Extensions.mjs';\nimport { TextureSource } from './TextureSource.mjs';\n\n\"use strict\";\nclass ImageSource extends TextureSource {\n constructor(options) {\n super(options);\n this.uploadMethodId = \"image\";\n this.autoGarbageCollect = true;\n }\n static test(resource) {\n return globalThis.HTMLImageElement && resource instanceof HTMLImageElement || typeof ImageBitmap !== \"undefined\" && resource instanceof ImageBitmap || globalThis.VideoFrame && resource instanceof VideoFrame;\n }\n}\nImageSource.extension = ExtensionType.TextureSource;\n\nexport { ImageSource };\n//# sourceMappingURL=ImageSource.mjs.map\n","\"use strict\";\nvar UPDATE_PRIORITY = /* @__PURE__ */ ((UPDATE_PRIORITY2) => {\n UPDATE_PRIORITY2[UPDATE_PRIORITY2[\"INTERACTION\"] = 50] = \"INTERACTION\";\n UPDATE_PRIORITY2[UPDATE_PRIORITY2[\"HIGH\"] = 25] = \"HIGH\";\n UPDATE_PRIORITY2[UPDATE_PRIORITY2[\"NORMAL\"] = 0] = \"NORMAL\";\n UPDATE_PRIORITY2[UPDATE_PRIORITY2[\"LOW\"] = -25] = \"LOW\";\n UPDATE_PRIORITY2[UPDATE_PRIORITY2[\"UTILITY\"] = -50] = \"UTILITY\";\n return UPDATE_PRIORITY2;\n})(UPDATE_PRIORITY || {});\n\nexport { UPDATE_PRIORITY };\n//# sourceMappingURL=const.mjs.map\n","\"use strict\";\nclass TickerListener {\n /**\n * Constructor\n * @private\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @param priority - The priority for emitting\n * @param once - If the handler should fire once\n */\n constructor(fn, context = null, priority = 0, once = false) {\n /** The next item in chain. */\n this.next = null;\n /** The previous item in chain. */\n this.previous = null;\n /** `true` if this listener has been destroyed already. */\n this._destroyed = false;\n this._fn = fn;\n this._context = context;\n this.priority = priority;\n this._once = once;\n }\n /**\n * Simple compare function to figure out if a function and context match.\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @returns `true` if the listener match the arguments\n */\n match(fn, context = null) {\n return this._fn === fn && this._context === context;\n }\n /**\n * Emit by calling the current function.\n * @param ticker - The ticker emitting.\n * @returns Next ticker\n */\n emit(ticker) {\n if (this._fn) {\n if (this._context) {\n this._fn.call(this._context, ticker);\n } else {\n this._fn(ticker);\n }\n }\n const redirect = this.next;\n if (this._once) {\n this.destroy(true);\n }\n if (this._destroyed) {\n this.next = null;\n }\n return redirect;\n }\n /**\n * Connect to the list.\n * @param previous - Input node, previous listener\n */\n connect(previous) {\n this.previous = previous;\n if (previous.next) {\n previous.next.previous = this;\n }\n this.next = previous.next;\n previous.next = this;\n }\n /**\n * Destroy and don't use after this.\n * @param hard - `true` to remove the `next` reference, this\n * is considered a hard destroy. Soft destroy maintains the next reference.\n * @returns The listener to redirect while emitting or removing.\n */\n destroy(hard = false) {\n this._destroyed = true;\n this._fn = null;\n this._context = null;\n if (this.previous) {\n this.previous.next = this.next;\n }\n if (this.next) {\n this.next.previous = this.previous;\n }\n const redirect = this.next;\n this.next = hard ? null : redirect;\n this.previous = null;\n return redirect;\n }\n}\n\nexport { TickerListener };\n//# sourceMappingURL=TickerListener.mjs.map\n","import { UPDATE_PRIORITY } from './const.mjs';\nimport { TickerListener } from './TickerListener.mjs';\n\n\"use strict\";\nconst _Ticker = class _Ticker {\n constructor() {\n /**\n * Whether or not this ticker should invoke the method {@link Ticker#start|start}\n * automatically when a listener is added.\n * @example\n * ```ts\n * // Default behavior (manual start)\n * const ticker = new Ticker();\n * ticker.autoStart = false;\n * ticker.add(() => {\n * // Won't run until ticker.start() is called\n * });\n *\n * // Auto-start behavior\n * const autoTicker = new Ticker();\n * autoTicker.autoStart = true;\n * autoTicker.add(() => {\n * // Runs immediately when added\n * });\n * ```\n * @default false\n * @see {@link Ticker#start} For manually starting the ticker\n * @see {@link Ticker#stop} For manually stopping the ticker\n */\n this.autoStart = false;\n /**\n * Scalar representing the delta time factor.\n * This is a dimensionless value representing the fraction of a frame at the target framerate.\n * At 60 FPS, this value is typically around 1.0.\n *\n * This is NOT in milliseconds - it's a scalar multiplier for frame-independent animations.\n * For actual milliseconds, use {@link Ticker#deltaMS}.\n * @example\n * ```ts\n * // Frame-independent animation using deltaTime scalar\n * ticker.add((ticker) => {\n * // Rotate sprite by 0.1 radians per frame, scaled by deltaTime\n * sprite.rotation += 0.1 * ticker.deltaTime;\n * });\n * ```\n */\n this.deltaTime = 1;\n /**\n * The last time update was invoked, in milliseconds since epoch.\n * Similar to performance.now() timestamp format.\n *\n * Used internally for calculating time deltas between frames.\n * @example\n * ```ts\n * ticker.add((ticker) => {\n * const currentTime = performance.now();\n * const timeSinceLastFrame = currentTime - ticker.lastTime;\n * console.log(`Time since last frame: ${timeSinceLastFrame}ms`);\n * });\n * ```\n */\n this.lastTime = -1;\n /**\n * Factor of current {@link Ticker#deltaTime|deltaTime}.\n * Used to scale time for slow motion or fast-forward effects.\n * @example\n * ```ts\n * // Basic speed adjustment\n * ticker.speed = 0.5; // Half speed (slow motion)\n * ticker.speed = 2.0; // Double speed (fast forward)\n *\n * // Temporary speed changes\n * function slowMotion() {\n * const normalSpeed = ticker.speed;\n * ticker.speed = 0.2;\n * setTimeout(() => {\n * ticker.speed = normalSpeed;\n * }, 1000);\n * }\n * ```\n */\n this.speed = 1;\n /**\n * Whether or not this ticker has been started.\n *\n * `true` if {@link Ticker#start|start} has been called.\n * `false` if {@link Ticker#stop|Stop} has been called.\n *\n * While `false`, this value may change to `true` in the\n * event of {@link Ticker#autoStart|autoStart} being `true`\n * and a listener is added.\n * @example\n * ```ts\n * // Check ticker state\n * const ticker = new Ticker();\n * console.log(ticker.started); // false\n *\n * // Start and verify\n * ticker.start();\n * console.log(ticker.started); // true\n * ```\n */\n this.started = false;\n /** Internal current frame request ID */\n this._requestId = null;\n /**\n * Internal value managed by minFPS property setter and getter.\n * This is the maximum allowed milliseconds between updates.\n */\n this._maxElapsedMS = 100;\n /**\n * Internal value managed by maxFPS property setter and getter.\n * This is the minimum allowed milliseconds between updates.\n */\n this._minElapsedMS = 0;\n /** If enabled, deleting is disabled.*/\n this._protected = false;\n /** The last time keyframe was executed. Maintains a relatively fixed interval with the previous value. */\n this._lastFrame = -1;\n this._head = new TickerListener(null, null, Infinity);\n this.deltaMS = 1 / _Ticker.targetFPMS;\n this.elapsedMS = 1 / _Ticker.targetFPMS;\n this._tick = (time) => {\n this._requestId = null;\n if (this.started) {\n this.update(time);\n if (this.started && this._requestId === null && this._head.next) {\n this._requestId = requestAnimationFrame(this._tick);\n }\n }\n };\n }\n /**\n * Conditionally requests a new animation frame.\n * If a frame has not already been requested, and if the internal\n * emitter has listeners, a new frame is requested.\n */\n _requestIfNeeded() {\n if (this._requestId === null && this._head.next) {\n this.lastTime = performance.now();\n this._lastFrame = this.lastTime;\n this._requestId = requestAnimationFrame(this._tick);\n }\n }\n /** Conditionally cancels a pending animation frame. */\n _cancelIfNeeded() {\n if (this._requestId !== null) {\n cancelAnimationFrame(this._requestId);\n this._requestId = null;\n }\n }\n /**\n * Conditionally requests a new animation frame.\n * If the ticker has been started it checks if a frame has not already\n * been requested, and if the internal emitter has listeners. If these\n * conditions are met, a new frame is requested. If the ticker has not\n * been started, but autoStart is `true`, then the ticker starts now,\n * and continues with the previous conditions to request a new frame.\n */\n _startIfPossible() {\n if (this.started) {\n this._requestIfNeeded();\n } else if (this.autoStart) {\n this.start();\n }\n }\n /**\n * Register a handler for tick events.\n * @param fn - The listener function to add. Receives the Ticker instance as parameter\n * @param context - The context for the listener\n * @param priority - The priority of the listener\n * @example\n * ```ts\n * // Access time properties through the ticker parameter\n * ticker.add((ticker) => {\n * // Use deltaTime (dimensionless scalar) for frame-independent animations\n * sprite.rotation += 0.1 * ticker.deltaTime;\n *\n * // Use deltaMS (milliseconds) for time-based calculations\n * const progress = ticker.deltaMS / animationDuration;\n *\n * // Use elapsedMS for raw timing measurements\n * console.log(`Raw frame time: ${ticker.elapsedMS}ms`);\n * });\n * ```\n */\n add(fn, context, priority = UPDATE_PRIORITY.NORMAL) {\n return this._addListener(new TickerListener(fn, context, priority));\n }\n /**\n * Add a handler for the tick event which is only executed once on the next frame.\n * @example\n * ```ts\n * // Basic one-time update\n * ticker.addOnce(() => {\n * console.log('Runs next frame only');\n * });\n *\n * // With specific context\n * const game = {\n * init(ticker) {\n * this.loadResources();\n * console.log('Game initialized');\n * }\n * };\n * ticker.addOnce(game.init, game);\n *\n * // With priority\n * ticker.addOnce(\n * () => {\n * // High priority one-time setup\n * physics.init();\n * },\n * undefined,\n * UPDATE_PRIORITY.HIGH\n * );\n * ```\n * @param fn - The listener function to be added for one update\n * @param context - The listener context\n * @param priority - The priority for emitting (default: UPDATE_PRIORITY.NORMAL)\n * @returns This instance of a ticker\n * @see {@link Ticker#add} For continuous updates\n * @see {@link Ticker#remove} For removing handlers\n */\n addOnce(fn, context, priority = UPDATE_PRIORITY.NORMAL) {\n return this._addListener(new TickerListener(fn, context, priority, true));\n }\n /**\n * Internally adds the event handler so that it can be sorted by priority.\n * Priority allows certain handler (user, AnimatedSprite, Interaction) to be run\n * before the rendering.\n * @private\n * @param listener - Current listener being added.\n * @returns This instance of a ticker\n */\n _addListener(listener) {\n let current = this._head.next;\n let previous = this._head;\n if (!current) {\n listener.connect(previous);\n } else {\n while (current) {\n if (listener.priority > current.priority) {\n listener.connect(previous);\n break;\n }\n previous = current;\n current = current.next;\n }\n if (!listener.previous) {\n listener.connect(previous);\n }\n }\n this._startIfPossible();\n return this;\n }\n /**\n * Removes any handlers matching the function and context parameters.\n * If no handlers are left after removing, then it cancels the animation frame.\n * @example\n * ```ts\n * // Basic removal\n * const onTick = () => {\n * sprite.rotation += 0.1;\n * };\n * ticker.add(onTick);\n * ticker.remove(onTick);\n *\n * // Remove with context\n * const game = {\n * update(ticker) {\n * this.physics.update(ticker.deltaTime);\n * }\n * };\n * ticker.add(game.update, game);\n * ticker.remove(game.update, game);\n *\n * // Remove all matching handlers\n * // (if same function was added multiple times)\n * ticker.add(onTick);\n * ticker.add(onTick);\n * ticker.remove(onTick); // Removes all instances\n * ```\n * @param fn - The listener function to be removed\n * @param context - The listener context to be removed\n * @returns This instance of a ticker\n * @see {@link Ticker#add} For adding handlers\n * @see {@link Ticker#addOnce} For one-time handlers\n */\n remove(fn, context) {\n let listener = this._head.next;\n while (listener) {\n if (listener.match(fn, context)) {\n listener = listener.destroy();\n } else {\n listener = listener.next;\n }\n }\n if (!this._head.next) {\n this._cancelIfNeeded();\n }\n return this;\n }\n /**\n * The number of listeners on this ticker, calculated by walking through linked list.\n * @example\n * ```ts\n * // Check number of active listeners\n * const ticker = new Ticker();\n * console.log(ticker.count); // 0\n *\n * // Add some listeners\n * ticker.add(() => {});\n * ticker.add(() => {});\n * console.log(ticker.count); // 2\n *\n * // Check after cleanup\n * ticker.destroy();\n * console.log(ticker.count); // 0\n * ```\n * @readonly\n * @see {@link Ticker#add} For adding listeners\n * @see {@link Ticker#remove} For removing listeners\n */\n get count() {\n if (!this._head) {\n return 0;\n }\n let count = 0;\n let current = this._head;\n while (current = current.next) {\n count++;\n }\n return count;\n }\n /**\n * Starts the ticker. If the ticker has listeners a new animation frame is requested at this point.\n * @example\n * ```ts\n * // Basic manual start\n * const ticker = new Ticker();\n * ticker.add(() => {\n * // Animation code here\n * });\n * ticker.start();\n * ```\n * @see {@link Ticker#stop} For stopping the ticker\n * @see {@link Ticker#autoStart} For automatic starting\n * @see {@link Ticker#started} For checking ticker state\n */\n start() {\n if (!this.started) {\n this.started = true;\n this._requestIfNeeded();\n }\n }\n /**\n * Stops the ticker. If the ticker has requested an animation frame it is canceled at this point.\n * @example\n * ```ts\n * // Basic stop\n * const ticker = new Ticker();\n * ticker.stop();\n * ```\n * @see {@link Ticker#start} For starting the ticker\n * @see {@link Ticker#started} For checking ticker state\n * @see {@link Ticker#destroy} For cleaning up the ticker\n */\n stop() {\n if (this.started) {\n this.started = false;\n this._cancelIfNeeded();\n }\n }\n /**\n * Destroy the ticker and don't use after this. Calling this method removes all references to internal events.\n * @example\n * ```ts\n * // Clean up with active listeners\n * const ticker = new Ticker();\n * ticker.add(() => {});\n * ticker.destroy(); // Removes all listeners\n * ```\n * @see {@link Ticker#stop} For stopping without destroying\n * @see {@link Ticker#remove} For removing specific listeners\n */\n destroy() {\n if (!this._protected) {\n this.stop();\n let listener = this._head.next;\n while (listener) {\n listener = listener.destroy(true);\n }\n this._head.destroy();\n this._head = null;\n }\n }\n /**\n * Triggers an update.\n *\n * An update entails setting the\n * current {@link Ticker#elapsedMS|elapsedMS},\n * the current {@link Ticker#deltaTime|deltaTime},\n * invoking all listeners with current deltaTime,\n * and then finally setting {@link Ticker#lastTime|lastTime}\n * with the value of currentTime that was provided.\n *\n * This method will be called automatically by animation\n * frame callbacks if the ticker instance has been started\n * and listeners are added.\n * @example\n * ```ts\n * // Basic manual update\n * const ticker = new Ticker();\n * ticker.update(performance.now());\n * ```\n * @param currentTime - The current time of execution (defaults to performance.now())\n * @see {@link Ticker#deltaTime} For frame delta value\n * @see {@link Ticker#elapsedMS} For raw elapsed time\n */\n update(currentTime = performance.now()) {\n let elapsedMS;\n if (currentTime > this.lastTime) {\n elapsedMS = this.elapsedMS = currentTime - this.lastTime;\n if (elapsedMS > this._maxElapsedMS) {\n elapsedMS = this._maxElapsedMS;\n }\n elapsedMS *= this.speed;\n if (this._minElapsedMS) {\n const delta = currentTime - this._lastFrame | 0;\n if (delta < this._minElapsedMS) {\n return;\n }\n this._lastFrame = currentTime - delta % this._minElapsedMS;\n }\n this.deltaMS = elapsedMS;\n this.deltaTime = this.deltaMS * _Ticker.targetFPMS;\n const head = this._head;\n let listener = head.next;\n while (listener) {\n listener = listener.emit(this);\n }\n if (!head.next) {\n this._cancelIfNeeded();\n }\n } else {\n this.deltaTime = this.deltaMS = this.elapsedMS = 0;\n }\n this.lastTime = currentTime;\n }\n /**\n * The frames per second at which this ticker is running.\n * The default is approximately 60 in most modern browsers.\n * > [!NOTE] This does not factor in the value of\n * > {@link Ticker#speed|speed}, which is specific\n * > to scaling {@link Ticker#deltaTime|deltaTime}.\n * @example\n * ```ts\n * // Basic FPS monitoring\n * ticker.add(() => {\n * console.log(`Current FPS: ${Math.round(ticker.FPS)}`);\n * });\n * ```\n * @readonly\n */\n get FPS() {\n return 1e3 / this.elapsedMS;\n }\n /**\n * Manages the maximum amount of milliseconds allowed to\n * elapse between invoking {@link Ticker#update|update}.\n *\n * This value is used to cap {@link Ticker#deltaTime|deltaTime},\n * but does not effect the measured value of {@link Ticker#FPS|FPS}.\n *\n * When setting this property it is clamped to a value between\n * `0` and `Ticker.targetFPMS * 1000` (typically 60).\n *\n * If `maxFPS` is currently set (non-zero) and `minFPS` is set above it,\n * `maxFPS` is automatically raised to match. This keeps the two limits consistent.\n * @example\n * ```ts\n * // Set minimum acceptable frame rate\n * const ticker = new Ticker();\n * ticker.minFPS = 30; // Never go below 30 FPS\n *\n * // Use with maxFPS for frame rate clamping\n * ticker.minFPS = 30;\n * ticker.maxFPS = 60;\n *\n * // minFPS above maxFPS pushes maxFPS up\n * ticker.minFPS = 50; // maxFPS is raised to 50\n * ```\n * @default 10\n */\n get minFPS() {\n return 1e3 / this._maxElapsedMS;\n }\n set minFPS(fps) {\n const minFPMS = Math.min(Math.max(0, fps) / 1e3, _Ticker.targetFPMS);\n this._maxElapsedMS = 1 / minFPMS;\n if (this._minElapsedMS && fps > this.maxFPS) {\n this.maxFPS = fps;\n }\n }\n /**\n * Manages the minimum amount of milliseconds required to\n * elapse between invoking {@link Ticker#update|update}.\n *\n * This will effect the measured value of {@link Ticker#FPS|FPS}.\n *\n * If it is set to `0`, then there is no limit; PixiJS will render as many frames as it can.\n * Otherwise it will be at least `minFPS`.\n *\n * If `maxFPS` is set below the current `minFPS`, `minFPS` is automatically lowered to match.\n * This keeps the two limits consistent.\n * @example\n * ```ts\n * // Cap the frame rate\n * const ticker = new Ticker();\n * ticker.maxFPS = 60; // Never go above 60 FPS\n *\n * // Use with minFPS for frame rate clamping\n * ticker.minFPS = 30;\n * ticker.maxFPS = 60;\n *\n * // maxFPS below minFPS pushes minFPS down\n * ticker.maxFPS = 20; // minFPS is now also 20\n * ```\n * @default 0\n */\n get maxFPS() {\n if (this._minElapsedMS) {\n return Math.round(1e3 / this._minElapsedMS);\n }\n return 0;\n }\n set maxFPS(fps) {\n if (fps === 0) {\n this._minElapsedMS = 0;\n } else {\n if (fps < this.minFPS) {\n this.minFPS = fps;\n }\n this._minElapsedMS = 1 / (fps / 1e3);\n }\n }\n /**\n * The shared ticker instance used by {@link AnimatedSprite} and by\n * {@link VideoSource} to update animation frames / video textures.\n *\n * It may also be used by {@link Application} if created with the `sharedTicker` option property set to true.\n *\n * The property {@link Ticker#autoStart|autoStart} is set to `true` for this instance.\n * Please follow the examples for usage, including how to opt-out of auto-starting the shared ticker.\n * @example\n * import { Ticker } from 'pixi.js';\n *\n * const ticker = Ticker.shared;\n * // Set this to prevent starting this ticker when listeners are added.\n * // By default this is true only for the Ticker.shared instance.\n * ticker.autoStart = false;\n *\n * // FYI, call this to ensure the ticker is stopped. It should be stopped\n * // if you have not attempted to render anything yet.\n * ticker.stop();\n *\n * // Call this when you are ready for a running shared ticker.\n * ticker.start();\n * @example\n * import { autoDetectRenderer, Container } from 'pixi.js';\n *\n * // You may use the shared ticker to render...\n * const renderer = autoDetectRenderer();\n * const stage = new Container();\n * document.body.appendChild(renderer.view);\n * ticker.add((time) => renderer.render(stage));\n *\n * // Or you can just update it manually.\n * ticker.autoStart = false;\n * ticker.stop();\n * const animate = (time) => {\n * ticker.update(time);\n * renderer.render(stage);\n * requestAnimationFrame(animate);\n * };\n * animate(performance.now());\n * @type {Ticker}\n * @readonly\n */\n static get shared() {\n if (!_Ticker._shared) {\n const shared = _Ticker._shared = new _Ticker();\n shared.autoStart = true;\n shared._protected = true;\n }\n return _Ticker._shared;\n }\n /**\n * The system ticker instance used by {@link PrepareBase} for core timing\n * functionality that shouldn't usually need to be paused, unlike the `shared`\n * ticker which drives visual animations and rendering which may want to be paused.\n *\n * The property {@link Ticker#autoStart|autoStart} is set to `true` for this instance.\n * @type {Ticker}\n * @readonly\n * @advanced\n */\n static get system() {\n if (!_Ticker._system) {\n const system = _Ticker._system = new _Ticker();\n system.autoStart = true;\n system._protected = true;\n }\n return _Ticker._system;\n }\n};\n/**\n * Target frame rate in frames per millisecond.\n * Used for converting deltaTime to a scalar time delta.\n * @example\n * ```ts\n * // Default is 0.06 (60 FPS)\n * console.log(Ticker.targetFPMS); // 0.06\n *\n * // Calculate target frame duration\n * const frameDuration = 1 / Ticker.targetFPMS; // ≈ 16.67ms\n *\n * // Use in custom timing calculations\n * const deltaTime = elapsedMS * Ticker.targetFPMS;\n * ```\n * @remarks\n * - Default is 0.06 (equivalent to 60 FPS)\n * - Used in deltaTime calculations\n * - Affects all ticker instances\n * @default 0.06\n * @see {@link Ticker#deltaTime} For time scaling\n * @see {@link Ticker#FPS} For actual frame rate\n */\n_Ticker.targetFPMS = 0.06;\nlet Ticker = _Ticker;\n\nexport { Ticker };\n//# sourceMappingURL=Ticker.mjs.map\n","import { DOMAdapter } from '../../environment/adapter.mjs';\n\n\"use strict\";\nlet promise;\nasync function detectVideoAlphaMode() {\n promise ?? (promise = (async () => {\n const canvas = DOMAdapter.get().createCanvas(1, 1);\n const gl = canvas.getContext(\"webgl\");\n if (!gl) {\n return \"premultiply-alpha-on-upload\";\n }\n const video = await new Promise((resolve) => {\n const video2 = document.createElement(\"video\");\n video2.onloadeddata = () => resolve(video2);\n video2.onerror = () => resolve(null);\n video2.autoplay = false;\n video2.crossOrigin = \"anonymous\";\n video2.preload = \"auto\";\n video2.src = \"data:video/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwEAAAAAAAHTEU2bdLpNu4tTq4QVSalmU6yBoU27i1OrhBZUrmtTrIHGTbuMU6uEElTDZ1OsggEXTbuMU6uEHFO7a1OsggG97AEAAAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmoCrXsYMPQkBNgIRMYXZmV0GETGF2ZkSJiEBEAAAAAAAAFlSua8yuAQAAAAAAAEPXgQFzxYgAAAAAAAAAAZyBACK1nIN1bmSIgQCGhVZfVlA5g4EBI+ODhAJiWgDglLCBArqBApqBAlPAgQFVsIRVuYEBElTDZ9Vzc9JjwItjxYgAAAAAAAAAAWfInEWjh0VOQ09ERVJEh49MYXZjIGxpYnZweC12cDlnyKJFo4hEVVJBVElPTkSHlDAwOjAwOjAwLjA0MDAwMDAwMAAAH0O2dcfngQCgwqGggQAAAIJJg0IAABAAFgA4JBwYSgAAICAAEb///4r+AAB1oZ2mm+6BAaWWgkmDQgAAEAAWADgkHBhKAAAgIABIQBxTu2uRu4+zgQC3iveBAfGCAXHwgQM=\";\n video2.load();\n });\n if (!video) {\n return \"premultiply-alpha-on-upload\";\n }\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n const framebuffer = gl.createFramebuffer();\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.framebufferTexture2D(\n gl.FRAMEBUFFER,\n gl.COLOR_ATTACHMENT0,\n gl.TEXTURE_2D,\n texture,\n 0\n );\n gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, gl.NONE);\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, video);\n const pixel = new Uint8Array(4);\n gl.readPixels(0, 0, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, pixel);\n gl.deleteFramebuffer(framebuffer);\n gl.deleteTexture(texture);\n gl.getExtension(\"WEBGL_lose_context\")?.loseContext();\n return pixel[0] <= pixel[3] ? \"premultiplied-alpha\" : \"premultiply-alpha-on-upload\";\n })());\n return promise;\n}\n\nexport { detectVideoAlphaMode };\n//# sourceMappingURL=detectVideoAlphaMode.mjs.map\n","import { ExtensionType } from '../../../../../extensions/Extensions.mjs';\nimport { Ticker } from '../../../../../ticker/Ticker.mjs';\nimport { detectVideoAlphaMode } from '../../../../../utils/browser/detectVideoAlphaMode.mjs';\nimport { TextureSource } from './TextureSource.mjs';\n\n\"use strict\";\nconst _VideoSource = class _VideoSource extends TextureSource {\n constructor(options) {\n super(options);\n // Public\n /** Whether or not the video is ready to play. */\n this.isReady = false;\n /** The upload method for this texture. */\n this.uploadMethodId = \"video\";\n options = {\n ..._VideoSource.defaultOptions,\n ...options\n };\n this._autoUpdate = true;\n this._isConnectedToTicker = false;\n this._updateFPS = options.updateFPS || 0;\n this._msToNextUpdate = 0;\n this.autoPlay = options.autoPlay !== false;\n this.alphaMode = options.alphaMode ?? \"premultiply-alpha-on-upload\";\n this._videoFrameRequestCallback = this._videoFrameRequestCallback.bind(this);\n this._videoFrameRequestCallbackHandle = null;\n this._load = null;\n this._resolve = null;\n this._reject = null;\n this._onCanPlay = this._onCanPlay.bind(this);\n this._onCanPlayThrough = this._onCanPlayThrough.bind(this);\n this._onError = this._onError.bind(this);\n this._onPlayStart = this._onPlayStart.bind(this);\n this._onPlayStop = this._onPlayStop.bind(this);\n this._onSeeked = this._onSeeked.bind(this);\n if (options.autoLoad !== false) {\n void this.load();\n }\n }\n /** Update the video frame if the source is not destroyed and meets certain conditions. */\n updateFrame() {\n if (this.destroyed) {\n return;\n }\n if (this._updateFPS) {\n const elapsedMS = Ticker.shared.elapsedMS * this.resource.playbackRate;\n this._msToNextUpdate = Math.floor(this._msToNextUpdate - elapsedMS);\n }\n if (!this._updateFPS || this._msToNextUpdate <= 0) {\n this._msToNextUpdate = this._updateFPS ? Math.floor(1e3 / this._updateFPS) : 0;\n }\n if (this.isValid) {\n this.update();\n }\n }\n /** Callback to update the video frame and potentially request the next frame update. */\n _videoFrameRequestCallback() {\n this.updateFrame();\n if (this.destroyed) {\n this._videoFrameRequestCallbackHandle = null;\n } else {\n this._videoFrameRequestCallbackHandle = this.resource.requestVideoFrameCallback(\n this._videoFrameRequestCallback\n );\n }\n }\n /**\n * Checks if the resource has valid dimensions.\n * @returns {boolean} True if width and height are set, otherwise false.\n */\n get isValid() {\n return !!this.resource.videoWidth && !!this.resource.videoHeight;\n }\n /**\n * Start preloading the video resource.\n * @returns {Promise<this>} Handle the validate event\n */\n async load() {\n if (this._load) {\n return this._load;\n }\n const source = this.resource;\n const options = this.options;\n if ((source.readyState === source.HAVE_ENOUGH_DATA || source.readyState === source.HAVE_FUTURE_DATA) && source.width && source.height) {\n source.complete = true;\n }\n source.addEventListener(\"play\", this._onPlayStart);\n source.addEventListener(\"pause\", this._onPlayStop);\n source.addEventListener(\"seeked\", this._onSeeked);\n if (!this._isSourceReady()) {\n if (!options.preload) {\n source.addEventListener(\"canplay\", this._onCanPlay);\n }\n source.addEventListener(\"canplaythrough\", this._onCanPlayThrough);\n source.addEventListener(\"error\", this._onError, true);\n } else {\n this._mediaReady();\n }\n this.alphaMode = await detectVideoAlphaMode();\n this._load = new Promise((resolve, reject) => {\n if (this.isValid) {\n resolve(this);\n } else {\n this._resolve = resolve;\n this._reject = reject;\n if (options.preloadTimeoutMs !== void 0) {\n this._preloadTimeout = setTimeout(() => {\n this._onError(new ErrorEvent(`Preload exceeded timeout of ${options.preloadTimeoutMs}ms`));\n });\n }\n source.load();\n }\n });\n return this._load;\n }\n /**\n * Handle video error events.\n * @param event - The error event\n */\n _onError(event) {\n this.resource.removeEventListener(\"error\", this._onError, true);\n this.emit(\"error\", event);\n if (this._reject) {\n this._reject(event);\n this._reject = null;\n this._resolve = null;\n }\n }\n /**\n * Checks if the underlying source is playing.\n * @returns True if playing.\n */\n _isSourcePlaying() {\n const source = this.resource;\n return !source.paused && !source.ended;\n }\n /**\n * Checks if the underlying source is ready for playing.\n * @returns True if ready.\n */\n _isSourceReady() {\n const source = this.resource;\n return source.readyState > 2;\n }\n /** Runs the update loop when the video is ready to play. */\n _onPlayStart() {\n if (!this.isValid) {\n this._mediaReady();\n }\n this._configureAutoUpdate();\n }\n /** Stops the update loop when a pause event is triggered. */\n _onPlayStop() {\n this._configureAutoUpdate();\n }\n /** Handles behavior when the video completes seeking to the current playback position. */\n _onSeeked() {\n if (this._autoUpdate && !this._isSourcePlaying()) {\n this._msToNextUpdate = 0;\n this.updateFrame();\n this._msToNextUpdate = 0;\n }\n }\n _onCanPlay() {\n const source = this.resource;\n source.removeEventListener(\"canplay\", this._onCanPlay);\n this._mediaReady();\n }\n _onCanPlayThrough() {\n const source = this.resource;\n source.removeEventListener(\"canplaythrough\", this._onCanPlay);\n if (this._preloadTimeout) {\n clearTimeout(this._preloadTimeout);\n this._preloadTimeout = void 0;\n }\n this._mediaReady();\n }\n /** Fired when the video is loaded and ready to play. */\n _mediaReady() {\n const source = this.resource;\n if (this.isValid) {\n this.isReady = true;\n this.resize(source.videoWidth, source.videoHeight);\n }\n this._msToNextUpdate = 0;\n this.updateFrame();\n this._msToNextUpdate = 0;\n if (this._resolve) {\n this._resolve(this);\n this._resolve = null;\n this._reject = null;\n }\n if (this._isSourcePlaying()) {\n this._onPlayStart();\n } else if (this.autoPlay) {\n void this.resource.play();\n }\n }\n /** Cleans up resources and event listeners associated with this texture. */\n destroy() {\n this._configureAutoUpdate();\n const source = this.resource;\n if (source) {\n source.removeEventListener(\"play\", this._onPlayStart);\n source.removeEventListener(\"pause\", this._onPlayStop);\n source.removeEventListener(\"seeked\", this._onSeeked);\n source.removeEventListener(\"canplay\", this._onCanPlay);\n source.removeEventListener(\"canplaythrough\", this._onCanPlayThrough);\n source.removeEventListener(\"error\", this._onError, true);\n source.pause();\n source.src = \"\";\n source.load();\n }\n super.destroy();\n }\n /** Should the base texture automatically update itself, set to true by default. */\n get autoUpdate() {\n return this._autoUpdate;\n }\n set autoUpdate(value) {\n if (value !== this._autoUpdate) {\n this._autoUpdate = value;\n this._configureAutoUpdate();\n }\n }\n /**\n * How many times a second to update the texture from the video.\n * Leave at 0 to update at every render.\n * A lower fps can help performance, as updating the texture at 60fps on a 30ps video may not be efficient.\n */\n get updateFPS() {\n return this._updateFPS;\n }\n set updateFPS(value) {\n if (value !== this._updateFPS) {\n this._updateFPS = value;\n this._configureAutoUpdate();\n }\n }\n /**\n * Configures the updating mechanism based on the current state and settings.\n *\n * This method decides between using the browser's native video frame callback or a custom ticker\n * for updating the video frame. It ensures optimal performance and responsiveness\n * based on the video's state, playback status, and the desired frames-per-second setting.\n *\n * - If `_autoUpdate` is enabled and the video source is playing:\n * - It will prefer the native video frame callback if available and no specific FPS is set.\n * - Otherwise, it will use a custom ticker for manual updates.\n * - If `_autoUpdate` is disabled or the video isn't playing, any active update mechanisms are halted.\n */\n _configureAutoUpdate() {\n if (this._autoUpdate && this._isSourcePlaying()) {\n if (!this._updateFPS && this.resource.requestVideoFrameCallback) {\n if (this._isConnectedToTicker) {\n Ticker.shared.remove(this.updateFrame, this);\n this._isConnectedToTicker = false;\n this._msToNextUpdate = 0;\n }\n if (this._videoFrameRequestCallbackHandle === null) {\n this._videoFrameRequestCallbackHandle = this.resource.requestVideoFrameCallback(\n this._videoFrameRequestCallback\n );\n }\n } else {\n if (this._videoFrameRequestCallbackHandle !== null) {\n this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle);\n this._videoFrameRequestCallbackHandle = null;\n }\n if (!this._isConnectedToTicker) {\n Ticker.shared.add(this.updateFrame, this);\n this._isConnectedToTicker = true;\n this._msToNextUpdate = 0;\n }\n }\n } else {\n if (this._videoFrameRequestCallbackHandle !== null) {\n this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle);\n this._videoFrameRequestCallbackHandle = null;\n }\n if (this._isConnectedToTicker) {\n Ticker.shared.remove(this.updateFrame, this);\n this._isConnectedToTicker = false;\n this._msToNextUpdate = 0;\n }\n }\n }\n static test(resource) {\n return globalThis.HTMLVideoElement && resource instanceof HTMLVideoElement;\n }\n};\n_VideoSource.extension = ExtensionType.TextureSource;\n/** The default options for video sources. */\n_VideoSource.defaultOptions = {\n ...TextureSource.defaultOptions,\n /** If true, the video will start loading immediately. */\n autoLoad: true,\n /** If true, the video will start playing as soon as it is loaded. */\n autoPlay: true,\n /** The number of times a second to update the texture from the video. Leave at 0 to update at every render. */\n updateFPS: 0,\n /** If true, the video will be loaded with the `crossorigin` attribute. */\n crossorigin: true,\n /** If true, the video will loop when it ends. */\n loop: false,\n /** If true, the video will be muted. */\n muted: true,\n /** If true, the video will play inline. */\n playsinline: true,\n /** If true, the video will be preloaded. */\n preload: false\n};\n/**\n * Map of video MIME types that can't be directly derived from file extensions.\n * @readonly\n */\n_VideoSource.MIME_TYPES = {\n ogv: \"video/ogg\",\n mov: \"video/quicktime\",\n m4v: \"video/mp4\"\n};\nlet VideoSource = _VideoSource;\n\nexport { VideoSource };\n//# sourceMappingURL=VideoSource.mjs.map\n","\"use strict\";\nconst convertToList = (input, transform, forceTransform = false) => {\n if (!Array.isArray(input)) {\n input = [input];\n }\n if (!transform) {\n return input;\n }\n return input.map((item) => {\n if (typeof item === \"string\" || forceTransform) {\n return transform(item);\n }\n return item;\n });\n};\n\nexport { convertToList };\n//# sourceMappingURL=convertToList.mjs.map\n","import { warn } from '../../utils/logging/warn.mjs';\nimport { convertToList } from '../utils/convertToList.mjs';\n\n\"use strict\";\nclass CacheClass {\n constructor() {\n this._parsers = [];\n this._cache = /* @__PURE__ */ new Map();\n this._cacheMap = /* @__PURE__ */ new Map();\n }\n /** Clear all entries. */\n reset() {\n this._cacheMap.clear();\n this._cache.clear();\n }\n /**\n * Check if the key exists\n * @param key - The key to check\n */\n has(key) {\n return this._cache.has(key);\n }\n /**\n * Fetch entry by key\n * @param key - The key of the entry to get\n */\n get(key) {\n const result = this._cache.get(key);\n if (!result) {\n warn(`[Assets] Asset id ${key} was not found in the Cache`);\n }\n return result;\n }\n /**\n * Set a value by key or keys name\n * @param key - The key or keys to set\n * @param value - The value to store in the cache or from which cacheable assets will be derived.\n */\n set(key, value) {\n const keys = convertToList(key);\n let cacheableAssets;\n for (let i = 0; i < this.parsers.length; i++) {\n const parser = this.parsers[i];\n if (parser.test(value)) {\n cacheableAssets = parser.getCacheableAssets(keys, value);\n break;\n }\n }\n const cacheableMap = new Map(Object.entries(cacheableAssets || {}));\n if (!cacheableAssets) {\n keys.forEach((key2) => {\n cacheableMap.set(key2, value);\n });\n }\n const cacheKeys = [...cacheableMap.keys()];\n const cachedAssets = {\n cacheKeys,\n keys\n };\n keys.forEach((key2) => {\n this._cacheMap.set(key2, cachedAssets);\n });\n cacheKeys.forEach((key2) => {\n const val = cacheableAssets ? cacheableAssets[key2] : value;\n if (this._cache.has(key2) && this._cache.get(key2) !== val) {\n warn(\"[Cache] already has key:\", key2);\n }\n this._cache.set(key2, cacheableMap.get(key2));\n });\n }\n /**\n * Remove entry by key\n *\n * This function will also remove any associated alias from the cache also.\n * @param key - The key of the entry to remove\n */\n remove(key) {\n if (!this._cacheMap.has(key)) {\n warn(`[Assets] Asset id ${key} was not found in the Cache`);\n return;\n }\n const cacheMap = this._cacheMap.get(key);\n const cacheKeys = cacheMap.cacheKeys;\n cacheKeys.forEach((key2) => {\n this._cache.delete(key2);\n });\n cacheMap.keys.forEach((key2) => {\n this._cacheMap.delete(key2);\n });\n }\n /**\n * All loader parsers registered\n * @advanced\n */\n get parsers() {\n return this._parsers;\n }\n}\nconst Cache = new CacheClass();\n\nexport { Cache };\n//# sourceMappingURL=Cache.mjs.map\n","import { Cache } from '../../../../../assets/cache/Cache.mjs';\nimport { extensions, ExtensionType } from '../../../../../extensions/Extensions.mjs';\nimport { TextureSource } from '../sources/TextureSource.mjs';\nimport { Texture } from '../Texture.mjs';\n\n\"use strict\";\nconst sources = [];\nextensions.handleByList(ExtensionType.TextureSource, sources);\nfunction autoDetectSource(options = {}) {\n return textureSourceFrom(options);\n}\nfunction textureSourceFrom(options = {}) {\n const hasResource = options && options.resource;\n const res = hasResource ? options.resource : options;\n const opts = hasResource ? options : { resource: options };\n for (let i = 0; i < sources.length; i++) {\n const Source = sources[i];\n if (Source.test(res)) {\n return new Source(opts);\n }\n }\n throw new Error(`Could not find a source type for resource: ${opts.resource}`);\n}\nfunction resourceToTexture(options = {}, skipCache = false) {\n const hasResource = options && options.resource;\n const resource = hasResource ? options.resource : options;\n const opts = hasResource ? options : { resource: options };\n if (!skipCache && Cache.has(resource)) {\n return Cache.get(resource);\n }\n const texture = new Texture({ source: textureSourceFrom(opts) });\n texture.on(\"destroy\", () => {\n if (Cache.has(resource)) {\n Cache.remove(resource);\n }\n });\n if (!skipCache) {\n Cache.set(resource, texture);\n }\n return texture;\n}\nfunction textureFrom(id, skipCache = false) {\n if (typeof id === \"string\") {\n return Cache.get(id);\n } else if (id instanceof TextureSource) {\n return new Texture({ source: id });\n }\n return resourceToTexture(id, skipCache);\n}\nTexture.from = textureFrom;\nTextureSource.from = textureSourceFrom;\n\nexport { autoDetectSource, resourceToTexture, textureFrom };\n//# sourceMappingURL=textureFrom.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { AlphaMask } from './mask/alpha/AlphaMask.mjs';\nimport { ColorMask } from './mask/color/ColorMask.mjs';\nimport { StencilMask } from './mask/stencil/StencilMask.mjs';\nimport { BufferImageSource } from './renderers/shared/texture/sources/BufferImageSource.mjs';\nimport { CanvasSource } from './renderers/shared/texture/sources/CanvasSource.mjs';\nimport { ImageSource } from './renderers/shared/texture/sources/ImageSource.mjs';\nimport { VideoSource } from './renderers/shared/texture/sources/VideoSource.mjs';\nimport './renderers/shared/texture/utils/textureFrom.mjs';\nimport './mask/MaskEffectManager.mjs';\n\n\"use strict\";\nextensions.add(AlphaMask, ColorMask, StencilMask, VideoSource, ImageSource, CanvasSource, BufferImageSource);\n//# sourceMappingURL=init.mjs.map\n","\"use strict\";\nvar LoaderParserPriority = /* @__PURE__ */ ((LoaderParserPriority2) => {\n LoaderParserPriority2[LoaderParserPriority2[\"Low\"] = 0] = \"Low\";\n LoaderParserPriority2[LoaderParserPriority2[\"Normal\"] = 1] = \"Normal\";\n LoaderParserPriority2[LoaderParserPriority2[\"High\"] = 2] = \"High\";\n return LoaderParserPriority2;\n})(LoaderParserPriority || {});\n\nexport { LoaderParserPriority };\n//# sourceMappingURL=LoaderParser.mjs.map\n","import { DOMAdapter } from '../environment/adapter.mjs';\n\n\"use strict\";\nfunction assertPath(path2) {\n if (typeof path2 !== \"string\") {\n throw new TypeError(`Path must be a string. Received ${JSON.stringify(path2)}`);\n }\n}\nfunction removeUrlParams(url) {\n const re = url.split(\"?\")[0];\n return re.split(\"#\")[0];\n}\nfunction escapeRegExp(string) {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\nfunction replaceAll(str, find, replace) {\n return str.replace(new RegExp(escapeRegExp(find), \"g\"), replace);\n}\nfunction normalizeStringPosix(path2, allowAboveRoot) {\n let res = \"\";\n let lastSegmentLength = 0;\n let lastSlash = -1;\n let dots = 0;\n let code = -1;\n for (let i = 0; i <= path2.length; ++i) {\n if (i < path2.length) {\n code = path2.charCodeAt(i);\n } else if (code === 47) {\n break;\n } else {\n code = 47;\n }\n if (code === 47) {\n if (lastSlash === i - 1 || dots === 1) {\n } else if (lastSlash !== i - 1 && dots === 2) {\n if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 || res.charCodeAt(res.length - 2) !== 46) {\n if (res.length > 2) {\n const lastSlashIndex = res.lastIndexOf(\"/\");\n if (lastSlashIndex !== res.length - 1) {\n if (lastSlashIndex === -1) {\n res = \"\";\n lastSegmentLength = 0;\n } else {\n res = res.slice(0, lastSlashIndex);\n lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n }\n lastSlash = i;\n dots = 0;\n continue;\n }\n } else if (res.length === 2 || res.length === 1) {\n res = \"\";\n lastSegmentLength = 0;\n lastSlash = i;\n dots = 0;\n continue;\n }\n }\n if (allowAboveRoot) {\n if (res.length > 0) {\n res += \"/..\";\n } else {\n res = \"..\";\n }\n lastSegmentLength = 2;\n }\n } else {\n if (res.length > 0) {\n res += `/${path2.slice(lastSlash + 1, i)}`;\n } else {\n res = path2.slice(lastSlash + 1, i);\n }\n lastSegmentLength = i - lastSlash - 1;\n }\n lastSlash = i;\n dots = 0;\n } else if (code === 46 && dots !== -1) {\n ++dots;\n } else {\n dots = -1;\n }\n }\n return res;\n}\nconst path = {\n /**\n * Converts a path to posix format.\n * @param path - The path to convert to posix\n * @example\n * ```ts\n * // Convert a Windows path to POSIX format\n * path.toPosix('C:\\\\Users\\\\User\\\\Documents\\\\file.txt');\n * // -> 'C:/Users/User/Documents/file.txt'\n * ```\n */\n toPosix(path2) {\n return replaceAll(path2, \"\\\\\", \"/\");\n },\n /**\n * Checks if the path is a URL e.g. http://, https://\n * @param path - The path to check\n * @example\n * ```ts\n * // Check if a path is a URL\n * path.isUrl('http://www.example.com');\n * // -> true\n * path.isUrl('C:/Users/User/Documents/file.txt');\n * // -> false\n * ```\n */\n isUrl(path2) {\n return /^https?:/.test(this.toPosix(path2));\n },\n /**\n * Checks if the path is a data URL\n * @param path - The path to check\n * @example\n * ```ts\n * // Check if a path is a data URL\n * path.isDataUrl('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA...');\n * // -> true\n * ```\n */\n isDataUrl(path2) {\n return /^data:([a-z]+\\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\\-._~:@\\/?%\\s<>]*?)$/i.test(path2);\n },\n /**\n * Checks if the path is a blob URL\n * @param path - The path to check\n * @example\n * ```ts\n * // Check if a path is a blob URL\n * path.isBlobUrl('blob:http://www.example.com/12345678-1234-1234-1234-123456789012');\n * // -> true\n * ```\n */\n isBlobUrl(path2) {\n return path2.startsWith(\"blob:\");\n },\n /**\n * Checks if the path has a protocol e.g. http://, https://, file:///, data:, blob:, C:/\n * This will return true for windows file paths\n * @param path - The path to check\n * @example\n * ```ts\n * // Check if a path has a protocol\n * path.hasProtocol('http://www.example.com');\n * // -> true\n * path.hasProtocol('C:/Users/User/Documents/file.txt');\n * // -> true\n * ```\n */\n hasProtocol(path2) {\n return /^[^/:]+:/.test(this.toPosix(path2));\n },\n /**\n * Returns the protocol of the path e.g. http://, https://, file:///, data:, blob:, C:/\n * @param path - The path to get the protocol from\n * @example\n * ```ts\n * // Get the protocol from a URL\n * path.getProtocol('http://www.example.com/path/to/resource');\n * // -> 'http://'\n * // Get the protocol from a file path\n * path.getProtocol('C:/Users/User/Documents/file.txt');\n * // -> 'C:/'\n * ```\n */\n getProtocol(path2) {\n assertPath(path2);\n path2 = this.toPosix(path2);\n const matchFile = /^file:\\/\\/\\//.exec(path2);\n if (matchFile) {\n return matchFile[0];\n }\n const matchProtocol = /^[^/:]+:\\/{0,2}/.exec(path2);\n if (matchProtocol) {\n return matchProtocol[0];\n }\n return \"\";\n },\n /**\n * Converts URL to an absolute path.\n * When loading from a Web Worker, we must use absolute paths.\n * If the URL is already absolute we return it as is\n * If it's not, we convert it\n * @param url - The URL to test\n * @param customBaseUrl - The base URL to use\n * @param customRootUrl - The root URL to use\n * @example\n * ```ts\n * // Convert a relative URL to an absolute path\n * path.toAbsolute('images/texture.png', 'http://example.com/assets/');\n * // -> 'http://example.com/assets/images/texture.png'\n * ```\n */\n toAbsolute(url, customBaseUrl, customRootUrl) {\n assertPath(url);\n if (this.isDataUrl(url) || this.isBlobUrl(url)) return url;\n const baseUrl = removeUrlParams(this.toPosix(customBaseUrl ?? DOMAdapter.get().getBaseUrl()));\n const rootUrl = removeUrlParams(this.toPosix(customRootUrl ?? this.rootname(baseUrl)));\n url = this.toPosix(url);\n if (url.startsWith(\"/\")) {\n return path.join(rootUrl, url.slice(1));\n }\n const absolutePath = this.isAbsolute(url) ? url : this.join(baseUrl, url);\n return absolutePath;\n },\n /**\n * Normalizes the given path, resolving '..' and '.' segments\n * @param path - The path to normalize\n * @example\n * ```ts\n * // Normalize a path with relative segments\n * path.normalize('http://www.example.com/foo/bar/../baz');\n * // -> 'http://www.example.com/foo/baz'\n * // Normalize a file path with relative segments\n * path.normalize('C:\\\\Users\\\\User\\\\Documents\\\\..\\\\file.txt');\n * // -> 'C:/Users/User/file.txt'\n * ```\n */\n normalize(path2) {\n assertPath(path2);\n if (path2.length === 0) return \".\";\n if (this.isDataUrl(path2) || this.isBlobUrl(path2)) return path2;\n path2 = this.toPosix(path2);\n let protocol = \"\";\n const isAbsolute = path2.startsWith(\"/\");\n if (this.hasProtocol(path2)) {\n protocol = this.rootname(path2);\n path2 = path2.slice(protocol.length);\n }\n const trailingSeparator = path2.endsWith(\"/\");\n path2 = normalizeStringPosix(path2, false);\n if (path2.length > 0 && trailingSeparator) path2 += \"/\";\n if (isAbsolute) return `/${path2}`;\n return protocol + path2;\n },\n /**\n * Determines if path is an absolute path.\n * Absolute paths can be urls, data urls, or paths on disk\n * @param path - The path to test\n * @example\n * ```ts\n * // Check if a path is absolute\n * path.isAbsolute('http://www.example.com/foo/bar');\n * // -> true\n * path.isAbsolute('C:/Users/User/Documents/file.txt');\n * // -> true\n * ```\n */\n isAbsolute(path2) {\n assertPath(path2);\n path2 = this.toPosix(path2);\n if (this.hasProtocol(path2)) return true;\n return path2.startsWith(\"/\");\n },\n /**\n * Joins all given path segments together using the platform-specific separator as a delimiter,\n * then normalizes the resulting path\n * @param segments - The segments of the path to join\n * @example\n * ```ts\n * // Join multiple path segments\n * path.join('assets', 'images', 'sprite.png');\n * // -> 'assets/images/sprite.png'\n * // Join with relative segments\n * path.join('assets', 'images', '../textures', 'sprite.png');\n * // -> 'assets/textures/sprite.png'\n * ```\n */\n join(...segments) {\n if (segments.length === 0) {\n return \".\";\n }\n let joined;\n for (let i = 0; i < segments.length; ++i) {\n const arg = segments[i];\n assertPath(arg);\n if (arg.length > 0) {\n if (joined === void 0) joined = arg;\n else {\n const prevArg = segments[i - 1] ?? \"\";\n if (this.joinExtensions.includes(this.extname(prevArg).toLowerCase())) {\n joined += `/../${arg}`;\n } else {\n joined += `/${arg}`;\n }\n }\n }\n }\n if (joined === void 0) {\n return \".\";\n }\n return this.normalize(joined);\n },\n /**\n * Returns the directory name of a path\n * @param path - The path to parse\n * @example\n * ```ts\n * // Get the directory name of a path\n * path.dirname('http://www.example.com/foo/bar/baz.png');\n * // -> 'http://www.example.com/foo/bar'\n * // Get the directory name of a file path\n * path.dirname('C:/Users/User/Documents/file.txt');\n * // -> 'C:/Users/User/Documents'\n * ```\n */\n dirname(path2) {\n assertPath(path2);\n if (path2.length === 0) return \".\";\n path2 = this.toPosix(path2);\n let code = path2.charCodeAt(0);\n const hasRoot = code === 47;\n let end = -1;\n let matchedSlash = true;\n const proto = this.getProtocol(path2);\n const origpath = path2;\n path2 = path2.slice(proto.length);\n for (let i = path2.length - 1; i >= 1; --i) {\n code = path2.charCodeAt(i);\n if (code === 47) {\n if (!matchedSlash) {\n end = i;\n break;\n }\n } else {\n matchedSlash = false;\n }\n }\n if (end === -1) return hasRoot ? \"/\" : this.isUrl(origpath) ? proto + path2 : proto;\n if (hasRoot && end === 1) return \"//\";\n return proto + path2.slice(0, end);\n },\n /**\n * Returns the root of the path e.g. /, C:/, file:///, http://domain.com/\n * @param path - The path to parse\n * @example\n * ```ts\n * // Get the root of a URL\n * path.rootname('http://www.example.com/foo/bar/baz.png');\n * // -> 'http://www.example.com/'\n * // Get the root of a file path\n * path.rootname('C:/Users/User/Documents/file.txt');\n * // -> 'C:/'\n * ```\n */\n rootname(path2) {\n assertPath(path2);\n path2 = this.toPosix(path2);\n let root = \"\";\n if (path2.startsWith(\"/\")) root = \"/\";\n else {\n root = this.getProtocol(path2);\n }\n if (this.isUrl(path2)) {\n const index = path2.indexOf(\"/\", root.length);\n if (index !== -1) {\n root = path2.slice(0, index);\n } else root = path2;\n if (!root.endsWith(\"/\")) root += \"/\";\n }\n return root;\n },\n /**\n * Returns the last portion of a path\n * @param path - The path to test\n * @param ext - Optional extension to remove\n * @example\n * ```ts\n * // Get the basename of a URL\n * path.basename('http://www.example.com/foo/bar/baz.png');\n * // -> 'baz.png'\n * // Get the basename of a file path\n * path.basename('C:/Users/User/Documents/file.txt');\n * // -> 'file.txt'\n * ```\n */\n basename(path2, ext) {\n assertPath(path2);\n if (ext) assertPath(ext);\n path2 = removeUrlParams(this.toPosix(path2));\n let start = 0;\n let end = -1;\n let matchedSlash = true;\n let i;\n if (ext !== void 0 && ext.length > 0 && ext.length <= path2.length) {\n if (ext.length === path2.length && ext === path2) return \"\";\n let extIdx = ext.length - 1;\n let firstNonSlashEnd = -1;\n for (i = path2.length - 1; i >= 0; --i) {\n const code = path2.charCodeAt(i);\n if (code === 47) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else {\n if (firstNonSlashEnd === -1) {\n matchedSlash = false;\n firstNonSlashEnd = i + 1;\n }\n if (extIdx >= 0) {\n if (code === ext.charCodeAt(extIdx)) {\n if (--extIdx === -1) {\n end = i;\n }\n } else {\n extIdx = -1;\n end = firstNonSlashEnd;\n }\n }\n }\n }\n if (start === end) end = firstNonSlashEnd;\n else if (end === -1) end = path2.length;\n return path2.slice(start, end);\n }\n for (i = path2.length - 1; i >= 0; --i) {\n if (path2.charCodeAt(i) === 47) {\n if (!matchedSlash) {\n start = i + 1;\n break;\n }\n } else if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n }\n if (end === -1) return \"\";\n return path2.slice(start, end);\n },\n /**\n * Returns the extension of the path, from the last occurrence of the . (period) character to end of string in the last\n * portion of the path. If there is no . in the last portion of the path, or if there are no . characters other than\n * the first character of the basename of path, an empty string is returned.\n * @param path - The path to parse\n * @example\n * ```ts\n * // Get the extension of a URL\n * path.extname('http://www.example.com/foo/bar/baz.png');\n * // -> '.png'\n * // Get the extension of a file path\n * path.extname('C:/Users/User/Documents/file.txt');\n * // -> '.txt'\n * ```\n */\n extname(path2) {\n assertPath(path2);\n path2 = removeUrlParams(this.toPosix(path2));\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let preDotState = 0;\n for (let i = path2.length - 1; i >= 0; --i) {\n const code = path2.charCodeAt(i);\n if (code === 47) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46) {\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n preDotState = -1;\n }\n }\n if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n return \"\";\n }\n return path2.slice(startDot, end);\n },\n /**\n * Parses a path into an object containing the 'root', `dir`, `base`, `ext`, and `name` properties.\n * @param path - The path to parse\n * @example\n * ```ts\n * // Parse a URL\n * const parsed = path.parse('http://www.example.com/foo/bar/baz.png');\n * // -> {\n * // root: 'http://www.example.com/',\n * // dir: 'http://www.example.com/foo/bar',\n * // base: 'baz.png',\n * // ext: '.png',\n * // name: 'baz'\n * // }\n * // Parse a file path\n * const parsedFile = path.parse('C:/Users/User/Documents/file.txt');\n * // -> {\n * // root: 'C:/',\n * // dir: 'C:/Users/User/Documents',\n * // base: 'file.txt',\n * // ext: '.txt',\n * // name: 'file'\n * // }\n * ```\n */\n parse(path2) {\n assertPath(path2);\n const ret = { root: \"\", dir: \"\", base: \"\", ext: \"\", name: \"\" };\n if (path2.length === 0) return ret;\n path2 = removeUrlParams(this.toPosix(path2));\n let code = path2.charCodeAt(0);\n const isAbsolute = this.isAbsolute(path2);\n let start;\n const protocol = \"\";\n ret.root = this.rootname(path2);\n if (isAbsolute || this.hasProtocol(path2)) {\n start = 1;\n } else {\n start = 0;\n }\n let startDot = -1;\n let startPart = 0;\n let end = -1;\n let matchedSlash = true;\n let i = path2.length - 1;\n let preDotState = 0;\n for (; i >= start; --i) {\n code = path2.charCodeAt(i);\n if (code === 47) {\n if (!matchedSlash) {\n startPart = i + 1;\n break;\n }\n continue;\n }\n if (end === -1) {\n matchedSlash = false;\n end = i + 1;\n }\n if (code === 46) {\n if (startDot === -1) startDot = i;\n else if (preDotState !== 1) preDotState = 1;\n } else if (startDot !== -1) {\n preDotState = -1;\n }\n }\n if (startDot === -1 || end === -1 || preDotState === 0 || preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n if (end !== -1) {\n if (startPart === 0 && isAbsolute) ret.base = ret.name = path2.slice(1, end);\n else ret.base = ret.name = path2.slice(startPart, end);\n }\n } else {\n if (startPart === 0 && isAbsolute) {\n ret.name = path2.slice(1, startDot);\n ret.base = path2.slice(1, end);\n } else {\n ret.name = path2.slice(startPart, startDot);\n ret.base = path2.slice(startPart, end);\n }\n ret.ext = path2.slice(startDot, end);\n }\n ret.dir = this.dirname(path2);\n if (protocol) ret.dir = protocol + ret.dir;\n return ret;\n },\n sep: \"/\",\n delimiter: \":\",\n joinExtensions: [\".html\"]\n};\n\nexport { path };\n//# sourceMappingURL=path.mjs.map\n","\"use strict\";\nfunction processX(base, ids, depth, result, tags) {\n const id = ids[depth];\n for (let i = 0; i < id.length; i++) {\n const value = id[i];\n if (depth < ids.length - 1) {\n processX(base.replace(result[depth], value), ids, depth + 1, result, tags);\n } else {\n tags.push(base.replace(result[depth], value));\n }\n }\n}\nfunction createStringVariations(string) {\n const regex = /\\{(.*?)\\}/g;\n const result = string.match(regex);\n const tags = [];\n if (result) {\n const ids = [];\n result.forEach((vars) => {\n const split = vars.substring(1, vars.length - 1).split(\",\");\n ids.push(split);\n });\n processX(string, ids, 0, result, tags);\n } else {\n tags.push(string);\n }\n return tags;\n}\n\nexport { createStringVariations };\n//# sourceMappingURL=createStringVariations.mjs.map\n","\"use strict\";\nconst isSingleItem = (item) => !Array.isArray(item);\n\nexport { isSingleItem };\n//# sourceMappingURL=isSingleItem.mjs.map\n","import { warn } from '../../utils/logging/warn.mjs';\nimport { path } from '../../utils/path.mjs';\nimport { convertToList } from '../utils/convertToList.mjs';\nimport { createStringVariations } from '../utils/createStringVariations.mjs';\nimport { isSingleItem } from '../utils/isSingleItem.mjs';\n\n\"use strict\";\nclass Resolver {\n constructor() {\n this._defaultBundleIdentifierOptions = {\n connector: \"-\",\n createBundleAssetId: (bundleId, assetId) => `${bundleId}${this._bundleIdConnector}${assetId}`,\n extractAssetIdFromBundle: (bundleId, assetBundleId) => assetBundleId.replace(`${bundleId}${this._bundleIdConnector}`, \"\")\n };\n /** The character that is used to connect the bundleId and the assetId when generating a bundle asset id key */\n this._bundleIdConnector = this._defaultBundleIdentifierOptions.connector;\n /**\n * A function that generates a bundle asset id key from a bundleId and an assetId\n * @param bundleId - the bundleId\n * @param assetId - the assetId\n * @returns the bundle asset id key\n */\n this._createBundleAssetId = this._defaultBundleIdentifierOptions.createBundleAssetId;\n /**\n * A function that generates an assetId from a bundle asset id key. This is the reverse of generateBundleAssetId\n * @param bundleId - the bundleId\n * @param assetBundleId - the bundle asset id key\n * @returns the assetId\n */\n this._extractAssetIdFromBundle = this._defaultBundleIdentifierOptions.extractAssetIdFromBundle;\n this._assetMap = {};\n this._preferredOrder = [];\n this._parsers = [];\n this._resolverHash = {};\n this._bundles = {};\n }\n /**\n * Override how the resolver deals with generating bundle ids.\n * must be called before any bundles are added\n * @param bundleIdentifier - the bundle identifier options\n */\n setBundleIdentifier(bundleIdentifier) {\n this._bundleIdConnector = bundleIdentifier.connector ?? this._bundleIdConnector;\n this._createBundleAssetId = bundleIdentifier.createBundleAssetId ?? this._createBundleAssetId;\n this._extractAssetIdFromBundle = bundleIdentifier.extractAssetIdFromBundle ?? this._extractAssetIdFromBundle;\n if (this._extractAssetIdFromBundle(\"foo\", this._createBundleAssetId(\"foo\", \"bar\")) !== \"bar\") {\n throw new Error(\"[Resolver] GenerateBundleAssetId are not working correctly\");\n }\n }\n /**\n * Let the resolver know which assets you prefer to use when resolving assets.\n * Multiple prefer user defined rules can be added.\n * @example\n * resolver.prefer({\n * // first look for something with the correct format, and then then correct resolution\n * priority: ['format', 'resolution'],\n * params:{\n * format:'webp', // prefer webp images\n * resolution: 2, // prefer a resolution of 2\n * }\n * })\n * resolver.add('foo', ['bar@2x.webp', 'bar@2x.png', 'bar.webp', 'bar.png']);\n * resolver.resolveUrl('foo') // => 'bar@2x.webp'\n * @param preferOrders - the prefer options\n */\n prefer(...preferOrders) {\n preferOrders.forEach((prefer) => {\n this._preferredOrder.push(prefer);\n if (!prefer.priority) {\n prefer.priority = Object.keys(prefer.params);\n }\n });\n this._resolverHash = {};\n }\n /**\n * Set the base path to prepend to all urls when resolving\n * @example\n * resolver.basePath = 'https://home.com/';\n * resolver.add('foo', 'bar.ong');\n * resolver.resolveUrl('foo', 'bar.png'); // => 'https://home.com/bar.png'\n * @param basePath - the base path to use\n */\n set basePath(basePath) {\n this._basePath = basePath;\n }\n get basePath() {\n return this._basePath;\n }\n /**\n * Set the root path for root-relative URLs. By default the `basePath`'s root is used. If no `basePath` is set, then the\n * default value for browsers is `window.location.origin`\n * @example\n * // Application hosted on https://home.com/some-path/index.html\n * resolver.basePath = 'https://home.com/some-path/';\n * resolver.rootPath = 'https://home.com/';\n * resolver.add('foo', '/bar.png');\n * resolver.resolveUrl('foo', '/bar.png'); // => 'https://home.com/bar.png'\n * @param rootPath - the root path to use\n */\n set rootPath(rootPath) {\n this._rootPath = rootPath;\n }\n get rootPath() {\n return this._rootPath;\n }\n /**\n * All the active URL parsers that help the parser to extract information and create\n * an asset object-based on parsing the URL itself.\n *\n * Can be added using the extensions API\n * @example\n * resolver.add('foo', [\n * {\n * resolution: 2,\n * format: 'png',\n * src: 'image@2x.png',\n * },\n * {\n * resolution:1,\n * format:'png',\n * src: 'image.png',\n * },\n * ]);\n *\n * // With a url parser the information such as resolution and file format could extracted from the url itself:\n * extensions.add({\n * extension: ExtensionType.ResolveParser,\n * test: loadTextures.test, // test if url ends in an image\n * parse: (value: string) =>\n * ({\n * resolution: parseFloat(Resolver.RETINA_PREFIX.exec(value)?.[1] ?? '1'),\n * format: value.split('.').pop(),\n * src: value,\n * }),\n * });\n *\n * // Now resolution and format can be extracted from the url\n * resolver.add('foo', [\n * 'image@2x.png',\n * 'image.png',\n * ]);\n */\n get parsers() {\n return this._parsers;\n }\n /** Used for testing, this resets the resolver to its initial state */\n reset() {\n this.setBundleIdentifier(this._defaultBundleIdentifierOptions);\n this._assetMap = {};\n this._preferredOrder = [];\n this._resolverHash = {};\n this._rootPath = null;\n this._basePath = null;\n this._manifest = null;\n this._bundles = {};\n this._defaultSearchParams = null;\n }\n /**\n * Sets the default URL search parameters for the URL resolver. The urls can be specified as a string or an object.\n * @param searchParams - the default url parameters to append when resolving urls\n */\n setDefaultSearchParams(searchParams) {\n if (typeof searchParams === \"string\") {\n this._defaultSearchParams = searchParams;\n } else {\n const queryValues = searchParams;\n this._defaultSearchParams = Object.keys(queryValues).map((key) => `${encodeURIComponent(key)}=${encodeURIComponent(queryValues[key])}`).join(\"&\");\n }\n }\n /**\n * Returns the aliases for a given asset\n * @param asset - the asset to get the aliases for\n */\n getAlias(asset) {\n const { alias, src } = asset;\n const aliasesToUse = convertToList(\n alias || src,\n (value) => {\n if (typeof value === \"string\") return value;\n if (Array.isArray(value)) return value.map((v) => v?.src ?? v);\n if (value?.src) return value.src;\n return value;\n },\n true\n );\n return aliasesToUse;\n }\n /**\n * Removes the specified alias for an asset.\n *\n * This only removes the alias mapping. It does **not** remove, unload, or destroy the\n * underlying asset. If the asset is already cached, it stays in memory until you call\n * `Assets.unload`.\n *\n * If `asset` is provided, the alias is only removed when the resolver's current mapping for\n * that alias matches the given `ResolvedAsset`. This lets you avoid accidentally removing an\n * alias that has been reassigned.\n *\n * Silently returns if the alias does not exist or the asset does not match.\n * @param alias - the alias to remove\n * @param asset - only remove the alias if it is currently assigned to this asset\n * @example\n * ```ts\n * resolver.add({ alias: 'hero', src: 'hero.png' });\n *\n * // Simple removal\n * resolver.removeAlias('hero');\n *\n * // Conditional removal — only if alias currently maps to a specific asset\n * const resolved = resolver.resolve('hero');\n * resolver.removeAlias('hero', resolved);\n * ```\n */\n removeAlias(alias, asset) {\n if (!this._assetMap[alias]) {\n return;\n }\n if (asset && asset !== this._resolverHash[alias]) {\n return;\n }\n delete this._resolverHash[alias];\n delete this._assetMap[alias];\n }\n /**\n * Add a manifest to the asset resolver. This is a nice way to add all the asset information in one go.\n * generally a manifest would be built using a tool.\n * @param manifest - the manifest to add to the resolver\n */\n addManifest(manifest) {\n if (this._manifest) {\n warn(\"[Resolver] Manifest already exists, this will be overwritten\");\n }\n this._manifest = manifest;\n manifest.bundles.forEach((bundle) => {\n this.addBundle(bundle.name, bundle.assets);\n });\n }\n /**\n * This adds a bundle of assets in one go so that you can resolve them as a group.\n * For example you could add a bundle for each screen in you pixi app\n * @example\n * resolver.addBundle('animals', [\n * { alias: 'bunny', src: 'bunny.png' },\n * { alias: 'chicken', src: 'chicken.png' },\n * { alias: 'thumper', src: 'thumper.png' },\n * ]);\n * // or\n * resolver.addBundle('animals', {\n * bunny: 'bunny.png',\n * chicken: 'chicken.png',\n * thumper: 'thumper.png',\n * });\n *\n * const resolvedAssets = await resolver.resolveBundle('animals');\n * @param bundleId - The id of the bundle to add\n * @param assets - A record of the asset or assets that will be chosen from when loading via the specified key\n */\n addBundle(bundleId, assets) {\n const assetNames = [];\n let convertedAssets = assets;\n if (!Array.isArray(assets)) {\n convertedAssets = Object.entries(assets).map(([alias, src]) => {\n if (typeof src === \"string\" || Array.isArray(src)) {\n return { alias, src };\n }\n return { alias, ...src };\n });\n }\n convertedAssets.forEach((asset) => {\n const srcs = asset.src;\n const aliases = asset.alias;\n let ids;\n if (typeof aliases === \"string\") {\n const bundleAssetId = this._createBundleAssetId(bundleId, aliases);\n assetNames.push(bundleAssetId);\n ids = [aliases, bundleAssetId];\n } else {\n const bundleIds = aliases.map((name) => this._createBundleAssetId(bundleId, name));\n assetNames.push(...bundleIds);\n ids = [...aliases, ...bundleIds];\n }\n this.add({\n ...asset,\n ...{\n alias: ids,\n src: srcs\n }\n });\n });\n this._bundles[bundleId] = assetNames;\n }\n /**\n * Tells the resolver what keys are associated with witch asset.\n * The most important thing the resolver does\n * @example\n * // Single key, single asset:\n * resolver.add({alias: 'foo', src: 'bar.png');\n * resolver.resolveUrl('foo') // => 'bar.png'\n *\n * // Multiple keys, single asset:\n * resolver.add({alias: ['foo', 'boo'], src: 'bar.png'});\n * resolver.resolveUrl('foo') // => 'bar.png'\n * resolver.resolveUrl('boo') // => 'bar.png'\n *\n * // Multiple keys, multiple assets:\n * resolver.add({alias: ['foo', 'boo'], src: ['bar.png', 'bar.webp']});\n * resolver.resolveUrl('foo') // => 'bar.png'\n *\n * // Add custom data attached to the resolver\n * Resolver.add({\n * alias: 'bunnyBooBooSmooth',\n * src: 'bunny{png,webp}',\n * data: { scaleMode:SCALE_MODES.NEAREST }, // Base texture options\n * });\n *\n * resolver.resolve('bunnyBooBooSmooth') // => { src: 'bunny.png', data: { scaleMode: SCALE_MODES.NEAREST } }\n * @param aliases - the UnresolvedAsset or array of UnresolvedAssets to add to the resolver\n */\n add(aliases) {\n const assets = [];\n if (Array.isArray(aliases)) {\n assets.push(...aliases);\n } else {\n assets.push(aliases);\n }\n let keyCheck;\n keyCheck = (key) => {\n if (this.hasKey(key)) {\n warn(`[Resolver] already has key: ${key} overwriting`);\n }\n };\n const assetArray = convertToList(assets);\n assetArray.forEach((asset) => {\n const { src } = asset;\n let {\n data,\n format,\n loadParser: userDefinedLoadParser,\n parser: userDefinedParser\n } = asset;\n const srcsToUse = convertToList(src).map((src2) => {\n if (typeof src2 === \"string\") {\n return createStringVariations(src2);\n }\n return Array.isArray(src2) ? src2 : [src2];\n });\n const aliasesToUse = this.getAlias(asset);\n Array.isArray(aliasesToUse) ? aliasesToUse.forEach(keyCheck) : keyCheck(aliasesToUse);\n const resolvedAssets = [];\n const parseUrl = (url) => {\n const parser = this._parsers.find((p) => p.test(url));\n return {\n src: url,\n ...parser?.parse(url)\n };\n };\n srcsToUse.forEach((srcs) => {\n srcs.forEach((src2) => {\n let formattedAsset = {};\n if (typeof src2 !== \"object\") {\n formattedAsset = parseUrl(src2);\n } else {\n data = src2.data ?? data;\n format = src2.format ?? format;\n if (src2.loadParser || src2.parser) {\n userDefinedLoadParser = src2.loadParser ?? userDefinedLoadParser;\n userDefinedParser = src2.parser ?? userDefinedParser;\n }\n formattedAsset = {\n ...parseUrl(src2.src),\n ...src2\n };\n }\n if (!aliasesToUse) {\n throw new Error(`[Resolver] alias is undefined for this asset: ${formattedAsset.src}`);\n }\n formattedAsset = this._buildResolvedAsset(formattedAsset, {\n aliases: aliasesToUse,\n data,\n format,\n loadParser: userDefinedLoadParser,\n parser: userDefinedParser,\n progressSize: asset.progressSize\n });\n resolvedAssets.push(formattedAsset);\n });\n });\n aliasesToUse.forEach((alias) => {\n this._assetMap[alias] = resolvedAssets;\n });\n });\n }\n // TODO: this needs an overload like load did in Assets\n /**\n * If the resolver has had a manifest set via setManifest, this will return the assets urls for\n * a given bundleId or bundleIds.\n * @example\n * // Manifest Example\n * const manifest = {\n * bundles: [\n * {\n * name: 'load-screen',\n * assets: [\n * {\n * alias: 'background',\n * src: 'sunset.png',\n * },\n * {\n * alias: 'bar',\n * src: 'load-bar.{png,webp}',\n * },\n * ],\n * },\n * {\n * name: 'game-screen',\n * assets: [\n * {\n * alias: 'character',\n * src: 'robot.png',\n * },\n * {\n * alias: 'enemy',\n * src: 'bad-guy.png',\n * },\n * ],\n * },\n * ]\n * };\n *\n * resolver.setManifest(manifest);\n * const resolved = resolver.resolveBundle('load-screen');\n * @param bundleIds - The bundle ids to resolve\n * @returns All the bundles assets or a hash of assets for each bundle specified\n */\n resolveBundle(bundleIds) {\n const singleAsset = isSingleItem(bundleIds);\n bundleIds = convertToList(bundleIds);\n const out = {};\n bundleIds.forEach((bundleId) => {\n const assetNames = this._bundles[bundleId];\n if (assetNames) {\n const results = this.resolve(assetNames);\n const assets = {};\n for (const key in results) {\n const asset = results[key];\n assets[this._extractAssetIdFromBundle(bundleId, key)] = asset;\n }\n out[bundleId] = assets;\n }\n });\n return singleAsset ? out[bundleIds[0]] : out;\n }\n /**\n * Does exactly what resolve does, but returns just the URL rather than the whole asset object\n * @param key - The key or keys to resolve\n * @returns - The URLs associated with the key(s)\n */\n resolveUrl(key) {\n const result = this.resolve(key);\n if (typeof key !== \"string\") {\n const out = {};\n for (const i in result) {\n out[i] = result[i].src;\n }\n return out;\n }\n return result.src;\n }\n resolve(keys) {\n const singleAsset = isSingleItem(keys);\n keys = convertToList(keys);\n const result = {};\n keys.forEach((key) => {\n if (!this._resolverHash[key]) {\n if (this._assetMap[key]) {\n let assets = this._assetMap[key];\n const preferredOrder = this._getPreferredOrder(assets);\n preferredOrder?.priority.forEach((priorityKey) => {\n preferredOrder.params[priorityKey].forEach((value) => {\n const filteredAssets = assets.filter((asset) => {\n if (asset[priorityKey]) {\n return asset[priorityKey] === value;\n }\n return false;\n });\n if (filteredAssets.length) {\n assets = filteredAssets;\n }\n });\n });\n this._resolverHash[key] = assets[0];\n } else {\n this._resolverHash[key] = this._buildResolvedAsset({\n alias: [key],\n src: key\n }, {});\n }\n }\n result[key] = this._resolverHash[key];\n });\n return singleAsset ? result[keys[0]] : result;\n }\n /**\n * Checks if an asset with a given key exists in the resolver\n * @param key - The key of the asset\n */\n hasKey(key) {\n return !!this._assetMap[key];\n }\n /**\n * Checks if a bundle with the given key exists in the resolver\n * @param key - The key of the bundle\n */\n hasBundle(key) {\n return !!this._bundles[key];\n }\n /**\n * Internal function for figuring out what prefer criteria an asset should use.\n * @param assets\n */\n _getPreferredOrder(assets) {\n for (let i = 0; i < assets.length; i++) {\n const asset = assets[i];\n const preferred = this._preferredOrder.find((preference) => preference.params.format.includes(asset.format));\n if (preferred) {\n return preferred;\n }\n }\n return this._preferredOrder[0];\n }\n /**\n * Appends the default url parameters to the url\n * @param url - The url to append the default parameters to\n * @returns - The url with the default parameters appended\n */\n _appendDefaultSearchParams(url) {\n if (!this._defaultSearchParams) return url;\n const paramConnector = /\\?/.test(url) ? \"&\" : \"?\";\n return `${url}${paramConnector}${this._defaultSearchParams}`;\n }\n _buildResolvedAsset(formattedAsset, data) {\n const { aliases, data: assetData, loadParser, parser, format, progressSize } = data;\n if (this._basePath || this._rootPath) {\n formattedAsset.src = path.toAbsolute(formattedAsset.src, this._basePath, this._rootPath);\n }\n formattedAsset.alias = aliases ?? formattedAsset.alias ?? [formattedAsset.src];\n formattedAsset.src = this._appendDefaultSearchParams(formattedAsset.src);\n formattedAsset.data = { ...assetData || {}, ...formattedAsset.data };\n formattedAsset.loadParser = loadParser ?? formattedAsset.loadParser;\n formattedAsset.parser = parser ?? formattedAsset.parser;\n formattedAsset.format = format ?? formattedAsset.format ?? getUrlExtension(formattedAsset.src);\n if (progressSize !== void 0) {\n formattedAsset.progressSize = progressSize;\n }\n return formattedAsset;\n }\n}\n/**\n * The prefix that denotes a URL is for a retina asset.\n * @default /@([0-9\\.]+)x/\n * @example `@2x`\n */\nResolver.RETINA_PREFIX = /@([0-9\\.]+)x/;\nfunction getUrlExtension(url) {\n return url.split(\".\").pop().split(\"?\").shift().split(\"#\").shift();\n}\n\nexport { Resolver, getUrlExtension };\n//# sourceMappingURL=Resolver.mjs.map\n","\"use strict\";\nconst copySearchParams = (targetUrl, sourceUrl) => {\n const searchParams = sourceUrl.split(\"?\")[1];\n if (searchParams) {\n targetUrl += `?${searchParams}`;\n }\n return targetUrl;\n};\n\nexport { copySearchParams };\n//# sourceMappingURL=copySearchParams.mjs.map\n","import { Rectangle } from '../maths/shapes/Rectangle.mjs';\nimport { TextureSource } from '../rendering/renderers/shared/texture/sources/TextureSource.mjs';\nimport { Texture } from '../rendering/renderers/shared/texture/Texture.mjs';\n\n\"use strict\";\nconst _Spritesheet = class _Spritesheet {\n constructor(optionsOrTexture, arg1) {\n /** For multi-packed spritesheets, this contains a reference to all the other spritesheets it depends on. */\n this.linkedSheets = [];\n let options = optionsOrTexture;\n if (optionsOrTexture?.source instanceof TextureSource) {\n options = {\n texture: optionsOrTexture,\n data: arg1\n };\n }\n const { texture, data, cachePrefix = \"\" } = options;\n this.cachePrefix = cachePrefix;\n this._texture = texture instanceof Texture ? texture : null;\n this.textureSource = texture.source;\n this.textures = {};\n this.animations = {};\n this.data = data;\n const metaResolution = parseFloat(data.meta.scale);\n if (metaResolution) {\n this.resolution = metaResolution;\n texture.source.resolution = this.resolution;\n } else {\n this.resolution = texture.source._resolution;\n }\n this._frames = this.data.frames;\n this._frameKeys = Object.keys(this._frames);\n this._batchIndex = 0;\n this._callback = null;\n }\n /**\n * Parse spritesheet from loaded data. This is done asynchronously\n * to prevent creating too many Texture within a single process.\n */\n parse() {\n return new Promise((resolve) => {\n this._callback = resolve;\n this._batchIndex = 0;\n if (this._frameKeys.length <= _Spritesheet.BATCH_SIZE) {\n this._processFrames(0);\n this._processAnimations();\n this._parseComplete();\n } else {\n this._nextBatch();\n }\n });\n }\n /**\n * Parse spritesheet from loaded data. This is done synchronously\n * and is only suitable for smaller spritesheets (less than ~1000 frames)\n * or may cause too many Texture within a single process. However, synchronous parsing may be\n * more convenient since the called does not need to be asynchronous and is safe for\n * small-to-medium sized spritesheets.\n *\n * Other than being synchronous, `parseSync` is otherwise identical to `.parse()`.\n */\n parseSync() {\n this._processFrames(0, true);\n this._processAnimations();\n return this.textures;\n }\n /**\n * Process a batch of frames\n * @param initialFrameIndex - The index of frame to start.\n * @param processAll - if true will process all frames in a single batch, ignoring BATCH_SIZE - this\n * is used for synchronous parsing.\n */\n _processFrames(initialFrameIndex, processAll = false) {\n let frameIndex = initialFrameIndex;\n const maxFrames = processAll ? Infinity : _Spritesheet.BATCH_SIZE;\n while (frameIndex - initialFrameIndex < maxFrames && frameIndex < this._frameKeys.length) {\n const i = this._frameKeys[frameIndex];\n const data = this._frames[i];\n const rect = data.frame;\n if (rect) {\n let frame = null;\n let trim = null;\n const sourceSize = data.trimmed !== false && data.sourceSize ? data.sourceSize : data.frame;\n const orig = new Rectangle(\n 0,\n 0,\n Math.floor(sourceSize.w) / this.resolution,\n Math.floor(sourceSize.h) / this.resolution\n );\n if (data.rotated) {\n frame = new Rectangle(\n Math.floor(rect.x) / this.resolution,\n Math.floor(rect.y) / this.resolution,\n Math.floor(rect.h) / this.resolution,\n Math.floor(rect.w) / this.resolution\n );\n } else {\n frame = new Rectangle(\n Math.floor(rect.x) / this.resolution,\n Math.floor(rect.y) / this.resolution,\n Math.floor(rect.w) / this.resolution,\n Math.floor(rect.h) / this.resolution\n );\n }\n if (data.trimmed !== false && data.spriteSourceSize) {\n trim = new Rectangle(\n Math.floor(data.spriteSourceSize.x) / this.resolution,\n Math.floor(data.spriteSourceSize.y) / this.resolution,\n Math.floor(rect.w) / this.resolution,\n Math.floor(rect.h) / this.resolution\n );\n }\n this.textures[i] = new Texture({\n source: this.textureSource,\n frame,\n orig,\n trim,\n rotate: data.rotated ? 2 : 0,\n defaultAnchor: data.anchor,\n defaultBorders: data.borders,\n label: i.toString()\n });\n }\n frameIndex++;\n }\n }\n /** Parse animations config. */\n _processAnimations() {\n const animations = this.data.animations || {};\n for (const animName in animations) {\n this.animations[animName] = [];\n for (let i = 0; i < animations[animName].length; i++) {\n const frameName = animations[animName][i];\n this.animations[animName].push(this.textures[frameName]);\n }\n }\n }\n /** The parse has completed. */\n _parseComplete() {\n const callback = this._callback;\n this._callback = null;\n this._batchIndex = 0;\n callback.call(this, this.textures);\n }\n /** Begin the next batch of textures. */\n _nextBatch() {\n this._processFrames(this._batchIndex * _Spritesheet.BATCH_SIZE);\n this._batchIndex++;\n setTimeout(() => {\n if (this._batchIndex * _Spritesheet.BATCH_SIZE < this._frameKeys.length) {\n this._nextBatch();\n } else {\n this._processAnimations();\n this._parseComplete();\n }\n }, 0);\n }\n /**\n * Destroy Spritesheet and don't use after this.\n * @param {boolean} [destroyBase=false] - Whether to destroy the base texture as well\n */\n destroy(destroyBase = false) {\n for (const i in this.textures) {\n this.textures[i].destroy();\n }\n this._frames = null;\n this._frameKeys = null;\n this.data = null;\n this.textures = null;\n if (destroyBase) {\n this._texture?.destroy();\n this.textureSource.destroy();\n }\n this._texture = null;\n this.textureSource = null;\n this.linkedSheets = [];\n }\n};\n/**\n * The maximum number of Textures to build per process.\n * @advanced\n */\n_Spritesheet.BATCH_SIZE = 1e3;\nlet Spritesheet = _Spritesheet;\n\nexport { Spritesheet };\n//# sourceMappingURL=Spritesheet.mjs.map\n","import { LoaderParserPriority } from '../assets/loader/parsers/LoaderParser.mjs';\nimport { Resolver } from '../assets/resolver/Resolver.mjs';\nimport { copySearchParams } from '../assets/utils/copySearchParams.mjs';\nimport { ExtensionType } from '../extensions/Extensions.mjs';\nimport { Texture } from '../rendering/renderers/shared/texture/Texture.mjs';\nimport { path } from '../utils/path.mjs';\nimport { Spritesheet } from './Spritesheet.mjs';\n\n\"use strict\";\nconst validImages = [\n \"jpg\",\n \"png\",\n \"jpeg\",\n \"avif\",\n \"webp\",\n \"basis\",\n \"etc2\",\n \"bc7\",\n \"bc6h\",\n \"bc5\",\n \"bc4\",\n \"bc3\",\n \"bc2\",\n \"bc1\",\n \"eac\",\n \"astc\"\n];\nfunction getCacheableAssets(keys, asset, ignoreMultiPack) {\n const out = {};\n keys.forEach((key) => {\n out[key] = asset;\n });\n Object.keys(asset.textures).forEach((key) => {\n out[`${asset.cachePrefix}${key}`] = asset.textures[key];\n });\n if (!ignoreMultiPack) {\n const basePath = path.dirname(keys[0]);\n asset.linkedSheets.forEach((item, i) => {\n const out2 = getCacheableAssets([`${basePath}/${asset.data.meta.related_multi_packs[i]}`], item, true);\n Object.assign(out, out2);\n });\n }\n return out;\n}\nconst spritesheetAsset = {\n extension: ExtensionType.Asset,\n /** Handle the caching of the related Spritesheet Textures */\n cache: {\n test: (asset) => asset instanceof Spritesheet,\n getCacheableAssets: (keys, asset) => getCacheableAssets(keys, asset, false)\n },\n /** Resolve the resolution of the asset. */\n resolver: {\n extension: {\n type: ExtensionType.ResolveParser,\n name: \"resolveSpritesheet\"\n },\n test: (value) => {\n const tempURL = value.split(\"?\")[0];\n const split = tempURL.split(\".\");\n const extension = split.pop();\n const format = split.pop();\n return extension === \"json\" && validImages.includes(format);\n },\n parse: (value) => {\n const split = value.split(\".\");\n return {\n resolution: parseFloat(Resolver.RETINA_PREFIX.exec(value)?.[1] ?? \"1\"),\n format: split[split.length - 2],\n src: value\n };\n }\n },\n /**\n * Loader plugin that parses sprite sheets!\n * once the JSON has been loaded this checks to see if the JSON is spritesheet data.\n * If it is, we load the spritesheets image and parse the data into Spritesheet\n * All textures in the sprite sheet are then added to the cache\n */\n loader: {\n /** used for deprecation purposes */\n name: \"spritesheetLoader\",\n id: \"spritesheet\",\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal,\n name: \"spritesheetLoader\"\n },\n async testParse(asset, options) {\n return path.extname(options.src).toLowerCase() === \".json\" && !!asset.frames;\n },\n async parse(asset, options, loader) {\n const {\n texture: imageTexture,\n // if user need to use preloaded texture\n imageFilename,\n // if user need to use custom filename (not from jsonFile.meta.image)\n textureOptions,\n // if user need to set texture options on texture\n cachePrefix\n // if user need to use custom cache prefix\n } = options?.data ?? {};\n let basePath = path.dirname(options.src);\n if (basePath && basePath.lastIndexOf(\"/\") !== basePath.length - 1) {\n basePath += \"/\";\n }\n let texture;\n if (imageTexture instanceof Texture) {\n texture = imageTexture;\n } else {\n const imagePath = copySearchParams(basePath + (imageFilename ?? asset.meta.image), options.src);\n const assets = await loader.load([{ src: imagePath, data: textureOptions }]);\n texture = assets[imagePath];\n }\n const spritesheet = new Spritesheet({\n texture: texture.source,\n data: asset,\n cachePrefix\n });\n await spritesheet.parse();\n const multiPacks = asset?.meta?.related_multi_packs;\n if (Array.isArray(multiPacks)) {\n const promises = [];\n for (const item of multiPacks) {\n if (typeof item !== \"string\") {\n continue;\n }\n let itemUrl = basePath + item;\n if (options.data?.ignoreMultiPack) {\n continue;\n }\n itemUrl = copySearchParams(itemUrl, options.src);\n promises.push(loader.load({\n src: itemUrl,\n data: {\n textureOptions,\n ignoreMultiPack: true\n }\n }));\n }\n const res = await Promise.all(promises);\n spritesheet.linkedSheets = res;\n res.forEach((item) => {\n item.linkedSheets = [spritesheet].concat(spritesheet.linkedSheets.filter((sp) => sp !== item));\n });\n }\n return spritesheet;\n },\n async unload(spritesheet, _resolvedAsset, loader) {\n await loader.unload(spritesheet.textureSource._sourceOrigin);\n spritesheet.destroy(false);\n }\n }\n};\n\nexport { spritesheetAsset };\n//# sourceMappingURL=spritesheetAsset.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { spritesheetAsset } from './spritesheetAsset.mjs';\n\n\"use strict\";\nextensions.add(spritesheetAsset);\n//# sourceMappingURL=init.mjs.map\n","import { extensions, ExtensionType } from '../extensions/Extensions.mjs';\n\n\"use strict\";\nconst environments = [];\nextensions.handleByNamedList(ExtensionType.Environment, environments);\nasync function loadEnvironmentExtensions(skip) {\n if (skip) return;\n for (let i = 0; i < environments.length; i++) {\n const env = environments[i];\n if (env.value.test()) {\n await env.value.load();\n return;\n }\n }\n}\nasync function autoDetectEnvironment(add) {\n return loadEnvironmentExtensions(!add);\n}\n\nexport { autoDetectEnvironment, loadEnvironmentExtensions };\n//# sourceMappingURL=autoDetectEnvironment.mjs.map\n","\"use strict\";\nlet unsafeEval;\nfunction unsafeEvalSupported() {\n if (typeof unsafeEval === \"boolean\") {\n return unsafeEval;\n }\n try {\n const func = new Function(\"param1\", \"param2\", \"param3\", \"return param1[param2] === param3;\");\n unsafeEval = func({ a: \"b\" }, \"a\", \"b\") === true;\n } catch (_e) {\n unsafeEval = false;\n }\n return unsafeEval;\n}\n\nexport { unsafeEvalSupported };\n//# sourceMappingURL=unsafeEvalSupported.mjs.map\n","\"use strict\";\nvar CLEAR = /* @__PURE__ */ ((CLEAR2) => {\n CLEAR2[CLEAR2[\"NONE\"] = 0] = \"NONE\";\n CLEAR2[CLEAR2[\"COLOR\"] = 16384] = \"COLOR\";\n CLEAR2[CLEAR2[\"STENCIL\"] = 1024] = \"STENCIL\";\n CLEAR2[CLEAR2[\"DEPTH\"] = 256] = \"DEPTH\";\n CLEAR2[CLEAR2[\"COLOR_DEPTH\"] = 16640] = \"COLOR_DEPTH\";\n CLEAR2[CLEAR2[\"COLOR_STENCIL\"] = 17408] = \"COLOR_STENCIL\";\n CLEAR2[CLEAR2[\"DEPTH_STENCIL\"] = 1280] = \"DEPTH_STENCIL\";\n CLEAR2[CLEAR2[\"ALL\"] = 17664] = \"ALL\";\n return CLEAR2;\n})(CLEAR || {});\n\nexport { CLEAR };\n//# sourceMappingURL=const.mjs.map\n","\"use strict\";\nclass SystemRunner {\n /**\n * @param name - The function name that will be executed on the listeners added to this Runner.\n */\n constructor(name) {\n this.items = [];\n this._name = name;\n }\n /* jsdoc/check-param-names */\n /**\n * Dispatch/Broadcast Runner to all listeners added to the queue.\n * @param {...any} params - (optional) parameters to pass to each listener\n */\n /* jsdoc/check-param-names */\n emit(a0, a1, a2, a3, a4, a5, a6, a7) {\n const { name, items } = this;\n for (let i = 0, len = items.length; i < len; i++) {\n items[i][name](a0, a1, a2, a3, a4, a5, a6, a7);\n }\n return this;\n }\n /**\n * Add a listener to the Runner\n *\n * Runners do not need to have scope or functions passed to them.\n * All that is required is to pass the listening object and ensure that it has contains a function that has the same name\n * as the name provided to the Runner when it was created.\n *\n * Eg A listener passed to this Runner will require a 'complete' function.\n *\n * ```ts\n * import { Runner } from 'pixi.js';\n *\n * const complete = new Runner('complete');\n * ```\n *\n * The scope used will be the object itself.\n * @param {any} item - The object that will be listening.\n */\n add(item) {\n if (item[this._name]) {\n this.remove(item);\n this.items.push(item);\n }\n return this;\n }\n /**\n * Remove a single listener from the dispatch queue.\n * @param {any} item - The listener that you would like to remove.\n */\n remove(item) {\n const index = this.items.indexOf(item);\n if (index !== -1) {\n this.items.splice(index, 1);\n }\n return this;\n }\n /**\n * Check to see if the listener is already in the Runner\n * @param {any} item - The listener that you would like to check.\n */\n contains(item) {\n return this.items.indexOf(item) !== -1;\n }\n /** Remove all listeners from the Runner */\n removeAll() {\n this.items.length = 0;\n return this;\n }\n /** Remove all references, don't use after this. */\n destroy() {\n this.removeAll();\n this.items = null;\n this._name = null;\n }\n /**\n * `true` if there are no this Runner contains no listeners\n * @readonly\n */\n get empty() {\n return this.items.length === 0;\n }\n /**\n * The name of the runner.\n * @readonly\n */\n get name() {\n return this._name;\n }\n}\n\nexport { SystemRunner };\n//# sourceMappingURL=SystemRunner.mjs.map\n","import { Color } from '../../../../color/Color.mjs';\nimport { loadEnvironmentExtensions } from '../../../../environment/autoDetectEnvironment.mjs';\nimport { Container } from '../../../../scene/container/Container.mjs';\nimport { unsafeEvalSupported } from '../../../../utils/browser/unsafeEvalSupported.mjs';\nimport { uid } from '../../../../utils/data/uid.mjs';\nimport { deprecation, v8_0_0 } from '../../../../utils/logging/deprecation.mjs';\nimport { GlobalResourceRegistry } from '../../../../utils/pool/GlobalResourceRegistry.mjs';\nimport '../../../../utils/utils.mjs';\nimport { CLEAR } from '../../gl/const.mjs';\nimport { SystemRunner } from './SystemRunner.mjs';\nimport EventEmitter from 'eventemitter3';\n\n\"use strict\";\nconst defaultRunners = [\n \"init\",\n \"destroy\",\n \"contextChange\",\n \"resolutionChange\",\n \"resetState\",\n \"renderEnd\",\n \"renderStart\",\n \"render\",\n \"update\",\n \"postrender\",\n \"prerender\"\n];\nconst _AbstractRenderer = class _AbstractRenderer extends EventEmitter {\n /**\n * Set up a system with a collection of SystemClasses and runners.\n * Systems are attached dynamically to this class when added.\n * @param config - the config for the system manager\n */\n constructor(config) {\n super();\n /** The current tick of the renderer. */\n this.tick = 0;\n /** @internal */\n this.uid = uid(\"renderer\");\n /** @internal */\n this.runners = /* @__PURE__ */ Object.create(null);\n /** @internal */\n this.renderPipes = /* @__PURE__ */ Object.create(null);\n this._initOptions = {};\n this._systemsHash = /* @__PURE__ */ Object.create(null);\n this.type = config.type;\n this.name = config.name;\n this.config = config;\n const combinedRunners = [...defaultRunners, ...this.config.runners ?? []];\n this._addRunners(...combinedRunners);\n this._unsafeEvalCheck();\n }\n /**\n * Initialize the renderer.\n * @param options - The options to use to create the renderer.\n */\n async init(options = {}) {\n const skip = options.skipExtensionImports === true ? true : options.manageImports === false;\n await loadEnvironmentExtensions(skip);\n this._addSystems(this.config.systems);\n this._addPipes(this.config.renderPipes, this.config.renderPipeAdaptors);\n for (const systemName in this._systemsHash) {\n const system = this._systemsHash[systemName];\n const defaultSystemOptions = system.constructor.defaultOptions;\n options = { ...defaultSystemOptions, ...options };\n }\n options = { ..._AbstractRenderer.defaultOptions, ...options };\n this._roundPixels = options.roundPixels ? 1 : 0;\n for (let i = 0; i < this.runners.init.items.length; i++) {\n await this.runners.init.items[i].init(options);\n }\n this._initOptions = options;\n }\n render(args, deprecated) {\n this.tick++;\n let options = args;\n if (options instanceof Container) {\n options = { container: options };\n if (deprecated) {\n deprecation(v8_0_0, \"passing a second argument is deprecated, please use render options instead\");\n options.target = deprecated.renderTexture;\n }\n }\n options.target || (options.target = this.view.renderTarget);\n if (options.target === this.view.renderTarget) {\n this._lastObjectRendered = options.container;\n options.clearColor ?? (options.clearColor = this.background.colorRgba);\n options.clear ?? (options.clear = this.background.clearBeforeRender);\n }\n if (options.clearColor) {\n const isRGBAArray = Array.isArray(options.clearColor) && options.clearColor.length === 4;\n options.clearColor = isRGBAArray ? options.clearColor : Color.shared.setValue(options.clearColor).toArray();\n }\n if (!options.transform) {\n options.container.updateLocalTransform();\n options.transform = options.container.localTransform;\n }\n if (!options.container.visible) {\n return;\n }\n options.container.enableRenderGroup();\n this.runners.prerender.emit(options);\n this.runners.renderStart.emit(options);\n this.runners.render.emit(options);\n this.runners.renderEnd.emit(options);\n this.runners.postrender.emit(options);\n }\n /**\n * Resizes the WebGL view to the specified width and height.\n * @param desiredScreenWidth - The desired width of the screen.\n * @param desiredScreenHeight - The desired height of the screen.\n * @param resolution - The resolution / device pixel ratio of the renderer.\n */\n resize(desiredScreenWidth, desiredScreenHeight, resolution) {\n const previousResolution = this.view.resolution;\n this.view.resize(desiredScreenWidth, desiredScreenHeight, resolution);\n this.emit(\"resize\", this.view.screen.width, this.view.screen.height, this.view.resolution);\n if (resolution !== void 0 && resolution !== previousResolution) {\n this.runners.resolutionChange.emit(resolution);\n }\n }\n /**\n * Clears the render target.\n * @param options - The options to use when clearing the render target.\n * @param options.target - The render target to clear.\n * @param options.clearColor - The color to clear with.\n * @param options.clear - The clear mode to use.\n * @advanced\n */\n clear(options = {}) {\n const renderer = this;\n options.target || (options.target = renderer.renderTarget.renderTarget);\n options.clearColor || (options.clearColor = this.background.colorRgba);\n options.clear ?? (options.clear = CLEAR.ALL);\n const { clear, clearColor, target, mipLevel, layer } = options;\n Color.shared.setValue(clearColor ?? this.background.colorRgba);\n renderer.renderTarget.clear(target, clear, Color.shared.toArray(), mipLevel ?? 0, layer ?? 0);\n }\n /** The resolution / device pixel ratio of the renderer. */\n get resolution() {\n return this.view.resolution;\n }\n set resolution(value) {\n this.view.resolution = value;\n this.runners.resolutionChange.emit(value);\n }\n /**\n * Same as view.width, actual number of pixels in the canvas by horizontal.\n * @type {number}\n * @readonly\n * @default 800\n */\n get width() {\n return this.view.texture.frame.width;\n }\n /**\n * Same as view.height, actual number of pixels in the canvas by vertical.\n * @default 600\n */\n get height() {\n return this.view.texture.frame.height;\n }\n // NOTE: this was `view` in v7\n /**\n * The canvas element that everything is drawn to.\n * @type {environment.ICanvas}\n */\n get canvas() {\n return this.view.canvas;\n }\n /**\n * the last object rendered by the renderer. Useful for other plugins like interaction managers\n * @readonly\n */\n get lastObjectRendered() {\n return this._lastObjectRendered;\n }\n /**\n * Flag if we are rendering to the screen vs renderTexture\n * @readonly\n * @default true\n */\n get renderingToScreen() {\n const renderer = this;\n return renderer.renderTarget.renderingToScreen;\n }\n /**\n * Measurements of the screen. (0, 0, screenWidth, screenHeight).\n *\n * Its safe to use as filterArea or hitArea for the whole stage.\n */\n get screen() {\n return this.view.screen;\n }\n /**\n * Create a bunch of runners based of a collection of ids\n * @param runnerIds - the runner ids to add\n */\n _addRunners(...runnerIds) {\n runnerIds.forEach((runnerId) => {\n this.runners[runnerId] = new SystemRunner(runnerId);\n });\n }\n _addSystems(systems) {\n let i;\n for (i in systems) {\n const val = systems[i];\n this._addSystem(val.value, val.name);\n }\n }\n /**\n * Add a new system to the renderer.\n * @param ClassRef - Class reference\n * @param name - Property name for system, if not specified\n * will use a static `name` property on the class itself. This\n * name will be assigned as s property on the Renderer so make\n * sure it doesn't collide with properties on Renderer.\n * @returns Return instance of renderer\n */\n _addSystem(ClassRef, name) {\n const system = new ClassRef(this);\n if (this[name]) {\n throw new Error(`Whoops! The name \"${name}\" is already in use`);\n }\n this[name] = system;\n this._systemsHash[name] = system;\n for (const i in this.runners) {\n this.runners[i].add(system);\n }\n return this;\n }\n _addPipes(pipes, pipeAdaptors) {\n const adaptors = pipeAdaptors.reduce((acc, adaptor) => {\n acc[adaptor.name] = adaptor.value;\n return acc;\n }, {});\n pipes.forEach((pipe) => {\n const PipeClass = pipe.value;\n const name = pipe.name;\n const Adaptor = adaptors[name];\n this.renderPipes[name] = new PipeClass(\n this,\n Adaptor ? new Adaptor() : null\n );\n this.runners.destroy.add(this.renderPipes[name]);\n });\n }\n destroy(options = false) {\n this.runners.destroy.items.reverse();\n this.runners.destroy.emit(options);\n if (options === true || typeof options === \"object\" && options.releaseGlobalResources) {\n GlobalResourceRegistry.release();\n }\n Object.values(this.runners).forEach((runner) => {\n runner.destroy();\n });\n this._systemsHash = null;\n this.renderPipes = null;\n this.removeAllListeners();\n }\n /**\n * Generate a texture from a container.\n * @param options - options or container target to use when generating the texture\n * @returns a texture\n */\n generateTexture(options) {\n return this.textureGenerator.generateTexture(options);\n }\n /**\n * Whether the renderer will round coordinates to whole pixels when rendering.\n * Can be overridden on a per scene item basis.\n */\n get roundPixels() {\n return !!this._roundPixels;\n }\n /**\n * Overridable function by `pixi.js/unsafe-eval` to silence\n * throwing an error if platform doesn't support unsafe-evals.\n * @private\n * @ignore\n */\n _unsafeEvalCheck() {\n if (!unsafeEvalSupported()) {\n throw new Error(\"Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.\");\n }\n }\n /**\n * Resets the rendering state of the renderer.\n * This is useful when you want to use the WebGL context directly and need to ensure PixiJS's internal state\n * stays synchronized. When modifying the WebGL context state externally, calling this method before the next Pixi\n * render will reset all internal caches and ensure it executes correctly.\n *\n * This is particularly useful when combining PixiJS with other rendering engines like Three.js:\n * ```js\n * // Reset Three.js state\n * threeRenderer.resetState();\n *\n * // Render a Three.js scene\n * threeRenderer.render(threeScene, threeCamera);\n *\n * // Reset PixiJS state since Three.js modified the WebGL context\n * pixiRenderer.resetState();\n *\n * // Now render Pixi content\n * pixiRenderer.render(pixiScene);\n * ```\n * @advanced\n */\n resetState() {\n this.runners.resetState.emit();\n }\n};\n/** The default options for the renderer. */\n_AbstractRenderer.defaultOptions = {\n /**\n * Default resolution / device pixel ratio of the renderer.\n * @default 1\n */\n resolution: 1,\n /**\n * Should the `failIfMajorPerformanceCaveat` flag be enabled as a context option used in the `isWebGLSupported`\n * function. If set to true, a WebGL renderer can fail to be created if the browser thinks there could be\n * performance issues when using WebGL.\n *\n * In PixiJS v6 this has changed from true to false by default, to allow WebGL to work in as many\n * scenarios as possible. However, some users may have a poor experience, for example, if a user has a gpu or\n * driver version blacklisted by the\n * browser.\n *\n * If your application requires high performance rendering, you may wish to set this to false.\n * We recommend one of two options if you decide to set this flag to false:\n *\n * 1: Use the Canvas renderer as a fallback in case high performance WebGL is\n * not supported.\n *\n * 2: Call `isWebGLSupported` (which if found in the utils package) in your code before attempting to create a\n * PixiJS renderer, and show an error message to the user if the function returns false, explaining that their\n * device & browser combination does not support high performance WebGL.\n * This is a much better strategy than trying to create a PixiJS renderer and finding it then fails.\n * @default false\n */\n failIfMajorPerformanceCaveat: false,\n /**\n * Should round pixels be forced when rendering?\n * @default false\n */\n roundPixels: false\n};\nlet AbstractRenderer = _AbstractRenderer;\n\nexport { AbstractRenderer };\n//# sourceMappingURL=AbstractRenderer.mjs.map\n","import { DOMAdapter } from '../../environment/adapter.mjs';\nimport { AbstractRenderer } from '../../rendering/renderers/shared/system/AbstractRenderer.mjs';\n\n\"use strict\";\nlet _isWebGLSupported;\nfunction isWebGLSupported(failIfMajorPerformanceCaveat) {\n if (_isWebGLSupported !== void 0) return _isWebGLSupported;\n _isWebGLSupported = (() => {\n const contextOptions = {\n stencil: true,\n failIfMajorPerformanceCaveat: failIfMajorPerformanceCaveat ?? AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat\n };\n try {\n if (!DOMAdapter.get().getWebGLRenderingContext()) {\n return false;\n }\n const canvas = DOMAdapter.get().createCanvas();\n let gl = canvas.getContext(\"webgl\", contextOptions);\n const success = !!gl?.getContextAttributes()?.stencil;\n if (gl) {\n const loseContext = gl.getExtension(\"WEBGL_lose_context\");\n if (loseContext) {\n loseContext.loseContext();\n }\n }\n gl = null;\n return success;\n } catch (_e) {\n return false;\n }\n })();\n return _isWebGLSupported;\n}\n\nexport { isWebGLSupported };\n//# sourceMappingURL=isWebGLSupported.mjs.map\n","import { DOMAdapter } from '../../environment/adapter.mjs';\n\n\"use strict\";\nlet _isWebGPUSupported;\nasync function isWebGPUSupported(options = {}) {\n if (_isWebGPUSupported !== void 0) return _isWebGPUSupported;\n _isWebGPUSupported = await (async () => {\n const gpu = DOMAdapter.get().getNavigator().gpu;\n if (!gpu) {\n return false;\n }\n try {\n const adapter = await gpu.requestAdapter(options);\n await adapter.requestDevice();\n return true;\n } catch (_e) {\n return false;\n }\n })();\n return _isWebGPUSupported;\n}\n\nexport { isWebGPUSupported };\n//# sourceMappingURL=isWebGPUSupported.mjs.map\n","import { isWebGLSupported } from '../../utils/browser/isWebGLSupported.mjs';\nimport { isWebGPUSupported } from '../../utils/browser/isWebGPUSupported.mjs';\nimport { AbstractRenderer } from './shared/system/AbstractRenderer.mjs';\n\n\"use strict\";\nconst renderPriority = [\"webgl\", \"webgpu\", \"canvas\"];\nasync function autoDetectRenderer(options) {\n let preferredOrder = [];\n if (options.preference) {\n preferredOrder.push(options.preference);\n renderPriority.forEach((item) => {\n if (item !== options.preference) {\n preferredOrder.push(item);\n }\n });\n } else {\n preferredOrder = renderPriority.slice();\n }\n let RendererClass;\n let finalOptions = {};\n for (let i = 0; i < preferredOrder.length; i++) {\n const rendererType = preferredOrder[i];\n if (rendererType === \"webgpu\" && await isWebGPUSupported()) {\n const { WebGPURenderer } = await import('./gpu/WebGPURenderer.mjs');\n RendererClass = WebGPURenderer;\n finalOptions = { ...options, ...options.webgpu };\n break;\n } else if (rendererType === \"webgl\" && isWebGLSupported(\n options.failIfMajorPerformanceCaveat ?? AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat\n )) {\n const { WebGLRenderer } = await import('./gl/WebGLRenderer.mjs');\n RendererClass = WebGLRenderer;\n finalOptions = { ...options, ...options.webgl };\n break;\n } else if (rendererType === \"canvas\") {\n const { CanvasRenderer } = await import('./canvas/CanvasRenderer.mjs');\n RendererClass = CanvasRenderer;\n finalOptions = { ...options, ...options.canvasOptions };\n break;\n }\n }\n delete finalOptions.webgpu;\n delete finalOptions.webgl;\n delete finalOptions.canvasOptions;\n if (!RendererClass) {\n throw new Error(\"No available renderer for the current environment\");\n }\n const renderer = new RendererClass();\n await renderer.init(finalOptions);\n return renderer;\n}\n\nexport { autoDetectRenderer };\n//# sourceMappingURL=autoDetectRenderer.mjs.map\n","export { default as EventEmitter } from 'eventemitter3';\n\n\"use strict\";\nconst DATA_URI = /^\\s*data:(?:([\\w-]+)\\/([\\w+.-]+))?(?:;charset=([\\w-]+))?(?:;(base64))?,(.*)/i;\nconst VERSION = \"8.17.1\";\n\nexport { DATA_URI, VERSION };\n//# sourceMappingURL=const.mjs.map\n","import { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { VERSION } from '../const.mjs';\n\n\"use strict\";\nclass ApplicationInitHook {\n static init() {\n globalThis.__PIXI_APP_INIT__?.(this, VERSION);\n }\n static destroy() {\n }\n}\n/** @ignore */\nApplicationInitHook.extension = ExtensionType.Application;\nclass RendererInitHook {\n constructor(renderer) {\n this._renderer = renderer;\n }\n init() {\n globalThis.__PIXI_RENDERER_INIT__?.(this._renderer, VERSION);\n }\n destroy() {\n this._renderer = null;\n }\n}\n/** @ignore */\nRendererInitHook.extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem\n ],\n name: \"initHook\",\n priority: -10\n};\n\nexport { ApplicationInitHook, RendererInitHook };\n//# sourceMappingURL=globalHooks.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\n\n\"use strict\";\nclass ResizePlugin {\n /**\n * Initialize the plugin with scope of application instance\n * @private\n * @param {object} [options] - See application options\n */\n static init(options) {\n Object.defineProperty(\n this,\n \"resizeTo\",\n {\n configurable: true,\n set(dom) {\n globalThis.removeEventListener(\"resize\", this.queueResize);\n this._resizeTo = dom;\n if (dom) {\n globalThis.addEventListener(\"resize\", this.queueResize);\n this.resize();\n }\n },\n get() {\n return this._resizeTo;\n }\n }\n );\n this.queueResize = () => {\n if (!this._resizeTo) {\n return;\n }\n this._cancelResize();\n this._resizeId = requestAnimationFrame(() => this.resize());\n };\n this._cancelResize = () => {\n if (this._resizeId) {\n cancelAnimationFrame(this._resizeId);\n this._resizeId = null;\n }\n };\n this.resize = () => {\n if (!this._resizeTo) {\n return;\n }\n this._cancelResize();\n let width;\n let height;\n if (this._resizeTo === globalThis.window) {\n width = globalThis.innerWidth;\n height = globalThis.innerHeight;\n } else {\n const { clientWidth, clientHeight } = this._resizeTo;\n width = clientWidth;\n height = clientHeight;\n }\n this.renderer.resize(width, height);\n this.render();\n };\n this._resizeId = null;\n this._resizeTo = null;\n this.resizeTo = options.resizeTo || null;\n }\n /**\n * Clean up the ticker, scoped to application\n * @private\n */\n static destroy() {\n globalThis.removeEventListener(\"resize\", this.queueResize);\n this._cancelResize();\n this._cancelResize = null;\n this.queueResize = null;\n this.resizeTo = null;\n this.resize = null;\n }\n}\n/** @ignore */\nResizePlugin.extension = ExtensionType.Application;\n\nexport { ResizePlugin };\n//# sourceMappingURL=ResizePlugin.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\nimport { UPDATE_PRIORITY } from '../ticker/const.mjs';\nimport { Ticker } from '../ticker/Ticker.mjs';\n\n\"use strict\";\nclass TickerPlugin {\n /**\n * Initialize the plugin with scope of application instance\n * @private\n * @param {object} [options] - See application options\n */\n static init(options) {\n options = Object.assign({\n autoStart: true,\n sharedTicker: false\n }, options);\n Object.defineProperty(\n this,\n \"ticker\",\n {\n configurable: true,\n set(ticker) {\n if (this._ticker) {\n this._ticker.remove(this.render, this);\n }\n this._ticker = ticker;\n if (ticker) {\n ticker.add(this.render, this, UPDATE_PRIORITY.LOW);\n }\n },\n get() {\n return this._ticker;\n }\n }\n );\n this.stop = () => {\n this._ticker.stop();\n };\n this.start = () => {\n this._ticker.start();\n };\n this._ticker = null;\n this.ticker = options.sharedTicker ? Ticker.shared : new Ticker();\n if (options.autoStart) {\n this.start();\n }\n }\n /**\n * Clean up the ticker, scoped to application.\n * @private\n */\n static destroy() {\n if (this._ticker) {\n const oldTicker = this._ticker;\n this.ticker = null;\n oldTicker.destroy();\n }\n }\n}\n/** @ignore */\nTickerPlugin.extension = ExtensionType.Application;\n\nexport { TickerPlugin };\n//# sourceMappingURL=TickerPlugin.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { ResizePlugin } from './ResizePlugin.mjs';\nimport { TickerPlugin } from './TickerPlugin.mjs';\n\n\"use strict\";\nextensions.add(ResizePlugin);\nextensions.add(TickerPlugin);\n//# sourceMappingURL=init.mjs.map\n","import { extensions, ExtensionType } from '../extensions/Extensions.mjs';\nimport { autoDetectRenderer } from '../rendering/renderers/autoDetectRenderer.mjs';\nimport { Container } from '../scene/container/Container.mjs';\nimport { ApplicationInitHook } from '../utils/global/globalHooks.mjs';\nimport { deprecation, v8_0_0 } from '../utils/logging/deprecation.mjs';\nimport './init.mjs';\n\n\"use strict\";\nconst _Application = class _Application {\n constructor(...args) {\n /**\n * The root display container for your application.\n * All visual elements should be added to this container or its children.\n * @example\n * ```js\n * // Create a sprite and add it to the stage\n * const sprite = Sprite.from('image.png');\n * app.stage.addChild(sprite);\n *\n * // Create a container for grouping objects\n * const container = new Container();\n * app.stage.addChild(container);\n * ```\n */\n this.stage = new Container();\n if (args[0] !== void 0) {\n deprecation(v8_0_0, \"Application constructor options are deprecated, please use Application.init() instead.\");\n }\n }\n /**\n * Initializes the PixiJS application with the specified options.\n *\n * This method must be called after creating a new Application instance.\n * @param options - Configuration options for the application and renderer\n * @returns A promise that resolves when initialization is complete\n * @example\n * ```js\n * const app = new Application();\n *\n * // Initialize with custom options\n * await app.init({\n * width: 800,\n * height: 600,\n * backgroundColor: 0x1099bb,\n * preference: 'webgl', // or 'webgpu'\n * });\n * ```\n */\n async init(options) {\n options = { ...options };\n this.stage || (this.stage = new Container());\n this.renderer = await autoDetectRenderer(options);\n _Application._plugins.forEach((plugin) => {\n plugin.init.call(this, options);\n });\n }\n /**\n * Renders the current stage to the screen.\n *\n * When using the default setup with {@link TickerPlugin} (enabled by default), you typically don't need to call\n * this method directly as rendering is handled automatically.\n *\n * Only use this method if you've disabled the {@link TickerPlugin} or need custom\n * render timing control.\n * @example\n * ```js\n * // Example 1: Default setup (TickerPlugin handles rendering)\n * const app = new Application();\n * await app.init();\n * // No need to call render() - TickerPlugin handles it\n *\n * // Example 2: Custom rendering loop (if TickerPlugin is disabled)\n * const app = new Application();\n * await app.init({ autoStart: false }); // Disable automatic rendering\n *\n * function animate() {\n * app.render();\n * requestAnimationFrame(animate);\n * }\n * animate();\n * ```\n */\n render() {\n this.renderer.render({ container: this.stage });\n }\n /**\n * Reference to the renderer's canvas element. This is the HTML element\n * that displays your application's graphics.\n * @readonly\n * @type {HTMLCanvasElement}\n * @example\n * ```js\n * // Create a new application\n * const app = new Application();\n * // Initialize the application\n * await app.init({...});\n * // Add canvas to the page\n * document.body.appendChild(app.canvas);\n *\n * // Access the canvas directly\n * console.log(app.canvas); // HTMLCanvasElement\n * ```\n */\n get canvas() {\n return this.renderer.canvas;\n }\n /**\n * Reference to the renderer's canvas element.\n * @type {HTMLCanvasElement}\n * @deprecated since 8.0.0\n * @see {@link Application#canvas}\n */\n get view() {\n deprecation(v8_0_0, \"Application.view is deprecated, please use Application.canvas instead.\");\n return this.renderer.canvas;\n }\n /**\n * Reference to the renderer's screen rectangle. This represents the visible area of your application.\n *\n * It's commonly used for:\n * - Setting filter areas for full-screen effects\n * - Defining hit areas for screen-wide interaction\n * - Determining the visible bounds of your application\n * @readonly\n * @example\n * ```js\n * // Use as filter area for a full-screen effect\n * const blurFilter = new BlurFilter();\n * sprite.filterArea = app.screen;\n *\n * // Use as hit area for screen-wide interaction\n * const screenSprite = new Sprite();\n * screenSprite.hitArea = app.screen;\n *\n * // Get screen dimensions\n * console.log(app.screen.width, app.screen.height);\n * ```\n * @see {@link Rectangle} For all available properties and methods\n */\n get screen() {\n return this.renderer.screen;\n }\n /**\n * Destroys the application and all of its resources.\n *\n * This method should be called when you want to completely\n * clean up the application and free all associated memory.\n * @param rendererDestroyOptions - Options for destroying the renderer:\n * - `false` or `undefined`: Preserves the canvas element (default)\n * - `true`: Removes the canvas element\n * - `{ removeView: boolean }`: Object with removeView property to control canvas removal\n * @param options - Options for destroying the application:\n * - `false` or `undefined`: Basic cleanup (default)\n * - `true`: Complete cleanup including children\n * - Detailed options object:\n * - `children`: Remove children\n * - `texture`: Destroy textures\n * - `textureSource`: Destroy texture sources\n * - `context`: Destroy WebGL context\n * @example\n * ```js\n * // Basic cleanup\n * app.destroy();\n *\n * // Remove canvas and do complete cleanup\n * app.destroy(true, true);\n *\n * // Remove canvas with explicit options\n * app.destroy({ removeView: true }, true);\n *\n * // Detailed cleanup with specific options\n * app.destroy(\n * { removeView: true },\n * {\n * children: true,\n * texture: true,\n * textureSource: true,\n * context: true\n * }\n * );\n * ```\n * > [!WARNING] After calling destroy, the application instance should no longer be used.\n * > All properties will be null and further operations will throw errors.\n */\n destroy(rendererDestroyOptions = false, options = false) {\n const plugins = _Application._plugins.slice(0);\n plugins.reverse();\n plugins.forEach((plugin) => {\n plugin.destroy.call(this);\n });\n this.stage.destroy(options);\n this.stage = null;\n this.renderer.destroy(rendererDestroyOptions);\n this.renderer = null;\n }\n};\n/**\n * Collection of installed plugins.\n * @internal\n */\n_Application._plugins = [];\nlet Application = _Application;\nextensions.handleByList(ExtensionType.Application, Application._plugins);\nextensions.add(ApplicationInitHook);\n\nexport { Application };\n//# sourceMappingURL=Application.mjs.map\n","import { browserExt } from './environment-browser/browserExt.mjs';\nimport { webworkerExt } from './environment-webworker/webworkerExt.mjs';\nimport { extensions } from './extensions/Extensions.mjs';\nexport { ExtensionType, normalizeExtensionPriority } from './extensions/Extensions.mjs';\nimport './rendering/init.mjs';\nimport './spritesheet/init.mjs';\nimport './accessibility/index.mjs';\nimport './advanced-blend-modes/index.mjs';\nimport './app/index.mjs';\nimport './assets/index.mjs';\nimport './color/index.mjs';\nimport './compressed-textures/index.mjs';\nimport './culling/index.mjs';\nimport './dom/index.mjs';\nimport './environment/index.mjs';\nimport './environment-browser/index.mjs';\nimport './environment-webworker/index.mjs';\nimport './events/index.mjs';\nimport './extensions/index.mjs';\nimport './filters/index.mjs';\nimport './maths/index.mjs';\nimport './prepare/index.mjs';\nimport './rendering/index.mjs';\nimport './scene/index.mjs';\nimport './spritesheet/index.mjs';\nimport './ticker/index.mjs';\nimport './utils/index.mjs';\nexport { AccessibilitySystem } from './accessibility/AccessibilitySystem.mjs';\nexport { accessibilityTarget } from './accessibility/accessibilityTarget.mjs';\nexport { ColorBlend } from './advanced-blend-modes/ColorBlend.mjs';\nexport { ColorBurnBlend } from './advanced-blend-modes/ColorBurnBlend.mjs';\nexport { ColorDodgeBlend } from './advanced-blend-modes/ColorDodgeBlend.mjs';\nexport { DarkenBlend } from './advanced-blend-modes/DarkenBlend.mjs';\nexport { DifferenceBlend } from './advanced-blend-modes/DifferenceBlend.mjs';\nexport { DivideBlend } from './advanced-blend-modes/DivideBlend.mjs';\nexport { ExclusionBlend } from './advanced-blend-modes/ExclusionBlend.mjs';\nexport { HardLightBlend } from './advanced-blend-modes/HardLightBlend.mjs';\nexport { HardMixBlend } from './advanced-blend-modes/HardMixBlend.mjs';\nexport { LightenBlend } from './advanced-blend-modes/LightenBlend.mjs';\nexport { LinearBurnBlend } from './advanced-blend-modes/LinearBurnBlend.mjs';\nexport { LinearDodgeBlend } from './advanced-blend-modes/LinearDodgeBlend.mjs';\nexport { LinearLightBlend } from './advanced-blend-modes/LinearLightBlend.mjs';\nexport { LuminosityBlend } from './advanced-blend-modes/LuminosityBlend.mjs';\nexport { NegationBlend } from './advanced-blend-modes/NegationBlend.mjs';\nexport { OverlayBlend } from './advanced-blend-modes/OverlayBlend.mjs';\nexport { PinLightBlend } from './advanced-blend-modes/PinLightBlend.mjs';\nexport { SaturationBlend } from './advanced-blend-modes/SaturationBlend.mjs';\nexport { SoftLightBlend } from './advanced-blend-modes/SoftLightBlend.mjs';\nexport { SubtractBlend } from './advanced-blend-modes/SubtractBlend.mjs';\nexport { VividLightBlend } from './advanced-blend-modes/VividLightBlend.mjs';\nexport { Application } from './app/Application.mjs';\nexport { ResizePlugin } from './app/ResizePlugin.mjs';\nexport { TickerPlugin } from './app/TickerPlugin.mjs';\nexport { Assets, AssetsClass } from './assets/Assets.mjs';\nexport { BackgroundLoader } from './assets/BackgroundLoader.mjs';\nexport { Cache } from './assets/cache/Cache.mjs';\nexport { cacheTextureArray } from './assets/cache/parsers/cacheTextureArray.mjs';\nexport { detectAvif } from './assets/detections/parsers/detectAvif.mjs';\nexport { detectDefaults } from './assets/detections/parsers/detectDefaults.mjs';\nexport { detectMp4 } from './assets/detections/parsers/detectMp4.mjs';\nexport { detectOgv } from './assets/detections/parsers/detectOgv.mjs';\nexport { detectWebm } from './assets/detections/parsers/detectWebm.mjs';\nexport { detectWebp } from './assets/detections/parsers/detectWebp.mjs';\nexport { testImageFormat } from './assets/detections/utils/testImageFormat.mjs';\nexport { testVideoFormat } from './assets/detections/utils/testVideoFormat.mjs';\nexport { Loader } from './assets/loader/Loader.mjs';\nexport { LoaderParserPriority } from './assets/loader/parsers/LoaderParser.mjs';\nexport { loadJson } from './assets/loader/parsers/loadJson.mjs';\nexport { loadTxt } from './assets/loader/parsers/loadTxt.mjs';\nexport { getFontFamilyName, loadWebFont } from './assets/loader/parsers/loadWebFont.mjs';\nexport { loadSvg } from './assets/loader/parsers/textures/loadSVG.mjs';\nexport { loadImageBitmap, loadTextures } from './assets/loader/parsers/textures/loadTextures.mjs';\nexport { crossOrigin, determineCrossOrigin, loadVideoTextures, preloadVideo } from './assets/loader/parsers/textures/loadVideoTextures.mjs';\nexport { createTexture } from './assets/loader/parsers/textures/utils/createTexture.mjs';\nexport { WorkerManager } from './assets/loader/workers/WorkerManager.mjs';\nexport { resolveJsonUrl } from './assets/resolver/parsers/resolveJsonUrl.mjs';\nexport { resolveTextureUrl } from './assets/resolver/parsers/resolveTextureUrl.mjs';\nexport { Resolver, getUrlExtension } from './assets/resolver/Resolver.mjs';\nexport { checkDataUrl } from './assets/utils/checkDataUrl.mjs';\nexport { checkExtension } from './assets/utils/checkExtension.mjs';\nexport { convertToList } from './assets/utils/convertToList.mjs';\nexport { copySearchParams } from './assets/utils/copySearchParams.mjs';\nexport { createStringVariations } from './assets/utils/createStringVariations.mjs';\nexport { isSingleItem } from './assets/utils/isSingleItem.mjs';\nexport { Color } from './color/Color.mjs';\nexport { detectBasis } from './compressed-textures/basis/detectBasis.mjs';\nexport { loadBasis } from './compressed-textures/basis/loadBasis.mjs';\nexport { createLevelBuffers } from './compressed-textures/basis/utils/createLevelBuffers.mjs';\nexport { gpuFormatToBasisTranscoderFormat } from './compressed-textures/basis/utils/gpuFormatToBasisTranscoderFormat.mjs';\nexport { basisTranscoderUrls, setBasisTranscoderPath } from './compressed-textures/basis/utils/setBasisTranscoderPath.mjs';\nexport { loadBasisOnWorker } from './compressed-textures/basis/worker/loadBasisOnWorker.mjs';\nexport { D3D10_RESOURCE_DIMENSION, D3DFMT, DDS, DXGI_FORMAT, DXGI_TO_TEXTURE_FORMAT, FOURCC_TO_TEXTURE_FORMAT, TEXTURE_FORMAT_BLOCK_SIZE } from './compressed-textures/dds/const.mjs';\nexport { loadDDS } from './compressed-textures/dds/loadDDS.mjs';\nexport { parseDDS } from './compressed-textures/dds/parseDDS.mjs';\nexport { loadKTX } from './compressed-textures/ktx/loadKTX.mjs';\nexport { parseKTX } from './compressed-textures/ktx/parseKTX.mjs';\nexport { GL_INTERNAL_FORMAT, KTX } from './compressed-textures/ktx2/const.mjs';\nexport { loadKTX2 } from './compressed-textures/ktx2/loadKTX2.mjs';\nexport { convertFormatIfRequired } from './compressed-textures/ktx2/utils/convertFormatIfRequired.mjs';\nexport { createLevelBuffersFromKTX } from './compressed-textures/ktx2/utils/createLevelBuffersFromKTX.mjs';\nexport { getTextureFormatFromKTXTexture } from './compressed-textures/ktx2/utils/getTextureFormatFromKTXTexture.mjs';\nexport { glFormatToGPUFormat } from './compressed-textures/ktx2/utils/glFormatToGPUFormat.mjs';\nexport { gpuFormatToKTXBasisTranscoderFormat } from './compressed-textures/ktx2/utils/gpuFormatToKTXBasisTranscoderFormat.mjs';\nexport { ktxTranscoderUrls, setKTXTranscoderPath } from './compressed-textures/ktx2/utils/setKTXTranscoderPath.mjs';\nexport { vkFormatToGPUFormat } from './compressed-textures/ktx2/utils/vkFormatToGPUFormat.mjs';\nexport { loadKTX2onWorker } from './compressed-textures/ktx2/worker/loadKTX2onWorker.mjs';\nexport { detectCompressed } from './compressed-textures/shared/detectCompressed.mjs';\nexport { resolveCompressedTextureUrl, validFormats } from './compressed-textures/shared/resolveCompressedTextureUrl.mjs';\nexport { Culler } from './culling/Culler.mjs';\nexport { CullerPlugin } from './culling/CullerPlugin.mjs';\nexport { cullingMixin } from './culling/cullingMixin.mjs';\nexport { CanvasObserver } from './dom/CanvasObserver.mjs';\nexport { DOMContainer } from './dom/DOMContainer.mjs';\nexport { DOMPipe } from './dom/DOMPipe.mjs';\nexport { DOMAdapter } from './environment/adapter.mjs';\nexport { autoDetectEnvironment, loadEnvironmentExtensions } from './environment/autoDetectEnvironment.mjs';\nexport { BrowserAdapter } from './environment-browser/BrowserAdapter.mjs';\nexport { WebWorkerAdapter } from './environment-webworker/WebWorkerAdapter.mjs';\nexport { EventBoundary } from './events/EventBoundary.mjs';\nexport { EventSystem } from './events/EventSystem.mjs';\nexport { EventsTicker } from './events/EventTicker.mjs';\nexport { FederatedEvent } from './events/FederatedEvent.mjs';\nexport { FederatedContainer } from './events/FederatedEventTarget.mjs';\nexport { FederatedMouseEvent } from './events/FederatedMouseEvent.mjs';\nexport { FederatedPointerEvent } from './events/FederatedPointerEvent.mjs';\nexport { FederatedWheelEvent } from './events/FederatedWheelEvent.mjs';\nexport { default as blendTemplateFrag } from './filters/blend-modes/blend-template.frag.mjs';\nexport { default as blendTemplateVert } from './filters/blend-modes/blend-template.vert.mjs';\nexport { default as blendTemplateWgsl } from './filters/blend-modes/blend-template.wgsl.mjs';\nexport { default as hslWgsl } from './filters/blend-modes/hsl.wgsl.mjs';\nexport { default as alphaFrag } from './filters/defaults/alpha/alpha.frag.mjs';\nexport { default as alphaWgsl } from './filters/defaults/alpha/alpha.wgsl.mjs';\nexport { default as blurTemplateWgsl } from './filters/defaults/blur/gpu/blur-template.wgsl.mjs';\nexport { default as colorMatrixFilterFrag } from './filters/defaults/color-matrix/colorMatrixFilter.frag.mjs';\nexport { default as colorMatrixFilterWgsl } from './filters/defaults/color-matrix/colorMatrixFilter.wgsl.mjs';\nexport { default as defaultFilterVert } from './filters/defaults/defaultFilter.vert.mjs';\nexport { default as displacementFrag } from './filters/defaults/displacement/displacement.frag.mjs';\nexport { default as displacementVert } from './filters/defaults/displacement/displacement.vert.mjs';\nexport { default as displacementWgsl } from './filters/defaults/displacement/displacement.wgsl.mjs';\nexport { default as noiseFrag } from './filters/defaults/noise/noise.frag.mjs';\nexport { default as noiseWgsl } from './filters/defaults/noise/noise.wgsl.mjs';\nexport { default as passthroughFrag } from './filters/defaults/passthrough/passthrough.frag.mjs';\nexport { default as passthroughWgsl } from './filters/defaults/passthrough/passthrough.wgsl.mjs';\nexport { default as maskFrag } from './filters/mask/mask.frag.mjs';\nexport { default as maskVert } from './filters/mask/mask.vert.mjs';\nexport { default as maskWgsl } from './filters/mask/mask.wgsl.mjs';\nexport { BlendModeFilter } from './filters/blend-modes/BlendModeFilter.mjs';\nexport { hslgl } from './filters/blend-modes/hls/GLhls.mjs';\nexport { hslgpu } from './filters/blend-modes/hls/GPUhls.mjs';\nexport { AlphaFilter } from './filters/defaults/alpha/AlphaFilter.mjs';\nexport { BlurFilter } from './filters/defaults/blur/BlurFilter.mjs';\nexport { BlurFilterPass } from './filters/defaults/blur/BlurFilterPass.mjs';\nexport { GAUSSIAN_VALUES } from './filters/defaults/blur/const.mjs';\nexport { generateBlurFragSource } from './filters/defaults/blur/gl/generateBlurFragSource.mjs';\nexport { generateBlurGlProgram } from './filters/defaults/blur/gl/generateBlurGlProgram.mjs';\nexport { generateBlurVertSource } from './filters/defaults/blur/gl/generateBlurVertSource.mjs';\nexport { generateBlurProgram } from './filters/defaults/blur/gpu/generateBlurProgram.mjs';\nexport { ColorMatrixFilter } from './filters/defaults/color-matrix/ColorMatrixFilter.mjs';\nexport { DisplacementFilter } from './filters/defaults/displacement/DisplacementFilter.mjs';\nexport { NoiseFilter } from './filters/defaults/noise/NoiseFilter.mjs';\nexport { PassthroughFilter } from './filters/defaults/passthrough/PassthroughFilter.mjs';\nexport { Filter } from './filters/Filter.mjs';\nexport { FilterEffect } from './filters/FilterEffect.mjs';\nexport { FilterPipe } from './filters/FilterPipe.mjs';\nexport { FilterSystem } from './filters/FilterSystem.mjs';\nexport { MaskFilter } from './filters/mask/MaskFilter.mjs';\nexport { groupD8 } from './maths/matrix/groupD8.mjs';\nexport { Matrix } from './maths/matrix/Matrix.mjs';\nexport { DEG_TO_RAD, PI_2, RAD_TO_DEG } from './maths/misc/const.mjs';\nexport { isPow2, log2, nextPow2 } from './maths/misc/pow2.mjs';\nexport { squaredDistanceToLineSegment } from './maths/misc/squaredDistanceToLineSegment.mjs';\nexport { ObservablePoint } from './maths/point/ObservablePoint.mjs';\nexport { Point } from './maths/point/Point.mjs';\nexport { pointInTriangle } from './maths/point/pointInTriangle.mjs';\nexport { Circle } from './maths/shapes/Circle.mjs';\nexport { Ellipse } from './maths/shapes/Ellipse.mjs';\nexport { Polygon } from './maths/shapes/Polygon.mjs';\nexport { Rectangle } from './maths/shapes/Rectangle.mjs';\nexport { RoundedRectangle } from './maths/shapes/RoundedRectangle.mjs';\nexport { Triangle } from './maths/shapes/Triangle.mjs';\nexport { PrepareBase } from './prepare/PrepareBase.mjs';\nexport { PrepareQueue } from './prepare/PrepareQueue.mjs';\nexport { PrepareSystem } from './prepare/PrepareSystem.mjs';\nexport { PrepareUpload } from './prepare/PrepareUpload.mjs';\nexport { CanvasBatchAdaptor } from './rendering/batcher/canvas/CanvasBatchAdaptor.mjs';\nexport { GlBatchAdaptor } from './rendering/batcher/gl/GlBatchAdaptor.mjs';\nexport { checkMaxIfStatementsInShader } from './rendering/batcher/gl/utils/checkMaxIfStatementsInShader.mjs';\nexport { getMaxTexturesPerBatch } from './rendering/batcher/gl/utils/maxRecommendedTextures.mjs';\nexport { generateGPULayout } from './rendering/batcher/gpu/generateGPULayout.mjs';\nexport { generateLayout } from './rendering/batcher/gpu/generateLayout.mjs';\nexport { getTextureBatchBindGroup } from './rendering/batcher/gpu/getTextureBatchBindGroup.mjs';\nexport { GpuBatchAdaptor } from './rendering/batcher/gpu/GpuBatchAdaptor.mjs';\nexport { Batch, Batcher } from './rendering/batcher/shared/Batcher.mjs';\nexport { BatcherPipe } from './rendering/batcher/shared/BatcherPipe.mjs';\nexport { BatchGeometry } from './rendering/batcher/shared/BatchGeometry.mjs';\nexport { BatchTextureArray } from './rendering/batcher/shared/BatchTextureArray.mjs';\nexport { DefaultBatcher } from './rendering/batcher/shared/DefaultBatcher.mjs';\nexport { DefaultShader } from './rendering/batcher/shared/DefaultShader.mjs';\nexport { compileHighShaderGlProgram, compileHighShaderGpuProgram } from './rendering/high-shader/compileHighShaderToProgram.mjs';\nexport { compileHighShader, compileHighShaderGl } from './rendering/high-shader/compiler/compileHighShader.mjs';\nexport { addBits } from './rendering/high-shader/compiler/utils/addBits.mjs';\nexport { compileHooks } from './rendering/high-shader/compiler/utils/compileHooks.mjs';\nexport { compileInputs } from './rendering/high-shader/compiler/utils/compileInputs.mjs';\nexport { compileOutputs } from './rendering/high-shader/compiler/utils/compileOutputs.mjs';\nexport { formatShader } from './rendering/high-shader/compiler/utils/formatShader.mjs';\nexport { injectBits } from './rendering/high-shader/compiler/utils/injectBits.mjs';\nexport { fragmentGPUTemplate, fragmentGlTemplate, vertexGPUTemplate, vertexGlTemplate } from './rendering/high-shader/defaultProgramTemplate.mjs';\nexport { colorBit, colorBitGl } from './rendering/high-shader/shader-bits/colorBit.mjs';\nexport { generateTextureBatchBit, generateTextureBatchBitGl } from './rendering/high-shader/shader-bits/generateTextureBatchBit.mjs';\nexport { globalUniformsBit, globalUniformsBitGl, globalUniformsUBOBitGl } from './rendering/high-shader/shader-bits/globalUniformsBit.mjs';\nexport { localUniformBit, localUniformBitGl, localUniformBitGroup2 } from './rendering/high-shader/shader-bits/localUniformBit.mjs';\nexport { roundPixelsBit, roundPixelsBitGl } from './rendering/high-shader/shader-bits/roundPixelsBit.mjs';\nexport { textureBit, textureBitGl } from './rendering/high-shader/shader-bits/textureBit.mjs';\nexport { AlphaMask } from './rendering/mask/alpha/AlphaMask.mjs';\nexport { AlphaMaskPipe } from './rendering/mask/alpha/AlphaMaskPipe.mjs';\nexport { CanvasColorMaskPipe } from './rendering/mask/color/CanvasColorMaskPipe.mjs';\nexport { ColorMask } from './rendering/mask/color/ColorMask.mjs';\nexport { ColorMaskPipe } from './rendering/mask/color/ColorMaskPipe.mjs';\nexport { MaskEffectManager, MaskEffectManagerClass } from './rendering/mask/MaskEffectManager.mjs';\nexport { ScissorMask } from './rendering/mask/scissor/ScissorMask.mjs';\nexport { CanvasStencilMaskPipe } from './rendering/mask/stencil/CanvasStencilMaskPipe.mjs';\nexport { StencilMask } from './rendering/mask/stencil/StencilMask.mjs';\nexport { StencilMaskPipe } from './rendering/mask/stencil/StencilMaskPipe.mjs';\nexport { addMaskBounds } from './rendering/mask/utils/addMaskBounds.mjs';\nexport { addMaskLocalBounds } from './rendering/mask/utils/addMaskLocalBounds.mjs';\nexport { autoDetectRenderer } from './rendering/renderers/autoDetectRenderer.mjs';\nexport { CanvasContextSystem } from './rendering/renderers/canvas/CanvasContextSystem.mjs';\nexport { CanvasFilterSystem, isCanvasFilterCapable } from './rendering/renderers/canvas/CanvasFilterSystem.mjs';\nexport { CanvasLimitsSystem } from './rendering/renderers/canvas/CanvasLimitsSystem.mjs';\nexport { CanvasRenderer } from './rendering/renderers/canvas/CanvasRenderer.mjs';\nexport { CanvasRenderTargetAdaptor } from './rendering/renderers/canvas/renderTarget/CanvasRenderTargetAdaptor.mjs';\nexport { CanvasRenderTargetSystem } from './rendering/renderers/canvas/renderTarget/CanvasRenderTargetSystem.mjs';\nexport { CanvasTextureSystem } from './rendering/renderers/canvas/texture/CanvasTextureSystem.mjs';\nexport { canUseNewCanvasBlendModes } from './rendering/renderers/canvas/utils/canUseNewCanvasBlendModes.mjs';\nexport { canvasUtils } from './rendering/renderers/canvas/utils/canvasUtils.mjs';\nexport { mapCanvasBlendModesToPixi } from './rendering/renderers/canvas/utils/mapCanvasBlendModesToPixi.mjs';\nexport { BUFFER_TYPE } from './rendering/renderers/gl/buffer/const.mjs';\nexport { GlBuffer } from './rendering/renderers/gl/buffer/GlBuffer.mjs';\nexport { GlBufferSystem } from './rendering/renderers/gl/buffer/GlBufferSystem.mjs';\nexport { CLEAR } from './rendering/renderers/gl/const.mjs';\nexport { GlContextSystem } from './rendering/renderers/gl/context/GlContextSystem.mjs';\nexport { GlGeometryGpuData, GlGeometrySystem } from './rendering/renderers/gl/geometry/GlGeometrySystem.mjs';\nexport { getGlTypeFromFormat } from './rendering/renderers/gl/geometry/utils/getGlTypeFromFormat.mjs';\nexport { GlBackBufferSystem } from './rendering/renderers/gl/GlBackBufferSystem.mjs';\nexport { GlColorMaskSystem } from './rendering/renderers/gl/GlColorMaskSystem.mjs';\nexport { GlEncoderSystem } from './rendering/renderers/gl/GlEncoderSystem.mjs';\nexport { GlLimitsSystem } from './rendering/renderers/gl/GlLimitsSystem.mjs';\nexport { GlRenderTarget } from './rendering/renderers/gl/GlRenderTarget.mjs';\nexport { GlStencilSystem } from './rendering/renderers/gl/GlStencilSystem.mjs';\nexport { GlUboSystem } from './rendering/renderers/gl/GlUboSystem.mjs';\nexport { GlRenderTargetAdaptor } from './rendering/renderers/gl/renderTarget/GlRenderTargetAdaptor.mjs';\nexport { GlRenderTargetSystem } from './rendering/renderers/gl/renderTarget/GlRenderTargetSystem.mjs';\nexport { generateShaderSyncCode } from './rendering/renderers/gl/shader/GenerateShaderSyncCode.mjs';\nexport { getBatchSamplersUniformGroup } from './rendering/renderers/gl/shader/getBatchSamplersUniformGroup.mjs';\nexport { GlProgram } from './rendering/renderers/gl/shader/GlProgram.mjs';\nexport { GlProgramData, IGLUniformData } from './rendering/renderers/gl/shader/GlProgramData.mjs';\nexport { GlShaderSystem } from './rendering/renderers/gl/shader/GlShaderSystem.mjs';\nexport { GlUniformGroupSystem } from './rendering/renderers/gl/shader/GlUniformGroupSystem.mjs';\nexport { migrateFragmentFromV7toV8 } from './rendering/renderers/gl/shader/migrateFragmentFromV7toV8.mjs';\nexport { compileShader } from './rendering/renderers/gl/shader/program/compileShader.mjs';\nexport { defaultValue } from './rendering/renderers/gl/shader/program/defaultValue.mjs';\nexport { ensureAttributes } from './rendering/renderers/gl/shader/program/ensureAttributes.mjs';\nexport { extractAttributesFromGlProgram } from './rendering/renderers/gl/shader/program/extractAttributesFromGlProgram.mjs';\nexport { generateProgram } from './rendering/renderers/gl/shader/program/generateProgram.mjs';\nexport { getMaxFragmentPrecision } from './rendering/renderers/gl/shader/program/getMaxFragmentPrecision.mjs';\nexport { getTestContext } from './rendering/renderers/gl/shader/program/getTestContext.mjs';\nexport { getUboData } from './rendering/renderers/gl/shader/program/getUboData.mjs';\nexport { getUniformData } from './rendering/renderers/gl/shader/program/getUniformData.mjs';\nexport { logProgramError } from './rendering/renderers/gl/shader/program/logProgramError.mjs';\nexport { mapSize } from './rendering/renderers/gl/shader/program/mapSize.mjs';\nexport { mapGlToVertexFormat, mapType } from './rendering/renderers/gl/shader/program/mapType.mjs';\nexport { addProgramDefines } from './rendering/renderers/gl/shader/program/preprocessors/addProgramDefines.mjs';\nexport { ensurePrecision } from './rendering/renderers/gl/shader/program/preprocessors/ensurePrecision.mjs';\nexport { insertVersion } from './rendering/renderers/gl/shader/program/preprocessors/insertVersion.mjs';\nexport { setProgramName } from './rendering/renderers/gl/shader/program/preprocessors/setProgramName.mjs';\nexport { stripVersion } from './rendering/renderers/gl/shader/program/preprocessors/stripVersion.mjs';\nexport { WGSL_TO_STD40_SIZE, createUboElementsSTD40 } from './rendering/renderers/gl/shader/utils/createUboElementsSTD40.mjs';\nexport { createUboSyncFunctionSTD40 } from './rendering/renderers/gl/shader/utils/createUboSyncSTD40.mjs';\nexport { generateArraySyncSTD40 } from './rendering/renderers/gl/shader/utils/generateArraySyncSTD40.mjs';\nexport { generateUniformsSync } from './rendering/renderers/gl/shader/utils/generateUniformsSync.mjs';\nexport { UNIFORM_TO_ARRAY_SETTERS, UNIFORM_TO_SINGLE_SETTERS } from './rendering/renderers/gl/shader/utils/generateUniformsSyncTypes.mjs';\nexport { GlStateSystem } from './rendering/renderers/gl/state/GlStateSystem.mjs';\nexport { mapWebGLBlendModesToPixi } from './rendering/renderers/gl/state/mapWebGLBlendModesToPixi.mjs';\nexport { GL_FORMATS, GL_TARGETS, GL_TYPES, GL_WRAP_MODES } from './rendering/renderers/gl/texture/const.mjs';\nexport { GlTexture } from './rendering/renderers/gl/texture/GlTexture.mjs';\nexport { GlTextureSystem } from './rendering/renderers/gl/texture/GlTextureSystem.mjs';\nexport { glUploadBufferImageResource } from './rendering/renderers/gl/texture/uploaders/glUploadBufferImageResource.mjs';\nexport { glUploadCompressedTextureResource } from './rendering/renderers/gl/texture/uploaders/glUploadCompressedTextureResource.mjs';\nexport { createGlUploadCubeTextureResource } from './rendering/renderers/gl/texture/uploaders/glUploadCubeTextureResource.mjs';\nexport { glUploadImageResource } from './rendering/renderers/gl/texture/uploaders/glUploadImageResource.mjs';\nexport { glUploadVideoResource } from './rendering/renderers/gl/texture/uploaders/glUploadVideoResource.mjs';\nexport { applyStyleParams } from './rendering/renderers/gl/texture/utils/applyStyleParams.mjs';\nexport { getSupportedGlCompressedTextureFormats } from './rendering/renderers/gl/texture/utils/getSupportedGlCompressedTextureFormats.mjs';\nexport { mapFormatToGlFormat } from './rendering/renderers/gl/texture/utils/mapFormatToGlFormat.mjs';\nexport { mapFormatToGlInternalFormat } from './rendering/renderers/gl/texture/utils/mapFormatToGlInternalFormat.mjs';\nexport { mapFormatToGlType } from './rendering/renderers/gl/texture/utils/mapFormatToGlType.mjs';\nexport { mapViewDimensionToGlTarget } from './rendering/renderers/gl/texture/utils/mapViewDimensionToGlTarget.mjs';\nexport { compareModeToGlCompare, mipmapScaleModeToGlFilter, scaleModeToGlFilter, wrapModeToGlAddress } from './rendering/renderers/gl/texture/utils/pixiToGlMaps.mjs';\nexport { unpremultiplyAlpha } from './rendering/renderers/gl/texture/utils/unpremultiplyAlpha.mjs';\nexport { WebGLRenderer } from './rendering/renderers/gl/WebGLRenderer.mjs';\nexport { BindGroupSystem } from './rendering/renderers/gpu/BindGroupSystem.mjs';\nexport { GpuBufferData, GpuBufferSystem } from './rendering/renderers/gpu/buffer/GpuBufferSystem.mjs';\nexport { UboBatch } from './rendering/renderers/gpu/buffer/UboBatch.mjs';\nexport { GpuColorMaskSystem } from './rendering/renderers/gpu/GpuColorMaskSystem.mjs';\nexport { GpuDeviceSystem } from './rendering/renderers/gpu/GpuDeviceSystem.mjs';\nexport { GpuEncoderSystem } from './rendering/renderers/gpu/GpuEncoderSystem.mjs';\nexport { GpuLimitsSystem } from './rendering/renderers/gpu/GpuLimitsSystem.mjs';\nexport { GpuStencilSystem } from './rendering/renderers/gpu/GpuStencilSystem.mjs';\nexport { GpuUboSystem } from './rendering/renderers/gpu/GpuUboSystem.mjs';\nexport { GpuUniformBatchPipe } from './rendering/renderers/gpu/GpuUniformBatchPipe.mjs';\nexport { PipelineSystem } from './rendering/renderers/gpu/pipeline/PipelineSystem.mjs';\nexport { calculateProjection } from './rendering/renderers/gpu/renderTarget/calculateProjection.mjs';\nexport { GpuRenderTarget } from './rendering/renderers/gpu/renderTarget/GpuRenderTarget.mjs';\nexport { GpuRenderTargetAdaptor } from './rendering/renderers/gpu/renderTarget/GpuRenderTargetAdaptor.mjs';\nexport { GpuRenderTargetSystem } from './rendering/renderers/gpu/renderTarget/GpuRenderTargetSystem.mjs';\nexport { BindGroup } from './rendering/renderers/gpu/shader/BindGroup.mjs';\nexport { GpuProgram } from './rendering/renderers/gpu/shader/GpuProgram.mjs';\nexport { GpuShaderSystem } from './rendering/renderers/gpu/shader/GpuShaderSystem.mjs';\nexport { WGSL_ALIGN_SIZE_DATA, createUboElementsWGSL } from './rendering/renderers/gpu/shader/utils/createUboElementsWGSL.mjs';\nexport { createUboSyncFunctionWGSL } from './rendering/renderers/gpu/shader/utils/createUboSyncFunctionWGSL.mjs';\nexport { extractAttributesFromGpuProgram } from './rendering/renderers/gpu/shader/utils/extractAttributesFromGpuProgram.mjs';\nexport { extractStructAndGroups } from './rendering/renderers/gpu/shader/utils/extractStructAndGroups.mjs';\nexport { generateArraySyncWGSL } from './rendering/renderers/gpu/shader/utils/generateArraySyncWGSL.mjs';\nexport { generateGpuLayoutGroups } from './rendering/renderers/gpu/shader/utils/generateGpuLayoutGroups.mjs';\nexport { generateLayoutHash } from './rendering/renderers/gpu/shader/utils/generateLayoutHash.mjs';\nexport { removeStructAndGroupDuplicates } from './rendering/renderers/gpu/shader/utils/removeStructAndGroupDuplicates.mjs';\nexport { GpuBlendModesToPixi } from './rendering/renderers/gpu/state/GpuBlendModesToPixi.mjs';\nexport { GpuStateSystem } from './rendering/renderers/gpu/state/GpuStateSystem.mjs';\nexport { GpuStencilModesToPixi } from './rendering/renderers/gpu/state/GpuStencilModesToPixi.mjs';\nexport { GPUTextureGpuData, GpuTextureSystem } from './rendering/renderers/gpu/texture/GpuTextureSystem.mjs';\nexport { gpuUploadBufferImageResource } from './rendering/renderers/gpu/texture/uploaders/gpuUploadBufferImageResource.mjs';\nexport { blockDataMap, gpuUploadCompressedTextureResource } from './rendering/renderers/gpu/texture/uploaders/gpuUploadCompressedTextureResource.mjs';\nexport { createGpuUploadCubeTextureResource } from './rendering/renderers/gpu/texture/uploaders/gpuUploadCubeTextureResource.mjs';\nexport { gpuUploadImageResource } from './rendering/renderers/gpu/texture/uploaders/gpuUploadImageSource.mjs';\nexport { gpuUploadVideoResource } from './rendering/renderers/gpu/texture/uploaders/gpuUploadVideoSource.mjs';\nexport { getSupportedGPUCompressedTextureFormats } from './rendering/renderers/gpu/texture/utils/getSupportedGPUCompressedTextureFormats.mjs';\nexport { GpuMipmapGenerator } from './rendering/renderers/gpu/texture/utils/GpuMipmapGenerator.mjs';\nexport { WebGPURenderer } from './rendering/renderers/gpu/WebGPURenderer.mjs';\nexport { BackgroundSystem } from './rendering/renderers/shared/background/BackgroundSystem.mjs';\nexport { BlendModePipe } from './rendering/renderers/shared/blendModes/BlendModePipe.mjs';\nexport { Buffer } from './rendering/renderers/shared/buffer/Buffer.mjs';\nexport { BufferResource } from './rendering/renderers/shared/buffer/BufferResource.mjs';\nexport { BufferUsage } from './rendering/renderers/shared/buffer/const.mjs';\nexport { fastCopy } from './rendering/renderers/shared/buffer/utils/fastCopy.mjs';\nexport { ExtractSystem } from './rendering/renderers/shared/extract/ExtractSystem.mjs';\nexport { GenerateTextureSystem } from './rendering/renderers/shared/extract/GenerateTextureSystem.mjs';\nexport { GCSystem } from './rendering/renderers/shared/GCSystem.mjs';\nexport { DRAW_MODES } from './rendering/renderers/shared/geometry/const.mjs';\nexport { Geometry } from './rendering/renderers/shared/geometry/Geometry.mjs';\nexport { buildSimpleUvs, buildUvs } from './rendering/renderers/shared/geometry/utils/buildUvs.mjs';\nexport { ensureIsBuffer } from './rendering/renderers/shared/geometry/utils/ensureIsBuffer.mjs';\nexport { getAttributeInfoFromFormat } from './rendering/renderers/shared/geometry/utils/getAttributeInfoFromFormat.mjs';\nexport { getGeometryBounds } from './rendering/renderers/shared/geometry/utils/getGeometryBounds.mjs';\nexport { transformVertices } from './rendering/renderers/shared/geometry/utils/transformVertices.mjs';\nexport { InstructionSet } from './rendering/renderers/shared/instructions/InstructionSet.mjs';\nexport { GlobalUniformSystem } from './rendering/renderers/shared/renderTarget/GlobalUniformSystem.mjs';\nexport { isRenderingToScreen } from './rendering/renderers/shared/renderTarget/isRenderingToScreen.mjs';\nexport { RenderTarget } from './rendering/renderers/shared/renderTarget/RenderTarget.mjs';\nexport { RenderTargetSystem } from './rendering/renderers/shared/renderTarget/RenderTargetSystem.mjs';\nexport { SchedulerSystem } from './rendering/renderers/shared/SchedulerSystem.mjs';\nexport { ShaderStage } from './rendering/renderers/shared/shader/const.mjs';\nexport { Shader } from './rendering/renderers/shared/shader/Shader.mjs';\nexport { UNIFORM_TYPES_MAP, UNIFORM_TYPES_VALUES } from './rendering/renderers/shared/shader/types.mjs';\nexport { UboSystem } from './rendering/renderers/shared/shader/UboSystem.mjs';\nexport { UniformGroup } from './rendering/renderers/shared/shader/UniformGroup.mjs';\nexport { createUboSyncFunction } from './rendering/renderers/shared/shader/utils/createUboSyncFunction.mjs';\nexport { getDefaultUniformValue } from './rendering/renderers/shared/shader/utils/getDefaultUniformValue.mjs';\nexport { uboSyncFunctionsSTD40, uboSyncFunctionsWGSL } from './rendering/renderers/shared/shader/utils/uboSyncFunctions.mjs';\nexport { uniformParsers } from './rendering/renderers/shared/shader/utils/uniformParsers.mjs';\nexport { HelloSystem } from './rendering/renderers/shared/startup/HelloSystem.mjs';\nexport { BLEND_TO_NPM, STENCIL_MODES } from './rendering/renderers/shared/state/const.mjs';\nexport { getAdjustedBlendModeBlend } from './rendering/renderers/shared/state/getAdjustedBlendModeBlend.mjs';\nexport { State } from './rendering/renderers/shared/state/State.mjs';\nexport { AbstractRenderer } from './rendering/renderers/shared/system/AbstractRenderer.mjs';\nexport { SharedRenderPipes, SharedSystems } from './rendering/renderers/shared/system/SharedSystems.mjs';\nexport { SystemRunner } from './rendering/renderers/shared/system/SystemRunner.mjs';\nexport { CanvasPool, CanvasPoolClass } from './rendering/renderers/shared/texture/CanvasPool.mjs';\nexport { DEPRECATED_SCALE_MODES, DEPRECATED_WRAP_MODES, SCALE_MODES, WRAP_MODES } from './rendering/renderers/shared/texture/const.mjs';\nexport { CubeTexture } from './rendering/renderers/shared/texture/CubeTexture.mjs';\nexport { RenderableGCSystem } from './rendering/renderers/shared/texture/RenderableGCSystem.mjs';\nexport { RenderTexture } from './rendering/renderers/shared/texture/RenderTexture.mjs';\nexport { BufferImageSource } from './rendering/renderers/shared/texture/sources/BufferImageSource.mjs';\nexport { CanvasSource } from './rendering/renderers/shared/texture/sources/CanvasSource.mjs';\nexport { CompressedSource } from './rendering/renderers/shared/texture/sources/CompressedSource.mjs';\nexport { CubeTextureSource } from './rendering/renderers/shared/texture/sources/CubeTextureSource.mjs';\nexport { ExternalSource } from './rendering/renderers/shared/texture/sources/ExternalSource.mjs';\nexport { ImageSource } from './rendering/renderers/shared/texture/sources/ImageSource.mjs';\nexport { TextureSource } from './rendering/renderers/shared/texture/sources/TextureSource.mjs';\nexport { VideoSource } from './rendering/renderers/shared/texture/sources/VideoSource.mjs';\nexport { Texture } from './rendering/renderers/shared/texture/Texture.mjs';\nexport { TextureGCSystem } from './rendering/renderers/shared/texture/TextureGCSystem.mjs';\nexport { TextureMatrix } from './rendering/renderers/shared/texture/TextureMatrix.mjs';\nexport { TexturePool, TexturePoolClass } from './rendering/renderers/shared/texture/TexturePool.mjs';\nexport { TextureStyle } from './rendering/renderers/shared/texture/TextureStyle.mjs';\nexport { TextureUvs } from './rendering/renderers/shared/texture/TextureUvs.mjs';\nexport { getCanvasTexture, hasCachedCanvasTexture } from './rendering/renderers/shared/texture/utils/getCanvasTexture.mjs';\nexport { getSupportedCompressedTextureFormats } from './rendering/renderers/shared/texture/utils/getSupportedCompressedTextureFormats.mjs';\nexport { getSupportedTextureFormats, nonCompressedFormats } from './rendering/renderers/shared/texture/utils/getSupportedTextureFormats.mjs';\nexport { autoDetectSource, resourceToTexture, textureFrom } from './rendering/renderers/shared/texture/utils/textureFrom.mjs';\nexport { createIdFromString } from './rendering/renderers/shared/utils/createIdFromString.mjs';\nexport { parseFunctionBody } from './rendering/renderers/shared/utils/parseFunctionBody.mjs';\nexport { ViewSystem } from './rendering/renderers/shared/view/ViewSystem.mjs';\nexport { RendererType } from './rendering/renderers/types.mjs';\nexport { default as particlesFrag } from './scene/particle-container/shared/shader/particles.frag.mjs';\nexport { default as particlesVert } from './scene/particle-container/shared/shader/particles.vert.mjs';\nexport { default as particlesWgsl } from './scene/particle-container/shared/shader/particles.wgsl.mjs';\nexport { Bounds } from './scene/container/bounds/Bounds.mjs';\nexport { getFastGlobalBounds } from './scene/container/bounds/getFastGlobalBounds.mjs';\nexport { getGlobalBounds, updateTransformBackwards } from './scene/container/bounds/getGlobalBounds.mjs';\nexport { getLocalBounds } from './scene/container/bounds/getLocalBounds.mjs';\nexport { getGlobalRenderableBounds } from './scene/container/bounds/getRenderableBounds.mjs';\nexport { boundsPool, matrixPool } from './scene/container/bounds/utils/matrixAndBoundsPool.mjs';\nexport { cacheAsTextureMixin } from './scene/container/container-mixins/cacheAsTextureMixin.mjs';\nexport { childrenHelperMixin } from './scene/container/container-mixins/childrenHelperMixin.mjs';\nexport { collectRenderablesMixin } from './scene/container/container-mixins/collectRenderablesMixin.mjs';\nexport { effectsMixin } from './scene/container/container-mixins/effectsMixin.mjs';\nexport { findMixin } from './scene/container/container-mixins/findMixin.mjs';\nexport { getFastGlobalBoundsMixin } from './scene/container/container-mixins/getFastGlobalBoundsMixin.mjs';\nexport { bgr2rgb, getGlobalMixin } from './scene/container/container-mixins/getGlobalMixin.mjs';\nexport { measureMixin } from './scene/container/container-mixins/measureMixin.mjs';\nexport { onRenderMixin } from './scene/container/container-mixins/onRenderMixin.mjs';\nexport { sortMixin } from './scene/container/container-mixins/sortMixin.mjs';\nexport { toLocalGlobalMixin } from './scene/container/container-mixins/toLocalGlobalMixin.mjs';\nexport { Container, UPDATE_BLEND, UPDATE_COLOR, UPDATE_TRANSFORM, UPDATE_VISIBLE } from './scene/container/Container.mjs';\nexport { CustomRenderPipe } from './scene/container/CustomRenderPipe.mjs';\nexport { RenderContainer } from './scene/container/RenderContainer.mjs';\nexport { RenderGroup } from './scene/container/RenderGroup.mjs';\nexport { RenderGroupPipe } from './scene/container/RenderGroupPipe.mjs';\nexport { RenderGroupSystem } from './scene/container/RenderGroupSystem.mjs';\nexport { assignWithIgnore } from './scene/container/utils/assignWithIgnore.mjs';\nexport { checkChildrenDidChange } from './scene/container/utils/checkChildrenDidChange.mjs';\nexport { clearList } from './scene/container/utils/clearList.mjs';\nexport { collectAllRenderables } from './scene/container/utils/collectAllRenderables.mjs';\nexport { definedProps } from './scene/container/utils/definedProps.mjs';\nexport { executeInstructions } from './scene/container/utils/executeInstructions.mjs';\nexport { multiplyColors } from './scene/container/utils/multiplyColors.mjs';\nexport { multiplyHexColors } from './scene/container/utils/multiplyHexColors.mjs';\nexport { updateLocalTransform } from './scene/container/utils/updateLocalTransform.mjs';\nexport { updateRenderGroupTransform, updateRenderGroupTransforms, updateTransformAndChildren } from './scene/container/utils/updateRenderGroupTransforms.mjs';\nexport { updateWorldTransform } from './scene/container/utils/updateWorldTransform.mjs';\nexport { validateRenderables } from './scene/container/utils/validateRenderables.mjs';\nexport { CanvasGraphicsAdaptor } from './scene/graphics/canvas/CanvasGraphicsAdaptor.mjs';\nexport { CanvasGraphicsContextSystem } from './scene/graphics/canvas/CanvasGraphicsContextSystem.mjs';\nexport { CanvasGraphicsPipe } from './scene/graphics/canvas/CanvasGraphicsPipe.mjs';\nexport { GlGraphicsAdaptor } from './scene/graphics/gl/GlGraphicsAdaptor.mjs';\nexport { color32BitToUniform, colorToUniform } from './scene/graphics/gpu/colorToUniform.mjs';\nexport { GpuGraphicsAdaptor } from './scene/graphics/gpu/GpuGraphicsAdaptor.mjs';\nexport { BatchableGraphics } from './scene/graphics/shared/BatchableGraphics.mjs';\nexport { buildAdaptiveBezier } from './scene/graphics/shared/buildCommands/buildAdaptiveBezier.mjs';\nexport { buildAdaptiveQuadratic } from './scene/graphics/shared/buildCommands/buildAdaptiveQuadratic.mjs';\nexport { buildArc } from './scene/graphics/shared/buildCommands/buildArc.mjs';\nexport { buildArcTo } from './scene/graphics/shared/buildCommands/buildArcTo.mjs';\nexport { buildArcToSvg } from './scene/graphics/shared/buildCommands/buildArcToSvg.mjs';\nexport { buildCircle, buildEllipse, buildRoundedRectangle } from './scene/graphics/shared/buildCommands/buildCircle.mjs';\nexport { buildLine } from './scene/graphics/shared/buildCommands/buildLine.mjs';\nexport { buildPixelLine } from './scene/graphics/shared/buildCommands/buildPixelLine.mjs';\nexport { buildPolygon } from './scene/graphics/shared/buildCommands/buildPolygon.mjs';\nexport { buildRectangle } from './scene/graphics/shared/buildCommands/buildRectangle.mjs';\nexport { buildTriangle } from './scene/graphics/shared/buildCommands/buildTriangle.mjs';\nexport { closePointEps, curveEps } from './scene/graphics/shared/const.mjs';\nexport { FillGradient } from './scene/graphics/shared/fill/FillGradient.mjs';\nexport { FillPattern } from './scene/graphics/shared/fill/FillPattern.mjs';\nexport { Graphics } from './scene/graphics/shared/Graphics.mjs';\nexport { GraphicsContext } from './scene/graphics/shared/GraphicsContext.mjs';\nexport { GpuGraphicsContext, GraphicsContextRenderData, GraphicsContextSystem } from './scene/graphics/shared/GraphicsContextSystem.mjs';\nexport { GraphicsGpuData, GraphicsPipe } from './scene/graphics/shared/GraphicsPipe.mjs';\nexport { GraphicsPath } from './scene/graphics/shared/path/GraphicsPath.mjs';\nexport { roundedShapeArc, roundedShapeQuadraticCurve } from './scene/graphics/shared/path/roundShape.mjs';\nexport { ShapePath } from './scene/graphics/shared/path/ShapePath.mjs';\nexport { parseSVGDefinitions } from './scene/graphics/shared/svg/parseSVGDefinitions.mjs';\nexport { parseSVGFloatAttribute } from './scene/graphics/shared/svg/parseSVGFloatAttribute.mjs';\nexport { parseSVGPath } from './scene/graphics/shared/svg/parseSVGPath.mjs';\nexport { parseSVGStyle, styleAttributes } from './scene/graphics/shared/svg/parseSVGStyle.mjs';\nexport { SVGParser } from './scene/graphics/shared/svg/SVGParser.mjs';\nexport { extractSvgUrlId } from './scene/graphics/shared/svg/utils/extractSvgUrlId.mjs';\nexport { checkForNestedPattern, getFillInstructionData } from './scene/graphics/shared/svg/utils/fillOperations.mjs';\nexport { appendSVGPath, calculatePathArea, extractSubpaths } from './scene/graphics/shared/svg/utils/pathOperations.mjs';\nexport { buildContextBatches, shapeBuilders } from './scene/graphics/shared/utils/buildContextBatches.mjs';\nexport { buildGeometryFromPath } from './scene/graphics/shared/utils/buildGeometryFromPath.mjs';\nexport { toFillStyle, toStrokeStyle } from './scene/graphics/shared/utils/convertFillInputToFillStyle.mjs';\nexport { generateTextureMatrix } from './scene/graphics/shared/utils/generateTextureFillMatrix.mjs';\nexport { getMaxMiterRatio } from './scene/graphics/shared/utils/getMaxMiterRatio.mjs';\nexport { getOrientationOfPoints } from './scene/graphics/shared/utils/getOrientationOfPoints.mjs';\nexport { triangulateWithHoles } from './scene/graphics/shared/utils/triangulateWithHoles.mjs';\nexport { RenderLayer } from './scene/layers/RenderLayer.mjs';\nexport { PerspectiveMesh } from './scene/mesh-perspective/PerspectiveMesh.mjs';\nexport { PerspectivePlaneGeometry } from './scene/mesh-perspective/PerspectivePlaneGeometry.mjs';\nexport { applyProjectiveTransformationToPlane } from './scene/mesh-perspective/utils/applyProjectiveTransformationToPlane.mjs';\nexport { compute2DProjection } from './scene/mesh-perspective/utils/compute2DProjections.mjs';\nexport { MeshPlane } from './scene/mesh-plane/MeshPlane.mjs';\nexport { PlaneGeometry } from './scene/mesh-plane/PlaneGeometry.mjs';\nexport { MeshRope } from './scene/mesh-simple/MeshRope.mjs';\nexport { MeshSimple } from './scene/mesh-simple/MeshSimple.mjs';\nexport { RopeGeometry } from './scene/mesh-simple/RopeGeometry.mjs';\nexport { GlMeshAdaptor } from './scene/mesh/gl/GlMeshAdaptor.mjs';\nexport { GpuMeshAdapter } from './scene/mesh/gpu/GpuMeshAdapter.mjs';\nexport { BatchableMesh } from './scene/mesh/shared/BatchableMesh.mjs';\nexport { getTextureDefaultMatrix } from './scene/mesh/shared/getTextureDefaultMatrix.mjs';\nexport { Mesh } from './scene/mesh/shared/Mesh.mjs';\nexport { MeshGeometry } from './scene/mesh/shared/MeshGeometry.mjs';\nexport { MeshGpuData, MeshPipe } from './scene/mesh/shared/MeshPipe.mjs';\nexport { CanvasParticleContainerAdaptor } from './scene/particle-container/canvas/CanvasParticleContainerAdaptor.mjs';\nexport { CanvasParticleContainerPipe } from './scene/particle-container/canvas/CanvasParticleContainerPipe.mjs';\nexport { GlParticleContainerAdaptor } from './scene/particle-container/gl/GlParticleContainerAdaptor.mjs';\nexport { GlParticleContainerPipe } from './scene/particle-container/gl/GlParticleContainerPipe.mjs';\nexport { GpuParticleContainerAdaptor } from './scene/particle-container/gpu/GpuParticleContainerAdaptor.mjs';\nexport { GpuParticleContainerPipe } from './scene/particle-container/gpu/GpuParticleContainerPipe.mjs';\nexport { Particle } from './scene/particle-container/shared/Particle.mjs';\nexport { ParticleBuffer } from './scene/particle-container/shared/ParticleBuffer.mjs';\nexport { ParticleContainer } from './scene/particle-container/shared/ParticleContainer.mjs';\nexport { ParticleContainerPipe } from './scene/particle-container/shared/ParticleContainerPipe.mjs';\nexport { particleData } from './scene/particle-container/shared/particleData.mjs';\nexport { ParticleShader } from './scene/particle-container/shared/shader/ParticleShader.mjs';\nexport { createIndicesForQuads } from './scene/particle-container/shared/utils/createIndicesForQuads.mjs';\nexport { generateParticleUpdateFunction } from './scene/particle-container/shared/utils/generateParticleUpdateFunction.mjs';\nexport { AnimatedSprite } from './scene/sprite-animated/AnimatedSprite.mjs';\nexport { CanvasNineSliceSpritePipe } from './scene/sprite-nine-slice/canvas/CanvasNineSliceSpritePipe.mjs';\nexport { NineSliceGeometry } from './scene/sprite-nine-slice/NineSliceGeometry.mjs';\nexport { NineSlicePlane, NineSliceSprite } from './scene/sprite-nine-slice/NineSliceSprite.mjs';\nexport { NineSliceSpriteGpuData, NineSliceSpritePipe } from './scene/sprite-nine-slice/NineSliceSpritePipe.mjs';\nexport { CanvasTilingSpritePipe } from './scene/sprite-tiling/canvas/CanvasTilingSpritePipe.mjs';\nexport { tilingBit, tilingBitGl } from './scene/sprite-tiling/shader/tilingBit.mjs';\nexport { TilingSpriteShader } from './scene/sprite-tiling/shader/TilingSpriteShader.mjs';\nexport { TilingSprite } from './scene/sprite-tiling/TilingSprite.mjs';\nexport { TilingSpriteGpuData, TilingSpritePipe } from './scene/sprite-tiling/TilingSpritePipe.mjs';\nexport { applyMatrix } from './scene/sprite-tiling/utils/applyMatrix.mjs';\nexport { QuadGeometry } from './scene/sprite-tiling/utils/QuadGeometry.mjs';\nexport { setPositions } from './scene/sprite-tiling/utils/setPositions.mjs';\nexport { setUvs } from './scene/sprite-tiling/utils/setUvs.mjs';\nexport { BatchableSprite } from './scene/sprite/BatchableSprite.mjs';\nexport { Sprite } from './scene/sprite/Sprite.mjs';\nexport { SpritePipe } from './scene/sprite/SpritePipe.mjs';\nexport { AbstractBitmapFont } from './scene/text-bitmap/AbstractBitmapFont.mjs';\nexport { AbstractBitmapTextPipe, BitmapTextGraphics } from './scene/text-bitmap/AbstractBitmapTextPipe.mjs';\nexport { bitmapFontTextParser } from './scene/text-bitmap/asset/bitmapFontTextParser.mjs';\nexport { bitmapFontXMLParser } from './scene/text-bitmap/asset/bitmapFontXMLParser.mjs';\nexport { bitmapFontXMLStringParser } from './scene/text-bitmap/asset/bitmapFontXMLStringParser.mjs';\nexport { bitmapFontCachePlugin, loadBitmapFont } from './scene/text-bitmap/asset/loadBitmapFont.mjs';\nexport { BitmapFont } from './scene/text-bitmap/BitmapFont.mjs';\nexport { BitmapFontManager } from './scene/text-bitmap/BitmapFontManager.mjs';\nexport { BitmapText } from './scene/text-bitmap/BitmapText.mjs';\nexport { CanvasBitmapTextPipe } from './scene/text-bitmap/CanvasBitmapTextPipe.mjs';\nexport { DynamicBitmapFont } from './scene/text-bitmap/DynamicBitmapFont.mjs';\nexport { BitmapTextPipe } from './scene/text-bitmap/GpuBitmapTextPipe.mjs';\nexport { bitmapTextSplit } from './scene/text-bitmap/utils/bitmapTextSplit.mjs';\nexport { getBitmapTextLayout } from './scene/text-bitmap/utils/getBitmapTextLayout.mjs';\nexport { resolveCharacters } from './scene/text-bitmap/utils/resolveCharacters.mjs';\nexport { BatchableHTMLText } from './scene/text-html/BatchableHTMLText.mjs';\nexport { HTMLText } from './scene/text-html/HTMLText.mjs';\nexport { HTMLTextPipe } from './scene/text-html/HTMLTextPipe.mjs';\nexport { HTMLTextRenderData } from './scene/text-html/HTMLTextRenderData.mjs';\nexport { HTMLTextStyle } from './scene/text-html/HTMLTextStyle.mjs';\nexport { HTMLTextSystem } from './scene/text-html/HTMLTextSystem.mjs';\nexport { extractFontFamilies } from './scene/text-html/utils/extractFontFamilies.mjs';\nexport { FontStylePromiseCache, getFontCss } from './scene/text-html/utils/getFontCss.mjs';\nexport { getSVGUrl } from './scene/text-html/utils/getSVGUrl.mjs';\nexport { getTemporaryCanvasFromImage } from './scene/text-html/utils/getTemporaryCanvasFromImage.mjs';\nexport { loadFontAsBase64 } from './scene/text-html/utils/loadFontAsBase64.mjs';\nexport { loadFontCSS } from './scene/text-html/utils/loadFontCSS.mjs';\nexport { loadSVGImage } from './scene/text-html/utils/loadSVGImage.mjs';\nexport { measureHtmlText } from './scene/text-html/utils/measureHtmlText.mjs';\nexport { textStyleToCSS } from './scene/text-html/utils/textStyleToCSS.mjs';\nexport { AbstractSplitText } from './scene/text-split/AbstractSplitText.mjs';\nexport { SplitBitmapText } from './scene/text-split/SplitBitmapText.mjs';\nexport { SplitText } from './scene/text-split/SplitText.mjs';\nexport { AbstractText, ensureTextOptions } from './scene/text/AbstractText.mjs';\nexport { BatchableText } from './scene/text/canvas/BatchableText.mjs';\nexport { CanvasTextGenerator } from './scene/text/canvas/CanvasTextGenerator.mjs';\nexport { CanvasTextMetrics } from './scene/text/canvas/CanvasTextMetrics.mjs';\nexport { CanvasTextPipe } from './scene/text/canvas/CanvasTextPipe.mjs';\nexport { CanvasRendererTextSystem } from './scene/text/canvas/CanvasTextSystem.mjs';\nexport { fontStringFromTextStyle } from './scene/text/canvas/utils/fontStringFromTextStyle.mjs';\nexport { getCanvasFillStyle } from './scene/text/canvas/utils/getCanvasFillStyle.mjs';\nexport { measureTaggedText, tokenizeTaggedRuns, wordWrapTaggedLines } from './scene/text/canvas/utils/measureTaggedText.mjs';\nexport { getPlainText, hasTagMarkup, hasTagStyles, parseTaggedText } from './scene/text/canvas/utils/parseTaggedText.mjs';\nexport { BREAKING_SPACES, BREAKING_SPACES_SET, BREAK_AFTER_CHARS, BREAK_AFTER_CHARS_SET, COLLAPSIBLE_SPACES, COLLAPSIBLE_SPACES_SET, NEWLINES, NEWLINES_SET, NEWLINE_MATCH_REGEX, NEWLINE_SPLIT_REGEX, collapseNewlines, collapseSpaces, getCharacterGroups, isBreakAfterChar, isBreakingSpace, isCollapsibleSpace, isNewline, tokenize, trimRight } from './scene/text/canvas/utils/textTokenization.mjs';\nexport { wordWrap } from './scene/text/canvas/utils/wordWrap.mjs';\nexport { SdfShader } from './scene/text/sdfShader/SdfShader.mjs';\nexport { localUniformMSDFBit, localUniformMSDFBitGl } from './scene/text/sdfShader/shader-bits/localUniformMSDFBit.mjs';\nexport { mSDFBit, mSDFBitGl } from './scene/text/sdfShader/shader-bits/mSDFBit.mjs';\nexport { AbstractTextSystem } from './scene/text/shared/AbstractTextSystem.mjs';\nexport { CanvasTextSystem } from './scene/text/shared/GpuTextSystem.mjs';\nexport { Text } from './scene/text/Text.mjs';\nexport { TextStyle } from './scene/text/TextStyle.mjs';\nexport { canvasTextSplit } from './scene/text/utils/canvasTextSplit.mjs';\nexport { generateTextStyleKey } from './scene/text/utils/generateTextStyleKey.mjs';\nexport { getPo2TextureFromSource } from './scene/text/utils/getPo2TextureFromSource.mjs';\nexport { updateTextBounds } from './scene/text/utils/updateTextBounds.mjs';\nexport { ViewContainer } from './scene/view/ViewContainer.mjs';\nexport { Spritesheet } from './spritesheet/Spritesheet.mjs';\nexport { spritesheetAsset } from './spritesheet/spritesheetAsset.mjs';\nexport { UPDATE_PRIORITY } from './ticker/const.mjs';\nexport { Ticker } from './ticker/Ticker.mjs';\nexport { TickerListener } from './ticker/TickerListener.mjs';\nexport { detectVideoAlphaMode } from './utils/browser/detectVideoAlphaMode.mjs';\nexport { isMobile } from './utils/browser/isMobile.mjs';\nexport { isSafari } from './utils/browser/isSafari.mjs';\nexport { isWebGLSupported } from './utils/browser/isWebGLSupported.mjs';\nexport { isWebGPUSupported } from './utils/browser/isWebGPUSupported.mjs';\nexport { unsafeEvalSupported } from './utils/browser/unsafeEvalSupported.mjs';\nexport { getCanvasBoundingBox } from './utils/canvas/getCanvasBoundingBox.mjs';\nexport { DATA_URI, VERSION } from './utils/const.mjs';\nexport { default as EventEmitter } from 'eventemitter3';\nexport { cleanArray, cleanHash } from './utils/data/clean.mjs';\nexport { GCManagedHash } from './utils/data/GCManagedHash.mjs';\nexport { removeItems } from './utils/data/removeItems.mjs';\nexport { resetUids, uid } from './utils/data/uid.mjs';\nexport { updateQuadBounds } from './utils/data/updateQuadBounds.mjs';\nexport { ViewableBuffer } from './utils/data/ViewableBuffer.mjs';\nexport { ApplicationInitHook, RendererInitHook } from './utils/global/globalHooks.mjs';\nexport { deprecation, v8_0_0, v8_3_4 } from './utils/logging/deprecation.mjs';\nexport { logDebugTexture } from './utils/logging/logDebugTexture.mjs';\nexport { logRenderGroupScene, logScene } from './utils/logging/logScene.mjs';\nexport { warn } from './utils/logging/warn.mjs';\nexport { NOOP } from './utils/misc/NOOP.mjs';\nexport { Transform } from './utils/misc/Transform.mjs';\nexport { getResolutionOfUrl } from './utils/network/getResolutionOfUrl.mjs';\nexport { path } from './utils/path.mjs';\nexport { GlobalResourceRegistry } from './utils/pool/GlobalResourceRegistry.mjs';\nexport { Pool } from './utils/pool/Pool.mjs';\nexport { BigPool, PoolGroupClass } from './utils/pool/PoolGroup.mjs';\nexport { sayHello } from './utils/sayHello.mjs';\nexport { earcut } from './utils/utils.mjs';\n\n\"use strict\";\nextensions.add(browserExt, webworkerExt);\n\nexport { browserExt, extensions, webworkerExt };\n//# sourceMappingURL=index.mjs.map\n","import { Application } from 'pixi.js'\n\nexport interface StageOptions {\n /** Width of the PixiJS canvas in CSS pixels */\n width: number\n /** Height of the PixiJS canvas in CSS pixels */\n height: number\n}\n\nconst STAGE_WIDTH = 480\nconst STAGE_HEIGHT = 480\n\nexport type StageMode = 'floating' | 'inline'\n\nexport class WidgetStage {\n app: Application\n private container: HTMLDivElement | null = null\n private resizeObserver: ResizeObserver | null = null\n private mode: StageMode = 'floating'\n private targetEl: HTMLElement | null = null\n\n constructor() {\n this.app = new Application()\n }\n\n /**\n * Initialize the stage.\n * @param mode 'floating' (fixed position) or 'inline' (inside a target container)\n * @param targetSelector CSS selector for the target container (inline mode only)\n */\n async init(mode: StageMode = 'floating', targetSelector?: string | null): Promise<HTMLCanvasElement> {\n this.mode = mode\n\n // In inline mode, find the target container\n if (mode === 'inline' && targetSelector) {\n this.targetEl = document.querySelector(targetSelector)\n if (!this.targetEl) {\n console.warn(`[HolostaffWidget] Container \"${targetSelector}\" not found, falling back to floating mode`)\n this.mode = 'floating'\n }\n }\n\n await this.app.init({\n width: STAGE_WIDTH,\n height: STAGE_HEIGHT,\n backgroundAlpha: 0,\n antialias: true,\n resolution: window.devicePixelRatio || 1,\n autoDensity: true,\n })\n\n this.container = document.createElement('div')\n this.container.id = 'holostaff-widget-root'\n\n if (this.mode === 'inline' && this.targetEl) {\n // Inline mode: render inside the target container\n Object.assign(this.container.style, {\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'visible',\n pointerEvents: 'none',\n })\n this.targetEl.style.position = 'relative'\n this.targetEl.style.cursor = 'pointer'\n this.targetEl.appendChild(this.container)\n } else {\n // Floating mode: fixed position at bottom of viewport\n Object.assign(this.container.style, {\n position: 'fixed',\n bottom: '0',\n left: '50%',\n transform: 'translateX(-50%)',\n width: `${STAGE_WIDTH}px`,\n height: `${STAGE_HEIGHT}px`,\n zIndex: '2147483646',\n pointerEvents: 'none',\n overflow: 'visible',\n })\n document.body.appendChild(this.container)\n }\n\n const canvas = this.app.canvas as HTMLCanvasElement\n Object.assign(canvas.style, {\n width: '100%',\n height: '100%',\n display: 'block',\n pointerEvents: 'auto',\n })\n\n this.container.appendChild(canvas)\n this.setupResize()\n\n return canvas\n }\n\n private setupResize(): void {\n const onResize = () => {\n if (this.mode === 'inline' && this.targetEl) {\n // In inline mode, size is driven by the target container\n const rect = this.targetEl.getBoundingClientRect()\n if (this.container) {\n this.container.style.width = `${rect.width}px`\n this.container.style.height = `${rect.height}px`\n }\n } else {\n // Floating mode: clamp to viewport width\n const vw = window.innerWidth\n const width = Math.min(STAGE_WIDTH, vw)\n const scale = width / STAGE_WIDTH\n const height = STAGE_HEIGHT * scale\n\n if (this.container) {\n this.container.style.width = `${width}px`\n this.container.style.height = `${height}px`\n }\n }\n\n this.app.renderer.resize(STAGE_WIDTH, STAGE_HEIGHT)\n }\n\n window.addEventListener('resize', onResize)\n\n // Also observe the target container for size changes in inline mode\n if (this.mode === 'inline' && this.targetEl) {\n this.resizeObserver = new ResizeObserver(onResize)\n this.resizeObserver.observe(this.targetEl)\n }\n\n onResize()\n }\n\n /** Whether the stage is in inline mode. */\n get isInline(): boolean {\n return this.mode === 'inline' && this.targetEl !== null\n }\n\n /** The target container element (inline mode only). */\n get inlineTarget(): HTMLElement | null {\n return this.targetEl\n }\n\n /** The root DOM container for adding sibling elements (e.g. idle video). */\n get rootElement(): HTMLDivElement | null {\n return this.container\n }\n\n get stageWidth(): number {\n return STAGE_WIDTH\n }\n\n get stageHeight(): number {\n return STAGE_HEIGHT\n }\n\n /**\n * Get the bounding rect of the inline target container.\n * Used for positioning the conversation popover.\n */\n getInlineRect(): DOMRect | null {\n return this.targetEl?.getBoundingClientRect() ?? null\n }\n\n destroy(): void {\n window.removeEventListener('resize', this.setupResize)\n this.resizeObserver?.disconnect()\n this.container?.remove()\n this.app.destroy(true)\n }\n}\n","import { Ticker, type Container } from 'pixi.js'\n\n/** Returns true when the user prefers reduced motion. */\nexport function prefersReducedMotion(): boolean {\n return globalThis.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches ?? false\n}\n\nexport type EasingFn = (t: number) => number\n\nexport const Easing = {\n easeOutCubic: (t: number) => 1 - Math.pow(1 - t, 3),\n easeInCubic: (t: number) => t * t * t,\n easeOutBack: (t: number) => {\n const c1 = 1.70158\n const c3 = c1 + 1\n return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2)\n },\n easeInOutSine: (t: number) => -(Math.cos(Math.PI * t) - 1) / 2,\n linear: (t: number) => t,\n}\n\ninterface TweenOptions {\n target: Record<string, any>\n props: Record<string, number>\n duration: number\n easing?: EasingFn\n delay?: number\n onComplete?: () => void\n ticker: Ticker\n}\n\n/** A simple property tween driven by a PixiJS Ticker. Returns a cancel function. */\nexport function tween(opts: TweenOptions): () => void {\n const { target, props, duration, easing = Easing.easeOutCubic, delay = 0, onComplete, ticker } = opts\n\n // Reduced motion: apply final values immediately\n if (prefersReducedMotion()) {\n for (const key of Object.keys(props)) {\n target[key] = props[key]\n }\n onComplete?.()\n return () => {}\n }\n\n const startValues: Record<string, number> = {}\n for (const key of Object.keys(props)) {\n startValues[key] = target[key] as number\n }\n\n let elapsed = -delay\n let cancelled = false\n\n const update = (dt: Ticker) => {\n if (cancelled) return\n\n elapsed += dt.deltaMS\n\n if (elapsed < 0) return // still in delay\n\n const progress = Math.min(elapsed / duration, 1)\n const eased = easing(progress)\n\n for (const key of Object.keys(props)) {\n target[key] = startValues[key] + (props[key] - startValues[key]) * eased\n }\n\n if (progress >= 1) {\n ticker.remove(update)\n onComplete?.()\n }\n }\n\n ticker.add(update)\n\n return () => {\n cancelled = true\n ticker.remove(update)\n }\n}\n\n/** Pulse an object's alpha between min and max. Returns a cancel function. */\nexport function pulseAlpha(\n target: Container,\n ticker: Ticker,\n min: number = 0.3,\n max: number = 0.7,\n periodMs: number = 2000,\n): () => void {\n // Reduced motion: set a static alpha midpoint\n if (prefersReducedMotion()) {\n target.alpha = (min + max) / 2\n return () => {}\n }\n\n let elapsed = 0\n let cancelled = false\n\n const update = (dt: Ticker) => {\n if (cancelled) return\n elapsed += dt.deltaMS\n const t = (Math.sin((elapsed / periodMs) * Math.PI * 2) + 1) / 2\n target.alpha = min + (max - min) * t\n }\n\n ticker.add(update)\n return () => {\n cancelled = true\n ticker.remove(update)\n }\n}\n","import { Container, Sprite, Texture, Ticker, Rectangle } from 'pixi.js'\nimport { tween, pulseAlpha, Easing } from './animations'\n\n/** Width of the idle avatar in CSS pixels */\nexport const AVATAR_WIDTH = 200\n/** Height matches the Canva video aspect ratio (854x480 ≈ 16:9). */\nexport const AVATAR_HEIGHT = AVATAR_WIDTH * (480 / 854)\n/** Width of the live avatar during conversation (larger) */\nconst LIVE_AVATAR_WIDTH = 280\n\nexport class AvatarRenderer {\n /** PixiJS container for the speech bubble hit-area and live avatar sprite. */\n readonly container: Container\n private idleVideoEl: HTMLVideoElement | null = null\n private idleGroup: Container | null = null\n private liveSprite: Sprite | null = null\n private cancelGlow: (() => void) | null = null\n private cancelEntrance: (() => void) | null = null\n private visible = false\n private stageWidth: number\n private stageHeight: number\n /** The widget root DOM element — idle video is appended here as a sibling of the canvas. */\n private widgetRoot: HTMLElement | null = null\n\n constructor(stageWidth: number, stageHeight: number) {\n this.stageWidth = stageWidth\n this.stageHeight = stageHeight\n this.container = new Container()\n this.container.visible = false\n this.container.x = stageWidth / 2 // center horizontally\n this.container.y = stageHeight + AVATAR_HEIGHT // start off-screen below\n }\n\n /**\n * Load the idle loop video as a DOM <video> element (not a PixiJS sprite).\n * VP9 alpha WebM transparency is handled natively by the browser compositor.\n * The video is placed inside the widget root div, behind the PixiJS canvas.\n */\n async loadIdleVideo(videoUrl: string, widgetRoot: HTMLElement): Promise<void> {\n this.widgetRoot = widgetRoot\n\n this.idleVideoEl = document.createElement('video')\n this.idleVideoEl.src = videoUrl\n this.idleVideoEl.loop = true\n this.idleVideoEl.muted = true\n this.idleVideoEl.playsInline = true\n this.idleVideoEl.crossOrigin = 'anonymous'\n Object.assign(this.idleVideoEl.style, {\n position: 'absolute',\n bottom: '10px',\n left: '50%',\n transform: 'translateX(-50%) translateY(100%)', // start off-screen\n width: `${AVATAR_WIDTH}px`,\n height: 'auto',\n pointerEvents: 'none',\n zIndex: '0', // behind the PixiJS canvas\n transition: 'none',\n })\n\n // Insert before the canvas so it renders behind it\n widgetRoot.insertBefore(this.idleVideoEl, widgetRoot.firstChild)\n\n await this.idleVideoEl.play()\n\n // Create a minimal PixiJS container for the hit area + speech bubble positioning\n this.idleGroup = new Container()\n this.container.addChild(this.idleGroup)\n\n // Position PixiJS container to match the video position\n this.container.x = this.stageWidth / 2\n this.container.y = this.stageHeight + AVATAR_HEIGHT // still off-screen\n }\n\n /**\n * Load from a static image instead of video (fallback).\n */\n async loadIdleImage(imageUrl: string): Promise<void> {\n const texture = Texture.from(imageUrl)\n const sprite = new Sprite(texture)\n sprite.width = AVATAR_WIDTH\n sprite.height = AVATAR_HEIGHT\n sprite.anchor.set(0.5, 1)\n\n this.idleGroup = new Container()\n this.idleGroup.addChild(sprite)\n this.container.addChild(this.idleGroup)\n\n this.container.x = this.stageWidth / 2\n this.container.y = this.stageHeight + AVATAR_HEIGHT\n }\n\n /** Slide the avatar up into view. */\n slideIn(ticker: Ticker): void {\n if (this.visible) return\n this.visible = true\n\n const targetY = this.stageHeight - 10 // 10px padding from bottom\n\n // PixiJS container (for speech bubble positioning / hit area)\n this.container.alpha = 1\n this.container.visible = true\n this.container.y = this.stageHeight + AVATAR_HEIGHT\n\n this.cancelEntrance = tween({\n target: this.container,\n props: { y: targetY },\n duration: 700,\n easing: Easing.easeOutBack,\n ticker,\n })\n\n // Slide the DOM video element in sync\n if (this.idleVideoEl) {\n // Use CSS transition for the slide animation\n this.idleVideoEl.style.transition = 'transform 0.7s cubic-bezier(0.34, 1.56, 0.64, 1)'\n this.idleVideoEl.style.transform = 'translateX(-50%) translateY(0)'\n }\n }\n\n /** Slide the avatar down out of view. */\n slideOut(ticker: Ticker): void {\n if (!this.visible) return\n this.visible = false\n\n this.cancelGlow?.()\n this.cancelGlow = null\n\n // PixiJS container\n tween({\n target: this.container,\n props: { y: this.stageHeight + AVATAR_HEIGHT },\n duration: 450,\n easing: Easing.easeInCubic,\n ticker,\n onComplete: () => {\n this.container.visible = false\n },\n })\n\n // Slide DOM video down\n if (this.idleVideoEl) {\n this.idleVideoEl.style.transition = 'transform 0.45s cubic-bezier(0.32, 0, 0.67, 0)'\n this.idleVideoEl.style.transform = 'translateX(-50%) translateY(100%)'\n }\n }\n\n get isVisible(): boolean {\n return this.visible\n }\n\n /** Make the avatar container interactive (clickable). */\n setInteractive(onClick: () => void): void {\n this.container.eventMode = 'static'\n this.container.cursor = 'pointer'\n\n // Invisible hit area — no rendered graphics, just pointer detection\n this.container.hitArea = new Rectangle(\n -AVATAR_WIDTH / 2,\n -AVATAR_HEIGHT,\n AVATAR_WIDTH,\n AVATAR_HEIGHT,\n )\n\n this.container.on('pointertap', onClick)\n\n // Also make the DOM video clickable\n if (this.idleVideoEl) {\n this.idleVideoEl.style.pointerEvents = 'auto'\n this.idleVideoEl.style.cursor = 'pointer'\n this.idleVideoEl.addEventListener('click', onClick)\n }\n }\n\n /**\n * Switch from idle video to live avatar video.\n * Hides the DOM idle video and shows a PixiJS sprite for the live stream.\n */\n setLiveVideo(videoEl: HTMLVideoElement, ticker: Ticker): void {\n const createSprite = () => {\n const texture = Texture.from(videoEl)\n this.liveSprite = new Sprite(texture)\n\n const vw = videoEl.videoWidth || 1\n const vh = videoEl.videoHeight || 1\n const scale = LIVE_AVATAR_WIDTH / vw\n this.liveSprite.width = LIVE_AVATAR_WIDTH\n this.liveSprite.height = vh * scale\n\n this.liveSprite.anchor.set(0.5, 1)\n this.liveSprite.alpha = 0\n\n this.container.addChild(this.liveSprite)\n\n // Hide idle DOM video\n if (this.idleVideoEl) this.idleVideoEl.style.display = 'none'\n if (this.idleGroup) this.idleGroup.visible = false\n\n this.cancelGlow?.()\n this.cancelGlow = null\n\n tween({\n target: this.liveSprite,\n props: { alpha: 1 },\n duration: 500,\n easing: Easing.easeInOutSine,\n ticker,\n })\n }\n\n if (videoEl.videoWidth > 0 && videoEl.videoHeight > 0) {\n createSprite()\n } else {\n const onReady = () => {\n videoEl.removeEventListener('loadeddata', onReady)\n videoEl.removeEventListener('resize', onReady)\n createSprite()\n }\n videoEl.addEventListener('loadeddata', onReady)\n videoEl.addEventListener('resize', onReady)\n }\n }\n\n /** Switch back from live video to idle video. */\n clearLiveVideo(ticker: Ticker): void {\n if (this.liveSprite) {\n tween({\n target: this.liveSprite,\n props: { alpha: 0 },\n duration: 400,\n easing: Easing.easeInCubic,\n ticker,\n onComplete: () => {\n this.liveSprite?.destroy()\n this.liveSprite = null\n },\n })\n }\n\n // Show idle DOM video again\n if (this.idleVideoEl) this.idleVideoEl.style.display = ''\n if (this.idleGroup) this.idleGroup.visible = true\n }\n\n destroy(): void {\n this.cancelGlow?.()\n this.cancelEntrance?.()\n if (this.idleVideoEl) {\n this.idleVideoEl.pause()\n this.idleVideoEl.remove()\n }\n this.container.destroy({ children: true })\n }\n}\n","/**\n * RealtimeSession — WebRTC connection to Azure OpenAI Realtime API.\n *\n * Adapted from ai-canvas useWebRTC.ts + useToolDataChannel.ts.\n * Handles: mic capture, SDP exchange, data channel messaging,\n * and remote audio track reception.\n */\n\nconst ICE_SERVERS: RTCIceServer[] = [{ urls: 'stun:stun.l.google.com:19302' }]\nconst ICE_GATHER_TIMEOUT_MS = 3000\nconst DATA_CHANNEL_NAME = 'oai-events'\n\nexport interface RealtimeTool {\n type: 'function'\n name: string\n description: string\n parameters: object\n}\n\nexport interface RealtimeSessionOptions {\n ephemeralKey: string\n webrtcUrl: string\n model?: string\n voice?: string\n instructions?: string\n tools?: RealtimeTool[]\n}\n\nexport class RealtimeSession {\n // --- Callbacks ---\n onConnected: (() => void) | null = null\n onDisconnected: (() => void) | null = null\n onRemoteTrack: ((stream: MediaStream) => void) | null = null\n onDataMessage: ((msg: any) => void) | null = null\n onError: ((err: Error) => void) | null = null\n\n // --- Internal state ---\n private pc: RTCPeerConnection | null = null\n private dc: RTCDataChannel | null = null\n private micStream: MediaStream | null = null\n private _remoteAudioStream: MediaStream | null = null\n private _connected = false\n private opts: Required<RealtimeSessionOptions>\n\n constructor(opts: RealtimeSessionOptions) {\n this.opts = {\n model: 'gpt-4o-realtime-preview',\n voice: 'verse',\n instructions: '',\n tools: [],\n ...opts,\n }\n }\n\n get isConnected(): boolean {\n return this._connected\n }\n\n get dataChannel(): RTCDataChannel | null {\n return this.dc\n }\n\n get remoteAudioStream(): MediaStream | null {\n return this._remoteAudioStream\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n /** Full connection flow: mic → PC → data channel → SDP exchange → connected. */\n async connect(): Promise<void> {\n try {\n // 1. Request microphone\n console.log('[RealtimeSession] Requesting microphone...')\n this.micStream = await navigator.mediaDevices.getUserMedia({ audio: true })\n console.log('[RealtimeSession] Microphone granted')\n\n // 2. Create peer connection\n this.pc = new RTCPeerConnection({ iceServers: ICE_SERVERS })\n this.setupPeerConnectionHandlers()\n\n // 3. Add mic track\n for (const track of this.micStream.getAudioTracks()) {\n this.pc.addTrack(track, this.micStream)\n }\n\n // 4. Create data channel BEFORE SDP offer (required by WebRTC spec)\n this.dc = this.pc.createDataChannel(DATA_CHANNEL_NAME)\n this.setupDataChannelHandlers()\n\n // 5. Create SDP offer and wait for ICE gathering\n const offer = await this.pc.createOffer()\n await this.pc.setLocalDescription(offer)\n await this.waitForIceGathering()\n\n const localSdp = this.pc.localDescription?.sdp\n if (!localSdp) {\n throw new Error('No local SDP after ICE gathering')\n }\n\n // 6. Exchange SDP with Azure Realtime endpoint\n console.log('[RealtimeSession] Exchanging SDP...')\n const answerSdp = await this.exchangeSDP(localSdp)\n\n // 7. Set remote description\n await this.pc.setRemoteDescription({ type: 'answer', sdp: answerSdp })\n console.log('[RealtimeSession] Remote description set')\n\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n console.error('[RealtimeSession] Connection failed:', error.message)\n this.onError?.(error)\n this.close()\n throw error\n }\n }\n\n /** Send a JSON message over the data channel. */\n sendJSON(msg: object): void {\n if (!this.dc || this.dc.readyState !== 'open') {\n console.warn('[RealtimeSession] Data channel not open, cannot send:', msg)\n return\n }\n this.dc.send(JSON.stringify(msg))\n }\n\n /** Close the connection and release all resources. */\n close(): void {\n console.log('[RealtimeSession] Closing...')\n\n if (this.dc) {\n try { this.dc.close() } catch {}\n this.dc = null\n }\n\n if (this.pc) {\n try { this.pc.close() } catch {}\n this.pc = null\n }\n\n if (this.micStream) {\n for (const track of this.micStream.getTracks()) {\n track.stop()\n }\n this.micStream = null\n }\n\n this._remoteAudioStream = null\n\n if (this._connected) {\n this._connected = false\n this.onDisconnected?.()\n }\n }\n\n // -----------------------------------------------------------------------\n // Private — Peer connection\n // -----------------------------------------------------------------------\n\n private setupPeerConnectionHandlers(): void {\n if (!this.pc) return\n\n // Remote audio track\n this.pc.ontrack = (e) => {\n console.log('[RealtimeSession] Remote audio track received')\n this._remoteAudioStream = e.streams[0] ?? new MediaStream([e.track])\n this.onRemoteTrack?.(this._remoteAudioStream)\n }\n\n // Connection state\n this.pc.onconnectionstatechange = () => {\n const state = this.pc?.connectionState\n console.log('[RealtimeSession] Connection state:', state)\n\n if (state === 'connected') {\n this._connected = true\n this.onConnected?.()\n } else if (state === 'failed' || state === 'closed' || state === 'disconnected') {\n if (this._connected) {\n this._connected = false\n this.onDisconnected?.()\n }\n if (state === 'failed') {\n this.onError?.(new Error('WebRTC connection failed'))\n }\n }\n }\n }\n\n private waitForIceGathering(): Promise<void> {\n if (!this.pc || this.pc.iceGatheringState === 'complete') {\n return Promise.resolve()\n }\n\n return new Promise<void>((resolve) => {\n const pc = this.pc!\n let timer: ReturnType<typeof setTimeout>\n\n const done = () => {\n clearTimeout(timer)\n try { pc.removeEventListener('icegatheringstatechange', onState) } catch {}\n resolve()\n }\n\n const onState = () => {\n if (pc.iceGatheringState === 'complete') done()\n }\n\n pc.addEventListener('icegatheringstatechange', onState)\n timer = setTimeout(done, ICE_GATHER_TIMEOUT_MS)\n })\n }\n\n private async exchangeSDP(localSdp: string): Promise<string> {\n const { webrtcUrl, ephemeralKey, model, voice } = this.opts\n\n const separator = webrtcUrl.includes('?') ? '&' : '?'\n const url = `${webrtcUrl}${separator}model=${encodeURIComponent(model)}&voice=${encodeURIComponent(voice)}`\n\n const res = await fetch(url, {\n method: 'POST',\n headers: {\n 'Authorization': `Bearer ${ephemeralKey}`,\n 'Content-Type': 'application/sdp',\n 'Accept': 'application/sdp',\n },\n body: localSdp,\n })\n\n if (!res.ok) {\n const text = await res.text().catch(() => '')\n throw new Error(`SDP exchange failed (${res.status}): ${text}`)\n }\n\n return res.text()\n }\n\n // -----------------------------------------------------------------------\n // Private — Data channel\n // -----------------------------------------------------------------------\n\n private setupDataChannelHandlers(): void {\n if (!this.dc) return\n\n this.dc.onopen = () => {\n console.log('[RealtimeSession] Data channel open')\n this.sendSessionUpdate()\n // Trigger the AI's opening greeting\n this.sendJSON({ type: 'response.create' })\n }\n\n this.dc.onmessage = (e) => {\n try {\n const msg = JSON.parse(e.data)\n this.onDataMessage?.(msg)\n } catch (err) {\n console.warn('[RealtimeSession] Failed to parse data channel message:', err)\n }\n }\n\n this.dc.onclose = () => {\n console.log('[RealtimeSession] Data channel closed')\n }\n\n this.dc.onerror = (e) => {\n console.error('[RealtimeSession] Data channel error:', e)\n }\n }\n\n private sendSessionUpdate(): void {\n const session: Record<string, any> = {\n instructions: this.opts.instructions,\n modalities: ['audio', 'text'],\n input_audio_transcription: { model: 'whisper-1' },\n turn_detection: {\n type: 'server_vad',\n threshold: 0.5,\n prefix_padding_ms: 300,\n silence_duration_ms: 700,\n create_response: true,\n },\n }\n\n if (this.opts.tools && this.opts.tools.length > 0) {\n session.tools = this.opts.tools\n }\n\n this.sendJSON({ type: 'session.update', session })\n }\n}\n","/**\n * AudioForwarder — Captures the Realtime API's remote audio track,\n * buffers PCM samples via an AudioWorklet, and emits Uint8Array chunks\n * (~1s each) of Int16 PCM ready for Anam.ai createAgentAudioInputStream.\n *\n * Anam expects: pcm_s16le, 24kHz, mono.\n * The Realtime API outputs 24kHz PCM — exact match, no conversion needed.\n */\n\nconst TARGET_SAMPLE_RATE = 24000\nconst SAMPLES_PER_CHUNK = 4800 // ~200ms at 24kHz — smaller chunks for lower latency to Anam lip-sync\n\n// ---------------------------------------------------------------------------\n// Inline AudioWorklet processor (runs in a separate thread)\n// ---------------------------------------------------------------------------\nconst WORKLET_CODE = /* js */ `\nclass PcmBufferProcessor extends AudioWorkletProcessor {\n constructor() {\n super()\n this._buffer = new Float32Array(0)\n this._paused = false\n this._chunkSize = ${SAMPLES_PER_CHUNK}\n\n this.port.onmessage = (e) => {\n if (e.data.type === 'pause') this._paused = true\n if (e.data.type === 'resume') this._paused = false\n }\n }\n\n process(inputs) {\n const input = inputs[0]\n if (!input || !input[0] || this._paused) return true\n\n const samples = input[0] // Float32 mono channel\n\n // Append to buffer\n const newBuf = new Float32Array(this._buffer.length + samples.length)\n newBuf.set(this._buffer)\n newBuf.set(samples, this._buffer.length)\n this._buffer = newBuf\n\n // Emit chunks when we have enough samples\n while (this._buffer.length >= this._chunkSize) {\n const chunk = this._buffer.slice(0, this._chunkSize)\n this._buffer = this._buffer.slice(this._chunkSize)\n this.port.postMessage({ type: 'chunk', samples: chunk })\n }\n\n return true\n }\n}\n\nregisterProcessor('pcm-buffer-processor', PcmBufferProcessor)\n`\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Convert Float32 samples (-1..1) to Int16 PCM bytes. */\nfunction float32ToInt16(float32: Float32Array): Int16Array {\n const int16 = new Int16Array(float32.length)\n for (let i = 0; i < float32.length; i++) {\n const s = Math.max(-1, Math.min(1, float32[i]))\n int16[i] = s < 0 ? s * 0x8000 : s * 0x7fff\n }\n return int16\n}\n\n// ---------------------------------------------------------------------------\n// AudioForwarder class\n// ---------------------------------------------------------------------------\n\nexport class AudioForwarder {\n /** Fired with a Uint8Array of Int16 PCM samples (~1s of audio, 24kHz mono). */\n onAudioChunk: ((pcmData: Uint8Array) => void) | null = null\n\n private audioCtx: AudioContext | null = null\n private sourceNode: MediaStreamAudioSourceNode | null = null\n private workletNode: AudioWorkletNode | null = null\n private _started = false\n private _paused = false\n\n get isStarted(): boolean {\n return this._started\n }\n\n get isPaused(): boolean {\n return this._paused\n }\n\n /**\n * Start capturing audio from the given remote MediaStream.\n * The stream typically comes from RealtimeSession.onRemoteTrack.\n */\n async start(remoteStream: MediaStream): Promise<void> {\n if (this._started) return\n\n // Create AudioContext at 24kHz — matches Realtime API output\n this.audioCtx = new AudioContext({ sampleRate: TARGET_SAMPLE_RATE })\n\n // Register the inline worklet processor via Blob URL\n const blob = new Blob([WORKLET_CODE], { type: 'application/javascript' })\n const workletUrl = URL.createObjectURL(blob)\n await this.audioCtx.audioWorklet.addModule(workletUrl)\n URL.revokeObjectURL(workletUrl)\n\n // Create source from remote stream\n this.sourceNode = this.audioCtx.createMediaStreamSource(remoteStream)\n\n // Create worklet node\n this.workletNode = new AudioWorkletNode(this.audioCtx, 'pcm-buffer-processor')\n\n // Handle chunks from the worklet\n this.workletNode.port.onmessage = (e) => {\n if (e.data.type === 'chunk') {\n const float32: Float32Array = e.data.samples\n const int16 = float32ToInt16(float32)\n this.onAudioChunk?.(new Uint8Array(int16.buffer as ArrayBuffer))\n }\n }\n\n // Connect: source → worklet → destination (destination is needed to keep the graph alive)\n this.sourceNode.connect(this.workletNode)\n // Connect worklet to a silent destination to keep the audio graph processing.\n // We DON'T connect to audioCtx.destination to avoid local playback.\n // Instead, use a GainNode set to 0 as a silent sink.\n const silentSink = this.audioCtx.createGain()\n silentSink.gain.value = 0\n silentSink.connect(this.audioCtx.destination)\n this.workletNode.connect(silentSink)\n\n this._started = true\n this._paused = false\n console.log('[AudioForwarder] Started capturing remote audio at 24kHz')\n }\n\n /** Pause chunk emission (audio is still captured but discarded). */\n pause(): void {\n if (!this._started || this._paused) return\n this._paused = true\n this.workletNode?.port.postMessage({ type: 'pause' })\n console.log('[AudioForwarder] Paused')\n }\n\n /** Resume chunk emission. */\n resume(): void {\n if (!this._started || !this._paused) return\n this._paused = false\n this.workletNode?.port.postMessage({ type: 'resume' })\n console.log('[AudioForwarder] Resumed')\n }\n\n /** Stop capturing and release all resources. */\n stop(): void {\n if (!this._started) return\n\n try { this.workletNode?.disconnect() } catch {}\n try { this.sourceNode?.disconnect() } catch {}\n try { this.audioCtx?.close() } catch {}\n\n this.workletNode = null\n this.sourceNode = null\n this.audioCtx = null\n this._started = false\n this._paused = false\n console.log('[AudioForwarder] Stopped')\n }\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// Core API\nexport const DEFAULT_HEADERS = {\n 'Content-Type': 'application/json',\n};\nexport const DEFAULT_API_BASE_URL = 'https://api.anam.ai';\nexport const DEFAULT_API_VERSION = '/v1'; // include the leading slash\nexport const CLIENT_METADATA = {\n client: 'js-sdk',\n version: '4.12.0',\n};\n//# sourceMappingURL=constants.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { CLIENT_METADATA } from './constants';\nexport const DEFAULT_ANAM_METRICS_BASE_URL = 'https://api.anam.ai';\nexport const DEFAULT_ANAM_API_VERSION = '/v1';\nexport var ClientMetricMeasurement;\n(function (ClientMetricMeasurement) {\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_ERROR\"] = \"client_error\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_CONNECTION_CLOSED\"] = \"client_connection_closed\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_CONNECTION_ESTABLISHED\"] = \"client_connection_established\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT\"] = \"client_session_attempt\";\n ClientMetricMeasurement[\"CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS\"] = \"client_session_success\";\n})(ClientMetricMeasurement || (ClientMetricMeasurement = {}));\nlet anamCurrentBaseUrl = DEFAULT_ANAM_METRICS_BASE_URL;\nlet anamCurrentApiVersion = DEFAULT_ANAM_API_VERSION;\nlet apiGatewayConfig;\nlet metricsDisabled = false;\nexport const setClientMetricsBaseUrl = (baseUrl, apiVersion = DEFAULT_ANAM_API_VERSION) => {\n anamCurrentBaseUrl = baseUrl;\n anamCurrentApiVersion = apiVersion;\n};\nexport const setClientMetricsApiGateway = (config) => {\n apiGatewayConfig = config;\n};\nexport const setClientMetricsDisabled = (disabled) => {\n metricsDisabled = disabled;\n};\nlet anamMetricsContext = {\n sessionId: null,\n organizationId: null,\n attemptCorrelationId: null,\n};\nexport const setMetricsContext = (context) => {\n anamMetricsContext = Object.assign(Object.assign({}, anamMetricsContext), context);\n};\nexport const sendClientMetric = (name, value, tags) => __awaiter(void 0, void 0, void 0, function* () {\n // Skip sending metrics if disabled\n if (metricsDisabled) {\n return;\n }\n try {\n const metricTags = Object.assign(Object.assign({}, CLIENT_METADATA), tags);\n // Add session and organization IDs if available\n if (anamMetricsContext.sessionId) {\n metricTags.sessionId = anamMetricsContext.sessionId;\n }\n if (anamMetricsContext.organizationId) {\n metricTags.organizationId = anamMetricsContext.organizationId;\n }\n if (anamMetricsContext.attemptCorrelationId) {\n metricTags.attemptCorrelationId = anamMetricsContext.attemptCorrelationId;\n }\n // Determine URL and headers based on API Gateway configuration\n const targetPath = `${anamCurrentApiVersion}/metrics/client`;\n let url;\n let headers = {\n 'Content-Type': 'application/json',\n };\n if ((apiGatewayConfig === null || apiGatewayConfig === void 0 ? void 0 : apiGatewayConfig.enabled) && (apiGatewayConfig === null || apiGatewayConfig === void 0 ? void 0 : apiGatewayConfig.baseUrl)) {\n // Route through gateway\n url = `${apiGatewayConfig.baseUrl}${targetPath}`;\n headers['X-Anam-Target-Url'] = `${anamCurrentBaseUrl}${targetPath}`;\n }\n else {\n // Direct call to Anam API\n url = `${anamCurrentBaseUrl}${targetPath}`;\n }\n yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n name,\n value,\n tags: metricTags,\n }),\n });\n }\n catch (error) {\n console.error('Failed to send error metric:', error);\n }\n});\nexport const createRTCStatsReport = (stats, outputFormat = 'console') => {\n /**\n * constructs a report of the RTC stats for logging to the console or returns as JSON\n */\n var _a, _b, _c;\n // Collect stats by type for organized reporting\n const statsByType = {};\n stats.forEach((report) => {\n if (!statsByType[report.type]) {\n statsByType[report.type] = [];\n }\n statsByType[report.type].push(report);\n });\n // Initialize JSON report structure\n const jsonReport = {\n issues: [],\n };\n // Build video statistics (Persona video output)\n const inboundVideo = ((_a = statsByType['inbound-rtp']) === null || _a === void 0 ? void 0 : _a.filter((r) => r.kind === 'video')) || [];\n if (inboundVideo.length > 0) {\n jsonReport.personaVideoStream = [];\n inboundVideo.forEach((report) => {\n var _a, _b, _c, _d, _e;\n const videoData = {\n framesReceived: (_a = report.framesReceived) !== null && _a !== void 0 ? _a : 'unknown',\n framesDropped: (_b = report.framesDropped) !== null && _b !== void 0 ? _b : 'unknown',\n framesPerSecond: (_c = report.framesPerSecond) !== null && _c !== void 0 ? _c : 'unknown',\n packetsReceived: (_d = report.packetsReceived) !== null && _d !== void 0 ? _d : 'unknown',\n packetsLost: (_e = report.packetsLost) !== null && _e !== void 0 ? _e : 'unknown',\n resolution: report.frameWidth && report.frameHeight\n ? `${report.frameWidth}x${report.frameHeight}`\n : undefined,\n jitter: report.jitter !== undefined ? report.jitter : undefined,\n };\n jsonReport.personaVideoStream.push(videoData);\n });\n }\n // Build audio statistics (Persona audio output)\n const inboundAudio = ((_b = statsByType['inbound-rtp']) === null || _b === void 0 ? void 0 : _b.filter((r) => r.kind === 'audio')) || [];\n if (inboundAudio.length > 0) {\n jsonReport.personaAudioStream = [];\n inboundAudio.forEach((report) => {\n var _a, _b, _c;\n const audioData = {\n packetsReceived: (_a = report.packetsReceived) !== null && _a !== void 0 ? _a : 'unknown',\n packetsLost: (_b = report.packetsLost) !== null && _b !== void 0 ? _b : 'unknown',\n audioLevel: (_c = report.audioLevel) !== null && _c !== void 0 ? _c : 'unknown',\n jitter: report.jitter !== undefined ? report.jitter : undefined,\n totalAudioEnergy: report.totalAudioEnergy !== undefined\n ? report.totalAudioEnergy\n : undefined,\n };\n jsonReport.personaAudioStream.push(audioData);\n });\n }\n // Build user audio input statistics\n const outboundAudio = ((_c = statsByType['outbound-rtp']) === null || _c === void 0 ? void 0 : _c.filter((r) => r.kind === 'audio')) || [];\n if (outboundAudio.length > 0) {\n jsonReport.userAudioInput = [];\n outboundAudio.forEach((report) => {\n var _a, _b;\n const userAudioData = {\n packetsSent: (_a = report.packetsSent) !== null && _a !== void 0 ? _a : 'unknown',\n retransmittedPackets: (_b = report.retransmittedPacketsSent) !== null && _b !== void 0 ? _b : undefined,\n avgPacketSendDelay: report.totalPacketSendDelay !== undefined\n ? (report.totalPacketSendDelay / (report.packetsSent || 1)) * 1000\n : undefined,\n };\n jsonReport.userAudioInput.push(userAudioData);\n });\n }\n // Build codec information\n if (statsByType['codec']) {\n jsonReport.codecs = [];\n statsByType['codec'].forEach((report) => {\n const codecData = {\n status: report.payloadType ? 'Active' : 'Available',\n mimeType: report.mimeType || 'Unknown',\n payloadType: report.payloadType || 'N/A',\n clockRate: report.clockRate || undefined,\n channels: report.channels || undefined,\n };\n jsonReport.codecs.push(codecData);\n });\n }\n // Build transport layer information\n if (statsByType['transport']) {\n jsonReport.transportLayer = [];\n statsByType['transport'].forEach((report) => {\n const transportData = {\n dtlsState: report.dtlsState || 'unknown',\n iceState: report.iceState || 'unknown',\n bytesSent: report.bytesSent || undefined,\n bytesReceived: report.bytesReceived || undefined,\n };\n jsonReport.transportLayer.push(transportData);\n });\n }\n // Build issues summary\n const issues = [];\n // Check for video issues\n inboundVideo.forEach((report) => {\n if (typeof report.framesDropped === 'number' && report.framesDropped > 0) {\n issues.push(`Video: ${report.framesDropped} frames dropped`);\n }\n if (typeof report.packetsLost === 'number' && report.packetsLost > 0) {\n issues.push(`Video: ${report.packetsLost} packets lost`);\n }\n if (typeof report.framesPerSecond === 'number' &&\n report.framesPerSecond < 23) {\n issues.push(`Video: Low frame rate (${report.framesPerSecond} fps)`);\n }\n });\n // Check for audio issues\n inboundAudio.forEach((report) => {\n if (typeof report.packetsLost === 'number' && report.packetsLost > 0) {\n issues.push(`Audio: ${report.packetsLost} packets lost`);\n }\n if (typeof report.jitter === 'number' && report.jitter > 0.1) {\n issues.push(`Audio: High jitter (${(report.jitter * 1000).toFixed(1)}ms)`);\n }\n });\n jsonReport.issues = issues;\n // Return JSON if requested\n if (outputFormat === 'json') {\n return jsonReport;\n }\n // Generate console output from JSON report\n console.group('📊 WebRTC Session Statistics Report');\n // Console output for video stream\n if (jsonReport.personaVideoStream &&\n jsonReport.personaVideoStream.length > 0) {\n console.group('📹 Persona Video Stream (Inbound)');\n jsonReport.personaVideoStream.forEach((videoData) => {\n console.log(`Frames Received: ${videoData.framesReceived}`);\n console.log(`Frames Dropped: ${videoData.framesDropped}`);\n console.log(`Frames Per Second: ${videoData.framesPerSecond}`);\n console.log(`Packets Received: ${typeof videoData.packetsReceived === 'number' ? videoData.packetsReceived.toLocaleString() : videoData.packetsReceived}`);\n console.log(`Packets Lost: ${videoData.packetsLost}`);\n if (videoData.resolution) {\n console.log(`Resolution: ${videoData.resolution}`);\n }\n if (videoData.jitter !== undefined) {\n console.log(`Jitter: ${videoData.jitter.toFixed(5)}ms`);\n }\n });\n console.groupEnd();\n }\n // Console output for audio stream\n if (jsonReport.personaAudioStream &&\n jsonReport.personaAudioStream.length > 0) {\n console.group('🔊 Persona Audio Stream (Inbound)');\n jsonReport.personaAudioStream.forEach((audioData) => {\n console.log(`Packets Received: ${typeof audioData.packetsReceived === 'number' ? audioData.packetsReceived.toLocaleString() : audioData.packetsReceived}`);\n console.log(`Packets Lost: ${audioData.packetsLost}`);\n console.log(`Audio Level: ${audioData.audioLevel}`);\n if (audioData.jitter !== undefined) {\n console.log(`Jitter: ${audioData.jitter.toFixed(5)}ms`);\n }\n if (audioData.totalAudioEnergy !== undefined) {\n console.log(`Total Audio Energy: ${audioData.totalAudioEnergy.toFixed(6)}`);\n }\n });\n console.groupEnd();\n }\n // Console output for user audio input\n if (jsonReport.userAudioInput && jsonReport.userAudioInput.length > 0) {\n console.group('🎤 User Audio Input (Outbound)');\n jsonReport.userAudioInput.forEach((userAudioData) => {\n console.log(`Packets Sent: ${typeof userAudioData.packetsSent === 'number' ? userAudioData.packetsSent.toLocaleString() : userAudioData.packetsSent}`);\n if (userAudioData.retransmittedPackets) {\n console.log(`Retransmitted Packets: ${userAudioData.retransmittedPackets}`);\n }\n if (userAudioData.avgPacketSendDelay !== undefined) {\n console.log(`Avg Packet Send Delay: ${userAudioData.avgPacketSendDelay.toFixed(5)}ms`);\n }\n });\n console.groupEnd();\n }\n // Console output for codecs\n if (jsonReport.codecs && jsonReport.codecs.length > 0) {\n console.group('🔧 Codecs Used');\n jsonReport.codecs.forEach((codecData) => {\n console.log(`${codecData.status} ${codecData.mimeType} - Payload Type: ${codecData.payloadType}`);\n if (codecData.clockRate) {\n console.log(` Clock Rate: ${codecData.clockRate}Hz`);\n }\n if (codecData.channels) {\n console.log(` Channels: ${codecData.channels}`);\n }\n });\n console.groupEnd();\n }\n // Console output for transport layer\n if (jsonReport.transportLayer && jsonReport.transportLayer.length > 0) {\n console.group('🚚 Transport Layer');\n jsonReport.transportLayer.forEach((transportData) => {\n console.log(`DTLS State: ${transportData.dtlsState}`);\n console.log(`ICE State: ${transportData.iceState}`);\n if (transportData.bytesReceived || transportData.bytesSent) {\n console.log(`Data Transfer (bytes) - Sent: ${(transportData.bytesSent || 0).toLocaleString()}, Received: ${(transportData.bytesReceived || 0).toLocaleString()}`);\n }\n });\n console.groupEnd();\n }\n // Console output for issues\n if (jsonReport.issues.length > 0) {\n console.group('⚠️ Potential Issues Detected');\n jsonReport.issues.forEach((issue) => console.warn(issue));\n console.groupEnd();\n }\n else {\n console.log('✅ No significant issues detected');\n }\n console.groupEnd();\n};\n//# sourceMappingURL=ClientMetrics.js.map","import { ClientMetricMeasurement, sendClientMetric } from './ClientMetrics';\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED\"] = \"CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_SPEND_CAP_REACHED\"] = \"CLIENT_ERROR_CODE_SPEND_CAP_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_VALIDATION_ERROR\"] = \"CLIENT_ERROR_CODE_VALIDATION_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_AUTHENTICATION_ERROR\"] = \"CLIENT_ERROR_CODE_AUTHENTICATION_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_SERVER_ERROR\"] = \"CLIENT_ERROR_CODE_SERVER_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED\"] = \"CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED\";\n ErrorCode[\"CLIENT_ERROR_CODE_SERVICE_BUSY\"] = \"CLIENT_ERROR_CODE_SERVICE_BUSY\";\n ErrorCode[\"CLIENT_ERROR_CODE_NO_PLAN_FOUND\"] = \"CLIENT_ERROR_CODE_NO_PLAN_FOUND\";\n ErrorCode[\"CLIENT_ERROR_CODE_UNKNOWN_ERROR\"] = \"CLIENT_ERROR_CODE_UNKNOWN_ERROR\";\n ErrorCode[\"CLIENT_ERROR_CODE_CONFIGURATION_ERROR\"] = \"CLIENT_ERROR_CODE_CONFIGURATION_ERROR\";\n})(ErrorCode || (ErrorCode = {}));\nexport class ClientError extends Error {\n constructor(message, code, statusCode = 500, details) {\n super(message);\n this.name = 'ClientError';\n this.code = code;\n this.statusCode = statusCode;\n this.details = details;\n Object.setPrototypeOf(this, ClientError.prototype);\n // Send error metric when error is created\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_ERROR, code, {\n details,\n statusCode,\n });\n }\n}\n//# sourceMappingURL=ClientError.js.map","export function generateCorrelationId() {\n // Try native crypto.randomUUID() first (supported in modern browsers)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n // Fallback for older environments and older react native\n return Date.now().toString(36) + Math.random().toString(36).substr(2, 9);\n}\n//# sourceMappingURL=correlationId.js.map","/**\n * Validates API Gateway configuration\n * @param apiGatewayConfig - The API Gateway configuration to validate\n * @returns Error message if invalid, undefined if valid\n */\nexport function validateApiGatewayConfig(apiGatewayConfig) {\n if (!apiGatewayConfig || !apiGatewayConfig.enabled) {\n return undefined;\n }\n if (!apiGatewayConfig.baseUrl) {\n return 'API Gateway baseUrl is required when enabled';\n }\n // Validate baseUrl format\n try {\n const url = new URL(apiGatewayConfig.baseUrl);\n if (!['http:', 'https:', 'ws:', 'wss:'].includes(url.protocol)) {\n return `Invalid API Gateway baseUrl protocol: ${url.protocol}. Must be http:, https:, ws:, or wss:`;\n }\n }\n catch (error) {\n return `Invalid API Gateway baseUrl: ${apiGatewayConfig.baseUrl}`;\n }\n // Validate wsPath if provided\n if (apiGatewayConfig.wsPath) {\n if (!apiGatewayConfig.wsPath.startsWith('/')) {\n return 'API Gateway wsPath must start with /';\n }\n }\n return undefined;\n}\n//# sourceMappingURL=validateApiGatewayConfig.js.map","export var SignalMessageAction;\n(function (SignalMessageAction) {\n SignalMessageAction[\"OFFER\"] = \"offer\";\n SignalMessageAction[\"ANSWER\"] = \"answer\";\n SignalMessageAction[\"ICE_CANDIDATE\"] = \"icecandidate\";\n SignalMessageAction[\"END_SESSION\"] = \"endsession\";\n SignalMessageAction[\"HEARTBEAT\"] = \"heartbeat\";\n SignalMessageAction[\"WARNING\"] = \"warning\";\n SignalMessageAction[\"TALK_STREAM_INTERRUPTED\"] = \"talkinputstreaminterrupted\";\n SignalMessageAction[\"TALK_STREAM_INPUT\"] = \"talkstream\";\n SignalMessageAction[\"SESSION_READY\"] = \"sessionready\";\n SignalMessageAction[\"AGENT_AUDIO_INPUT\"] = \"agentaudioinput\";\n SignalMessageAction[\"AGENT_AUDIO_INPUT_END\"] = \"agentaudioinputend\";\n})(SignalMessageAction || (SignalMessageAction = {}));\n//# sourceMappingURL=SignalMessage.js.map","export var DataChannelMessage;\n(function (DataChannelMessage) {\n DataChannelMessage[\"SPEECH_TEXT\"] = \"speechText\";\n DataChannelMessage[\"CLIENT_TOOL_EVENT\"] = \"clientToolEvent\";\n DataChannelMessage[\"TOOL_CALL_STARTED_EVENT\"] = \"toolCallStarted\";\n DataChannelMessage[\"TOOL_CALL_COMPLETED_EVENT\"] = \"toolCallCompleted\";\n DataChannelMessage[\"TOOL_CALL_FAILED_EVENT\"] = \"toolCallFailed\";\n DataChannelMessage[\"REASONING_TEXT\"] = \"reasoningText\";\n DataChannelMessage[\"USER_SPEECH_STARTED\"] = \"userSpeechStarted\";\n DataChannelMessage[\"USER_SPEECH_ENDED\"] = \"userSpeechEnded\";\n})(DataChannelMessage || (DataChannelMessage = {}));\n//# sourceMappingURL=DataChannelMessage.js.map","export var AudioPermissionState;\n(function (AudioPermissionState) {\n AudioPermissionState[\"PENDING\"] = \"pending\";\n AudioPermissionState[\"GRANTED\"] = \"granted\";\n AudioPermissionState[\"DENIED\"] = \"denied\";\n AudioPermissionState[\"NOT_REQUESTED\"] = \"not_requested\";\n})(AudioPermissionState || (AudioPermissionState = {}));\n//# sourceMappingURL=InputAudioState.js.map","export var MessageRole;\n(function (MessageRole) {\n MessageRole[\"USER\"] = \"user\";\n MessageRole[\"PERSONA\"] = \"persona\";\n})(MessageRole || (MessageRole = {}));\n//# sourceMappingURL=MessageRole.js.map","export var AnamEvent;\n(function (AnamEvent) {\n AnamEvent[\"MESSAGE_HISTORY_UPDATED\"] = \"MESSAGE_HISTORY_UPDATED\";\n AnamEvent[\"MESSAGE_STREAM_EVENT_RECEIVED\"] = \"MESSAGE_STREAM_EVENT_RECEIVED\";\n AnamEvent[\"CONNECTION_ESTABLISHED\"] = \"CONNECTION_ESTABLISHED\";\n AnamEvent[\"CONNECTION_CLOSED\"] = \"CONNECTION_CLOSED\";\n AnamEvent[\"INPUT_AUDIO_STREAM_STARTED\"] = \"INPUT_AUDIO_STREAM_STARTED\";\n AnamEvent[\"VIDEO_STREAM_STARTED\"] = \"VIDEO_STREAM_STARTED\";\n AnamEvent[\"VIDEO_PLAY_STARTED\"] = \"VIDEO_PLAY_STARTED\";\n AnamEvent[\"AUDIO_STREAM_STARTED\"] = \"AUDIO_STREAM_STARTED\";\n AnamEvent[\"TALK_STREAM_INTERRUPTED\"] = \"TALK_STREAM_INTERRUPTED\";\n AnamEvent[\"SESSION_READY\"] = \"SESSION_READY\";\n AnamEvent[\"SERVER_WARNING\"] = \"SERVER_WARNING\";\n AnamEvent[\"MIC_PERMISSION_PENDING\"] = \"MIC_PERMISSION_PENDING\";\n AnamEvent[\"MIC_PERMISSION_GRANTED\"] = \"MIC_PERMISSION_GRANTED\";\n AnamEvent[\"MIC_PERMISSION_DENIED\"] = \"MIC_PERMISSION_DENIED\";\n AnamEvent[\"INPUT_AUDIO_DEVICE_CHANGED\"] = \"INPUT_AUDIO_DEVICE_CHANGED\";\n AnamEvent[\"CLIENT_TOOL_EVENT_RECEIVED\"] = \"CLIENT_TOOL_EVENT_RECEIVED\";\n AnamEvent[\"TOOL_CALL_STARTED\"] = \"TOOL_CALL_STARTED\";\n AnamEvent[\"TOOL_CALL_COMPLETED\"] = \"TOOL_CALL_COMPLETED\";\n AnamEvent[\"TOOL_CALL_FAILED\"] = \"TOOL_CALL_FAILED\";\n AnamEvent[\"REASONING_HISTORY_UPDATED\"] = \"REASONING_HISTORY_UPDATED\";\n AnamEvent[\"REASONING_STREAM_EVENT_RECEIVED\"] = \"REASONING_STREAM_EVENT_RECEIVED\";\n AnamEvent[\"USER_SPEECH_STARTED\"] = \"USER_SPEECH_STARTED\";\n AnamEvent[\"USER_SPEECH_ENDED\"] = \"USER_SPEECH_ENDED\";\n})(AnamEvent || (AnamEvent = {}));\n//# sourceMappingURL=AnamEvent.js.map","export var InternalEvent;\n(function (InternalEvent) {\n InternalEvent[\"WEB_SOCKET_OPEN\"] = \"WEB_SOCKET_OPEN\";\n InternalEvent[\"SIGNAL_MESSAGE_RECEIVED\"] = \"SIGNAL_MESSAGE_RECEIVED\";\n InternalEvent[\"WEBRTC_CHAT_MESSAGE_RECEIVED\"] = \"WEBRTC_CHAT_MESSAGE_RECEIVED\";\n InternalEvent[\"WEBRTC_CLIENT_TOOL_EVENT_RECEIVED\"] = \"WEBRTC_CLIENT_TOOL_EVENT_RECEIVED\";\n InternalEvent[\"WEBRTC_TOOL_CALL_STARTED_EVENT_RECEIVED\"] = \"WEBRTC_TOOL_CALL_STARTED_EVENT_RECEIVED\";\n InternalEvent[\"WEBRTC_TOOL_CALL_COMPLETED_EVENT_RECEIVED\"] = \"WEBRTC_TOOL_CALL_COMPLETED_EVENT_RECEIVED\";\n InternalEvent[\"WEBRTC_TOOL_CALL_FAILED_EVENT_RECEIVED\"] = \"WEBRTC_TOOL_CALL_FAILED_EVENT_RECEIVED\";\n InternalEvent[\"WEBRTC_REASONING_TEXT_MESSAGE_RECEIVED\"] = \"WEBRTC_REASONING_TEXT_MESSAGE_RECEIVED\";\n})(InternalEvent || (InternalEvent = {}));\n//# sourceMappingURL=InternalEvent.js.map","export var ConnectionClosedCode;\n(function (ConnectionClosedCode) {\n ConnectionClosedCode[\"NORMAL\"] = \"CONNECTION_CLOSED_CODE_NORMAL\";\n ConnectionClosedCode[\"MICROPHONE_PERMISSION_DENIED\"] = \"CONNECTION_CLOSED_CODE_MICROPHONE_PERMISSION_DENIED\";\n ConnectionClosedCode[\"SIGNALLING_CLIENT_CONNECTION_FAILURE\"] = \"CONNECTION_CLOSED_CODE_SIGNALLING_CLIENT_CONNECTION_FAILURE\";\n ConnectionClosedCode[\"WEBRTC_FAILURE\"] = \"CONNECTION_CLOSED_CODE_WEBRTC_FAILURE\";\n ConnectionClosedCode[\"SERVER_CLOSED_CONNECTION\"] = \"CONNECTION_CLOSED_CODE_SERVER_CLOSED_CONNECTION\";\n})(ConnectionClosedCode || (ConnectionClosedCode = {}));\n//# sourceMappingURL=ConnectionClosedCodes.js.map","export class AgentAudioInputStream {\n constructor(config, signallingClient) {\n this.sequenceNumber = 0;\n this.config = config;\n this.signallingClient = signallingClient;\n }\n /**\n * Send PCM audio chunk to server.\n * @param audioData - Raw PCM audio bytes (ArrayBuffer/Uint8Array) or base64-encoded string\n */\n sendAudioChunk(audioData) {\n const base64 = typeof audioData === 'string'\n ? audioData\n : this.arrayBufferToBase64(audioData);\n const payload = {\n audioData: base64,\n encoding: this.config.encoding,\n sampleRate: this.config.sampleRate,\n channels: this.config.channels,\n sequenceNumber: this.sequenceNumber++,\n };\n this.signallingClient.sendAgentAudioInput(payload);\n }\n /**\n * Signal end of the current audio sequence/turn.\n * Sends AGENT_AUDIO_INPUT_END signal message and resets sequence number.\n */\n endSequence() {\n this.signallingClient.sendAgentAudioInputEnd();\n this.sequenceNumber = 0;\n }\n /**\n * Get the current sequence number (number of chunks sent in current sequence).\n */\n getSequenceNumber() {\n return this.sequenceNumber;\n }\n /**\n * Get the audio format configuration for this stream.\n */\n getConfig() {\n return this.config;\n }\n arrayBufferToBase64(buffer) {\n const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);\n const binary = Array.from(bytes, (byte) => String.fromCharCode(byte)).join('');\n return btoa(binary);\n }\n}\n//# sourceMappingURL=AgentAudioInputStream.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { AnamEvent, InternalEvent, SignalMessageAction, ConnectionClosedCode, } from '../types';\nconst DEFAULT_HEARTBEAT_INTERVAL_SECONDS = 5;\nconst DEFAULT_WS_RECONNECTION_ATTEMPTS = 5;\nexport class SignallingClient {\n constructor(sessionId, options, publicEventEmitter, internalEventEmitter, apiGatewayConfig) {\n var _a, _b, _c, _d, _e;\n this.stopSignal = false;\n this.sendingBuffer = [];\n this.wsConnectionAttempts = 0;\n this.socket = null;\n this.heartBeatIntervalRef = null;\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n this.apiGatewayConfig = apiGatewayConfig;\n if (!sessionId) {\n throw new Error('Signalling Client: sessionId is required');\n }\n this.sessionId = sessionId;\n const { heartbeatIntervalSeconds, maxWsReconnectionAttempts, url } = options;\n this.heartbeatIntervalSeconds =\n heartbeatIntervalSeconds || DEFAULT_HEARTBEAT_INTERVAL_SECONDS;\n this.maxWsReconnectionAttempts =\n maxWsReconnectionAttempts || DEFAULT_WS_RECONNECTION_ATTEMPTS;\n if (!url.baseUrl) {\n throw new Error('Signalling Client: baseUrl is required');\n }\n // Construct WebSocket URL (with or without API Gateway)\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use API Gateway WebSocket URL\n const gatewayUrl = new URL(this.apiGatewayConfig.baseUrl);\n const wsPath = (_c = this.apiGatewayConfig.wsPath) !== null && _c !== void 0 ? _c : '/ws';\n // Construct gateway WebSocket URL\n gatewayUrl.protocol = gatewayUrl.protocol.replace('http', 'ws');\n gatewayUrl.pathname = wsPath;\n this.url = gatewayUrl;\n // Construct the complete target WebSocket URL and pass it as a query parameter\n const httpProtocol = url.protocol || 'https';\n const targetProtocol = httpProtocol === 'http' ? 'ws' : 'wss';\n const httpUrl = `${httpProtocol}://${url.baseUrl}`;\n const targetWsPath = (_d = url.signallingPath) !== null && _d !== void 0 ? _d : '/ws';\n // Build complete target URL\n const targetUrl = new URL(httpUrl);\n targetUrl.protocol = targetProtocol === 'ws' ? 'ws:' : 'wss:';\n if (url.port) {\n targetUrl.port = url.port;\n }\n targetUrl.pathname = targetWsPath;\n targetUrl.searchParams.append('session_id', sessionId);\n // Pass complete target URL as query parameter\n this.url.searchParams.append('target_url', targetUrl.href);\n }\n else {\n // Direct connection to Anam (original behavior)\n const httpProtocol = url.protocol || 'https';\n const initUrl = `${httpProtocol}://${url.baseUrl}`;\n this.url = new URL(initUrl);\n this.url.protocol = url.protocol === 'http' ? 'ws:' : 'wss:';\n if (url.port) {\n this.url.port = url.port;\n }\n this.url.pathname = (_e = url.signallingPath) !== null && _e !== void 0 ? _e : '/ws';\n this.url.searchParams.append('session_id', sessionId);\n }\n }\n stop() {\n this.stopSignal = true;\n this.closeSocket();\n }\n connect() {\n this.socket = new WebSocket(this.url.href);\n this.socket.onopen = this.onOpen.bind(this);\n this.socket.onclose = this.onClose.bind(this);\n this.socket.onerror = this.onError.bind(this);\n return this.socket;\n }\n sendOffer(localDescription) {\n return __awaiter(this, void 0, void 0, function* () {\n const offerMessagePayload = {\n connectionDescription: localDescription,\n userUid: this.sessionId, // TODO: this should be renamed to session Id on the server\n };\n const offerMessage = {\n actionType: SignalMessageAction.OFFER,\n sessionId: this.sessionId,\n payload: offerMessagePayload,\n };\n this.sendSignalMessage(offerMessage);\n });\n }\n sendIceCandidate(candidate) {\n return __awaiter(this, void 0, void 0, function* () {\n const iceCandidateMessage = {\n actionType: SignalMessageAction.ICE_CANDIDATE,\n sessionId: this.sessionId,\n payload: candidate.toJSON(),\n };\n this.sendSignalMessage(iceCandidateMessage);\n });\n }\n sendSignalMessage(message) {\n var _a;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n try {\n this.socket.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('SignallingClient - sendSignalMessage: error sending message', error);\n }\n }\n else {\n this.sendingBuffer.push(message);\n }\n }\n sendTalkMessage(payload) {\n return __awaiter(this, void 0, void 0, function* () {\n const chatMessage = {\n actionType: SignalMessageAction.TALK_STREAM_INPUT,\n sessionId: this.sessionId,\n payload: payload,\n };\n this.sendSignalMessage(chatMessage);\n });\n }\n sendAgentAudioInput(payload) {\n const message = {\n actionType: SignalMessageAction.AGENT_AUDIO_INPUT,\n sessionId: this.sessionId,\n payload: payload,\n };\n this.sendSignalMessage(message);\n }\n sendAgentAudioInputEnd() {\n const message = {\n actionType: SignalMessageAction.AGENT_AUDIO_INPUT_END,\n sessionId: this.sessionId,\n payload: {},\n };\n this.sendSignalMessage(message);\n }\n closeSocket() {\n if (this.socket) {\n this.socket.close();\n this.socket = null;\n }\n if (this.heartBeatIntervalRef) {\n clearInterval(this.heartBeatIntervalRef);\n this.heartBeatIntervalRef = null;\n }\n }\n onOpen() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.socket) {\n throw new Error('SignallingClient - onOpen: socket is null');\n }\n try {\n this.wsConnectionAttempts = 0;\n this.flushSendingBuffer();\n this.socket.onmessage = this.onMessage.bind(this);\n this.startSendingHeartBeats();\n this.internalEventEmitter.emit(InternalEvent.WEB_SOCKET_OPEN);\n }\n catch (e) {\n console.error('SignallingClient - onOpen: error in onOpen', e);\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);\n }\n });\n }\n onClose() {\n return __awaiter(this, void 0, void 0, function* () {\n this.wsConnectionAttempts += 1;\n if (this.stopSignal) {\n return;\n }\n if (this.wsConnectionAttempts <= this.maxWsReconnectionAttempts) {\n this.socket = null;\n setTimeout(() => {\n this.connect();\n }, 100 * this.wsConnectionAttempts);\n }\n else {\n if (this.heartBeatIntervalRef) {\n clearInterval(this.heartBeatIntervalRef);\n this.heartBeatIntervalRef = null;\n }\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SIGNALLING_CLIENT_CONNECTION_FAILURE);\n }\n });\n }\n onError(event) {\n if (this.stopSignal) {\n return;\n }\n console.error('SignallingClient - onError: ', event);\n }\n flushSendingBuffer() {\n const newBuffer = [];\n if (this.sendingBuffer.length > 0) {\n this.sendingBuffer.forEach((message) => {\n var _a;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n this.socket.send(JSON.stringify(message));\n }\n else {\n newBuffer.push(message);\n }\n });\n }\n this.sendingBuffer = newBuffer;\n }\n onMessage(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const message = JSON.parse(event.data);\n this.internalEventEmitter.emit(InternalEvent.SIGNAL_MESSAGE_RECEIVED, message);\n });\n }\n startSendingHeartBeats() {\n if (!this.socket) {\n throw new Error('SignallingClient - startSendingHeartBeats: socket is null');\n }\n if (this.heartBeatIntervalRef) {\n console.warn('SignallingClient - startSendingHeartBeats: heartbeat interval already set');\n }\n // send a heartbeat message every heartbeatIntervalSeconds\n const heartbeatInterval = this.heartbeatIntervalSeconds * 1000;\n const heartbeatMessage = {\n actionType: SignalMessageAction.HEARTBEAT,\n sessionId: this.sessionId,\n payload: '',\n };\n const heartbeatMessageJson = JSON.stringify(heartbeatMessage);\n this.heartBeatIntervalRef = setInterval(() => {\n var _a;\n if (this.stopSignal) {\n return;\n }\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === WebSocket.OPEN) {\n this.socket.send(heartbeatMessageJson);\n }\n }, heartbeatInterval);\n }\n}\n//# sourceMappingURL=SignallingClient.js.map","export function isCustomPersonaConfig(personaConfig) {\n return 'brainType' in personaConfig || 'llmId' in personaConfig;\n}\n//# sourceMappingURL=PersonaConfig.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ClientError, ErrorCode } from '../lib/ClientError';\nimport { CLIENT_METADATA, DEFAULT_API_BASE_URL, DEFAULT_API_VERSION, } from '../lib/constants';\nimport { isCustomPersonaConfig } from '../types/PersonaConfig';\nexport class CoreApiRestClient {\n constructor(sessionToken, apiKey, options) {\n if (!sessionToken && !apiKey) {\n throw new Error('Either sessionToken or apiKey must be provided');\n }\n this.sessionToken = sessionToken || null;\n this.apiKey = apiKey || null;\n this.baseUrl = (options === null || options === void 0 ? void 0 : options.baseUrl) || DEFAULT_API_BASE_URL;\n this.apiVersion = (options === null || options === void 0 ? void 0 : options.apiVersion) || DEFAULT_API_VERSION;\n this.apiGatewayConfig = (options === null || options === void 0 ? void 0 : options.apiGateway) || undefined;\n }\n /**\n * Builds URL and headers for a request, applying API Gateway configuration if enabled\n */\n buildGatewayUrlAndHeaders(targetPath, baseHeaders) {\n var _a, _b;\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use gateway base URL with same endpoint path\n const url = `${this.apiGatewayConfig.baseUrl}${targetPath}`;\n // Add complete target URL header for gateway routing\n const targetUrl = new URL(`${this.baseUrl}${targetPath}`);\n const headers = Object.assign(Object.assign({}, baseHeaders), { 'X-Anam-Target-Url': targetUrl.href });\n return { url, headers };\n }\n else {\n // Direct call to Anam API\n return {\n url: `${this.baseUrl}${targetPath}`,\n headers: baseHeaders,\n };\n }\n }\n startSession(personaConfig, sessionOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sessionToken) {\n if (!personaConfig) {\n throw new ClientError('Persona configuration must be provided when using apiKey', ErrorCode.CLIENT_ERROR_CODE_VALIDATION_ERROR, 400);\n }\n this.sessionToken = yield this.unsafe_getSessionToken(personaConfig);\n }\n // Check if brainType is being used and log deprecation warning\n if (personaConfig && 'brainType' in personaConfig) {\n console.warn('Warning: brainType is deprecated and will be removed in a future version. Please use llmId instead.');\n }\n try {\n const targetPath = `${this.apiVersion}/engine/session`;\n const { url, headers } = this.buildGatewayUrlAndHeaders(targetPath, {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.sessionToken}`,\n });\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n personaConfig,\n sessionOptions,\n clientMetadata: CLIENT_METADATA,\n }),\n });\n const data = yield response.json();\n const errorCause = data.error;\n switch (response.status) {\n case 200:\n case 201:\n return data;\n case 400:\n throw new ClientError('Invalid request to start session', ErrorCode.CLIENT_ERROR_CODE_VALIDATION_ERROR, 400, { cause: data.message });\n case 401:\n throw new ClientError('Authentication failed when starting session', ErrorCode.CLIENT_ERROR_CODE_AUTHENTICATION_ERROR, 401, { cause: data.message });\n case 402:\n throw new ClientError('Please sign up for a plan to start a session', ErrorCode.CLIENT_ERROR_CODE_NO_PLAN_FOUND, 402, { cause: data.message });\n case 403:\n throw new ClientError('Authentication failed when starting session', ErrorCode.CLIENT_ERROR_CODE_AUTHENTICATION_ERROR, 403, { cause: data.message });\n case 429:\n if (errorCause === 'Concurrent session limit reached') {\n throw new ClientError('Concurrency limit reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_MAX_CONCURRENT_SESSIONS_REACHED, 429, { cause: data.message });\n }\n else if (errorCause === 'Spend cap reached') {\n throw new ClientError('Spend cap reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_SPEND_CAP_REACHED, 429, { cause: data.message });\n }\n else {\n throw new ClientError('Usage limit reached, please upgrade your plan', ErrorCode.CLIENT_ERROR_CODE_USAGE_LIMIT_REACHED, 429, { cause: data.message });\n }\n case 503:\n throw new ClientError('There are no available personas, please try again later', ErrorCode.CLIENT_ERROR_CODE_SERVICE_BUSY, 503, { cause: data.message });\n default:\n throw new ClientError('Unknown error when starting session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, { cause: data.message });\n }\n }\n catch (error) {\n if (error instanceof ClientError) {\n throw error;\n }\n throw new ClientError('Failed to start session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, { cause: error instanceof Error ? error.message : String(error) });\n }\n });\n }\n unsafe_getSessionToken(personaConfig) {\n return __awaiter(this, void 0, void 0, function* () {\n console.warn('Using unsecure method. This method should not be used in production.');\n if (!this.apiKey) {\n throw new Error('No apiKey provided');\n }\n // Check if brainType is being used and log deprecation warning\n if (personaConfig && 'brainType' in personaConfig) {\n console.warn('Warning: brainType is deprecated and will be removed in a future version. Please use llmId instead.');\n }\n let body = {\n clientLabel: 'js-sdk-api-key',\n };\n if (isCustomPersonaConfig(personaConfig)) {\n body = Object.assign(Object.assign({}, body), { personaConfig });\n }\n try {\n const targetPath = `${this.apiVersion}/auth/session-token`;\n const { url, headers } = this.buildGatewayUrlAndHeaders(targetPath, {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n });\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify(body),\n });\n const data = yield response.json();\n return data.sessionToken;\n }\n catch (e) {\n throw new Error('Failed to get session token');\n }\n });\n }\n getApiUrl() {\n return `${this.baseUrl}${this.apiVersion}`;\n }\n}\n//# sourceMappingURL=CoreApiRestClient.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport class EngineApiRestClient {\n constructor(baseUrl, sessionId, apiGatewayConfig) {\n this.baseUrl = baseUrl;\n this.sessionId = sessionId;\n this.apiGatewayConfig = apiGatewayConfig;\n }\n sendTalkCommand(content) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n try {\n // Determine the URL and headers based on API Gateway configuration\n let url;\n let headers = {\n 'Content-Type': 'application/json',\n };\n const targetPath = `/talk`;\n const queryString = `?session_id=${this.sessionId}`;\n if (((_a = this.apiGatewayConfig) === null || _a === void 0 ? void 0 : _a.enabled) && ((_b = this.apiGatewayConfig) === null || _b === void 0 ? void 0 : _b.baseUrl)) {\n // Use gateway base URL with same endpoint path\n url = `${this.apiGatewayConfig.baseUrl}${targetPath}${queryString}`;\n // Add complete target URL header for gateway routing\n const targetUrl = new URL(`${this.baseUrl}${targetPath}${queryString}`);\n headers['X-Anam-Target-Url'] = targetUrl.href;\n }\n else {\n // Direct call to Anam engine\n url = `${this.baseUrl}${targetPath}${queryString}`;\n }\n const response = yield fetch(url, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n content,\n }),\n });\n if (!response.ok) {\n throw new Error(`Failed to send talk command: ${response.status} ${response.statusText}`);\n }\n }\n catch (error) {\n console.error(error);\n throw new Error('EngineApiRestClient - sendTalkCommand: Failed to send talk command');\n }\n });\n }\n}\n//# sourceMappingURL=EngineApiRestClient.js.map","export class InternalEventEmitter {\n constructor() {\n this.listeners = {};\n }\n addListener(event, callback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n removeListener(event, callback) {\n if (!this.listeners[event])\n return;\n this.listeners[event].delete(callback);\n }\n emit(event, ...args) {\n if (!this.listeners[event])\n return;\n this.listeners[event].forEach((callback) => {\n callback(...args);\n });\n }\n}\n//# sourceMappingURL=InternalEventEmitter.js.map","import { MessageRole, InternalEvent, AnamEvent, } from '../types';\nexport class MessageHistoryClient {\n constructor(publicEventEmitter, internalEventEmitter) {\n this.messages = [];\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n // register for events\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, this.processWebRtcTextMessageEvent.bind(this));\n }\n webRtcTextMessageEventToMessageStreamEvent(event) {\n return {\n id: `${event.role}::${event.message_id}`, // id is the same for persona and user for a single question response, so we need to differentiate them\n content: event.content,\n role: event.role,\n endOfSpeech: event.end_of_speech,\n interrupted: event.interrupted,\n };\n }\n processUserMessage(messageEvent) {\n // each user message is added directly to the history\n // user messages can not be interrupted\n const userMessage = {\n id: messageEvent.id,\n content: messageEvent.content,\n role: messageEvent.role,\n };\n this.messages.push(userMessage);\n }\n processPersonaMessage(messageEvent) {\n const personaMessage = {\n id: messageEvent.id,\n content: messageEvent.content,\n role: messageEvent.role,\n interrupted: messageEvent.interrupted,\n };\n // check for existing message in the history\n const existingMessageIndex = this.messages.findIndex((m) => m.id === personaMessage.id);\n if (existingMessageIndex !== -1) {\n const existingMessage = this.messages[existingMessageIndex];\n // update the existing message\n this.messages[existingMessageIndex] = Object.assign(Object.assign({}, existingMessage), { content: existingMessage.content + personaMessage.content, interrupted: existingMessage.interrupted || personaMessage.interrupted });\n }\n else {\n // add the new persona message to the history\n this.messages.push(personaMessage);\n }\n }\n processWebRtcTextMessageEvent(event) {\n const messageStreamEvent = this.webRtcTextMessageEventToMessageStreamEvent(event);\n // pass to callback stream\n this.publicEventEmitter.emit(AnamEvent.MESSAGE_STREAM_EVENT_RECEIVED, messageStreamEvent);\n // update the message history\n switch (messageStreamEvent.role) {\n case MessageRole.USER:\n this.processUserMessage(messageStreamEvent);\n break;\n case MessageRole.PERSONA:\n this.processPersonaMessage(messageStreamEvent);\n break;\n }\n if (messageStreamEvent.endOfSpeech) {\n this.publicEventEmitter.emit(AnamEvent.MESSAGE_HISTORY_UPDATED, this.messages);\n }\n }\n}\n//# sourceMappingURL=MessageHistoryClient.js.map","import { ClientMetricMeasurement, sendClientMetric, } from '../lib/ClientMetrics';\nimport { AnamEvent } from '../types';\nexport class PublicEventEmitter {\n constructor() {\n this.listeners = {};\n }\n addListener(event, callback) {\n if (!this.listeners[event]) {\n this.listeners[event] = new Set();\n }\n this.listeners[event].add(callback);\n }\n removeListener(event, callback) {\n if (!this.listeners[event])\n return;\n this.listeners[event].delete(callback);\n }\n emit(event, ...args) {\n if (event === AnamEvent.CONNECTION_ESTABLISHED) {\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_ESTABLISHED, '1');\n }\n if (event === AnamEvent.CONNECTION_CLOSED) {\n const [closeCode, details] = args;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_CONNECTION_CLOSED, closeCode, details ? { details: details } : undefined);\n }\n if (!this.listeners[event])\n return;\n this.listeners[event].forEach((callback) => {\n callback(...args);\n });\n }\n}\n//# sourceMappingURL=PublicEventEmitter.js.map","export var TalkMessageStreamState;\n(function (TalkMessageStreamState) {\n TalkMessageStreamState[TalkMessageStreamState[\"UNSTARTED\"] = 0] = \"UNSTARTED\";\n TalkMessageStreamState[TalkMessageStreamState[\"STREAMING\"] = 1] = \"STREAMING\";\n TalkMessageStreamState[TalkMessageStreamState[\"INTERRUPTED\"] = 2] = \"INTERRUPTED\";\n TalkMessageStreamState[TalkMessageStreamState[\"ENDED\"] = 3] = \"ENDED\";\n})(TalkMessageStreamState || (TalkMessageStreamState = {}));\n//# sourceMappingURL=TalkMessageStreamState.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { InternalEvent, SignalMessageAction } from '.';\nimport { TalkMessageStreamState } from './TalkMessageStreamState';\nexport class TalkMessageStream {\n constructor(correlationId, internalEventEmitter, signallingClient) {\n this.state = TalkMessageStreamState.UNSTARTED;\n this.correlationId = correlationId;\n this.internalEventEmitter = internalEventEmitter;\n this.signallingClient = signallingClient;\n this.internalEventEmitter.addListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n }\n onDeactivate() {\n this.internalEventEmitter.removeListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n }\n onSignalMessage(signalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (signalMessage.actionType === SignalMessageAction.TALK_STREAM_INTERRUPTED) {\n const message = signalMessage.payload;\n if (message.correlationId === this.correlationId) {\n this.state = TalkMessageStreamState.INTERRUPTED;\n this.onDeactivate();\n }\n }\n });\n }\n endMessage() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state === TalkMessageStreamState.ENDED) {\n console.warn('Talk stream is already ended via end of speech. No need to call endMessage.');\n return;\n }\n if (this.state !== TalkMessageStreamState.STREAMING) {\n console.warn('Talk stream is not active state: ' + this.state);\n return;\n }\n const payload = {\n content: '',\n startOfSpeech: false,\n endOfSpeech: true,\n correlationId: this.correlationId,\n };\n yield this.signallingClient.sendTalkMessage(payload);\n this.state = TalkMessageStreamState.ENDED;\n this.onDeactivate();\n });\n }\n streamMessageChunk(partialMessage, endOfSpeech) {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.state !== TalkMessageStreamState.STREAMING &&\n this.state !== TalkMessageStreamState.UNSTARTED) {\n // throw error\n throw new Error('Talk stream is not in an active state: ' + this.state);\n }\n const payload = {\n content: partialMessage,\n startOfSpeech: this.state === TalkMessageStreamState.UNSTARTED,\n endOfSpeech: endOfSpeech,\n correlationId: this.correlationId,\n };\n this.state = endOfSpeech\n ? TalkMessageStreamState.ENDED\n : TalkMessageStreamState.STREAMING;\n if (this.state === TalkMessageStreamState.ENDED) {\n this.onDeactivate();\n }\n // send message to signalling client\n yield this.signallingClient.sendTalkMessage(payload);\n });\n }\n getCorrelationId() {\n return this.correlationId;\n }\n isActive() {\n return (this.state === TalkMessageStreamState.STREAMING ||\n this.state === TalkMessageStreamState.UNSTARTED);\n }\n getState() {\n return this.state;\n }\n}\n//# sourceMappingURL=TalkMessageStream.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { AnamEvent } from '../types';\nconst calculateExecutionTime = (startTimestamp, endTimestamp) => {\n if (isNaN(startTimestamp) || isNaN(endTimestamp)) {\n return 0;\n }\n const executionTime = endTimestamp - startTimestamp;\n return executionTime > 0 ? executionTime : 0;\n};\nexport class ToolCallManager {\n constructor(publicEventEmitter) {\n this.handlers = Object.create(null);\n this.pendingCalls = Object.create(null);\n this.publicEventEmitter = publicEventEmitter;\n }\n clearPendingCalls() {\n this.pendingCalls = Object.create(null);\n }\n registerHandler(toolName, handler) {\n this.handlers[toolName] = handler;\n return () => {\n delete this.handlers[toolName];\n };\n }\n processToolCallStartedEvent(toolCallEvent) {\n return __awaiter(this, void 0, void 0, function* () {\n const { tool_name, timestamp } = toolCallEvent;\n const payload = this.WebRTCToolCallStartedEventToToolCallStartedPayload(toolCallEvent);\n const parsedTimestamp = new Date(timestamp);\n // Store in pending calls before invoking handlers\n this.pendingCalls[toolCallEvent.tool_call_id] = {\n payload: payload,\n timestamp: parsedTimestamp.getTime(),\n };\n if (!(tool_name in this.handlers)) {\n return;\n }\n const handler = this.handlers[tool_name];\n if (!handler.onStart) {\n return;\n }\n try {\n let result = yield handler.onStart(payload);\n if (toolCallEvent.tool_type === 'client') {\n yield this.processToolCallCompletedEvent(Object.assign(Object.assign({}, toolCallEvent), { result: result, timestamp: new Date().toISOString() }));\n return;\n }\n }\n catch (error) {\n if (error instanceof Error) {\n yield this.processToolCallFailedEvent(Object.assign(Object.assign({}, toolCallEvent), { error_message: `Error in onStart handler: ${error.message}`, timestamp: new Date().toISOString() }));\n }\n else {\n yield this.processToolCallFailedEvent(Object.assign(Object.assign({}, toolCallEvent), { error_message: `Error in onStart handler: ${String(error)}`, timestamp: new Date().toISOString() }));\n }\n return;\n }\n });\n }\n processToolCallCompletedEvent(toolCallEvent) {\n return __awaiter(this, void 0, void 0, function* () {\n const { tool_name, tool_call_id, timestamp } = toolCallEvent;\n const payload = this.webRTCToolCallCompletedEventToToolCallCompletedPayload(toolCallEvent);\n if (tool_call_id in this.pendingCalls) {\n // Clean up pending call\n delete this.pendingCalls[tool_call_id];\n }\n if (!(tool_name in this.handlers)) {\n return;\n }\n const handler = this.handlers[tool_name];\n if (!handler.onComplete) {\n return;\n }\n if (toolCallEvent.tool_type === 'client') {\n this.publicEventEmitter.emit(AnamEvent.TOOL_CALL_COMPLETED, payload);\n }\n try {\n yield handler.onComplete(payload);\n }\n catch (error) {\n console.error(`Error in onComplete handler for tool ${tool_name}:`, error);\n return;\n }\n });\n }\n processToolCallFailedEvent(toolCallEvent) {\n return __awaiter(this, void 0, void 0, function* () {\n const { tool_name, tool_call_id, timestamp } = toolCallEvent;\n const payload = this.webRTCToolCallFailedEventToToolCallFailedPayload(toolCallEvent);\n if (tool_call_id in this.pendingCalls) {\n delete this.pendingCalls[tool_call_id];\n }\n if (!(tool_name in this.handlers)) {\n return;\n }\n const handler = this.handlers[tool_name];\n if (!handler.onFail) {\n return;\n }\n if (toolCallEvent.tool_type === 'client') {\n this.publicEventEmitter.emit(AnamEvent.TOOL_CALL_FAILED, payload);\n }\n try {\n yield handler.onFail(payload);\n }\n catch (error) {\n console.error(`Error in onFail handler for tool ${tool_name}:`, error);\n return;\n }\n });\n }\n /**\n * Converts a WebRtcClientToolEvent to a ClientToolEvent\n */\n static WebRTCClientToolEventToClientToolEvent(webRtcEvent) {\n return {\n eventUid: webRtcEvent.event_uid,\n sessionId: webRtcEvent.session_id,\n eventName: webRtcEvent.event_name,\n eventData: webRtcEvent.event_data,\n timestamp: webRtcEvent.timestamp,\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n static WebRTCToolCallStartedEventToClientToolEvent(webRtcEvent) {\n return {\n eventUid: webRtcEvent.event_uid,\n sessionId: webRtcEvent.session_id,\n eventName: webRtcEvent.tool_name,\n eventData: webRtcEvent.arguments,\n timestamp: webRtcEvent.timestamp,\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n WebRTCToolCallStartedEventToToolCallStartedPayload(webRtcEvent) {\n return {\n eventUid: webRtcEvent.event_uid,\n toolCallId: webRtcEvent.tool_call_id,\n toolName: webRtcEvent.tool_name,\n toolType: webRtcEvent.tool_type,\n toolSubtype: webRtcEvent.tool_subtype,\n arguments: webRtcEvent.arguments,\n timestamp: webRtcEvent.timestamp,\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n webRTCToolCallCompletedEventToToolCallCompletedPayload(webRtcEvent) {\n const parsedTimestamp = new Date(webRtcEvent.timestamp);\n const pendingCall = this.pendingCalls[webRtcEvent.tool_call_id];\n const executionTime = pendingCall\n ? calculateExecutionTime(pendingCall.timestamp, parsedTimestamp.getTime())\n : 0;\n return {\n eventUid: webRtcEvent.event_uid,\n toolCallId: webRtcEvent.tool_call_id,\n toolName: webRtcEvent.tool_name,\n toolType: webRtcEvent.tool_type,\n toolSubtype: webRtcEvent.tool_subtype,\n result: webRtcEvent.result,\n executionTime: executionTime > 0 ? executionTime : 0,\n timestamp: webRtcEvent.timestamp,\n documentsAccessed: webRtcEvent.documents_accessed, // Include accessed files if present\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n webRTCToolCallFailedEventToToolCallFailedPayload(webRtcEvent) {\n const parsedTimestamp = new Date(webRtcEvent.timestamp);\n const pendingCall = this.pendingCalls[webRtcEvent.tool_call_id];\n const executionTime = pendingCall\n ? calculateExecutionTime(pendingCall.timestamp, parsedTimestamp.getTime())\n : 0;\n return {\n eventUid: webRtcEvent.event_uid,\n toolCallId: webRtcEvent.tool_call_id,\n toolName: webRtcEvent.tool_name,\n toolType: webRtcEvent.tool_type,\n toolSubtype: webRtcEvent.tool_subtype,\n errorMessage: webRtcEvent.error_message,\n executionTime: executionTime > 0 ? executionTime : 0,\n timestamp: webRtcEvent.timestamp,\n timestampUserAction: webRtcEvent.timestamp_user_action,\n userActionCorrelationId: webRtcEvent.user_action_correlation_id,\n };\n }\n}\n//# sourceMappingURL=ToolCallManager.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { ClientMetricMeasurement, createRTCStatsReport, sendClientMetric, } from '../lib/ClientMetrics';\nimport { EngineApiRestClient, SignallingClient, } from '../modules';\nimport { AnamEvent, AudioPermissionState, ConnectionClosedCode, DataChannelMessage, InternalEvent, SignalMessageAction, } from '../types';\nimport { AgentAudioInputStream } from '../types/AgentAudioInputStream';\nimport { TalkMessageStream } from '../types/TalkMessageStream';\nimport { ToolCallManager } from './ToolCallManager';\nconst SUCCESS_METRIC_POLLING_TIMEOUT_MS = 15000; // After this time we will stop polling for the first frame and consider the session a failure.\nconst STATS_COLLECTION_INTERVAL_MS = 5000;\nconst ICE_CANDIDATE_POOL_SIZE = 2; // Optimisation to speed up connection time\nexport class StreamingClient {\n constructor(sessionId, options, publicEventEmitter, internalEventEmitter, toolCallManager) {\n var _a, _b, _c, _d;\n this.peerConnection = null;\n this.connectionReceivedAnswer = false;\n this.remoteIceCandidateBuffer = [];\n this.inputAudioStream = null;\n this.dataChannel = null;\n this.videoElement = null;\n this.videoStream = null;\n this.audioStream = null;\n this.inputAudioState = {\n isMuted: false,\n permissionState: AudioPermissionState.NOT_REQUESTED,\n };\n this.successMetricPoller = null;\n this.successMetricFired = false;\n this.showPeerConnectionStatsReport = false;\n this.peerConnectionStatsReportOutputFormat = 'console';\n this.statsCollectionInterval = null;\n this.agentAudioInputStream = null;\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n this.toolCallManager = toolCallManager;\n this.apiGatewayConfig = options.apiGateway;\n // initialize input audio state\n const { inputAudio } = options;\n this.inputAudioState = inputAudio.inputAudioState;\n if (options.inputAudio.userProvidedMediaStream) {\n this.inputAudioStream = options.inputAudio.userProvidedMediaStream;\n }\n this.disableInputAudio = options.inputAudio.disableInputAudio === true;\n // register event handlers\n this.internalEventEmitter.addListener(InternalEvent.WEB_SOCKET_OPEN, this.onSignallingClientConnected.bind(this));\n this.internalEventEmitter.addListener(InternalEvent.SIGNAL_MESSAGE_RECEIVED, this.onSignalMessage.bind(this));\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_TOOL_CALL_STARTED_EVENT_RECEIVED, this.toolCallManager.processToolCallStartedEvent.bind(this.toolCallManager));\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_TOOL_CALL_COMPLETED_EVENT_RECEIVED, this.toolCallManager.processToolCallCompletedEvent.bind(this.toolCallManager));\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_TOOL_CALL_FAILED_EVENT_RECEIVED, this.toolCallManager.processToolCallFailedEvent.bind(this.toolCallManager));\n // set ice servers\n this.iceServers = options.iceServers;\n // initialize signalling client\n this.signallingClient = new SignallingClient(sessionId, options.signalling, this.publicEventEmitter, this.internalEventEmitter, this.apiGatewayConfig);\n // initialize engine API client\n this.engineApiRestClient = new EngineApiRestClient(options.engine.baseUrl, sessionId, this.apiGatewayConfig);\n this.audioDeviceId = options.inputAudio.audioDeviceId;\n this.showPeerConnectionStatsReport =\n (_b = (_a = options.metrics) === null || _a === void 0 ? void 0 : _a.showPeerConnectionStatsReport) !== null && _b !== void 0 ? _b : false;\n this.peerConnectionStatsReportOutputFormat =\n (_d = (_c = options.metrics) === null || _c === void 0 ? void 0 : _c.peerConnectionStatsReportOutputFormat) !== null && _d !== void 0 ? _d : 'console';\n }\n onInputAudioStateChange(oldState, newState) {\n // changed microphone mute state\n if (oldState.isMuted !== newState.isMuted) {\n if (newState.isMuted) {\n this.muteAllAudioTracks();\n }\n else {\n this.unmuteAllAudioTracks();\n }\n }\n }\n muteAllAudioTracks() {\n var _a;\n (_a = this.inputAudioStream) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((track) => {\n track.enabled = false;\n });\n }\n unmuteAllAudioTracks() {\n var _a;\n (_a = this.inputAudioStream) === null || _a === void 0 ? void 0 : _a.getAudioTracks().forEach((track) => {\n track.enabled = true;\n });\n }\n startStatsCollection() {\n if (this.statsCollectionInterval) {\n return;\n }\n // Send stats every STATS_COLLECTION_INTERVAL_MS seconds\n this.statsCollectionInterval = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection ||\n !this.dataChannel ||\n this.dataChannel.readyState !== 'open') {\n return;\n }\n try {\n const stats = yield this.peerConnection.getStats();\n this.sendClientSideMetrics(stats);\n }\n catch (error) {\n console.error('Failed to collect and send stats:', error);\n }\n }), STATS_COLLECTION_INTERVAL_MS);\n }\n sendClientSideMetrics(stats) {\n stats.forEach((report) => {\n // Process inbound-rtp stats for both video and audio\n if (report.type === 'inbound-rtp') {\n const metrics = {\n message_type: 'remote_rtp_stats',\n data: report,\n };\n // Send the metrics via data channel\n if (this.dataChannel && this.dataChannel.readyState === 'open') {\n this.dataChannel.send(JSON.stringify(metrics));\n }\n }\n });\n }\n startSuccessMetricPolling() {\n if (this.successMetricPoller || this.successMetricFired) {\n return;\n }\n const timeoutId = setTimeout(() => {\n if (this.successMetricPoller) {\n console.warn('No video frames received, there is a problem with the connection.');\n clearInterval(this.successMetricPoller);\n this.successMetricPoller = null;\n }\n }, SUCCESS_METRIC_POLLING_TIMEOUT_MS);\n this.successMetricPoller = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection || this.successMetricFired) {\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n }\n clearTimeout(timeoutId);\n return;\n }\n try {\n const stats = yield this.peerConnection.getStats();\n let videoDetected = false;\n let detectionMethod = null;\n stats.forEach((report) => {\n // Find the report for inbound video\n if (report.type === 'inbound-rtp' && report.kind === 'video') {\n // Method 1: Try framesDecoded (most reliable when available)\n if (report.framesDecoded !== undefined &&\n report.framesDecoded > 0) {\n videoDetected = true;\n detectionMethod = 'framesDecoded';\n }\n else if (report.framesReceived !== undefined &&\n report.framesReceived > 0) {\n videoDetected = true;\n detectionMethod = 'framesReceived';\n }\n else if (report.bytesReceived > 0 &&\n report.packetsReceived > 0 &&\n // Additional check: ensure we've received enough data for actual video\n report.bytesReceived > 100000 // rough threshold\n ) {\n videoDetected = true;\n detectionMethod = 'bytesReceived';\n }\n }\n });\n if (videoDetected && !this.successMetricFired) {\n this.successMetricFired = true;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS, '1', detectionMethod ? { detectionMethod } : undefined);\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n }\n clearTimeout(timeoutId);\n this.successMetricPoller = null;\n }\n }\n catch (error) { }\n }), 500);\n }\n muteInputAudio() {\n const oldAudioState = this.inputAudioState;\n const newAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: true });\n this.inputAudioState = newAudioState;\n this.onInputAudioStateChange(oldAudioState, newAudioState);\n return this.inputAudioState;\n }\n unmuteInputAudio() {\n const oldAudioState = this.inputAudioState;\n const newAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: false });\n this.inputAudioState = newAudioState;\n this.onInputAudioStateChange(oldAudioState, newAudioState);\n return this.inputAudioState;\n }\n getInputAudioState() {\n return this.inputAudioState;\n }\n getPeerConnection() {\n return this.peerConnection;\n }\n changeAudioInputDevice(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n throw new Error('StreamingClient - changeAudioInputDevice: peer connection is not initialized. Start streaming first.');\n }\n if (deviceId === null || deviceId === undefined) {\n throw new Error('StreamingClient - changeAudioInputDevice: deviceId is required');\n }\n // Store the current mute state to preserve it\n const wasMuted = this.inputAudioState.isMuted;\n try {\n // Stop the current audio stream tracks\n if (this.inputAudioStream) {\n this.inputAudioStream.getAudioTracks().forEach((track) => {\n track.stop();\n });\n }\n // Request new audio stream with the new device ID\n const audioConstraints = {\n echoCancellation: true,\n deviceId: {\n exact: deviceId,\n },\n };\n this.inputAudioStream = yield navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n // Update the stored device ID\n this.audioDeviceId = deviceId;\n // Replace the audio track in the peer connection\n yield this.setupAudioTrack();\n // Restore the mute state\n if (wasMuted) {\n this.muteAllAudioTracks();\n }\n // Emit event to notify that the device has changed\n this.publicEventEmitter.emit(AnamEvent.INPUT_AUDIO_DEVICE_CHANGED, deviceId);\n }\n catch (error) {\n console.error('Failed to change audio input device:', error);\n throw new Error(`StreamingClient - changeAudioInputDevice: ${error instanceof Error ? error.message : String(error)}`);\n }\n });\n }\n getInputAudioStream() {\n return this.inputAudioStream;\n }\n getVideoStream() {\n return this.videoStream;\n }\n getAudioStream() {\n return this.audioStream;\n }\n sendDataMessage(message) {\n if (this.dataChannel && this.dataChannel.readyState === 'open') {\n this.dataChannel.send(message);\n }\n }\n setMediaStreamTargetById(videoElementId) {\n // set up streaming targets\n if (videoElementId) {\n const videoElement = document.getElementById(videoElementId);\n if (!videoElement) {\n throw new Error(`StreamingClient: video element with id ${videoElementId} not found`);\n }\n this.videoElement = videoElement;\n }\n }\n startConnection() {\n try {\n if (this.peerConnection) {\n console.error('StreamingClient - startConnection: peer connection already exists');\n return;\n }\n // start the connection\n this.signallingClient.connect();\n }\n catch (error) {\n console.error('StreamingClient - startConnection: error', error);\n this.handleWebrtcFailure(error);\n }\n }\n stopConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.shutdown();\n });\n }\n sendTalkCommand(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n throw new Error('StreamingClient - sendTalkCommand: peer connection is null');\n }\n yield this.engineApiRestClient.sendTalkCommand(content);\n return;\n });\n }\n startTalkMessageStream(correlationId) {\n if (!correlationId) {\n // generate a random correlation uuid\n correlationId = Math.random().toString(36).substring(2, 15);\n }\n return new TalkMessageStream(correlationId, this.internalEventEmitter, this.signallingClient);\n }\n createAgentAudioInputStream(config) {\n this.agentAudioInputStream = new AgentAudioInputStream(config, this.signallingClient);\n return this.agentAudioInputStream;\n }\n getAgentAudioInputStream() {\n return this.agentAudioInputStream;\n }\n initPeerConnection() {\n return __awaiter(this, void 0, void 0, function* () {\n this.peerConnection = new RTCPeerConnection({\n iceServers: this.iceServers,\n iceCandidatePoolSize: ICE_CANDIDATE_POOL_SIZE,\n });\n // set event handlers\n this.peerConnection.onicecandidate = this.onIceCandidate.bind(this);\n this.peerConnection.oniceconnectionstatechange =\n this.onIceConnectionStateChange.bind(this);\n this.peerConnection.onconnectionstatechange =\n this.onConnectionStateChange.bind(this);\n this.peerConnection.addEventListener('track', this.onTrackEventHandler.bind(this));\n // set up data channels\n yield this.setupDataChannels();\n // add transceivers\n this.peerConnection.addTransceiver('video', { direction: 'recvonly' });\n if (this.disableInputAudio) {\n this.peerConnection.addTransceiver('audio', { direction: 'recvonly' });\n }\n else {\n this.peerConnection.addTransceiver('audio', { direction: 'sendrecv' });\n // Handle audio setup after transceivers are configured\n if (this.inputAudioStream) {\n // User provided an audio stream, set it up immediately\n yield this.setupAudioTrack();\n }\n else {\n // No user stream, start microphone permission request asynchronously\n // Don't await - let it run in parallel with connection setup\n this.requestMicrophonePermissionAsync().catch((error) => {\n console.error('Async microphone permission request failed:', error);\n });\n }\n }\n });\n }\n onSignalMessage(signalMessage) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n console.error('StreamingClient - onSignalMessage: peerConnection is not initialized');\n return;\n }\n switch (signalMessage.actionType) {\n case SignalMessageAction.ANSWER:\n const answer = signalMessage.payload;\n yield this.peerConnection.setRemoteDescription(answer);\n this.connectionReceivedAnswer = true;\n // flush the remote buffer\n this.flushRemoteIceCandidateBuffer();\n break;\n case SignalMessageAction.ICE_CANDIDATE:\n const iceCandidateConfig = signalMessage.payload;\n const candidate = new RTCIceCandidate(iceCandidateConfig);\n if (this.connectionReceivedAnswer) {\n yield this.peerConnection.addIceCandidate(candidate);\n }\n else {\n this.remoteIceCandidateBuffer.push(candidate);\n }\n break;\n case SignalMessageAction.END_SESSION:\n const reason = signalMessage.payload;\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.SERVER_CLOSED_CONNECTION, reason);\n // close the peer connection\n this.shutdown();\n break;\n case SignalMessageAction.WARNING:\n const message = signalMessage.payload;\n console.warn('Warning received from server: ' + message);\n this.publicEventEmitter.emit(AnamEvent.SERVER_WARNING, message);\n break;\n case SignalMessageAction.TALK_STREAM_INTERRUPTED:\n const chatMessage = signalMessage.payload;\n this.publicEventEmitter.emit(AnamEvent.TALK_STREAM_INTERRUPTED, chatMessage.correlationId);\n break;\n case SignalMessageAction.SESSION_READY:\n const sessionId = signalMessage.sessionId;\n this.publicEventEmitter.emit(AnamEvent.SESSION_READY, sessionId);\n break;\n case SignalMessageAction.HEARTBEAT:\n break;\n default:\n console.warn('StreamingClient - onSignalMessage: unknown signal message action type. Is your anam-sdk version up to date?', signalMessage);\n }\n });\n }\n onSignallingClientConnected() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n try {\n yield this.initPeerConnectionAndSendOffer();\n }\n catch (err) {\n console.error('StreamingClient - onSignallingClientConnected: Error initializing peer connection', err);\n this.handleWebrtcFailure(err);\n }\n }\n });\n }\n flushRemoteIceCandidateBuffer() {\n this.remoteIceCandidateBuffer.forEach((candidate) => {\n var _a;\n (_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.addIceCandidate(candidate);\n });\n this.remoteIceCandidateBuffer = [];\n }\n /**\n * ICE Candidate Trickle\n * As each ICE candidate is gathered from the STUN server it is sent to the\n * webRTC server immediately in an effort to reduce time to connection.\n */\n onIceCandidate(event) {\n if (event.candidate) {\n this.signallingClient.sendIceCandidate(event.candidate);\n }\n }\n onIceConnectionStateChange() {\n var _a, _b;\n if (((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.iceConnectionState) === 'connected' ||\n ((_b = this.peerConnection) === null || _b === void 0 ? void 0 : _b.iceConnectionState) === 'completed') {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_ESTABLISHED);\n // Start collecting stats every 5 seconds\n this.startStatsCollection();\n }\n }\n onConnectionStateChange() {\n var _a;\n if (((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.connectionState) === 'closed') {\n console.error('StreamingClient - onConnectionStateChange: Connection closed');\n this.handleWebrtcFailure('The connection to our servers was lost. Please try again.');\n }\n }\n handleWebrtcFailure(err) {\n console.error({ message: 'StreamingClient - handleWebrtcFailure: ', err });\n if (err.name === 'NotAllowedError' && err.message === 'Permission denied') {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.MICROPHONE_PERMISSION_DENIED);\n }\n else {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.WEBRTC_FAILURE);\n }\n try {\n this.stopConnection();\n }\n catch (error) {\n console.error('StreamingClient - handleWebrtcFailure: error stopping connection', error);\n }\n }\n onTrackEventHandler(event) {\n if (event.track.kind === 'video') {\n // start polling stats to detect successful video data received\n this.startSuccessMetricPolling();\n this.videoStream = event.streams[0];\n this.publicEventEmitter.emit(AnamEvent.VIDEO_STREAM_STARTED, this.videoStream);\n if (this.videoElement) {\n this.videoElement.srcObject = this.videoStream;\n const handle = this.videoElement.requestVideoFrameCallback(() => {\n var _a;\n // unregister the callback after the first frame\n (_a = this.videoElement) === null || _a === void 0 ? void 0 : _a.cancelVideoFrameCallback(handle);\n this.publicEventEmitter.emit(AnamEvent.VIDEO_PLAY_STARTED);\n if (!this.successMetricFired) {\n this.successMetricFired = true;\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_SUCCESS, '1', { detectionMethod: 'videoElement' });\n }\n });\n }\n }\n else if (event.track.kind === 'audio') {\n this.audioStream = event.streams[0];\n this.publicEventEmitter.emit(AnamEvent.AUDIO_STREAM_STARTED, this.audioStream);\n }\n }\n /**\n * Set up the data channels for sending and receiving messages\n */\n setupDataChannels() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection) {\n console.error('StreamingClient - setupDataChannels: peer connection is not initialized');\n return;\n }\n /**\n * Audio - Validate user-provided stream only\n *\n * If the user provided an audio stream, validate it has audio tracks\n * Microphone permission request will be handled asynchronously\n */\n if (!this.disableInputAudio && this.inputAudioStream) {\n // verify the user provided stream has audio tracks\n if (!this.inputAudioStream.getAudioTracks().length) {\n throw new Error('StreamingClient - setupDataChannels: user provided stream does not have audio tracks');\n }\n }\n /**\n * Text\n *\n * Create the data channel for sending and receiving text.\n * There is no input stream for text, instead the sending of data is triggered by a UI interaction.\n */\n const dataChannel = this.peerConnection.createDataChannel('session', {\n ordered: true,\n });\n dataChannel.onopen = () => {\n this.dataChannel = dataChannel !== null && dataChannel !== void 0 ? dataChannel : null;\n };\n dataChannel.onclose = () => { };\n // pass text message to the message history client\n dataChannel.onmessage = (event) => {\n var _a, _b, _c, _d;\n try {\n const message = JSON.parse(event.data);\n // Handle known message types\n switch (message.messageType) {\n case DataChannelMessage.SPEECH_TEXT:\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_CHAT_MESSAGE_RECEIVED, message.data);\n break;\n case DataChannelMessage.CLIENT_TOOL_EVENT:\n // legacy support for client tool events sent via data channel. New events should use the dedicated tool call event messages\n // newer engines should only be sending client tool events via the dedicated tool call event messages, but we will keep supporting this for older engine versions\n const webRtcToolEvent = message.data;\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_CLIENT_TOOL_EVENT_RECEIVED, webRtcToolEvent);\n const clientToolEvent = ToolCallManager.WebRTCClientToolEventToClientToolEvent(webRtcToolEvent);\n this.publicEventEmitter.emit(AnamEvent.CLIENT_TOOL_EVENT_RECEIVED, clientToolEvent);\n break;\n case DataChannelMessage.TOOL_CALL_STARTED_EVENT:\n const webRtcToolCallStartedEvent = message.data;\n this.publicEventEmitter.emit(AnamEvent.TOOL_CALL_STARTED, this.toolCallManager.WebRTCToolCallStartedEventToToolCallStartedPayload(webRtcToolCallStartedEvent));\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_TOOL_CALL_STARTED_EVENT_RECEIVED, webRtcToolCallStartedEvent);\n break;\n case DataChannelMessage.TOOL_CALL_COMPLETED_EVENT:\n const webRtcToolCallCompletedEvent = message.data;\n this.publicEventEmitter.emit(AnamEvent.TOOL_CALL_COMPLETED, this.toolCallManager.webRTCToolCallCompletedEventToToolCallCompletedPayload(webRtcToolCallCompletedEvent));\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_TOOL_CALL_COMPLETED_EVENT_RECEIVED, webRtcToolCallCompletedEvent);\n break;\n case DataChannelMessage.TOOL_CALL_FAILED_EVENT:\n const webRtcToolCallFailedEvent = message.data;\n this.publicEventEmitter.emit(AnamEvent.TOOL_CALL_FAILED, this.toolCallManager.webRTCToolCallFailedEventToToolCallFailedPayload(webRtcToolCallFailedEvent));\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_TOOL_CALL_FAILED_EVENT_RECEIVED, webRtcToolCallFailedEvent);\n break;\n case DataChannelMessage.REASONING_TEXT:\n this.internalEventEmitter.emit(InternalEvent.WEBRTC_REASONING_TEXT_MESSAGE_RECEIVED, message.data);\n break;\n case DataChannelMessage.USER_SPEECH_STARTED:\n this.publicEventEmitter.emit(AnamEvent.USER_SPEECH_STARTED, (_b = (_a = message.data) === null || _a === void 0 ? void 0 : _a.user_action_correlation_id) !== null && _b !== void 0 ? _b : 'unknown');\n break;\n case DataChannelMessage.USER_SPEECH_ENDED:\n this.publicEventEmitter.emit(AnamEvent.USER_SPEECH_ENDED, (_d = (_c = message.data) === null || _c === void 0 ? void 0 : _c.user_action_correlation_id) !== null && _d !== void 0 ? _d : 'unknown');\n break;\n // Unknown message types are silently ignored to maintain forward compatibility\n default:\n break;\n }\n }\n catch (error) {\n console.error('Failed to parse data channel message:', error);\n }\n };\n });\n }\n /**\n * Request microphone permission asynchronously without blocking connection\n */\n requestMicrophonePermissionAsync() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.inputAudioState.permissionState === AudioPermissionState.PENDING) {\n return; // Already requesting\n }\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.PENDING });\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_PENDING);\n try {\n const audioConstraints = {\n echoCancellation: true,\n };\n // If an audio device ID is provided in the options, use it\n if (this.audioDeviceId) {\n audioConstraints.deviceId = {\n exact: this.audioDeviceId,\n };\n }\n this.inputAudioStream = yield navigator.mediaDevices.getUserMedia({\n audio: audioConstraints,\n });\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.GRANTED });\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_GRANTED);\n // Now add the audio track to the existing connection\n yield this.setupAudioTrack();\n }\n catch (error) {\n console.error('Failed to get microphone permission:', error);\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { permissionState: AudioPermissionState.DENIED });\n const errorMessage = error instanceof Error ? error.message : String(error);\n this.publicEventEmitter.emit(AnamEvent.MIC_PERMISSION_DENIED, errorMessage);\n }\n });\n }\n /**\n * Set up audio track and add it to the peer connection using replaceTrack\n */\n setupAudioTrack() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.peerConnection || !this.inputAudioStream) {\n return;\n }\n // verify the stream has audio tracks\n if (!this.inputAudioStream.getAudioTracks().length) {\n console.error('StreamingClient - setupAudioTrack: stream does not have audio tracks');\n return;\n }\n // mute the audio tracks if the user has muted the microphone\n if (this.inputAudioState.isMuted) {\n this.muteAllAudioTracks();\n }\n const audioTrack = this.inputAudioStream.getAudioTracks()[0];\n // Find the audio sender\n const existingSenders = this.peerConnection.getSenders();\n const audioSender = existingSenders.find((sender) => {\n var _a;\n return ((_a = sender.track) === null || _a === void 0 ? void 0 : _a.kind) === 'audio' ||\n (sender.track === null && sender.dtmf !== null);\n });\n if (audioSender) {\n // Replace existing track (or null track) with our audio track\n try {\n yield audioSender.replaceTrack(audioTrack);\n }\n catch (error) {\n console.error('Failed to replace audio track:', error);\n // Fallback: add track normally\n this.peerConnection.addTrack(audioTrack, this.inputAudioStream);\n }\n }\n else {\n // No audio sender found, add track normally\n this.peerConnection.addTrack(audioTrack, this.inputAudioStream);\n }\n // pass the stream to the callback\n this.publicEventEmitter.emit(AnamEvent.INPUT_AUDIO_STREAM_STARTED, this.inputAudioStream);\n });\n }\n initPeerConnectionAndSendOffer() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.initPeerConnection();\n if (!this.peerConnection) {\n console.error('StreamingClient - initPeerConnectionAndSendOffer: peer connection is not initialized');\n return;\n }\n // create offer and set local description\n try {\n const offer = yield this.peerConnection.createOffer();\n yield this.peerConnection.setLocalDescription(offer);\n }\n catch (error) {\n console.error('StreamingClient - initPeerConnectionAndSendOffer: error creating offer', error);\n }\n if (!this.peerConnection.localDescription) {\n throw new Error('StreamingClient - initPeerConnectionAndSendOffer: local description is null');\n }\n yield this.signallingClient.sendOffer(this.peerConnection.localDescription);\n });\n }\n shutdown() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this.showPeerConnectionStatsReport) {\n const stats = yield ((_a = this.peerConnection) === null || _a === void 0 ? void 0 : _a.getStats());\n if (stats) {\n const report = createRTCStatsReport(stats, this.peerConnectionStatsReportOutputFormat);\n if (report) {\n console.log(report, undefined, 2);\n }\n }\n }\n // stop stats collection\n if (this.statsCollectionInterval) {\n clearInterval(this.statsCollectionInterval);\n this.statsCollectionInterval = null;\n }\n // reset video frame polling\n if (this.successMetricPoller) {\n clearInterval(this.successMetricPoller);\n this.successMetricPoller = null;\n }\n this.successMetricFired = false;\n // stop the input audio stream\n try {\n if (this.inputAudioStream) {\n this.inputAudioStream.getTracks().forEach((track) => {\n track.stop();\n });\n }\n this.inputAudioStream = null;\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error stopping input audio stream', error);\n }\n // stop the signalling client\n try {\n this.signallingClient.stop();\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error stopping signallilng', error);\n }\n // clear pending tool calls\n this.toolCallManager.clearPendingCalls();\n // close the peer connection\n try {\n if (this.peerConnection &&\n this.peerConnection.connectionState !== 'closed') {\n this.peerConnection.onconnectionstatechange = null;\n this.peerConnection.close();\n this.peerConnection = null;\n }\n }\n catch (error) {\n console.error('StreamingClient - shutdown: error closing peer connection', error);\n }\n });\n }\n}\n//# sourceMappingURL=StreamingClient.js.map","import { AnamEvent, InternalEvent, } from '../types';\nexport class ReasoningHistoryClient {\n constructor(publicEventEmitter, internalEventEmitter) {\n this.reasoning_messages = [];\n this.publicEventEmitter = publicEventEmitter;\n this.internalEventEmitter = internalEventEmitter;\n // register for events\n this.internalEventEmitter.addListener(InternalEvent.WEBRTC_REASONING_TEXT_MESSAGE_RECEIVED, this.processWebRtcReasoningTextMessageEvent.bind(this));\n }\n webRtcTextMessageEventToReasoningStreamEvent(event) {\n return {\n id: `${event.role}::${event.message_id}`,\n content: event.content,\n endOfThought: event.end_of_thought,\n role: event.role,\n };\n }\n processWebRtcReasoningTextMessageEvent(event) {\n const ReasoningStreamEvent = this.webRtcTextMessageEventToReasoningStreamEvent(event);\n this.publicEventEmitter.emit(AnamEvent.REASONING_STREAM_EVENT_RECEIVED, ReasoningStreamEvent);\n const message = {\n id: ReasoningStreamEvent.id,\n content: ReasoningStreamEvent.content,\n role: ReasoningStreamEvent.role,\n };\n const existingMessageIndex = this.reasoning_messages.findIndex((m) => m.id === message.id);\n if (existingMessageIndex !== -1) {\n // update existing message\n const existingMessage = this.reasoning_messages[existingMessageIndex];\n existingMessage.content += message.content;\n this.reasoning_messages[existingMessageIndex] = existingMessage;\n }\n else {\n // new message\n this.reasoning_messages.push(message);\n }\n if (ReasoningStreamEvent.endOfThought) {\n this.publicEventEmitter.emit(AnamEvent.REASONING_HISTORY_UPDATED, this.reasoning_messages);\n }\n }\n}\n//# sourceMappingURL=ReasoningHistoryClient.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { Buffer } from 'buffer';\nimport { ClientError, ErrorCode } from './lib/ClientError';\nimport { ClientMetricMeasurement, DEFAULT_ANAM_API_VERSION, DEFAULT_ANAM_METRICS_BASE_URL, sendClientMetric, setClientMetricsApiGateway, setClientMetricsBaseUrl, setClientMetricsDisabled, setMetricsContext, } from './lib/ClientMetrics';\nimport { generateCorrelationId } from './lib/correlationId';\nimport { validateApiGatewayConfig } from './lib/validateApiGatewayConfig';\nimport { CoreApiRestClient, InternalEventEmitter, MessageHistoryClient, PublicEventEmitter, StreamingClient, ReasoningHistoryClient, } from './modules';\nimport { AnamEvent, AudioPermissionState, ConnectionClosedCode, } from './types';\nimport { ToolCallManager } from './modules/ToolCallManager';\nexport default class AnamClient {\n constructor(sessionToken, personaConfig, options) {\n var _a, _b, _c, _d, _e;\n this.inputAudioState = {\n isMuted: false,\n permissionState: AudioPermissionState.NOT_REQUESTED,\n };\n this.sessionId = null;\n this.organizationId = null;\n this.streamingClient = null;\n this._isStreaming = false;\n const configError = this.validateClientConfig(sessionToken, personaConfig, options);\n if (configError) {\n throw new ClientError(configError, ErrorCode.CLIENT_ERROR_CODE_CONFIGURATION_ERROR, 400);\n }\n this.personaConfig = personaConfig;\n this.clientOptions = options;\n if (((_a = options === null || options === void 0 ? void 0 : options.api) === null || _a === void 0 ? void 0 : _a.baseUrl) || ((_b = options === null || options === void 0 ? void 0 : options.api) === null || _b === void 0 ? void 0 : _b.apiVersion)) {\n setClientMetricsBaseUrl(options.api.baseUrl || DEFAULT_ANAM_METRICS_BASE_URL, options.api.apiVersion || DEFAULT_ANAM_API_VERSION);\n }\n // Pass API Gateway config to metrics module so metrics are routed through the gateway\n if ((_d = (_c = options === null || options === void 0 ? void 0 : options.api) === null || _c === void 0 ? void 0 : _c.apiGateway) === null || _d === void 0 ? void 0 : _d.enabled) {\n setClientMetricsApiGateway(options.api.apiGateway);\n }\n // Allow disabling client metrics telemetry\n if ((_e = options === null || options === void 0 ? void 0 : options.metrics) === null || _e === void 0 ? void 0 : _e.disableClientMetrics) {\n setClientMetricsDisabled(true);\n }\n this.publicEventEmitter = new PublicEventEmitter();\n this.internalEventEmitter = new InternalEventEmitter();\n this.toolCallManager = new ToolCallManager(this.publicEventEmitter);\n this.apiClient = new CoreApiRestClient(sessionToken, options === null || options === void 0 ? void 0 : options.apiKey, options === null || options === void 0 ? void 0 : options.api);\n this.messageHistoryClient = new MessageHistoryClient(this.publicEventEmitter, this.internalEventEmitter);\n this.reasoningHistoryClient = new ReasoningHistoryClient(this.publicEventEmitter, this.internalEventEmitter);\n }\n decodeJwt(token) {\n try {\n const base64Payload = token.split('.')[1];\n const payloadString = Buffer.from(base64Payload, 'base64').toString('utf8');\n const payload = JSON.parse(payloadString);\n return payload;\n }\n catch (error) {\n throw new Error('Invalid session token format');\n }\n }\n validateClientConfig(sessionToken, personaConfig, options) {\n var _a, _b;\n // Validate authentication configuration\n if (!sessionToken && !(options === null || options === void 0 ? void 0 : options.apiKey)) {\n return 'Either sessionToken or apiKey must be provided';\n }\n if ((options === null || options === void 0 ? void 0 : options.apiKey) && sessionToken) {\n return 'Only one of sessionToken or apiKey should be used';\n }\n // Validate gateway configuration\n const apiGatewayError = validateApiGatewayConfig((_a = options === null || options === void 0 ? void 0 : options.api) === null || _a === void 0 ? void 0 : _a.apiGateway);\n if (apiGatewayError) {\n return apiGatewayError;\n }\n // Validate persona configuration based on session token\n if (sessionToken) {\n const decodedToken = this.decodeJwt(sessionToken);\n this.organizationId = decodedToken.accountId;\n setMetricsContext({\n organizationId: this.organizationId,\n });\n const tokenType = (_b = decodedToken.type) === null || _b === void 0 ? void 0 : _b.toLowerCase();\n if (tokenType === 'legacy') {\n return 'Legacy session tokens are no longer supported. Please define your persona when creating your session token. See https://docs.anam.ai/resources/migrating-legacy for more information.';\n }\n else if (tokenType === 'ephemeral' || tokenType === 'stateful') {\n if (personaConfig) {\n return 'This session token already contains a persona configuration. Please remove the personaConfig parameter.';\n }\n }\n }\n else {\n // No session token (using apiKey)\n if (!personaConfig) {\n return 'Missing persona config. Persona configuration must be provided when using apiKey';\n }\n }\n // Validate voice detection configuration\n if (options === null || options === void 0 ? void 0 : options.voiceDetection) {\n if (options.disableInputAudio) {\n return 'Voice detection is disabled because input audio is disabled. Please set disableInputAudio to false to enable voice detection.';\n }\n // End of speech sensitivity must be a number between 0 and 1\n if (options.voiceDetection.endOfSpeechSensitivity !== undefined) {\n if (typeof options.voiceDetection.endOfSpeechSensitivity !== 'number') {\n return 'End of speech sensitivity must be a number';\n }\n if (options.voiceDetection.endOfSpeechSensitivity < 0 ||\n options.voiceDetection.endOfSpeechSensitivity > 1) {\n return 'End of speech sensitivity must be between 0 and 1';\n }\n }\n }\n return undefined;\n }\n buildStartSessionOptionsForClient() {\n var _a;\n const sessionOptions = {};\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.voiceDetection) {\n sessionOptions.voiceDetection = this.clientOptions.voiceDetection;\n }\n // return undefined if no options are set\n if (Object.keys(sessionOptions).length === 0) {\n return undefined;\n }\n return sessionOptions;\n }\n startSession(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n const config = this.personaConfig;\n // build session options from client options\n const sessionOptions = this.buildStartSessionOptionsForClient();\n // start a new session\n const response = yield this.apiClient.startSession(config, sessionOptions);\n const { sessionId, clientConfig, engineHost, engineProtocol, signallingEndpoint, } = response;\n const { heartbeatIntervalSeconds, maxWsReconnectionAttempts, iceServers: defaultIceServers, } = clientConfig;\n this.sessionId = sessionId;\n setMetricsContext({\n sessionId: this.sessionId,\n });\n // Use custom ICE servers if provided, otherwise use server-provided ICE servers\n const iceServers = ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.iceServers)\n ? this.clientOptions.iceServers\n : defaultIceServers;\n try {\n this.streamingClient = new StreamingClient(sessionId, {\n engine: {\n baseUrl: `${engineProtocol}://${engineHost}`,\n },\n signalling: {\n heartbeatIntervalSeconds,\n maxWsReconnectionAttempts,\n url: {\n baseUrl: engineHost,\n protocol: engineProtocol,\n signallingPath: signallingEndpoint,\n },\n },\n iceServers,\n inputAudio: {\n inputAudioState: this.inputAudioState,\n userProvidedMediaStream: ((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)\n ? undefined\n : userProvidedAudioStream,\n audioDeviceId: (_c = this.clientOptions) === null || _c === void 0 ? void 0 : _c.audioDeviceId,\n disableInputAudio: (_d = this.clientOptions) === null || _d === void 0 ? void 0 : _d.disableInputAudio,\n },\n apiGateway: (_f = (_e = this.clientOptions) === null || _e === void 0 ? void 0 : _e.api) === null || _f === void 0 ? void 0 : _f.apiGateway,\n metrics: {\n showPeerConnectionStatsReport: (_j = (_h = (_g = this.clientOptions) === null || _g === void 0 ? void 0 : _g.metrics) === null || _h === void 0 ? void 0 : _h.showPeerConnectionStatsReport) !== null && _j !== void 0 ? _j : false,\n peerConnectionStatsReportOutputFormat: (_m = (_l = (_k = this.clientOptions) === null || _k === void 0 ? void 0 : _k.metrics) === null || _l === void 0 ? void 0 : _l.peerConnectionStatsReportOutputFormat) !== null && _m !== void 0 ? _m : 'console',\n },\n }, this.publicEventEmitter, this.internalEventEmitter, this.toolCallManager);\n }\n catch (error) {\n setMetricsContext({\n sessionId: null,\n });\n throw new ClientError('Failed to initialize streaming client', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: error instanceof Error ? error.message : String(error),\n sessionId,\n });\n }\n return sessionId;\n });\n }\n startSessionIfNeeded(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.sessionId || !this.streamingClient) {\n yield this.startSession(userProvidedAudioStream);\n if (!this.sessionId || !this.streamingClient) {\n throw new ClientError('Session ID or streaming client is not available after starting session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: 'Failed to initialize session properly',\n });\n }\n }\n });\n }\n stream(userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if (this._isStreaming) {\n throw new Error('Already streaming');\n }\n // generate a new ID here to track the attempt\n const attemptCorrelationId = generateCorrelationId();\n setMetricsContext({\n attemptCorrelationId,\n sessionId: null, // reset sessionId\n });\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT, '1');\n if (((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) && userProvidedAudioStream) {\n console.warn('AnamClient:Input audio is disabled. User provided audio stream will be ignored.');\n }\n yield this.startSessionIfNeeded(userProvidedAudioStream);\n this._isStreaming = true;\n return new Promise((resolve) => {\n var _a;\n // set stream callbacks to capture the stream\n const streams = [];\n let videoReceived = false;\n let audioReceived = false;\n this.publicEventEmitter.addListener(AnamEvent.VIDEO_STREAM_STARTED, (videoStream) => {\n streams.push(videoStream);\n videoReceived = true;\n if (audioReceived) {\n resolve(streams);\n }\n });\n this.publicEventEmitter.addListener(AnamEvent.AUDIO_STREAM_STARTED, (audioStream) => {\n streams.push(audioStream);\n audioReceived = true;\n if (videoReceived) {\n resolve(streams);\n }\n });\n // start streaming\n (_a = this.streamingClient) === null || _a === void 0 ? void 0 : _a.startConnection();\n });\n });\n }\n /**\n * @deprecated This method is deprecated. Please use streamToVideoElement instead.\n */\n streamToVideoAndAudioElements(videoElementId, audioElementId, userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n console.warn('AnamClient: streamToVideoAndAudioElements is deprecated. To avoid possible audio issues, please use streamToVideoElement instead.');\n yield this.streamToVideoElement(videoElementId, userProvidedAudioStream);\n });\n }\n streamToVideoElement(videoElementId, userProvidedAudioStream) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n // generate a new ID here to track the attempt\n const attemptCorrelationId = generateCorrelationId();\n setMetricsContext({\n attemptCorrelationId,\n sessionId: null, // reset sessionId\n });\n sendClientMetric(ClientMetricMeasurement.CLIENT_METRIC_MEASUREMENT_SESSION_ATTEMPT, '1');\n if (((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) && userProvidedAudioStream) {\n console.warn('AnamClient:Input audio is disabled. User provided audio stream will be ignored.');\n }\n try {\n yield this.startSessionIfNeeded(userProvidedAudioStream);\n }\n catch (error) {\n if (error instanceof ClientError) {\n throw error;\n }\n throw new ClientError('Failed to start session', ErrorCode.CLIENT_ERROR_CODE_SERVER_ERROR, 500, {\n cause: error instanceof Error ? error.message : String(error),\n sessionId: this.sessionId,\n });\n }\n if (this._isStreaming) {\n throw new Error('Already streaming');\n }\n this._isStreaming = true;\n if (!this.streamingClient) {\n throw new Error('Failed to stream: streaming client is not available');\n }\n this.streamingClient.setMediaStreamTargetById(videoElementId);\n this.streamingClient.startConnection();\n });\n }\n /**\n * Send a talk command to make the persona speak the provided content.\n * @param content - The text content for the persona to speak\n * @throws Error if session is not started or not currently streaming\n */\n talk(content) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.streamingClient) {\n throw new Error('Failed to send talk command: session is not started. Have you called startSession?');\n }\n if (!this._isStreaming) {\n throw new Error('Failed to send talk command: not currently streaming. Have you called stream?');\n }\n yield this.streamingClient.sendTalkCommand(content);\n return;\n });\n }\n /**\n * Send a raw data message through the WebRTC data channel.\n * @param message - The message string to send through the data channel\n * @throws Error if session is not started\n */\n sendDataMessage(message) {\n if (this.streamingClient) {\n this.streamingClient.sendDataMessage(message);\n }\n else {\n throw new Error('Failed to send message: session is not started.');\n }\n }\n /**\n * Send a user text message in the active streaming session.\n * @param content - The text message content to send\n * @throws Error if not currently streaming or session is not started\n */\n sendUserMessage(content) {\n if (!this._isStreaming) {\n console.warn('AnamClient: Not currently streaming. User message will not be sent.');\n throw new Error('Failed to send user message: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to send user message: no active session');\n }\n const currentTimestamp = new Date().toISOString().replace('Z', '');\n const body = JSON.stringify({\n content,\n timestamp: currentTimestamp,\n session_id: sessionId,\n message_type: 'speech',\n });\n this.sendDataMessage(body);\n }\n interruptPersona() {\n if (!this._isStreaming) {\n throw new Error('Failed to send interrupt command: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to send interrupt command: no active session');\n }\n const body = JSON.stringify({\n message_type: 'interrupt',\n session_id: sessionId,\n timestamp: new Date().toISOString(), // removing Z not needed\n });\n this.sendDataMessage(body);\n }\n /**\n * Add context information to the active streaming session.\n * This allows injecting additional context (e.g., DOM state, user actions)\n * that the persona can use to inform its responses.\n * @param content - The context content string to send\n * @throws Error if not currently streaming or no active session\n */\n addContext(content) {\n if (!this._isStreaming) {\n throw new Error('Failed to add context: not currently streaming');\n }\n const sessionId = this.getActiveSessionId();\n if (!sessionId) {\n throw new Error('Failed to add context: no active session');\n }\n const body = JSON.stringify({\n message_type: 'context',\n session_id: sessionId,\n content,\n });\n this.sendDataMessage(body);\n }\n stopStreaming() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.streamingClient) {\n this.publicEventEmitter.emit(AnamEvent.CONNECTION_CLOSED, ConnectionClosedCode.NORMAL);\n yield this.streamingClient.stopConnection();\n this.streamingClient = null;\n this.sessionId = null;\n setMetricsContext({\n attemptCorrelationId: null,\n sessionId: null,\n organizationId: this.organizationId,\n });\n this._isStreaming = false;\n }\n });\n }\n isStreaming() {\n return this._isStreaming;\n }\n setPersonaConfig(personaConfig) {\n this.personaConfig = personaConfig;\n }\n getPersonaConfig() {\n return this.personaConfig;\n }\n getInputAudioState() {\n var _a;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Audio state will not be used because input audio is disabled.');\n }\n // if streaming client is available, make sure our state is up to date\n if (this.streamingClient) {\n this.inputAudioState = this.streamingClient.getInputAudioState();\n }\n return this.inputAudioState;\n }\n muteInputAudio() {\n var _a, _b;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Input audio is disabled. Muting input audio will have no effect.');\n }\n if (this.streamingClient && !((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)) {\n this.inputAudioState = this.streamingClient.muteInputAudio();\n }\n else {\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: true });\n }\n return this.inputAudioState;\n }\n unmuteInputAudio() {\n var _a, _b;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n console.warn('AnamClient: Input audio is disabled. Unmuting input audio will have no effect.');\n }\n if (this.streamingClient && !((_b = this.clientOptions) === null || _b === void 0 ? void 0 : _b.disableInputAudio)) {\n this.inputAudioState = this.streamingClient.unmuteInputAudio();\n }\n else {\n this.inputAudioState = Object.assign(Object.assign({}, this.inputAudioState), { isMuted: false });\n }\n return this.inputAudioState;\n }\n changeAudioInputDevice(deviceId) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n if ((_a = this.clientOptions) === null || _a === void 0 ? void 0 : _a.disableInputAudio) {\n throw new Error('AnamClient: Cannot change audio input device because input audio is disabled.');\n }\n if (!this._isStreaming) {\n throw new Error('AnamClient: Cannot change audio input device while not streaming. Start streaming first.');\n }\n if (!this.streamingClient) {\n throw new Error('AnamClient: Cannot change audio input device because streaming client is not available. Start streaming first.');\n }\n yield this.streamingClient.changeAudioInputDevice(deviceId);\n });\n }\n createTalkMessageStream(correlationId) {\n if (!this.streamingClient) {\n throw new Error('Failed to start talk message stream: session is not started.');\n }\n if (correlationId && correlationId.trim() === '') {\n throw new Error('Failed to start talk message stream: correlationId is empty');\n }\n return this.streamingClient.startTalkMessageStream(correlationId);\n }\n createAgentAudioInputStream(config) {\n if (!this.streamingClient) {\n throw new Error('Failed to create agent audio input stream: session is not started.');\n }\n return this.streamingClient.createAgentAudioInputStream(config);\n }\n /**\n * Event handling\n */\n addListener(event, callback) {\n this.publicEventEmitter.addListener(event, callback);\n }\n removeListener(event, callback) {\n this.publicEventEmitter.removeListener(event, callback);\n }\n getActiveSessionId() {\n return this.sessionId;\n }\n registerToolCallHandler(toolName, handler) {\n return this.toolCallManager.registerHandler(toolName, handler);\n }\n}\n//# sourceMappingURL=AnamClient.js.map","import AnamClient from './AnamClient';\nimport { ClientError, ErrorCode } from './lib/ClientError';\n/**\n * Create a new Anam client.\n * @param sessionToken - A session token can be obtained from the Anam API.\n * @param personaConfig - The persona configuration to use.\n * @param options - Additional options.\n * @returns A new Anam client instance.\n */\nconst createClient = (sessionToken, options) => {\n return new AnamClient(sessionToken, undefined, options);\n};\n/**\n * Create a new Anam client with an API key instead of a session token.\n * This method is unsafe for production environments because it requires exposing your API key to the client side.\n * Only use this method for local testing.\n * @param apiKey - Your Anam API key.\n * @param personaConfig - The persona configuration to use.\n * @param options - Additional options.\n * @returns A new Anam client instance.\n */\nconst unsafe_createClientWithApiKey = (apiKey, personaConfig, options) => {\n return new AnamClient(undefined, personaConfig, Object.assign(Object.assign({}, options), { apiKey }));\n};\nexport { createClient, unsafe_createClientWithApiKey, ClientError, ErrorCode };\nexport * from './types';\n//# sourceMappingURL=index.js.map","/**\n * AnamSession — Wraps @anam-ai/js-sdk for avatar rendering in BYO-audio mode.\n *\n * GPT Realtime API handles all STT/LLM/TTS. Anam is used only for:\n * - Displaying the lip-synced avatar video via WebRTC\n * - Receiving PCM audio chunks (from GPT Realtime) and playing them back\n * with matching lip-sync via createAgentAudioInputStream\n *\n * Anam's own STT pipeline is disabled via muteInputAudio() immediately after connect.\n */\n\nimport { createClient } from '@anam-ai/js-sdk'\nimport type AnamClient from '@anam-ai/js-sdk/dist/module/AnamClient'\nimport { AnamEvent } from '@anam-ai/js-sdk'\nimport type { AgentAudioInputStream } from '@anam-ai/js-sdk/dist/module/types/AgentAudioInputStream'\n\nexport interface AnamSessionOptions {\n sessionToken: string\n /** If true, video element is created without fixed positioning (will be reparented by caller) */\n inlineMode?: boolean\n}\n\nlet videoIdCounter = 0\n\nexport class AnamSession {\n // --- Callbacks ---\n onVideoReady: ((el: HTMLVideoElement) => void) | null = null\n onConnected: (() => void) | null = null\n onDisconnected: ((reason: string) => void) | null = null\n onTalkStreamInterrupted: (() => void) | null = null\n onError: ((err: Error) => void) | null = null\n\n // --- Internal ---\n private client: AnamClient\n private audioInputStream: AgentAudioInputStream | null = null\n private videoElement: HTMLVideoElement | null = null\n private _connected = false\n private inlineMode: boolean\n\n constructor(opts: AnamSessionOptions) {\n this.inlineMode = opts.inlineMode ?? false\n this.client = createClient(opts.sessionToken, {\n disableInputAudio: true,\n metrics: { disableClientMetrics: true },\n })\n }\n\n get isConnected(): boolean {\n return this._connected\n }\n\n get videoEl(): HTMLVideoElement | null {\n return this.videoElement\n }\n\n // -----------------------------------------------------------------------\n // Public API\n // -----------------------------------------------------------------------\n\n async connect(): Promise<void> {\n try {\n // Create a video element for the avatar stream\n const videoId = `anam-avatar-video-${++videoIdCounter}`\n this.videoElement = document.createElement('video')\n this.videoElement.id = videoId\n this.videoElement.autoplay = true\n this.videoElement.playsInline = true\n\n if (this.inlineMode) {\n // Inline mode: video will be reparented into popover by the widget\n this.videoElement.style.cssText = `\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: none;\n `\n } else {\n // Floating mode: fixed position at viewport bottom\n this.videoElement.style.cssText = `\n position: fixed;\n bottom: 0;\n left: 50%;\n transform: translateX(-50%);\n width: 280px;\n height: auto;\n z-index: 2147483646;\n pointer-events: none;\n display: none;\n `\n }\n document.body.appendChild(this.videoElement)\n\n // Register event listeners before calling stream()\n this.client.addListener(AnamEvent.CONNECTION_ESTABLISHED, () => {\n console.log('[AnamSession] Connection established')\n this._connected = true\n this.onConnected?.()\n })\n\n this.client.addListener(AnamEvent.VIDEO_PLAY_STARTED, () => {\n console.log('[AnamSession] Video playing')\n if (this.videoElement) {\n // Show the video\n this.videoElement.style.display = ''\n this.onVideoReady?.(this.videoElement)\n }\n })\n\n this.client.addListener(AnamEvent.TALK_STREAM_INTERRUPTED, () => {\n console.log('[AnamSession] Talk stream interrupted')\n this.onTalkStreamInterrupted?.()\n })\n\n this.client.addListener(AnamEvent.CONNECTION_CLOSED, (reason) => {\n console.log('[AnamSession] Connection closed:', reason)\n this._connected = false\n this.onDisconnected?.(String(reason))\n })\n\n // Start streaming — attach Anam's video output to our element\n await this.client.streamToVideoElement(videoId)\n\n // Create the BYO audio input stream (PCM 16-bit 24kHz mono — exact GPT Realtime match)\n this.audioInputStream = this.client.createAgentAudioInputStream({\n encoding: 'pcm_s16le',\n sampleRate: 24000,\n channels: 1,\n })\n\n console.log('[AnamSession] BYO audio input stream ready')\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err))\n console.error('[AnamSession] Connection failed:', error.message)\n this.onError?.(error)\n this.close()\n throw error\n }\n }\n\n /**\n * Send a PCM chunk from GPT Realtime to Anam for lip-sync + audio playback.\n * Accepts Uint8Array (raw PCM 16-bit little-endian, 24kHz, mono).\n */\n sendAudioChunk(pcmData: Uint8Array): void {\n this.audioInputStream?.sendAudioChunk(pcmData)\n }\n\n /**\n * Signal end of a speaking turn (call on response.done from GPT Realtime).\n */\n endSequence(): void {\n this.audioInputStream?.endSequence()\n }\n\n /**\n * Interrupt the avatar's current speech (call on user speech detected).\n */\n interrupt(): void {\n this.client.interruptPersona()\n }\n\n private _closing = false\n\n /** Close everything. */\n close(): void {\n if (this._closing) return\n this._closing = true\n console.log('[AnamSession] Closing...')\n\n try { this.client.stopStreaming() } catch {}\n\n if (this.videoElement) {\n this.videoElement.pause()\n this.videoElement.srcObject = null\n this.videoElement.remove()\n this.videoElement = null\n }\n\n // Remove any other Anam video elements\n document.querySelectorAll('video[id^=\"anam-avatar-video\"]').forEach(el => {\n ;(el as HTMLVideoElement).pause()\n el.remove()\n })\n\n this.audioInputStream = null\n this._connected = false\n }\n}\n","/**\n * DomAnalyzer — Smart DOM Analysis inspired by Alibaba's PageAgent.\n *\n * Traverses the host page DOM, identifies interactive and structural elements,\n * assigns numeric indices, and produces a text representation suitable for\n * an LLM to reason about.\n *\n * The element map is kept so actions can resolve indices back to HTMLElements.\n */\n\n// Tags that are inherently interactive\nconst INTERACTIVE_TAGS = new Set([\n 'a', 'button', 'input', 'select', 'textarea',\n 'details', 'summary', 'label', 'option',\n])\n\n// ARIA roles that indicate interactivity\nconst INTERACTIVE_ROLES = new Set([\n 'button', 'link', 'menuitem', 'menuitemcheckbox', 'menuitemradio',\n 'tab', 'switch', 'slider', 'combobox', 'listbox', 'option',\n 'radio', 'checkbox', 'textbox', 'searchbox', 'scrollbar',\n])\n\n// Heading tags (indexed for scroll-to targets, not clickable)\nconst HEADING_TAGS = new Set(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n\n// Attributes worth including in the text representation\nconst USEFUL_ATTRS = [\n 'type', 'role', 'aria-label', 'placeholder', 'value',\n 'href', 'alt', 'title', 'name', 'checked', 'aria-expanded',\n]\n\nexport interface AnalysisResult {\n text: string\n elementMap: Map<number, HTMLElement>\n}\n\nexport class DomAnalyzer {\n private elementMap = new Map<number, HTMLElement>()\n\n /** Analyze the current page and return a text snapshot + element map. */\n analyze(): AnalysisResult {\n this.elementMap.clear()\n let index = 0\n const lines: string[] = []\n\n // Page header\n lines.push(`Page: ${document.title}`)\n lines.push(`URL: ${location.href}`)\n lines.push('')\n\n const walk = (node: Node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = (node.textContent ?? '').trim()\n if (text && text.length > 1) {\n lines.push(text)\n }\n return\n }\n\n if (node.nodeType !== Node.ELEMENT_NODE) return\n\n const el = node as HTMLElement\n const tag = el.tagName.toLowerCase()\n\n // Skip invisible elements\n if (!this.isVisible(el)) return\n\n // Skip script, style, svg, noscript, the widget itself\n if (['script', 'style', 'svg', 'noscript', 'link', 'meta'].includes(tag)) return\n if (el.id === 'holostaff-widget-root' || el.closest('#holostaff-widget-root')) return\n\n const isInteractive = this.isInteractive(el)\n const isHeading = HEADING_TAGS.has(tag)\n\n if (isInteractive || isHeading) {\n const idx = index++\n this.elementMap.set(idx, el)\n const attrs = this.getUsefulAttrs(el)\n const attrStr = attrs ? ' ' + attrs : ''\n const innerText = this.getDirectText(el).slice(0, 200)\n\n if (isHeading) {\n // Render headings with markdown-style markers\n const level = parseInt(tag[1])\n const hashes = '#'.repeat(level)\n lines.push('')\n lines.push(`${hashes} [${idx}]${innerText}`)\n } else {\n lines.push(`[${idx}]<${tag}${attrStr}>${innerText}</${tag}>`)\n }\n return // don't recurse into interactive elements (text already captured)\n }\n\n // For non-interactive elements, recurse into children\n for (const child of el.childNodes) {\n walk(child)\n }\n }\n\n walk(document.body)\n\n return { text: lines.join('\\n'), elementMap: this.elementMap }\n }\n\n /** Get an element by its analysis index. */\n getElementByIndex(index: number): HTMLElement | null {\n return this.elementMap.get(index) ?? null\n }\n\n // -----------------------------------------------------------------------\n // Private helpers\n // -----------------------------------------------------------------------\n\n private isVisible(el: HTMLElement): boolean {\n const style = getComputedStyle(el)\n // Only skip elements explicitly hidden — don't filter by dimensions\n // or opacity (scroll animations, layout wrappers may have zero size)\n if (style.display === 'none') return false\n if (style.visibility === 'hidden') return false\n\n return true\n }\n\n private isInteractive(el: HTMLElement): boolean {\n const tag = el.tagName.toLowerCase()\n\n // Layer 1: Tag-based\n if (INTERACTIVE_TAGS.has(tag)) {\n // Skip disabled elements\n if ((el as HTMLInputElement).disabled) return false\n return true\n }\n\n // Layer 2: Role-based\n const role = el.getAttribute('role')\n if (role && INTERACTIVE_ROLES.has(role)) return true\n\n // Layer 3: Cursor-based\n try {\n const cursor = getComputedStyle(el).cursor\n if (cursor === 'pointer') return true\n } catch {}\n\n // Layer 4: tabindex (explicitly focusable)\n if (el.hasAttribute('tabindex') && el.getAttribute('tabindex') !== '-1') return true\n\n // Layer 5: contenteditable\n if (el.isContentEditable && el.getAttribute('contenteditable') !== 'false') return true\n\n return false\n }\n\n private getDirectText(el: HTMLElement): string {\n // Get text content, collapse whitespace\n const raw = el.textContent ?? ''\n return raw.replace(/\\s+/g, ' ').trim()\n }\n\n private getUsefulAttrs(el: HTMLElement): string {\n const parts: string[] = []\n for (const attr of USEFUL_ATTRS) {\n const val = el.getAttribute(attr)\n if (val && val.length > 0 && val.length < 100) {\n parts.push(`${attr}=\"${val}\"`)\n }\n }\n return parts.join(' ')\n }\n}\n","/**\n * ToolHandler — Handles Realtime API tool calls (function calls).\n *\n * Accumulates streamed function_call_arguments deltas, parses on completion,\n * dispatches to the page agent Cloud Function, and executes returned actions.\n *\n * Follows the pattern from ai-canvas useToolDataChannel.ts.\n */\n\nimport type { RealtimeSession } from './realtimeSession'\nimport type { DomAnalyzer } from './domAnalyzer'\nimport { PageActions } from '../actions/pageActions'\nimport { OverlayActions } from '../actions/overlayActions'\nimport { GlassConfirmPrompt } from '../ui/components/confirmPrompt'\nimport { postPageAction } from '../api/backend'\n\n// Actions that require visitor confirmation before executing\nconst CONFIRM_ACTIONS = new Set(['scroll_to', 'click', 'highlight'])\n\nexport interface PageActionCommand {\n action: 'scroll_to' | 'highlight' | 'click' | 'fill' | 'describe'\n index: number\n value?: string\n description: string\n}\n\nexport class ToolHandler {\n private realtimeSession: RealtimeSession\n private domAnalyzer: DomAnalyzer\n private pageActions: PageActions\n private overlayActions: OverlayActions\n private confirmationPrompt: GlassConfirmPrompt\n private staffId: string\n private backendUrl: string\n\n /** Called when a tool call completes (for logging). */\n onToolCall: ((tool: string, args: Record<string, unknown>) => void) | null = null\n\n // Accumulation state (per item_id)\n private fnArgBufs = new Map<string, string>()\n private fnNames = new Map<string, string>()\n private fnCallIds = new Map<string, string>()\n\n constructor(opts: {\n realtimeSession: RealtimeSession\n domAnalyzer: DomAnalyzer\n pageActions: PageActions\n overlayActions: OverlayActions\n confirmationPrompt: GlassConfirmPrompt\n staffId: string\n backendUrl: string\n }) {\n this.realtimeSession = opts.realtimeSession\n this.domAnalyzer = opts.domAnalyzer\n this.pageActions = opts.pageActions\n this.overlayActions = opts.overlayActions\n this.confirmationPrompt = opts.confirmationPrompt\n this.staffId = opts.staffId\n this.backendUrl = opts.backendUrl\n }\n\n /**\n * Handle a data channel message. Returns true if the message was a tool call\n * event that was handled, false if it should be processed by other handlers.\n */\n handleMessage(msg: any): boolean {\n const type = msg.type as string\n\n switch (type) {\n case 'response.output_item.added':\n if (msg.item?.type === 'function_call') {\n const itemId = msg.item.id\n const name = msg.item.name\n const callId = msg.item.call_id || msg.item.id\n this.fnNames.set(itemId, name)\n this.fnCallIds.set(itemId, callId)\n this.fnArgBufs.set(itemId, '')\n console.log(`[ToolHandler] Function call started: ${name} (${itemId})`)\n return true\n }\n return false\n\n case 'response.function_call_arguments.delta':\n if (msg.item_id && this.fnArgBufs.has(msg.item_id)) {\n const current = this.fnArgBufs.get(msg.item_id) ?? ''\n this.fnArgBufs.set(msg.item_id, current + (msg.delta ?? ''))\n return true\n }\n return false\n\n case 'response.function_call_arguments.done':\n if (msg.item_id && this.fnArgBufs.has(msg.item_id)) {\n this.handleFunctionCallDone(msg.item_id)\n return true\n }\n return false\n\n default:\n return false\n }\n }\n\n // -----------------------------------------------------------------------\n // Private\n // -----------------------------------------------------------------------\n\n private async handleFunctionCallDone(itemId: string): Promise<void> {\n const name = this.fnNames.get(itemId) ?? 'unknown'\n const callId = this.fnCallIds.get(itemId) ?? itemId\n const argsStr = this.fnArgBufs.get(itemId) ?? '{}'\n\n // Clean up accumulation state\n this.fnArgBufs.delete(itemId)\n this.fnNames.delete(itemId)\n this.fnCallIds.delete(itemId)\n\n // Parse arguments\n let args: Record<string, any>\n try {\n args = JSON.parse(argsStr)\n } catch {\n console.warn(`[ToolHandler] Failed to parse args for ${name}:`, argsStr)\n this.sendToolResult(callId, { error: 'Malformed JSON in function call arguments' })\n return\n }\n\n console.log(`[ToolHandler] Executing: ${name}`, args)\n\n // Notify logger\n this.onToolCall?.(name, args)\n\n let result: object | null = null\n\n switch (name) {\n case 'page_action':\n await this.handlePageAction(callId, args.instruction ?? '')\n return // handlePageAction sends its own result\n\n case 'show_text_card':\n result = this.overlayActions.showTextCard(args.title ?? '', args.body ?? '')\n break\n\n case 'show_image_card':\n result = this.overlayActions.showImageCard(args.image_url ?? '', args.caption)\n break\n\n case 'show_bullet_list':\n result = this.overlayActions.showBulletList(args.title ?? '', args.items ?? [])\n break\n\n case 'dismiss_overlays':\n result = this.overlayActions.dismissAll()\n break\n\n default:\n console.warn(`[ToolHandler] Unknown tool: ${name}`)\n result = { error: `Unknown tool: ${name}` }\n }\n\n this.sendToolResult(callId, result!)\n }\n\n private async handlePageAction(callId: string, instruction: string): Promise<void> {\n try {\n // Quick-handle common scroll commands locally (no Cloud Function roundtrip)\n const lowerInstr = instruction.toLowerCase()\n if (lowerInstr.includes('scroll') && (lowerInstr.includes('top') || lowerInstr.includes('beginning'))) {\n const result = this.pageActions.scrollTo(-1)\n this.sendToolResult(callId, { results: [{ action: 'scroll_to', ...result }] })\n return\n }\n if (lowerInstr.includes('scroll') && (lowerInstr.includes('bottom') || lowerInstr.includes('end'))) {\n const result = this.pageActions.scrollTo(-2)\n this.sendToolResult(callId, { results: [{ action: 'scroll_to', ...result }] })\n return\n }\n\n // 1. Analyze the DOM\n const { text: domSnapshot } = this.domAnalyzer.analyze()\n console.log(`[ToolHandler] DOM snapshot: ${domSnapshot.length} chars, instruction: \"${instruction}\"`)\n\n // 2. Call the page agent Cloud Function\n const response = await postPageAction(\n this.staffId,\n domSnapshot,\n instruction,\n this.backendUrl,\n )\n\n const actions = (response.actions ?? []) as PageActionCommand[]\n console.log(`[ToolHandler] Page agent returned ${actions.length} actions:`, actions)\n\n // 3. Execute each action\n const results: Array<{ action: string; status: string; description: string }> = []\n\n for (const cmd of actions) {\n if (cmd.action === 'describe') {\n results.push({ action: 'describe', status: 'ok', description: cmd.description })\n continue\n }\n\n // Actions requiring confirmation\n if (CONFIRM_ACTIONS.has(cmd.action)) {\n const confirmed = await this.confirmationPrompt.ask(\n `${cmd.description}?`\n )\n if (!confirmed) {\n results.push({\n action: cmd.action,\n status: 'declined',\n description: 'Visitor declined',\n })\n continue\n }\n }\n\n // Execute\n let result: { status: string; description: string }\n switch (cmd.action) {\n case 'scroll_to':\n result = this.pageActions.scrollTo(cmd.index)\n break\n case 'highlight':\n result = this.pageActions.highlight(cmd.index)\n break\n case 'click':\n result = this.pageActions.click(cmd.index)\n break\n case 'fill':\n result = this.pageActions.fill(cmd.index, cmd.value ?? '')\n break\n default:\n result = { status: 'error', description: `Unknown action: ${cmd.action}` }\n }\n results.push({ action: cmd.action, ...result })\n }\n\n this.sendToolResult(callId, { results })\n\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error('[ToolHandler] Page action failed:', msg)\n this.sendToolResult(callId, { error: msg })\n }\n }\n\n private sendToolResult(callId: string, output: object): void {\n this.realtimeSession.sendJSON({\n type: 'conversation.item.create',\n item: {\n type: 'function_call_output',\n call_id: callId,\n output: JSON.stringify(output),\n },\n })\n // Trigger the AI's next response\n this.realtimeSession.sendJSON({ type: 'response.create' })\n }\n}\n","/**\n * Page action executors — scroll, highlight, click, fill form fields.\n */\n\nimport type { DomAnalyzer } from '../engine/domAnalyzer'\nimport { GlassHighlightRenderer } from '../ui/components/highlightOverlay'\n\nexport class PageActions {\n private analyzer: DomAnalyzer\n private highlightRenderer: GlassHighlightRenderer\n\n constructor(analyzer: DomAnalyzer, highlightRenderer: GlassHighlightRenderer) {\n this.analyzer = analyzer\n this.highlightRenderer = highlightRenderer\n }\n\n scrollTo(index: number): { status: string; description: string } {\n // Special case: index -1 means scroll to top, -2 means scroll to bottom\n if (index === -1) {\n window.scrollTo({ top: 0, behavior: 'smooth' })\n document.documentElement.scrollTop = 0\n document.body.scrollTop = 0\n console.log('[PageActions] Scrolled to top')\n return { status: 'scrolled', description: 'Top of page' }\n }\n if (index === -2) {\n window.scrollTo({ top: document.body.scrollHeight, behavior: 'smooth' })\n console.log('[PageActions] Scrolled to bottom')\n return { status: 'scrolled', description: 'Bottom of page' }\n }\n\n const el = this.analyzer.getElementByIndex(index)\n if (!el) return { status: 'error', description: `Element [${index}] not found` }\n\n el.scrollIntoView({ behavior: 'smooth', block: 'center' })\n // Also try scrolling the nearest scrollable ancestor\n let parent = el.parentElement\n while (parent) {\n const overflow = getComputedStyle(parent).overflowY\n if (overflow === 'auto' || overflow === 'scroll') {\n const elTop = el.getBoundingClientRect().top - parent.getBoundingClientRect().top + parent.scrollTop\n parent.scrollTo({ top: elTop - parent.clientHeight / 2, behavior: 'smooth' })\n break\n }\n parent = parent.parentElement\n }\n\n const label = this.describeElement(el)\n console.log(`[PageActions] Scrolled to [${index}] ${label}`)\n return { status: 'scrolled', description: label }\n }\n\n highlight(index: number, durationMs = 3000): { status: string; description: string } {\n const el = this.analyzer.getElementByIndex(index)\n if (!el) return { status: 'error', description: `Element [${index}] not found` }\n\n this.highlightRenderer.highlight(el, durationMs)\n const label = this.describeElement(el)\n console.log(`[PageActions] Highlighting [${index}] ${label} for ${durationMs}ms`)\n return { status: 'highlighted', description: label }\n }\n\n click(index: number): { status: string; description: string } {\n const el = this.analyzer.getElementByIndex(index)\n if (!el) return { status: 'error', description: `Element [${index}] not found` }\n\n el.click()\n const label = this.describeElement(el)\n console.log(`[PageActions] Clicked [${index}] ${label}`)\n return { status: 'clicked', description: label }\n }\n\n fill(index: number, value: string): { status: string; description: string } {\n const el = this.analyzer.getElementByIndex(index)\n if (!el) return { status: 'error', description: `Element [${index}] not found` }\n\n const tag = el.tagName.toLowerCase()\n const type = (el as HTMLInputElement).type?.toLowerCase()\n\n if (tag === 'select') {\n const select = el as HTMLSelectElement\n const option = Array.from(select.options).find(\n o => o.text.toLowerCase().includes(value.toLowerCase()) ||\n o.value.toLowerCase() === value.toLowerCase()\n )\n if (option) {\n select.value = option.value\n select.dispatchEvent(new Event('change', { bubbles: true }))\n } else {\n return { status: 'error', description: `No option matching \"${value}\"` }\n }\n } else if (type === 'checkbox' || type === 'radio') {\n const input = el as HTMLInputElement\n input.checked = value === 'true' || value === '1'\n input.dispatchEvent(new Event('change', { bubbles: true }))\n } else {\n // text, email, tel, number, textarea, contenteditable\n const nativeSetter = Object.getOwnPropertyDescriptor(\n tag === 'textarea' ? HTMLTextAreaElement.prototype : HTMLInputElement.prototype,\n 'value'\n )?.set\n\n if (nativeSetter) {\n nativeSetter.call(el, value)\n } else {\n (el as HTMLInputElement).value = value\n }\n el.dispatchEvent(new Event('input', { bubbles: true }))\n el.dispatchEvent(new Event('change', { bubbles: true }))\n }\n\n const label = this.describeElement(el)\n console.log(`[PageActions] Filled [${index}] ${label} with \"${value}\"`)\n return { status: 'filled', description: `${label} = \"${value}\"` }\n }\n\n private describeElement(el: HTMLElement): string {\n const tag = el.tagName.toLowerCase()\n const text = (el.textContent ?? '').trim().slice(0, 50)\n const label = el.getAttribute('aria-label') || el.getAttribute('placeholder') || text\n return `<${tag}>${label}</${tag}>`\n }\n}\n","/**\n * Overlay action executors — dispatch overlay commands to the OverlayRenderer.\n */\n\nimport type { GlassOverlayRenderer } from '../ui/components/overlayCard'\n\nexport class OverlayActions {\n private renderer: GlassOverlayRenderer\n\n constructor(renderer: GlassOverlayRenderer) {\n this.renderer = renderer\n }\n\n showTextCard(title: string, body: string): { status: string } {\n this.renderer.showTextCard(title, body)\n console.log(`[OverlayActions] Showing text card: \"${title}\"`)\n return { status: 'shown' }\n }\n\n showImageCard(imageUrl: string, caption?: string): { status: string } {\n this.renderer.showImageCard(imageUrl, caption)\n console.log(`[OverlayActions] Showing image card: \"${caption ?? imageUrl}\"`)\n return { status: 'shown' }\n }\n\n showBulletList(title: string, items: string[]): { status: string } {\n this.renderer.showBulletList(title, items)\n console.log(`[OverlayActions] Showing bullet list: \"${title}\" (${items.length} items)`)\n return { status: 'shown' }\n }\n\n dismissAll(): { status: string } {\n this.renderer.dismissAll()\n console.log('[OverlayActions] Dismissed all overlays')\n return { status: 'dismissed' }\n }\n}\n","/**\n * ConversationLogger — collects transcript messages and tool actions during\n * a widget conversation and POSTs the log to the logConversation Cloud Function\n * when the session ends.\n *\n * Matches the existing Holostaff `ConversationRequest` schema:\n * { staffId, staffName, userId, startTime, lastMessageAt, messages, actions }\n */\n\nconst DEFAULT_BACKEND = 'https://us-central1-holostaff-ai.cloudfunctions.net'\n\nexport interface LoggedMessage {\n sender: 'user' | 'staff'\n text: string\n timestamp: string\n}\n\nexport interface LoggedAction {\n tool: string\n args: Record<string, unknown>\n timestamp: string\n}\n\nexport class ConversationLogger {\n private staffId: string\n private staffName: string\n private backendUrl: string\n\n private startTime: string\n private userId: string\n private messages: Record<string, LoggedMessage> = {}\n private actions: LoggedAction[] = []\n private msgCounter = 0\n\n constructor(opts: {\n staffId: string\n staffName: string\n backendUrl?: string\n }) {\n this.staffId = opts.staffId\n this.staffName = opts.staffName\n this.backendUrl = opts.backendUrl ?? DEFAULT_BACKEND\n this.startTime = new Date().toISOString()\n // Generate a pseudo-anonymous visitor ID (not PII)\n this.userId = `visitor_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`\n }\n\n /** Log a user transcript (from ASR). */\n addUserMessage(text: string): void {\n if (!text.trim()) return\n const key = `msg_${this.msgCounter++}`\n this.messages[key] = {\n sender: 'user',\n text: text.trim(),\n timestamp: new Date().toISOString(),\n }\n }\n\n /** Log an AI response text. */\n addStaffMessage(text: string): void {\n if (!text.trim()) return\n const key = `msg_${this.msgCounter++}`\n this.messages[key] = {\n sender: 'staff',\n text: text.trim(),\n timestamp: new Date().toISOString(),\n }\n }\n\n /** Log a tool call / page action. */\n addAction(tool: string, args: Record<string, unknown>): void {\n this.actions.push({\n tool,\n args,\n timestamp: new Date().toISOString(),\n })\n }\n\n /** Get a brief text summary of the conversation for the vision loop. */\n getSummary(): string {\n const msgs = Object.values(this.messages)\n if (msgs.length === 0) return 'No conversation took place.'\n\n // Build a brief transcript: \"User: ... | Staff: ... | User: ...\"\n const lines = msgs.slice(-6).map(m =>\n `${m.sender === 'user' ? 'User' : 'Agent'}: ${m.text.slice(0, 80)}`\n )\n return lines.join(' | ')\n }\n\n /** Send the conversation log to the backend. Fire-and-forget. */\n async flush(): Promise<void> {\n // Only log if there are actual messages\n if (Object.keys(this.messages).length === 0) {\n console.log('[Logger] No messages to log, skipping')\n return\n }\n\n const lastMsg = Object.values(this.messages).pop()\n const payload = {\n staffId: this.staffId,\n staffName: this.staffName,\n userId: this.userId,\n startTime: this.startTime,\n lastMessageAt: lastMsg?.timestamp ?? this.startTime,\n messages: this.messages,\n actions: this.actions,\n source: 'widget_v2',\n }\n\n console.log('[Logger] Flushing conversation log:', {\n messages: Object.keys(this.messages).length,\n actions: this.actions.length,\n })\n\n const url = `${this.backendUrl}/logConversation`\n const body = JSON.stringify(payload)\n\n try {\n const res = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body,\n keepalive: true, // survives page unload\n })\n\n if (res.ok) {\n const data = await res.json()\n console.log('[Logger] Conversation logged:', data.id)\n } else {\n console.warn('[Logger] Failed to log conversation:', res.status)\n }\n } catch (err) {\n console.warn('[Logger] Error logging conversation:', err)\n }\n }\n}\n","var NodeType;\r\n(function (NodeType) {\r\n NodeType[NodeType[\"Document\"] = 0] = \"Document\";\r\n NodeType[NodeType[\"DocumentType\"] = 1] = \"DocumentType\";\r\n NodeType[NodeType[\"Element\"] = 2] = \"Element\";\r\n NodeType[NodeType[\"Text\"] = 3] = \"Text\";\r\n NodeType[NodeType[\"CDATA\"] = 4] = \"CDATA\";\r\n NodeType[NodeType[\"Comment\"] = 5] = \"Comment\";\r\n})(NodeType || (NodeType = {}));\n\nfunction isElement(n) {\r\n return n.nodeType === n.ELEMENT_NODE;\r\n}\r\nfunction isShadowRoot(n) {\r\n var host = n === null || n === void 0 ? void 0 : n.host;\r\n return Boolean((host === null || host === void 0 ? void 0 : host.shadowRoot) === n);\r\n}\r\nfunction isNativeShadowDom(shadowRoot) {\r\n return Object.prototype.toString.call(shadowRoot) === '[object ShadowRoot]';\r\n}\r\nfunction fixBrowserCompatibilityIssuesInCSS(cssText) {\r\n if (cssText.includes(' background-clip: text;') &&\r\n !cssText.includes(' -webkit-background-clip: text;')) {\r\n cssText = cssText.replace(' background-clip: text;', ' -webkit-background-clip: text; background-clip: text;');\r\n }\r\n return cssText;\r\n}\r\nfunction getCssRulesString(s) {\r\n try {\r\n var rules = s.rules || s.cssRules;\r\n return rules\r\n ? fixBrowserCompatibilityIssuesInCSS(Array.from(rules).map(getCssRuleString).join(''))\r\n : null;\r\n }\r\n catch (error) {\r\n return null;\r\n }\r\n}\r\nfunction getCssRuleString(rule) {\r\n var cssStringified = rule.cssText;\r\n if (isCSSImportRule(rule)) {\r\n try {\r\n cssStringified = getCssRulesString(rule.styleSheet) || cssStringified;\r\n }\r\n catch (_a) {\r\n }\r\n }\r\n return cssStringified;\r\n}\r\nfunction isCSSImportRule(rule) {\r\n return 'styleSheet' in rule;\r\n}\r\nvar Mirror = (function () {\r\n function Mirror() {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n }\r\n Mirror.prototype.getId = function (n) {\r\n var _a;\r\n if (!n)\r\n return -1;\r\n var id = (_a = this.getMeta(n)) === null || _a === void 0 ? void 0 : _a.id;\r\n return id !== null && id !== void 0 ? id : -1;\r\n };\r\n Mirror.prototype.getNode = function (id) {\r\n return this.idNodeMap.get(id) || null;\r\n };\r\n Mirror.prototype.getIds = function () {\r\n return Array.from(this.idNodeMap.keys());\r\n };\r\n Mirror.prototype.getMeta = function (n) {\r\n return this.nodeMetaMap.get(n) || null;\r\n };\r\n Mirror.prototype.removeNodeFromMap = function (n) {\r\n var _this = this;\r\n var id = this.getId(n);\r\n this.idNodeMap[\"delete\"](id);\r\n if (n.childNodes) {\r\n n.childNodes.forEach(function (childNode) {\r\n return _this.removeNodeFromMap(childNode);\r\n });\r\n }\r\n };\r\n Mirror.prototype.has = function (id) {\r\n return this.idNodeMap.has(id);\r\n };\r\n Mirror.prototype.hasNode = function (node) {\r\n return this.nodeMetaMap.has(node);\r\n };\r\n Mirror.prototype.add = function (n, meta) {\r\n var id = meta.id;\r\n this.idNodeMap.set(id, n);\r\n this.nodeMetaMap.set(n, meta);\r\n };\r\n Mirror.prototype.replace = function (id, n) {\r\n var oldNode = this.getNode(id);\r\n if (oldNode) {\r\n var meta = this.nodeMetaMap.get(oldNode);\r\n if (meta)\r\n this.nodeMetaMap.set(n, meta);\r\n }\r\n this.idNodeMap.set(id, n);\r\n };\r\n Mirror.prototype.reset = function () {\r\n this.idNodeMap = new Map();\r\n this.nodeMetaMap = new WeakMap();\r\n };\r\n return Mirror;\r\n}());\r\nfunction createMirror() {\r\n return new Mirror();\r\n}\r\nfunction maskInputValue(_a) {\r\n var maskInputOptions = _a.maskInputOptions, tagName = _a.tagName, type = _a.type, value = _a.value, maskInputFn = _a.maskInputFn;\r\n var text = value || '';\r\n if (maskInputOptions[tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n if (maskInputFn) {\r\n text = maskInputFn(text);\r\n }\r\n else {\r\n text = '*'.repeat(text.length);\r\n }\r\n }\r\n return text;\r\n}\r\nvar ORIGINAL_ATTRIBUTE_NAME = '__rrweb_original__';\r\nfunction is2DCanvasBlank(canvas) {\r\n var ctx = canvas.getContext('2d');\r\n if (!ctx)\r\n return true;\r\n var chunkSize = 50;\r\n for (var x = 0; x < canvas.width; x += chunkSize) {\r\n for (var y = 0; y < canvas.height; y += chunkSize) {\r\n var getImageData = ctx.getImageData;\r\n var originalGetImageData = ORIGINAL_ATTRIBUTE_NAME in getImageData\r\n ? getImageData[ORIGINAL_ATTRIBUTE_NAME]\r\n : getImageData;\r\n var pixelBuffer = new Uint32Array(originalGetImageData.call(ctx, x, y, Math.min(chunkSize, canvas.width - x), Math.min(chunkSize, canvas.height - y)).data.buffer);\r\n if (pixelBuffer.some(function (pixel) { return pixel !== 0; }))\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\n\nvar _id = 1;\r\nvar tagNameRegex = new RegExp('[^a-z0-9-_:]');\r\nvar IGNORED_NODE = -2;\r\nfunction genId() {\r\n return _id++;\r\n}\r\nfunction getValidTagName(element) {\r\n if (element instanceof HTMLFormElement) {\r\n return 'form';\r\n }\r\n var processedTagName = element.tagName.toLowerCase().trim();\r\n if (tagNameRegex.test(processedTagName)) {\r\n return 'div';\r\n }\r\n return processedTagName;\r\n}\r\nfunction stringifyStyleSheet(sheet) {\r\n return sheet.cssRules\r\n ? Array.from(sheet.cssRules)\r\n .map(function (rule) { return rule.cssText || ''; })\r\n .join('')\r\n : '';\r\n}\r\nfunction extractOrigin(url) {\r\n var origin = '';\r\n if (url.indexOf('//') > -1) {\r\n origin = url.split('/').slice(0, 3).join('/');\r\n }\r\n else {\r\n origin = url.split('/')[0];\r\n }\r\n origin = origin.split('?')[0];\r\n return origin;\r\n}\r\nvar canvasService;\r\nvar canvasCtx;\r\nvar URL_IN_CSS_REF = /url\\((?:(')([^']*)'|(\")(.*?)\"|([^)]*))\\)/gm;\r\nvar RELATIVE_PATH = /^(?!www\\.|(?:http|ftp)s?:\\/\\/|[A-Za-z]:\\\\|\\/\\/|#).*/;\r\nvar DATA_URI = /^(data:)([^,]*),(.*)/i;\r\nfunction absoluteToStylesheet(cssText, href) {\r\n return (cssText || '').replace(URL_IN_CSS_REF, function (origin, quote1, path1, quote2, path2, path3) {\r\n var filePath = path1 || path2 || path3;\r\n var maybeQuote = quote1 || quote2 || '';\r\n if (!filePath) {\r\n return origin;\r\n }\r\n if (!RELATIVE_PATH.test(filePath)) {\r\n return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n }\r\n if (DATA_URI.test(filePath)) {\r\n return \"url(\".concat(maybeQuote).concat(filePath).concat(maybeQuote, \")\");\r\n }\r\n if (filePath[0] === '/') {\r\n return \"url(\".concat(maybeQuote).concat(extractOrigin(href) + filePath).concat(maybeQuote, \")\");\r\n }\r\n var stack = href.split('/');\r\n var parts = filePath.split('/');\r\n stack.pop();\r\n for (var _i = 0, parts_1 = parts; _i < parts_1.length; _i++) {\r\n var part = parts_1[_i];\r\n if (part === '.') {\r\n continue;\r\n }\r\n else if (part === '..') {\r\n stack.pop();\r\n }\r\n else {\r\n stack.push(part);\r\n }\r\n }\r\n return \"url(\".concat(maybeQuote).concat(stack.join('/')).concat(maybeQuote, \")\");\r\n });\r\n}\r\nvar SRCSET_NOT_SPACES = /^[^ \\t\\n\\r\\u000c]+/;\r\nvar SRCSET_COMMAS_OR_SPACES = /^[, \\t\\n\\r\\u000c]+/;\r\nfunction getAbsoluteSrcsetString(doc, attributeValue) {\r\n if (attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n var pos = 0;\r\n function collectCharacters(regEx) {\r\n var chars;\r\n var match = regEx.exec(attributeValue.substring(pos));\r\n if (match) {\r\n chars = match[0];\r\n pos += chars.length;\r\n return chars;\r\n }\r\n return '';\r\n }\r\n var output = [];\r\n while (true) {\r\n collectCharacters(SRCSET_COMMAS_OR_SPACES);\r\n if (pos >= attributeValue.length) {\r\n break;\r\n }\r\n var url = collectCharacters(SRCSET_NOT_SPACES);\r\n if (url.slice(-1) === ',') {\r\n url = absoluteToDoc(doc, url.substring(0, url.length - 1));\r\n output.push(url);\r\n }\r\n else {\r\n var descriptorsStr = '';\r\n url = absoluteToDoc(doc, url);\r\n var inParens = false;\r\n while (true) {\r\n var c = attributeValue.charAt(pos);\r\n if (c === '') {\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (!inParens) {\r\n if (c === ',') {\r\n pos += 1;\r\n output.push((url + descriptorsStr).trim());\r\n break;\r\n }\r\n else if (c === '(') {\r\n inParens = true;\r\n }\r\n }\r\n else {\r\n if (c === ')') {\r\n inParens = false;\r\n }\r\n }\r\n descriptorsStr += c;\r\n pos += 1;\r\n }\r\n }\r\n }\r\n return output.join(', ');\r\n}\r\nfunction absoluteToDoc(doc, attributeValue) {\r\n if (!attributeValue || attributeValue.trim() === '') {\r\n return attributeValue;\r\n }\r\n var a = doc.createElement('a');\r\n a.href = attributeValue;\r\n return a.href;\r\n}\r\nfunction isSVGElement(el) {\r\n return Boolean(el.tagName === 'svg' || el.ownerSVGElement);\r\n}\r\nfunction getHref() {\r\n var a = document.createElement('a');\r\n a.href = '';\r\n return a.href;\r\n}\r\nfunction transformAttribute(doc, tagName, name, value) {\r\n if (name === 'src' ||\r\n (name === 'href' && value && !(tagName === 'use' && value[0] === '#'))) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'xlink:href' && value && value[0] !== '#') {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'background' &&\r\n value &&\r\n (tagName === 'table' || tagName === 'td' || tagName === 'th')) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else if (name === 'srcset' && value) {\r\n return getAbsoluteSrcsetString(doc, value);\r\n }\r\n else if (name === 'style' && value) {\r\n return absoluteToStylesheet(value, getHref());\r\n }\r\n else if (tagName === 'object' && name === 'data' && value) {\r\n return absoluteToDoc(doc, value);\r\n }\r\n else {\r\n return value;\r\n }\r\n}\r\nfunction _isBlockedElement(element, blockClass, blockSelector) {\r\n if (typeof blockClass === 'string') {\r\n if (element.classList.contains(blockClass)) {\r\n return true;\r\n }\r\n }\r\n else {\r\n for (var eIndex = element.classList.length; eIndex--;) {\r\n var className = element.classList[eIndex];\r\n if (blockClass.test(className)) {\r\n return true;\r\n }\r\n }\r\n }\r\n if (blockSelector) {\r\n return element.matches(blockSelector);\r\n }\r\n return false;\r\n}\r\nfunction classMatchesRegex(node, regex, checkAncestors) {\r\n if (!node)\r\n return false;\r\n if (node.nodeType !== node.ELEMENT_NODE) {\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n }\r\n for (var eIndex = node.classList.length; eIndex--;) {\r\n var className = node.classList[eIndex];\r\n if (regex.test(className)) {\r\n return true;\r\n }\r\n }\r\n if (!checkAncestors)\r\n return false;\r\n return classMatchesRegex(node.parentNode, regex, checkAncestors);\r\n}\r\nfunction needMaskingText(node, maskTextClass, maskTextSelector) {\r\n var el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (el === null)\r\n return false;\r\n if (typeof maskTextClass === 'string') {\r\n if (el.classList.contains(maskTextClass))\r\n return true;\r\n if (el.closest(\".\".concat(maskTextClass)))\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, maskTextClass, true))\r\n return true;\r\n }\r\n if (maskTextSelector) {\r\n if (el.matches(maskTextSelector))\r\n return true;\r\n if (el.closest(maskTextSelector))\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction onceIframeLoaded(iframeEl, listener, iframeLoadTimeout) {\r\n var win = iframeEl.contentWindow;\r\n if (!win) {\r\n return;\r\n }\r\n var fired = false;\r\n var readyState;\r\n try {\r\n readyState = win.document.readyState;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (readyState !== 'complete') {\r\n var timer_1 = setTimeout(function () {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, iframeLoadTimeout);\r\n iframeEl.addEventListener('load', function () {\r\n clearTimeout(timer_1);\r\n fired = true;\r\n listener();\r\n });\r\n return;\r\n }\r\n var blankUrl = 'about:blank';\r\n if (win.location.href !== blankUrl ||\r\n iframeEl.src === blankUrl ||\r\n iframeEl.src === '') {\r\n setTimeout(listener, 0);\r\n return iframeEl.addEventListener('load', listener);\r\n }\r\n iframeEl.addEventListener('load', listener);\r\n}\r\nfunction onceStylesheetLoaded(link, listener, styleSheetLoadTimeout) {\r\n var fired = false;\r\n var styleSheetLoaded;\r\n try {\r\n styleSheetLoaded = link.sheet;\r\n }\r\n catch (error) {\r\n return;\r\n }\r\n if (styleSheetLoaded)\r\n return;\r\n var timer = setTimeout(function () {\r\n if (!fired) {\r\n listener();\r\n fired = true;\r\n }\r\n }, styleSheetLoadTimeout);\r\n link.addEventListener('load', function () {\r\n clearTimeout(timer);\r\n fired = true;\r\n listener();\r\n });\r\n}\r\nfunction serializeNode(n, options) {\r\n var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c;\r\n var rootId = getRootId(doc, mirror);\r\n switch (n.nodeType) {\r\n case n.DOCUMENT_NODE:\r\n if (n.compatMode !== 'CSS1Compat') {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: [],\r\n compatMode: n.compatMode\r\n };\r\n }\r\n else {\r\n return {\r\n type: NodeType.Document,\r\n childNodes: []\r\n };\r\n }\r\n case n.DOCUMENT_TYPE_NODE:\r\n return {\r\n type: NodeType.DocumentType,\r\n name: n.name,\r\n publicId: n.publicId,\r\n systemId: n.systemId,\r\n rootId: rootId\r\n };\r\n case n.ELEMENT_NODE:\r\n return serializeElementNode(n, {\r\n doc: doc,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskInputFn: maskInputFn,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: newlyAddedElement,\r\n rootId: rootId\r\n });\r\n case n.TEXT_NODE:\r\n return serializeTextNode(n, {\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n maskTextFn: maskTextFn,\r\n rootId: rootId\r\n });\r\n case n.CDATA_SECTION_NODE:\r\n return {\r\n type: NodeType.CDATA,\r\n textContent: '',\r\n rootId: rootId\r\n };\r\n case n.COMMENT_NODE:\r\n return {\r\n type: NodeType.Comment,\r\n textContent: n.textContent || '',\r\n rootId: rootId\r\n };\r\n default:\r\n return false;\r\n }\r\n}\r\nfunction getRootId(doc, mirror) {\r\n if (!mirror.hasNode(doc))\r\n return undefined;\r\n var docId = mirror.getId(doc);\r\n return docId === 1 ? undefined : docId;\r\n}\r\nfunction serializeTextNode(n, options) {\r\n var _a;\r\n var maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, maskTextFn = options.maskTextFn, rootId = options.rootId;\r\n var parentTagName = n.parentNode && n.parentNode.tagName;\r\n var textContent = n.textContent;\r\n var isStyle = parentTagName === 'STYLE' ? true : undefined;\r\n var isScript = parentTagName === 'SCRIPT' ? true : undefined;\r\n if (isStyle && textContent) {\r\n try {\r\n if (n.nextSibling || n.previousSibling) {\r\n }\r\n else if ((_a = n.parentNode.sheet) === null || _a === void 0 ? void 0 : _a.cssRules) {\r\n textContent = stringifyStyleSheet(n.parentNode.sheet);\r\n }\r\n }\r\n catch (err) {\r\n console.warn(\"Cannot get CSS styles from text's parentNode. Error: \".concat(err), n);\r\n }\r\n textContent = absoluteToStylesheet(textContent, getHref());\r\n }\r\n if (isScript) {\r\n textContent = 'SCRIPT_PLACEHOLDER';\r\n }\r\n if (!isStyle &&\r\n !isScript &&\r\n textContent &&\r\n needMaskingText(n, maskTextClass, maskTextSelector)) {\r\n textContent = maskTextFn\r\n ? maskTextFn(textContent)\r\n : textContent.replace(/[\\S]/g, '*');\r\n }\r\n return {\r\n type: NodeType.Text,\r\n textContent: textContent || '',\r\n isStyle: isStyle,\r\n rootId: rootId\r\n };\r\n}\r\nfunction serializeElementNode(n, options) {\r\n var doc = options.doc, blockClass = options.blockClass, blockSelector = options.blockSelector, inlineStylesheet = options.inlineStylesheet, _a = options.maskInputOptions, maskInputOptions = _a === void 0 ? {} : _a, maskInputFn = options.maskInputFn, _b = options.dataURLOptions, dataURLOptions = _b === void 0 ? {} : _b, inlineImages = options.inlineImages, recordCanvas = options.recordCanvas, keepIframeSrcFn = options.keepIframeSrcFn, _c = options.newlyAddedElement, newlyAddedElement = _c === void 0 ? false : _c, rootId = options.rootId;\r\n var needBlock = _isBlockedElement(n, blockClass, blockSelector);\r\n var tagName = getValidTagName(n);\r\n var attributes = {};\r\n var len = n.attributes.length;\r\n for (var i = 0; i < len; i++) {\r\n var attr = n.attributes[i];\r\n attributes[attr.name] = transformAttribute(doc, tagName, attr.name, attr.value);\r\n }\r\n if (tagName === 'link' && inlineStylesheet) {\r\n var stylesheet = Array.from(doc.styleSheets).find(function (s) {\r\n return s.href === n.href;\r\n });\r\n var cssText = null;\r\n if (stylesheet) {\r\n cssText = getCssRulesString(stylesheet);\r\n }\r\n if (cssText) {\r\n delete attributes.rel;\r\n delete attributes.href;\r\n attributes._cssText = absoluteToStylesheet(cssText, stylesheet.href);\r\n }\r\n }\r\n if (tagName === 'style' &&\r\n n.sheet &&\r\n !(n.innerText || n.textContent || '').trim().length) {\r\n var cssText = getCssRulesString(n.sheet);\r\n if (cssText) {\r\n attributes._cssText = absoluteToStylesheet(cssText, getHref());\r\n }\r\n }\r\n if (tagName === 'input' || tagName === 'textarea' || tagName === 'select') {\r\n var value = n.value;\r\n var checked = n.checked;\r\n if (attributes.type !== 'radio' &&\r\n attributes.type !== 'checkbox' &&\r\n attributes.type !== 'submit' &&\r\n attributes.type !== 'button' &&\r\n value) {\r\n attributes.value = maskInputValue({\r\n type: attributes.type,\r\n tagName: tagName,\r\n value: value,\r\n maskInputOptions: maskInputOptions,\r\n maskInputFn: maskInputFn\r\n });\r\n }\r\n else if (checked) {\r\n attributes.checked = checked;\r\n }\r\n }\r\n if (tagName === 'option') {\r\n if (n.selected && !maskInputOptions['select']) {\r\n attributes.selected = true;\r\n }\r\n else {\r\n delete attributes.selected;\r\n }\r\n }\r\n if (tagName === 'canvas' && recordCanvas) {\r\n if (n.__context === '2d') {\r\n if (!is2DCanvasBlank(n)) {\r\n attributes.rr_dataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n }\r\n else if (!('__context' in n)) {\r\n var canvasDataURL = n.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n var blankCanvas = document.createElement('canvas');\r\n blankCanvas.width = n.width;\r\n blankCanvas.height = n.height;\r\n var blankCanvasDataURL = blankCanvas.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n if (canvasDataURL !== blankCanvasDataURL) {\r\n attributes.rr_dataURL = canvasDataURL;\r\n }\r\n }\r\n }\r\n if (tagName === 'img' && inlineImages) {\r\n if (!canvasService) {\r\n canvasService = doc.createElement('canvas');\r\n canvasCtx = canvasService.getContext('2d');\r\n }\r\n var image_1 = n;\r\n var oldValue_1 = image_1.crossOrigin;\r\n image_1.crossOrigin = 'anonymous';\r\n var recordInlineImage = function () {\r\n try {\r\n canvasService.width = image_1.naturalWidth;\r\n canvasService.height = image_1.naturalHeight;\r\n canvasCtx.drawImage(image_1, 0, 0);\r\n attributes.rr_dataURL = canvasService.toDataURL(dataURLOptions.type, dataURLOptions.quality);\r\n }\r\n catch (err) {\r\n console.warn(\"Cannot inline img src=\".concat(image_1.currentSrc, \"! Error: \").concat(err));\r\n }\r\n oldValue_1\r\n ? (attributes.crossOrigin = oldValue_1)\r\n : image_1.removeAttribute('crossorigin');\r\n };\r\n if (image_1.complete && image_1.naturalWidth !== 0)\r\n recordInlineImage();\r\n else\r\n image_1.onload = recordInlineImage;\r\n }\r\n if (tagName === 'audio' || tagName === 'video') {\r\n attributes.rr_mediaState = n.paused\r\n ? 'paused'\r\n : 'played';\r\n attributes.rr_mediaCurrentTime = n.currentTime;\r\n }\r\n if (!newlyAddedElement) {\r\n if (n.scrollLeft) {\r\n attributes.rr_scrollLeft = n.scrollLeft;\r\n }\r\n if (n.scrollTop) {\r\n attributes.rr_scrollTop = n.scrollTop;\r\n }\r\n }\r\n if (needBlock) {\r\n var _d = n.getBoundingClientRect(), width = _d.width, height = _d.height;\r\n attributes = {\r\n \"class\": attributes[\"class\"],\r\n rr_width: \"\".concat(width, \"px\"),\r\n rr_height: \"\".concat(height, \"px\")\r\n };\r\n }\r\n if (tagName === 'iframe' && !keepIframeSrcFn(attributes.src)) {\r\n if (!n.contentDocument) {\r\n attributes.rr_src = attributes.src;\r\n }\r\n delete attributes.src;\r\n }\r\n return {\r\n type: NodeType.Element,\r\n tagName: tagName,\r\n attributes: attributes,\r\n childNodes: [],\r\n isSVG: isSVGElement(n) || undefined,\r\n needBlock: needBlock,\r\n rootId: rootId\r\n };\r\n}\r\nfunction lowerIfExists(maybeAttr) {\r\n if (maybeAttr === undefined) {\r\n return '';\r\n }\r\n else {\r\n return maybeAttr.toLowerCase();\r\n }\r\n}\r\nfunction slimDOMExcluded(sn, slimDOMOptions) {\r\n if (slimDOMOptions.comment && sn.type === NodeType.Comment) {\r\n return true;\r\n }\r\n else if (sn.type === NodeType.Element) {\r\n if (slimDOMOptions.script &&\r\n (sn.tagName === 'script' ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'preload' &&\r\n sn.attributes.as === 'script') ||\r\n (sn.tagName === 'link' &&\r\n sn.attributes.rel === 'prefetch' &&\r\n typeof sn.attributes.href === 'string' &&\r\n sn.attributes.href.endsWith('.js')))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headFavicon &&\r\n ((sn.tagName === 'link' && sn.attributes.rel === 'shortcut icon') ||\r\n (sn.tagName === 'meta' &&\r\n (lowerIfExists(sn.attributes.name).match(/^msapplication-tile(image|color)$/) ||\r\n lowerIfExists(sn.attributes.name) === 'application-name' ||\r\n lowerIfExists(sn.attributes.rel) === 'icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'apple-touch-icon' ||\r\n lowerIfExists(sn.attributes.rel) === 'shortcut icon')))) {\r\n return true;\r\n }\r\n else if (sn.tagName === 'meta') {\r\n if (slimDOMOptions.headMetaDescKeywords &&\r\n lowerIfExists(sn.attributes.name).match(/^description|keywords$/)) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaSocial &&\r\n (lowerIfExists(sn.attributes.property).match(/^(og|twitter|fb):/) ||\r\n lowerIfExists(sn.attributes.name).match(/^(og|twitter):/) ||\r\n lowerIfExists(sn.attributes.name) === 'pinterest')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaRobots &&\r\n (lowerIfExists(sn.attributes.name) === 'robots' ||\r\n lowerIfExists(sn.attributes.name) === 'googlebot' ||\r\n lowerIfExists(sn.attributes.name) === 'bingbot')) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaHttpEquiv &&\r\n sn.attributes['http-equiv'] !== undefined) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaAuthorship &&\r\n (lowerIfExists(sn.attributes.name) === 'author' ||\r\n lowerIfExists(sn.attributes.name) === 'generator' ||\r\n lowerIfExists(sn.attributes.name) === 'framework' ||\r\n lowerIfExists(sn.attributes.name) === 'publisher' ||\r\n lowerIfExists(sn.attributes.name) === 'progid' ||\r\n lowerIfExists(sn.attributes.property).match(/^article:/) ||\r\n lowerIfExists(sn.attributes.property).match(/^product:/))) {\r\n return true;\r\n }\r\n else if (slimDOMOptions.headMetaVerification &&\r\n (lowerIfExists(sn.attributes.name) === 'google-site-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'yandex-verification' ||\r\n lowerIfExists(sn.attributes.name) === 'csrf-token' ||\r\n lowerIfExists(sn.attributes.name) === 'p:domain_verify' ||\r\n lowerIfExists(sn.attributes.name) === 'verify-v1' ||\r\n lowerIfExists(sn.attributes.name) === 'verification' ||\r\n lowerIfExists(sn.attributes.name) === 'shopify-checkout-api-token')) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\nfunction serializeNodeWithId(n, options) {\r\n var doc = options.doc, mirror = options.mirror, blockClass = options.blockClass, blockSelector = options.blockSelector, maskTextClass = options.maskTextClass, maskTextSelector = options.maskTextSelector, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.inlineStylesheet, inlineStylesheet = _b === void 0 ? true : _b, _c = options.maskInputOptions, maskInputOptions = _c === void 0 ? {} : _c, maskTextFn = options.maskTextFn, maskInputFn = options.maskInputFn, slimDOMOptions = options.slimDOMOptions, _d = options.dataURLOptions, dataURLOptions = _d === void 0 ? {} : _d, _e = options.inlineImages, inlineImages = _e === void 0 ? false : _e, _f = options.recordCanvas, recordCanvas = _f === void 0 ? false : _f, onSerialize = options.onSerialize, onIframeLoad = options.onIframeLoad, _g = options.iframeLoadTimeout, iframeLoadTimeout = _g === void 0 ? 5000 : _g, onStylesheetLoad = options.onStylesheetLoad, _h = options.stylesheetLoadTimeout, stylesheetLoadTimeout = _h === void 0 ? 5000 : _h, _j = options.keepIframeSrcFn, keepIframeSrcFn = _j === void 0 ? function () { return false; } : _j, _k = options.newlyAddedElement, newlyAddedElement = _k === void 0 ? false : _k;\r\n var _l = options.preserveWhiteSpace, preserveWhiteSpace = _l === void 0 ? true : _l;\r\n var _serializedNode = serializeNode(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: newlyAddedElement\r\n });\r\n if (!_serializedNode) {\r\n console.warn(n, 'not serialized');\r\n return null;\r\n }\r\n var id;\r\n if (mirror.hasNode(n)) {\r\n id = mirror.getId(n);\r\n }\r\n else if (slimDOMExcluded(_serializedNode, slimDOMOptions) ||\r\n (!preserveWhiteSpace &&\r\n _serializedNode.type === NodeType.Text &&\r\n !_serializedNode.isStyle &&\r\n !_serializedNode.textContent.replace(/^\\s+|\\s+$/gm, '').length)) {\r\n id = IGNORED_NODE;\r\n }\r\n else {\r\n id = genId();\r\n }\r\n var serializedNode = Object.assign(_serializedNode, { id: id });\r\n mirror.add(n, serializedNode);\r\n if (id === IGNORED_NODE) {\r\n return null;\r\n }\r\n if (onSerialize) {\r\n onSerialize(n);\r\n }\r\n var recordChild = !skipChild;\r\n if (serializedNode.type === NodeType.Element) {\r\n recordChild = recordChild && !serializedNode.needBlock;\r\n delete serializedNode.needBlock;\r\n var shadowRoot = n.shadowRoot;\r\n if (shadowRoot && isNativeShadowDom(shadowRoot))\r\n serializedNode.isShadowHost = true;\r\n }\r\n if ((serializedNode.type === NodeType.Document ||\r\n serializedNode.type === NodeType.Element) &&\r\n recordChild) {\r\n if (slimDOMOptions.headWhitespace &&\r\n serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'head') {\r\n preserveWhiteSpace = false;\r\n }\r\n var bypassOptions = {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: skipChild,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n };\r\n for (var _i = 0, _m = Array.from(n.childNodes); _i < _m.length; _i++) {\r\n var childN = _m[_i];\r\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n if (isElement(n) && n.shadowRoot) {\r\n for (var _o = 0, _p = Array.from(n.shadowRoot.childNodes); _o < _p.length; _o++) {\r\n var childN = _p[_o];\r\n var serializedChildNode = serializeNodeWithId(childN, bypassOptions);\r\n if (serializedChildNode) {\r\n isNativeShadowDom(n.shadowRoot) &&\r\n (serializedChildNode.isShadow = true);\r\n serializedNode.childNodes.push(serializedChildNode);\r\n }\r\n }\r\n }\r\n }\r\n if (n.parentNode &&\r\n isShadowRoot(n.parentNode) &&\r\n isNativeShadowDom(n.parentNode)) {\r\n serializedNode.isShadow = true;\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'iframe') {\r\n onceIframeLoaded(n, function () {\r\n var iframeDoc = n.contentDocument;\r\n if (iframeDoc && onIframeLoad) {\r\n var serializedIframeNode = serializeNodeWithId(iframeDoc, {\r\n doc: iframeDoc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n });\r\n if (serializedIframeNode) {\r\n onIframeLoad(n, serializedIframeNode);\r\n }\r\n }\r\n }, iframeLoadTimeout);\r\n }\r\n if (serializedNode.type === NodeType.Element &&\r\n serializedNode.tagName === 'link' &&\r\n serializedNode.attributes.rel === 'stylesheet') {\r\n onceStylesheetLoaded(n, function () {\r\n if (onStylesheetLoad) {\r\n var serializedLinkNode = serializeNodeWithId(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn\r\n });\r\n if (serializedLinkNode) {\r\n onStylesheetLoad(n, serializedLinkNode);\r\n }\r\n }\r\n }, stylesheetLoadTimeout);\r\n }\r\n return serializedNode;\r\n}\r\nfunction snapshot(n, options) {\r\n var _a = options || {}, _b = _a.mirror, mirror = _b === void 0 ? new Mirror() : _b, _c = _a.blockClass, blockClass = _c === void 0 ? 'rr-block' : _c, _d = _a.blockSelector, blockSelector = _d === void 0 ? null : _d, _e = _a.maskTextClass, maskTextClass = _e === void 0 ? 'rr-mask' : _e, _f = _a.maskTextSelector, maskTextSelector = _f === void 0 ? null : _f, _g = _a.inlineStylesheet, inlineStylesheet = _g === void 0 ? true : _g, _h = _a.inlineImages, inlineImages = _h === void 0 ? false : _h, _j = _a.recordCanvas, recordCanvas = _j === void 0 ? false : _j, _k = _a.maskAllInputs, maskAllInputs = _k === void 0 ? false : _k, maskTextFn = _a.maskTextFn, maskInputFn = _a.maskInputFn, _l = _a.slimDOM, slimDOM = _l === void 0 ? false : _l, dataURLOptions = _a.dataURLOptions, preserveWhiteSpace = _a.preserveWhiteSpace, onSerialize = _a.onSerialize, onIframeLoad = _a.onIframeLoad, iframeLoadTimeout = _a.iframeLoadTimeout, onStylesheetLoad = _a.onStylesheetLoad, stylesheetLoadTimeout = _a.stylesheetLoadTimeout, _m = _a.keepIframeSrcFn, keepIframeSrcFn = _m === void 0 ? function () { return false; } : _m;\r\n var maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true\r\n }\r\n : maskAllInputs === false\r\n ? {\r\n password: true\r\n }\r\n : maskAllInputs;\r\n var slimDOMOptions = slimDOM === true || slimDOM === 'all'\r\n ?\r\n {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaDescKeywords: slimDOM === 'all',\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaAuthorship: true,\r\n headMetaVerification: true\r\n }\r\n : slimDOM === false\r\n ? {}\r\n : slimDOM;\r\n return serializeNodeWithId(n, {\r\n doc: n,\r\n mirror: mirror,\r\n blockClass: blockClass,\r\n blockSelector: blockSelector,\r\n maskTextClass: maskTextClass,\r\n maskTextSelector: maskTextSelector,\r\n skipChild: false,\r\n inlineStylesheet: inlineStylesheet,\r\n maskInputOptions: maskInputOptions,\r\n maskTextFn: maskTextFn,\r\n maskInputFn: maskInputFn,\r\n slimDOMOptions: slimDOMOptions,\r\n dataURLOptions: dataURLOptions,\r\n inlineImages: inlineImages,\r\n recordCanvas: recordCanvas,\r\n preserveWhiteSpace: preserveWhiteSpace,\r\n onSerialize: onSerialize,\r\n onIframeLoad: onIframeLoad,\r\n iframeLoadTimeout: iframeLoadTimeout,\r\n onStylesheetLoad: onStylesheetLoad,\r\n stylesheetLoadTimeout: stylesheetLoadTimeout,\r\n keepIframeSrcFn: keepIframeSrcFn,\r\n newlyAddedElement: false\r\n });\r\n}\r\n\nvar commentre = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\r\nfunction parse(css, options) {\r\n if (options === void 0) { options = {}; }\r\n var lineno = 1;\r\n var column = 1;\r\n function updatePosition(str) {\r\n var lines = str.match(/\\n/g);\r\n if (lines) {\r\n lineno += lines.length;\r\n }\r\n var i = str.lastIndexOf('\\n');\r\n column = i === -1 ? column + str.length : str.length - i;\r\n }\r\n function position() {\r\n var start = { line: lineno, column: column };\r\n return function (node) {\r\n node.position = new Position(start);\r\n whitespace();\r\n return node;\r\n };\r\n }\r\n var Position = (function () {\r\n function Position(start) {\r\n this.start = start;\r\n this.end = { line: lineno, column: column };\r\n this.source = options.source;\r\n }\r\n return Position;\r\n }());\r\n Position.prototype.content = css;\r\n var errorsList = [];\r\n function error(msg) {\r\n var err = new Error(\"\".concat(options.source || '', \":\").concat(lineno, \":\").concat(column, \": \").concat(msg));\r\n err.reason = msg;\r\n err.filename = options.source;\r\n err.line = lineno;\r\n err.column = column;\r\n err.source = css;\r\n if (options.silent) {\r\n errorsList.push(err);\r\n }\r\n else {\r\n throw err;\r\n }\r\n }\r\n function stylesheet() {\r\n var rulesList = rules();\r\n return {\r\n type: 'stylesheet',\r\n stylesheet: {\r\n source: options.source,\r\n rules: rulesList,\r\n parsingErrors: errorsList\r\n }\r\n };\r\n }\r\n function open() {\r\n return match(/^{\\s*/);\r\n }\r\n function close() {\r\n return match(/^}/);\r\n }\r\n function rules() {\r\n var node;\r\n var rules = [];\r\n whitespace();\r\n comments(rules);\r\n while (css.length && css.charAt(0) !== '}' && (node = atrule() || rule())) {\r\n if (node !== false) {\r\n rules.push(node);\r\n comments(rules);\r\n }\r\n }\r\n return rules;\r\n }\r\n function match(re) {\r\n var m = re.exec(css);\r\n if (!m) {\r\n return;\r\n }\r\n var str = m[0];\r\n updatePosition(str);\r\n css = css.slice(str.length);\r\n return m;\r\n }\r\n function whitespace() {\r\n match(/^\\s*/);\r\n }\r\n function comments(rules) {\r\n if (rules === void 0) { rules = []; }\r\n var c;\r\n while ((c = comment())) {\r\n if (c !== false) {\r\n rules.push(c);\r\n }\r\n c = comment();\r\n }\r\n return rules;\r\n }\r\n function comment() {\r\n var pos = position();\r\n if ('/' !== css.charAt(0) || '*' !== css.charAt(1)) {\r\n return;\r\n }\r\n var i = 2;\r\n while ('' !== css.charAt(i) &&\r\n ('*' !== css.charAt(i) || '/' !== css.charAt(i + 1))) {\r\n ++i;\r\n }\r\n i += 2;\r\n if ('' === css.charAt(i - 1)) {\r\n return error('End of comment missing');\r\n }\r\n var str = css.slice(2, i - 2);\r\n column += 2;\r\n updatePosition(str);\r\n css = css.slice(i);\r\n column += 2;\r\n return pos({\r\n type: 'comment',\r\n comment: str\r\n });\r\n }\r\n function selector() {\r\n var m = match(/^([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n return trim(m[0])\r\n .replace(/\\/\\*([^*]|[\\r\\n]|(\\*+([^*/]|[\\r\\n])))*\\*\\/+/g, '')\r\n .replace(/\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'/g, function (m) {\r\n return m.replace(/,/g, '\\u200C');\r\n })\r\n .split(/\\s*(?![^(]*\\)),\\s*/)\r\n .map(function (s) {\r\n return s.replace(/\\u200C/g, ',');\r\n });\r\n }\r\n function declaration() {\r\n var pos = position();\r\n var propMatch = match(/^(\\*?[-#\\/\\*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/);\r\n if (!propMatch) {\r\n return;\r\n }\r\n var prop = trim(propMatch[0]);\r\n if (!match(/^:\\s*/)) {\r\n return error(\"property missing ':'\");\r\n }\r\n var val = match(/^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^\\)]*?\\)|[^};])+)/);\r\n var ret = pos({\r\n type: 'declaration',\r\n property: prop.replace(commentre, ''),\r\n value: val ? trim(val[0]).replace(commentre, '') : ''\r\n });\r\n match(/^[;\\s]*/);\r\n return ret;\r\n }\r\n function declarations() {\r\n var decls = [];\r\n if (!open()) {\r\n return error(\"missing '{'\");\r\n }\r\n comments(decls);\r\n var decl;\r\n while ((decl = declaration())) {\r\n if (decl !== false) {\r\n decls.push(decl);\r\n comments(decls);\r\n }\r\n decl = declaration();\r\n }\r\n if (!close()) {\r\n return error(\"missing '}'\");\r\n }\r\n return decls;\r\n }\r\n function keyframe() {\r\n var m;\r\n var vals = [];\r\n var pos = position();\r\n while ((m = match(/^((\\d+\\.\\d+|\\.\\d+|\\d+)%?|[a-z]+)\\s*/))) {\r\n vals.push(m[1]);\r\n match(/^,\\s*/);\r\n }\r\n if (!vals.length) {\r\n return;\r\n }\r\n return pos({\r\n type: 'keyframe',\r\n values: vals,\r\n declarations: declarations()\r\n });\r\n }\r\n function atkeyframes() {\r\n var pos = position();\r\n var m = match(/^@([-\\w]+)?keyframes\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n var vendor = m[1];\r\n m = match(/^([-\\w]+)\\s*/);\r\n if (!m) {\r\n return error('@keyframes missing name');\r\n }\r\n var name = m[1];\r\n if (!open()) {\r\n return error(\"@keyframes missing '{'\");\r\n }\r\n var frame;\r\n var frames = comments();\r\n while ((frame = keyframe())) {\r\n frames.push(frame);\r\n frames = frames.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@keyframes missing '}'\");\r\n }\r\n return pos({\r\n type: 'keyframes',\r\n name: name,\r\n vendor: vendor,\r\n keyframes: frames\r\n });\r\n }\r\n function atsupports() {\r\n var pos = position();\r\n var m = match(/^@supports *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var supports = trim(m[1]);\r\n if (!open()) {\r\n return error(\"@supports missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@supports missing '}'\");\r\n }\r\n return pos({\r\n type: 'supports',\r\n supports: supports,\r\n rules: style\r\n });\r\n }\r\n function athost() {\r\n var pos = position();\r\n var m = match(/^@host\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(\"@host missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@host missing '}'\");\r\n }\r\n return pos({\r\n type: 'host',\r\n rules: style\r\n });\r\n }\r\n function atmedia() {\r\n var pos = position();\r\n var m = match(/^@media *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var media = trim(m[1]);\r\n if (!open()) {\r\n return error(\"@media missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@media missing '}'\");\r\n }\r\n return pos({\r\n type: 'media',\r\n media: media,\r\n rules: style\r\n });\r\n }\r\n function atcustommedia() {\r\n var pos = position();\r\n var m = match(/^@custom-media\\s+(--[^\\s]+)\\s*([^{;]+);/);\r\n if (!m) {\r\n return;\r\n }\r\n return pos({\r\n type: 'custom-media',\r\n name: trim(m[1]),\r\n media: trim(m[2])\r\n });\r\n }\r\n function atpage() {\r\n var pos = position();\r\n var m = match(/^@page */);\r\n if (!m) {\r\n return;\r\n }\r\n var sel = selector() || [];\r\n if (!open()) {\r\n return error(\"@page missing '{'\");\r\n }\r\n var decls = comments();\r\n var decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@page missing '}'\");\r\n }\r\n return pos({\r\n type: 'page',\r\n selectors: sel,\r\n declarations: decls\r\n });\r\n }\r\n function atdocument() {\r\n var pos = position();\r\n var m = match(/^@([-\\w]+)?document *([^{]+)/);\r\n if (!m) {\r\n return;\r\n }\r\n var vendor = trim(m[1]);\r\n var doc = trim(m[2]);\r\n if (!open()) {\r\n return error(\"@document missing '{'\");\r\n }\r\n var style = comments().concat(rules());\r\n if (!close()) {\r\n return error(\"@document missing '}'\");\r\n }\r\n return pos({\r\n type: 'document',\r\n document: doc,\r\n vendor: vendor,\r\n rules: style\r\n });\r\n }\r\n function atfontface() {\r\n var pos = position();\r\n var m = match(/^@font-face\\s*/);\r\n if (!m) {\r\n return;\r\n }\r\n if (!open()) {\r\n return error(\"@font-face missing '{'\");\r\n }\r\n var decls = comments();\r\n var decl;\r\n while ((decl = declaration())) {\r\n decls.push(decl);\r\n decls = decls.concat(comments());\r\n }\r\n if (!close()) {\r\n return error(\"@font-face missing '}'\");\r\n }\r\n return pos({\r\n type: 'font-face',\r\n declarations: decls\r\n });\r\n }\r\n var atimport = _compileAtrule('import');\r\n var atcharset = _compileAtrule('charset');\r\n var atnamespace = _compileAtrule('namespace');\r\n function _compileAtrule(name) {\r\n var re = new RegExp('^@' + name + '\\\\s*([^;]+);');\r\n return function () {\r\n var pos = position();\r\n var m = match(re);\r\n if (!m) {\r\n return;\r\n }\r\n var ret = { type: name };\r\n ret[name] = m[1].trim();\r\n return pos(ret);\r\n };\r\n }\r\n function atrule() {\r\n if (css[0] !== '@') {\r\n return;\r\n }\r\n return (atkeyframes() ||\r\n atmedia() ||\r\n atcustommedia() ||\r\n atsupports() ||\r\n atimport() ||\r\n atcharset() ||\r\n atnamespace() ||\r\n atdocument() ||\r\n atpage() ||\r\n athost() ||\r\n atfontface());\r\n }\r\n function rule() {\r\n var pos = position();\r\n var sel = selector();\r\n if (!sel) {\r\n return error('selector missing');\r\n }\r\n comments();\r\n return pos({\r\n type: 'rule',\r\n selectors: sel,\r\n declarations: declarations()\r\n });\r\n }\r\n return addParent(stylesheet());\r\n}\r\nfunction trim(str) {\r\n return str ? str.replace(/^\\s+|\\s+$/g, '') : '';\r\n}\r\nfunction addParent(obj, parent) {\r\n var isNode = obj && typeof obj.type === 'string';\r\n var childParent = isNode ? obj : parent;\r\n for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\r\n var k = _a[_i];\r\n var value = obj[k];\r\n if (Array.isArray(value)) {\r\n value.forEach(function (v) {\r\n addParent(v, childParent);\r\n });\r\n }\r\n else if (value && typeof value === 'object') {\r\n addParent(value, childParent);\r\n }\r\n }\r\n if (isNode) {\r\n Object.defineProperty(obj, 'parent', {\r\n configurable: true,\r\n writable: true,\r\n enumerable: false,\r\n value: parent || null\r\n });\r\n }\r\n return obj;\r\n}\n\nvar tagMap = {\r\n script: 'noscript',\r\n altglyph: 'altGlyph',\r\n altglyphdef: 'altGlyphDef',\r\n altglyphitem: 'altGlyphItem',\r\n animatecolor: 'animateColor',\r\n animatemotion: 'animateMotion',\r\n animatetransform: 'animateTransform',\r\n clippath: 'clipPath',\r\n feblend: 'feBlend',\r\n fecolormatrix: 'feColorMatrix',\r\n fecomponenttransfer: 'feComponentTransfer',\r\n fecomposite: 'feComposite',\r\n feconvolvematrix: 'feConvolveMatrix',\r\n fediffuselighting: 'feDiffuseLighting',\r\n fedisplacementmap: 'feDisplacementMap',\r\n fedistantlight: 'feDistantLight',\r\n fedropshadow: 'feDropShadow',\r\n feflood: 'feFlood',\r\n fefunca: 'feFuncA',\r\n fefuncb: 'feFuncB',\r\n fefuncg: 'feFuncG',\r\n fefuncr: 'feFuncR',\r\n fegaussianblur: 'feGaussianBlur',\r\n feimage: 'feImage',\r\n femerge: 'feMerge',\r\n femergenode: 'feMergeNode',\r\n femorphology: 'feMorphology',\r\n feoffset: 'feOffset',\r\n fepointlight: 'fePointLight',\r\n fespecularlighting: 'feSpecularLighting',\r\n fespotlight: 'feSpotLight',\r\n fetile: 'feTile',\r\n feturbulence: 'feTurbulence',\r\n foreignobject: 'foreignObject',\r\n glyphref: 'glyphRef',\r\n lineargradient: 'linearGradient',\r\n radialgradient: 'radialGradient'\r\n};\r\nfunction getTagName(n) {\r\n var tagName = tagMap[n.tagName] ? tagMap[n.tagName] : n.tagName;\r\n if (tagName === 'link' && n.attributes._cssText) {\r\n tagName = 'style';\r\n }\r\n return tagName;\r\n}\r\nfunction escapeRegExp(str) {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\nvar HOVER_SELECTOR = /([^\\\\]):hover/;\r\nvar HOVER_SELECTOR_GLOBAL = new RegExp(HOVER_SELECTOR.source, 'g');\r\nfunction addHoverClass(cssText, cache) {\r\n var cachedStyle = cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.get(cssText);\r\n if (cachedStyle)\r\n return cachedStyle;\r\n var ast = parse(cssText, {\r\n silent: true\r\n });\r\n if (!ast.stylesheet) {\r\n return cssText;\r\n }\r\n var selectors = [];\r\n ast.stylesheet.rules.forEach(function (rule) {\r\n if ('selectors' in rule) {\r\n (rule.selectors || []).forEach(function (selector) {\r\n if (HOVER_SELECTOR.test(selector)) {\r\n selectors.push(selector);\r\n }\r\n });\r\n }\r\n });\r\n if (selectors.length === 0) {\r\n return cssText;\r\n }\r\n var selectorMatcher = new RegExp(selectors\r\n .filter(function (selector, index) { return selectors.indexOf(selector) === index; })\r\n .sort(function (a, b) { return b.length - a.length; })\r\n .map(function (selector) {\r\n return escapeRegExp(selector);\r\n })\r\n .join('|'), 'g');\r\n var result = cssText.replace(selectorMatcher, function (selector) {\r\n var newSelector = selector.replace(HOVER_SELECTOR_GLOBAL, '$1.\\\\:hover');\r\n return \"\".concat(selector, \", \").concat(newSelector);\r\n });\r\n cache === null || cache === void 0 ? void 0 : cache.stylesWithHoverClass.set(cssText, result);\r\n return result;\r\n}\r\nfunction createCache() {\r\n var stylesWithHoverClass = new Map();\r\n return {\r\n stylesWithHoverClass: stylesWithHoverClass\r\n };\r\n}\r\nfunction buildNode(n, options) {\r\n var doc = options.doc, hackCss = options.hackCss, cache = options.cache;\r\n switch (n.type) {\r\n case NodeType.Document:\r\n return doc.implementation.createDocument(null, '', null);\r\n case NodeType.DocumentType:\r\n return doc.implementation.createDocumentType(n.name || 'html', n.publicId, n.systemId);\r\n case NodeType.Element: {\r\n var tagName = getTagName(n);\r\n var node_1;\r\n if (n.isSVG) {\r\n node_1 = doc.createElementNS('http://www.w3.org/2000/svg', tagName);\r\n }\r\n else {\r\n node_1 = doc.createElement(tagName);\r\n }\r\n var specialAttributes = {};\r\n for (var name_1 in n.attributes) {\r\n if (!Object.prototype.hasOwnProperty.call(n.attributes, name_1)) {\r\n continue;\r\n }\r\n var value = n.attributes[name_1];\r\n if (tagName === 'option' &&\r\n name_1 === 'selected' &&\r\n value === false) {\r\n continue;\r\n }\r\n if (value === true)\r\n value = '';\r\n if (name_1.startsWith('rr_')) {\r\n specialAttributes[name_1] = value;\r\n continue;\r\n }\r\n var isTextarea = tagName === 'textarea' && name_1 === 'value';\r\n var isRemoteOrDynamicCss = tagName === 'style' && name_1 === '_cssText';\r\n if (isRemoteOrDynamicCss && hackCss && typeof value === 'string') {\r\n value = addHoverClass(value, cache);\r\n }\r\n if ((isTextarea || isRemoteOrDynamicCss) && typeof value === 'string') {\r\n var child = doc.createTextNode(value);\r\n for (var _i = 0, _a = Array.from(node_1.childNodes); _i < _a.length; _i++) {\r\n var c = _a[_i];\r\n if (c.nodeType === node_1.TEXT_NODE) {\r\n node_1.removeChild(c);\r\n }\r\n }\r\n node_1.appendChild(child);\r\n continue;\r\n }\r\n try {\r\n if (n.isSVG && name_1 === 'xlink:href') {\r\n node_1.setAttributeNS('http://www.w3.org/1999/xlink', name_1, value.toString());\r\n }\r\n else if (name_1 === 'onload' ||\r\n name_1 === 'onclick' ||\r\n name_1.substring(0, 7) === 'onmouse') {\r\n node_1.setAttribute('_' + name_1, value.toString());\r\n }\r\n else if (tagName === 'meta' &&\r\n n.attributes['http-equiv'] === 'Content-Security-Policy' &&\r\n name_1 === 'content') {\r\n node_1.setAttribute('csp-content', value.toString());\r\n continue;\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'preload' &&\r\n n.attributes.as === 'script') {\r\n }\r\n else if (tagName === 'link' &&\r\n n.attributes.rel === 'prefetch' &&\r\n typeof n.attributes.href === 'string' &&\r\n n.attributes.href.endsWith('.js')) {\r\n }\r\n else if (tagName === 'img' &&\r\n n.attributes.srcset &&\r\n n.attributes.rr_dataURL) {\r\n node_1.setAttribute('rrweb-original-srcset', n.attributes.srcset);\r\n }\r\n else {\r\n node_1.setAttribute(name_1, value.toString());\r\n }\r\n }\r\n catch (error) {\r\n }\r\n }\r\n var _loop_1 = function (name_2) {\r\n var value = specialAttributes[name_2];\r\n if (tagName === 'canvas' && name_2 === 'rr_dataURL') {\r\n var image_1 = document.createElement('img');\r\n image_1.onload = function () {\r\n var ctx = node_1.getContext('2d');\r\n if (ctx) {\r\n ctx.drawImage(image_1, 0, 0, image_1.width, image_1.height);\r\n }\r\n };\r\n image_1.src = value.toString();\r\n if (node_1.RRNodeType)\r\n node_1.rr_dataURL = value.toString();\r\n }\r\n else if (tagName === 'img' && name_2 === 'rr_dataURL') {\r\n var image = node_1;\r\n if (!image.currentSrc.startsWith('data:')) {\r\n image.setAttribute('rrweb-original-src', n.attributes.src);\r\n image.src = value.toString();\r\n }\r\n }\r\n if (name_2 === 'rr_width') {\r\n node_1.style.width = value.toString();\r\n }\r\n else if (name_2 === 'rr_height') {\r\n node_1.style.height = value.toString();\r\n }\r\n else if (name_2 === 'rr_mediaCurrentTime' &&\r\n typeof value === 'number') {\r\n node_1.currentTime = value;\r\n }\r\n else if (name_2 === 'rr_mediaState') {\r\n switch (value) {\r\n case 'played':\r\n node_1\r\n .play()[\"catch\"](function (e) { return console.warn('media playback error', e); });\r\n break;\r\n case 'paused':\r\n node_1.pause();\r\n break;\r\n }\r\n }\r\n };\r\n for (var name_2 in specialAttributes) {\r\n _loop_1(name_2);\r\n }\r\n if (n.isShadowHost) {\r\n if (!node_1.shadowRoot) {\r\n node_1.attachShadow({ mode: 'open' });\r\n }\r\n else {\r\n while (node_1.shadowRoot.firstChild) {\r\n node_1.shadowRoot.removeChild(node_1.shadowRoot.firstChild);\r\n }\r\n }\r\n }\r\n return node_1;\r\n }\r\n case NodeType.Text:\r\n return doc.createTextNode(n.isStyle && hackCss\r\n ? addHoverClass(n.textContent, cache)\r\n : n.textContent);\r\n case NodeType.CDATA:\r\n return doc.createCDATASection(n.textContent);\r\n case NodeType.Comment:\r\n return doc.createComment(n.textContent);\r\n default:\r\n return null;\r\n }\r\n}\r\nfunction buildNodeWithSN(n, options) {\r\n var doc = options.doc, mirror = options.mirror, _a = options.skipChild, skipChild = _a === void 0 ? false : _a, _b = options.hackCss, hackCss = _b === void 0 ? true : _b, afterAppend = options.afterAppend, cache = options.cache;\r\n var node = buildNode(n, { doc: doc, hackCss: hackCss, cache: cache });\r\n if (!node) {\r\n return null;\r\n }\r\n if (n.rootId && mirror.getNode(n.rootId) !== doc) {\r\n mirror.replace(n.rootId, doc);\r\n }\r\n if (n.type === NodeType.Document) {\r\n doc.close();\r\n doc.open();\r\n if (n.compatMode === 'BackCompat' &&\r\n n.childNodes &&\r\n n.childNodes[0].type !== NodeType.DocumentType) {\r\n if (n.childNodes[0].type === NodeType.Element &&\r\n 'xmlns' in n.childNodes[0].attributes &&\r\n n.childNodes[0].attributes.xmlns === 'http://www.w3.org/1999/xhtml') {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"\">');\r\n }\r\n else {\r\n doc.write('<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"\">');\r\n }\r\n }\r\n node = doc;\r\n }\r\n mirror.add(node, n);\r\n if ((n.type === NodeType.Document || n.type === NodeType.Element) &&\r\n !skipChild) {\r\n for (var _i = 0, _c = n.childNodes; _i < _c.length; _i++) {\r\n var childN = _c[_i];\r\n var childNode = buildNodeWithSN(childN, {\r\n doc: doc,\r\n mirror: mirror,\r\n skipChild: false,\r\n hackCss: hackCss,\r\n afterAppend: afterAppend,\r\n cache: cache\r\n });\r\n if (!childNode) {\r\n console.warn('Failed to rebuild', childN);\r\n continue;\r\n }\r\n if (childN.isShadow && isElement(node) && node.shadowRoot) {\r\n node.shadowRoot.appendChild(childNode);\r\n }\r\n else {\r\n node.appendChild(childNode);\r\n }\r\n if (afterAppend) {\r\n afterAppend(childNode, childN.id);\r\n }\r\n }\r\n }\r\n return node;\r\n}\r\nfunction visit(mirror, onVisit) {\r\n function walk(node) {\r\n onVisit(node);\r\n }\r\n for (var _i = 0, _a = mirror.getIds(); _i < _a.length; _i++) {\r\n var id = _a[_i];\r\n if (mirror.has(id)) {\r\n walk(mirror.getNode(id));\r\n }\r\n }\r\n}\r\nfunction handleScroll(node, mirror) {\r\n var n = mirror.getMeta(node);\r\n if ((n === null || n === void 0 ? void 0 : n.type) !== NodeType.Element) {\r\n return;\r\n }\r\n var el = node;\r\n for (var name_3 in n.attributes) {\r\n if (!(Object.prototype.hasOwnProperty.call(n.attributes, name_3) &&\r\n name_3.startsWith('rr_'))) {\r\n continue;\r\n }\r\n var value = n.attributes[name_3];\r\n if (name_3 === 'rr_scrollLeft') {\r\n el.scrollLeft = value;\r\n }\r\n if (name_3 === 'rr_scrollTop') {\r\n el.scrollTop = value;\r\n }\r\n }\r\n}\r\nfunction rebuild(n, options) {\r\n var doc = options.doc, onVisit = options.onVisit, _a = options.hackCss, hackCss = _a === void 0 ? true : _a, afterAppend = options.afterAppend, cache = options.cache, _b = options.mirror, mirror = _b === void 0 ? new Mirror() : _b;\r\n var node = buildNodeWithSN(n, {\r\n doc: doc,\r\n mirror: mirror,\r\n skipChild: false,\r\n hackCss: hackCss,\r\n afterAppend: afterAppend,\r\n cache: cache\r\n });\r\n visit(mirror, function (visitedNode) {\r\n if (onVisit) {\r\n onVisit(visitedNode);\r\n }\r\n handleScroll(visitedNode, mirror);\r\n });\r\n return node;\r\n}\n\nexport { IGNORED_NODE, Mirror, NodeType, addHoverClass, buildNodeWithSN, classMatchesRegex, createCache, createMirror, genId, getCssRuleString, getCssRulesString, is2DCanvasBlank, isCSSImportRule, isElement, isNativeShadowDom, isShadowRoot, maskInputValue, needMaskingText, rebuild, serializeNodeWithId, snapshot, transformAttribute };\n","import { classMatchesRegex, IGNORED_NODE, isShadowRoot } from '../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nfunction on(type, fn, target = document) {\r\n const options = { capture: true, passive: true };\r\n target.addEventListener(type, fn, options);\r\n return () => target.removeEventListener(type, fn, options);\r\n}\r\nconst DEPARTED_MIRROR_ACCESS_WARNING = 'Please stop import mirror directly. Instead of that,' +\r\n '\\r\\n' +\r\n 'now you can use replayer.getMirror() to access the mirror instance of a replayer,' +\r\n '\\r\\n' +\r\n 'or you can use record.mirror to access the mirror instance during recording.';\r\nlet _mirror = {\r\n map: {},\r\n getId() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return -1;\r\n },\r\n getNode() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return null;\r\n },\r\n removeNodeFromMap() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n has() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n return false;\r\n },\r\n reset() {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n },\r\n};\r\nif (typeof window !== 'undefined' && window.Proxy && window.Reflect) {\r\n _mirror = new Proxy(_mirror, {\r\n get(target, prop, receiver) {\r\n if (prop === 'map') {\r\n console.error(DEPARTED_MIRROR_ACCESS_WARNING);\r\n }\r\n return Reflect.get(target, prop, receiver);\r\n },\r\n });\r\n}\r\nfunction throttle(func, wait, options = {}) {\r\n let timeout = null;\r\n let previous = 0;\r\n return function (...args) {\r\n const now = Date.now();\r\n if (!previous && options.leading === false) {\r\n previous = now;\r\n }\r\n const remaining = wait - (now - previous);\r\n const context = this;\r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeout) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n }\r\n previous = now;\r\n func.apply(context, args);\r\n }\r\n else if (!timeout && options.trailing !== false) {\r\n timeout = setTimeout(() => {\r\n previous = options.leading === false ? 0 : Date.now();\r\n timeout = null;\r\n func.apply(context, args);\r\n }, remaining);\r\n }\r\n };\r\n}\r\nfunction hookSetter(target, key, d, isRevoked, win = window) {\r\n const original = win.Object.getOwnPropertyDescriptor(target, key);\r\n win.Object.defineProperty(target, key, isRevoked\r\n ? d\r\n : {\r\n set(value) {\r\n setTimeout(() => {\r\n d.set.call(this, value);\r\n }, 0);\r\n if (original && original.set) {\r\n original.set.call(this, value);\r\n }\r\n },\r\n });\r\n return () => hookSetter(target, key, original || {}, true);\r\n}\r\nfunction patch(source, name, replacement) {\r\n try {\r\n if (!(name in source)) {\r\n return () => {\r\n };\r\n }\r\n const original = source[name];\r\n const wrapped = replacement(original);\r\n if (typeof wrapped === 'function') {\r\n wrapped.prototype = wrapped.prototype || {};\r\n Object.defineProperties(wrapped, {\r\n __rrweb_original__: {\r\n enumerable: false,\r\n value: original,\r\n },\r\n });\r\n }\r\n source[name] = wrapped;\r\n return () => {\r\n source[name] = original;\r\n };\r\n }\r\n catch (_a) {\r\n return () => {\r\n };\r\n }\r\n}\r\nfunction getWindowHeight() {\r\n return (window.innerHeight ||\r\n (document.documentElement && document.documentElement.clientHeight) ||\r\n (document.body && document.body.clientHeight));\r\n}\r\nfunction getWindowWidth() {\r\n return (window.innerWidth ||\r\n (document.documentElement && document.documentElement.clientWidth) ||\r\n (document.body && document.body.clientWidth));\r\n}\r\nfunction isBlocked(node, blockClass, blockSelector, checkAncestors) {\r\n if (!node) {\r\n return false;\r\n }\r\n const el = node.nodeType === node.ELEMENT_NODE\r\n ? node\r\n : node.parentElement;\r\n if (!el)\r\n return false;\r\n if (typeof blockClass === 'string') {\r\n if (el.classList.contains(blockClass))\r\n return true;\r\n if (checkAncestors && el.closest('.' + blockClass) !== null)\r\n return true;\r\n }\r\n else {\r\n if (classMatchesRegex(el, blockClass, checkAncestors))\r\n return true;\r\n }\r\n if (blockSelector) {\r\n if (node.matches(blockSelector))\r\n return true;\r\n if (checkAncestors && el.closest(blockSelector) !== null)\r\n return true;\r\n }\r\n return false;\r\n}\r\nfunction isSerialized(n, mirror) {\r\n return mirror.getId(n) !== -1;\r\n}\r\nfunction isIgnored(n, mirror) {\r\n return mirror.getId(n) === IGNORED_NODE;\r\n}\r\nfunction isAncestorRemoved(target, mirror) {\r\n if (isShadowRoot(target)) {\r\n return false;\r\n }\r\n const id = mirror.getId(target);\r\n if (!mirror.has(id)) {\r\n return true;\r\n }\r\n if (target.parentNode &&\r\n target.parentNode.nodeType === target.DOCUMENT_NODE) {\r\n return false;\r\n }\r\n if (!target.parentNode) {\r\n return true;\r\n }\r\n return isAncestorRemoved(target.parentNode, mirror);\r\n}\r\nfunction isTouchEvent(event) {\r\n return Boolean(event.changedTouches);\r\n}\r\nfunction polyfill(win = window) {\r\n if ('NodeList' in win && !win.NodeList.prototype.forEach) {\r\n win.NodeList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if ('DOMTokenList' in win && !win.DOMTokenList.prototype.forEach) {\r\n win.DOMTokenList.prototype.forEach = Array.prototype\r\n .forEach;\r\n }\r\n if (!Node.prototype.contains) {\r\n Node.prototype.contains = (...args) => {\r\n let node = args[0];\r\n if (!(0 in args)) {\r\n throw new TypeError('1 argument is required');\r\n }\r\n do {\r\n if (this === node) {\r\n return true;\r\n }\r\n } while ((node = node && node.parentNode));\r\n return false;\r\n };\r\n }\r\n}\r\nfunction queueToResolveTrees(queue) {\r\n const queueNodeMap = {};\r\n const putIntoMap = (m, parent) => {\r\n const nodeInTree = {\r\n value: m,\r\n parent,\r\n children: [],\r\n };\r\n queueNodeMap[m.node.id] = nodeInTree;\r\n return nodeInTree;\r\n };\r\n const queueNodeTrees = [];\r\n for (const mutation of queue) {\r\n const { nextId, parentId } = mutation;\r\n if (nextId && nextId in queueNodeMap) {\r\n const nextInTree = queueNodeMap[nextId];\r\n if (nextInTree.parent) {\r\n const idx = nextInTree.parent.children.indexOf(nextInTree);\r\n nextInTree.parent.children.splice(idx, 0, putIntoMap(mutation, nextInTree.parent));\r\n }\r\n else {\r\n const idx = queueNodeTrees.indexOf(nextInTree);\r\n queueNodeTrees.splice(idx, 0, putIntoMap(mutation, null));\r\n }\r\n continue;\r\n }\r\n if (parentId in queueNodeMap) {\r\n const parentInTree = queueNodeMap[parentId];\r\n parentInTree.children.push(putIntoMap(mutation, parentInTree));\r\n continue;\r\n }\r\n queueNodeTrees.push(putIntoMap(mutation, null));\r\n }\r\n return queueNodeTrees;\r\n}\r\nfunction iterateResolveTree(tree, cb) {\r\n cb(tree.value);\r\n for (let i = tree.children.length - 1; i >= 0; i--) {\r\n iterateResolveTree(tree.children[i], cb);\r\n }\r\n}\r\nfunction isSerializedIframe(n, mirror) {\r\n return Boolean(n.nodeName === 'IFRAME' && mirror.getMeta(n));\r\n}\r\nfunction isSerializedStylesheet(n, mirror) {\r\n return Boolean(n.nodeName === 'LINK' &&\r\n n.nodeType === n.ELEMENT_NODE &&\r\n n.getAttribute &&\r\n n.getAttribute('rel') === 'stylesheet' &&\r\n mirror.getMeta(n));\r\n}\r\nfunction getBaseDimension(node, rootIframe) {\r\n var _a, _b;\r\n const frameElement = (_b = (_a = node.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView) === null || _b === void 0 ? void 0 : _b.frameElement;\r\n if (!frameElement || frameElement === rootIframe) {\r\n return {\r\n x: 0,\r\n y: 0,\r\n relativeScale: 1,\r\n absoluteScale: 1,\r\n };\r\n }\r\n const frameDimension = frameElement.getBoundingClientRect();\r\n const frameBaseDimension = getBaseDimension(frameElement, rootIframe);\r\n const relativeScale = frameDimension.height / frameElement.clientHeight;\r\n return {\r\n x: frameDimension.x * frameBaseDimension.relativeScale +\r\n frameBaseDimension.x,\r\n y: frameDimension.y * frameBaseDimension.relativeScale +\r\n frameBaseDimension.y,\r\n relativeScale,\r\n absoluteScale: frameBaseDimension.absoluteScale * relativeScale,\r\n };\r\n}\r\nfunction hasShadowRoot(n) {\r\n return Boolean(n === null || n === void 0 ? void 0 : n.shadowRoot);\r\n}\r\nfunction getNestedRule(rules, position) {\r\n const rule = rules[position[0]];\r\n if (position.length === 1) {\r\n return rule;\r\n }\r\n else {\r\n return getNestedRule(rule.cssRules[position[1]].cssRules, position.slice(2));\r\n }\r\n}\r\nfunction getPositionsAndIndex(nestedIndex) {\r\n const positions = [...nestedIndex];\r\n const index = positions.pop();\r\n return { positions, index };\r\n}\r\nfunction uniqueTextMutations(mutations) {\r\n const idSet = new Set();\r\n const uniqueMutations = [];\r\n for (let i = mutations.length; i--;) {\r\n const mutation = mutations[i];\r\n if (!idSet.has(mutation.id)) {\r\n uniqueMutations.push(mutation);\r\n idSet.add(mutation.id);\r\n }\r\n }\r\n return uniqueMutations;\r\n}\r\nclass StyleSheetMirror {\r\n constructor() {\r\n this.id = 1;\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n }\r\n getId(stylesheet) {\r\n var _a;\r\n return (_a = this.styleIDMap.get(stylesheet)) !== null && _a !== void 0 ? _a : -1;\r\n }\r\n has(stylesheet) {\r\n return this.styleIDMap.has(stylesheet);\r\n }\r\n add(stylesheet, id) {\r\n if (this.has(stylesheet))\r\n return this.getId(stylesheet);\r\n let newId;\r\n if (id === undefined) {\r\n newId = this.id++;\r\n }\r\n else\r\n newId = id;\r\n this.styleIDMap.set(stylesheet, newId);\r\n this.idStyleMap.set(newId, stylesheet);\r\n return newId;\r\n }\r\n getStyle(id) {\r\n return this.idStyleMap.get(id) || null;\r\n }\r\n reset() {\r\n this.styleIDMap = new WeakMap();\r\n this.idStyleMap = new Map();\r\n this.id = 1;\r\n }\r\n generateId() {\r\n return this.id++;\r\n }\r\n}\n\nexport { StyleSheetMirror, _mirror, getBaseDimension, getNestedRule, getPositionsAndIndex, getWindowHeight, getWindowWidth, hasShadowRoot, hookSetter, isAncestorRemoved, isBlocked, isIgnored, isSerialized, isSerializedIframe, isSerializedStylesheet, isTouchEvent, iterateResolveTree, on, patch, polyfill, queueToResolveTrees, throttle, uniqueTextMutations };\n","var EventType = /* @__PURE__ */ ((EventType2) => {\n EventType2[EventType2[\"DomContentLoaded\"] = 0] = \"DomContentLoaded\";\n EventType2[EventType2[\"Load\"] = 1] = \"Load\";\n EventType2[EventType2[\"FullSnapshot\"] = 2] = \"FullSnapshot\";\n EventType2[EventType2[\"IncrementalSnapshot\"] = 3] = \"IncrementalSnapshot\";\n EventType2[EventType2[\"Meta\"] = 4] = \"Meta\";\n EventType2[EventType2[\"Custom\"] = 5] = \"Custom\";\n EventType2[EventType2[\"Plugin\"] = 6] = \"Plugin\";\n return EventType2;\n})(EventType || {});\nvar IncrementalSource = /* @__PURE__ */ ((IncrementalSource2) => {\n IncrementalSource2[IncrementalSource2[\"Mutation\"] = 0] = \"Mutation\";\n IncrementalSource2[IncrementalSource2[\"MouseMove\"] = 1] = \"MouseMove\";\n IncrementalSource2[IncrementalSource2[\"MouseInteraction\"] = 2] = \"MouseInteraction\";\n IncrementalSource2[IncrementalSource2[\"Scroll\"] = 3] = \"Scroll\";\n IncrementalSource2[IncrementalSource2[\"ViewportResize\"] = 4] = \"ViewportResize\";\n IncrementalSource2[IncrementalSource2[\"Input\"] = 5] = \"Input\";\n IncrementalSource2[IncrementalSource2[\"TouchMove\"] = 6] = \"TouchMove\";\n IncrementalSource2[IncrementalSource2[\"MediaInteraction\"] = 7] = \"MediaInteraction\";\n IncrementalSource2[IncrementalSource2[\"StyleSheetRule\"] = 8] = \"StyleSheetRule\";\n IncrementalSource2[IncrementalSource2[\"CanvasMutation\"] = 9] = \"CanvasMutation\";\n IncrementalSource2[IncrementalSource2[\"Font\"] = 10] = \"Font\";\n IncrementalSource2[IncrementalSource2[\"Log\"] = 11] = \"Log\";\n IncrementalSource2[IncrementalSource2[\"Drag\"] = 12] = \"Drag\";\n IncrementalSource2[IncrementalSource2[\"StyleDeclaration\"] = 13] = \"StyleDeclaration\";\n IncrementalSource2[IncrementalSource2[\"Selection\"] = 14] = \"Selection\";\n IncrementalSource2[IncrementalSource2[\"AdoptedStyleSheet\"] = 15] = \"AdoptedStyleSheet\";\n return IncrementalSource2;\n})(IncrementalSource || {});\nvar MouseInteractions = /* @__PURE__ */ ((MouseInteractions2) => {\n MouseInteractions2[MouseInteractions2[\"MouseUp\"] = 0] = \"MouseUp\";\n MouseInteractions2[MouseInteractions2[\"MouseDown\"] = 1] = \"MouseDown\";\n MouseInteractions2[MouseInteractions2[\"Click\"] = 2] = \"Click\";\n MouseInteractions2[MouseInteractions2[\"ContextMenu\"] = 3] = \"ContextMenu\";\n MouseInteractions2[MouseInteractions2[\"DblClick\"] = 4] = \"DblClick\";\n MouseInteractions2[MouseInteractions2[\"Focus\"] = 5] = \"Focus\";\n MouseInteractions2[MouseInteractions2[\"Blur\"] = 6] = \"Blur\";\n MouseInteractions2[MouseInteractions2[\"TouchStart\"] = 7] = \"TouchStart\";\n MouseInteractions2[MouseInteractions2[\"TouchMove_Departed\"] = 8] = \"TouchMove_Departed\";\n MouseInteractions2[MouseInteractions2[\"TouchEnd\"] = 9] = \"TouchEnd\";\n MouseInteractions2[MouseInteractions2[\"TouchCancel\"] = 10] = \"TouchCancel\";\n return MouseInteractions2;\n})(MouseInteractions || {});\nvar CanvasContext = /* @__PURE__ */ ((CanvasContext2) => {\n CanvasContext2[CanvasContext2[\"2D\"] = 0] = \"2D\";\n CanvasContext2[CanvasContext2[\"WebGL\"] = 1] = \"WebGL\";\n CanvasContext2[CanvasContext2[\"WebGL2\"] = 2] = \"WebGL2\";\n return CanvasContext2;\n})(CanvasContext || {});\nvar ReplayerEvents = /* @__PURE__ */ ((ReplayerEvents2) => {\n ReplayerEvents2[\"Start\"] = \"start\";\n ReplayerEvents2[\"Pause\"] = \"pause\";\n ReplayerEvents2[\"Resume\"] = \"resume\";\n ReplayerEvents2[\"Resize\"] = \"resize\";\n ReplayerEvents2[\"Finish\"] = \"finish\";\n ReplayerEvents2[\"FullsnapshotRebuilded\"] = \"fullsnapshot-rebuilded\";\n ReplayerEvents2[\"LoadStylesheetStart\"] = \"load-stylesheet-start\";\n ReplayerEvents2[\"LoadStylesheetEnd\"] = \"load-stylesheet-end\";\n ReplayerEvents2[\"SkipStart\"] = \"skip-start\";\n ReplayerEvents2[\"SkipEnd\"] = \"skip-end\";\n ReplayerEvents2[\"MouseInteraction\"] = \"mouse-interaction\";\n ReplayerEvents2[\"EventCast\"] = \"event-cast\";\n ReplayerEvents2[\"CustomEvent\"] = \"custom-event\";\n ReplayerEvents2[\"Flush\"] = \"flush\";\n ReplayerEvents2[\"StateChange\"] = \"state-change\";\n ReplayerEvents2[\"PlayBack\"] = \"play-back\";\n ReplayerEvents2[\"Destroy\"] = \"destroy\";\n return ReplayerEvents2;\n})(ReplayerEvents || {});\n\nexport { CanvasContext, EventType, IncrementalSource, MouseInteractions, ReplayerEvents };\n","import { isShadowRoot, isNativeShadowDom, maskInputValue, transformAttribute, needMaskingText, IGNORED_NODE, serializeNodeWithId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { isIgnored, isBlocked, isSerialized, isAncestorRemoved, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\n\nfunction isNodeInLinkedList(n) {\r\n return '__ln' in n;\r\n}\r\nclass DoubleLinkedList {\r\n constructor() {\r\n this.length = 0;\r\n this.head = null;\r\n }\r\n get(position) {\r\n if (position >= this.length) {\r\n throw new Error('Position outside of list range');\r\n }\r\n let current = this.head;\r\n for (let index = 0; index < position; index++) {\r\n current = (current === null || current === void 0 ? void 0 : current.next) || null;\r\n }\r\n return current;\r\n }\r\n addNode(n) {\r\n const node = {\r\n value: n,\r\n previous: null,\r\n next: null,\r\n };\r\n n.__ln = node;\r\n if (n.previousSibling && isNodeInLinkedList(n.previousSibling)) {\r\n const current = n.previousSibling.__ln.next;\r\n node.next = current;\r\n node.previous = n.previousSibling.__ln;\r\n n.previousSibling.__ln.next = node;\r\n if (current) {\r\n current.previous = node;\r\n }\r\n }\r\n else if (n.nextSibling &&\r\n isNodeInLinkedList(n.nextSibling) &&\r\n n.nextSibling.__ln.previous) {\r\n const current = n.nextSibling.__ln.previous;\r\n node.previous = current;\r\n node.next = n.nextSibling.__ln;\r\n n.nextSibling.__ln.previous = node;\r\n if (current) {\r\n current.next = node;\r\n }\r\n }\r\n else {\r\n if (this.head) {\r\n this.head.previous = node;\r\n }\r\n node.next = this.head;\r\n this.head = node;\r\n }\r\n this.length++;\r\n }\r\n removeNode(n) {\r\n const current = n.__ln;\r\n if (!this.head) {\r\n return;\r\n }\r\n if (!current.previous) {\r\n this.head = current.next;\r\n if (this.head) {\r\n this.head.previous = null;\r\n }\r\n }\r\n else {\r\n current.previous.next = current.next;\r\n if (current.next) {\r\n current.next.previous = current.previous;\r\n }\r\n }\r\n if (n.__ln) {\r\n delete n.__ln;\r\n }\r\n this.length--;\r\n }\r\n}\r\nconst moveKey = (id, parentId) => `${id}@${parentId}`;\r\nclass MutationBuffer {\r\n constructor() {\r\n this.frozen = false;\r\n this.locked = false;\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.mapRemoves = [];\r\n this.movedMap = {};\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.processMutations = (mutations) => {\r\n mutations.forEach(this.processMutation);\r\n this.emit();\r\n };\r\n this.emit = () => {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const adds = [];\r\n const addList = new DoubleLinkedList();\r\n const getNextId = (n) => {\r\n let ns = n;\r\n let nextId = IGNORED_NODE;\r\n while (nextId === IGNORED_NODE) {\r\n ns = ns && ns.nextSibling;\r\n nextId = ns && this.mirror.getId(ns);\r\n }\r\n return nextId;\r\n };\r\n const pushAdd = (n) => {\r\n var _a, _b, _c, _d;\r\n let shadowHost = null;\r\n if (((_b = (_a = n.getRootNode) === null || _a === void 0 ? void 0 : _a.call(n)) === null || _b === void 0 ? void 0 : _b.nodeType) === Node.DOCUMENT_FRAGMENT_NODE &&\r\n n.getRootNode().host)\r\n shadowHost = n.getRootNode().host;\r\n let rootShadowHost = shadowHost;\r\n while (((_d = (_c = rootShadowHost === null || rootShadowHost === void 0 ? void 0 : rootShadowHost.getRootNode) === null || _c === void 0 ? void 0 : _c.call(rootShadowHost)) === null || _d === void 0 ? void 0 : _d.nodeType) ===\r\n Node.DOCUMENT_FRAGMENT_NODE &&\r\n rootShadowHost.getRootNode().host)\r\n rootShadowHost = rootShadowHost.getRootNode().host;\r\n const notInDoc = !this.doc.contains(n) &&\r\n (!rootShadowHost || !this.doc.contains(rootShadowHost));\r\n if (!n.parentNode || notInDoc) {\r\n return;\r\n }\r\n const parentId = isShadowRoot(n.parentNode)\r\n ? this.mirror.getId(shadowHost)\r\n : this.mirror.getId(n.parentNode);\r\n const nextId = getNextId(n);\r\n if (parentId === -1 || nextId === -1) {\r\n return addList.addNode(n);\r\n }\r\n const sn = serializeNodeWithId(n, {\r\n doc: this.doc,\r\n mirror: this.mirror,\r\n blockClass: this.blockClass,\r\n blockSelector: this.blockSelector,\r\n maskTextClass: this.maskTextClass,\r\n maskTextSelector: this.maskTextSelector,\r\n skipChild: true,\r\n newlyAddedElement: true,\r\n inlineStylesheet: this.inlineStylesheet,\r\n maskInputOptions: this.maskInputOptions,\r\n maskTextFn: this.maskTextFn,\r\n maskInputFn: this.maskInputFn,\r\n slimDOMOptions: this.slimDOMOptions,\r\n dataURLOptions: this.dataURLOptions,\r\n recordCanvas: this.recordCanvas,\r\n inlineImages: this.inlineImages,\r\n onSerialize: (currentN) => {\r\n if (isSerializedIframe(currentN, this.mirror)) {\r\n this.iframeManager.addIframe(currentN);\r\n }\r\n if (isSerializedStylesheet(currentN, this.mirror)) {\r\n this.stylesheetManager.trackLinkElement(currentN);\r\n }\r\n if (hasShadowRoot(n)) {\r\n this.shadowDomManager.addShadowRoot(n.shadowRoot, this.doc);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n this.iframeManager.attachIframe(iframe, childSn);\r\n this.shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (link, childSn) => {\r\n this.stylesheetManager.attachLinkElement(link, childSn);\r\n },\r\n });\r\n if (sn) {\r\n adds.push({\r\n parentId,\r\n nextId,\r\n node: sn,\r\n });\r\n }\r\n };\r\n while (this.mapRemoves.length) {\r\n this.mirror.removeNodeFromMap(this.mapRemoves.shift());\r\n }\r\n for (const n of Array.from(this.movedSet.values())) {\r\n if (isParentRemoved(this.removes, n, this.mirror) &&\r\n !this.movedSet.has(n.parentNode)) {\r\n continue;\r\n }\r\n pushAdd(n);\r\n }\r\n for (const n of Array.from(this.addedSet.values())) {\r\n if (!isAncestorInSet(this.droppedSet, n) &&\r\n !isParentRemoved(this.removes, n, this.mirror)) {\r\n pushAdd(n);\r\n }\r\n else if (isAncestorInSet(this.movedSet, n)) {\r\n pushAdd(n);\r\n }\r\n else {\r\n this.droppedSet.add(n);\r\n }\r\n }\r\n let candidate = null;\r\n while (addList.length) {\r\n let node = null;\r\n if (candidate) {\r\n const parentId = this.mirror.getId(candidate.value.parentNode);\r\n const nextId = getNextId(candidate.value);\r\n if (parentId !== -1 && nextId !== -1) {\r\n node = candidate;\r\n }\r\n }\r\n if (!node) {\r\n for (let index = addList.length - 1; index >= 0; index--) {\r\n const _node = addList.get(index);\r\n if (_node) {\r\n const parentId = this.mirror.getId(_node.value.parentNode);\r\n const nextId = getNextId(_node.value);\r\n if (nextId === -1)\r\n continue;\r\n else if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n else {\r\n const unhandledNode = _node.value;\r\n if (unhandledNode.parentNode &&\r\n unhandledNode.parentNode.nodeType ===\r\n Node.DOCUMENT_FRAGMENT_NODE) {\r\n const shadowHost = unhandledNode.parentNode\r\n .host;\r\n const parentId = this.mirror.getId(shadowHost);\r\n if (parentId !== -1) {\r\n node = _node;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n if (!node) {\r\n while (addList.head) {\r\n addList.removeNode(addList.head.value);\r\n }\r\n break;\r\n }\r\n candidate = node.previous;\r\n addList.removeNode(node.value);\r\n pushAdd(node.value);\r\n }\r\n const payload = {\r\n texts: this.texts\r\n .map((text) => ({\r\n id: this.mirror.getId(text.node),\r\n value: text.value,\r\n }))\r\n .filter((text) => this.mirror.has(text.id)),\r\n attributes: this.attributes\r\n .map((attribute) => ({\r\n id: this.mirror.getId(attribute.node),\r\n attributes: attribute.attributes,\r\n }))\r\n .filter((attribute) => this.mirror.has(attribute.id)),\r\n removes: this.removes,\r\n adds,\r\n };\r\n if (!payload.texts.length &&\r\n !payload.attributes.length &&\r\n !payload.removes.length &&\r\n !payload.adds.length) {\r\n return;\r\n }\r\n this.texts = [];\r\n this.attributes = [];\r\n this.removes = [];\r\n this.addedSet = new Set();\r\n this.movedSet = new Set();\r\n this.droppedSet = new Set();\r\n this.movedMap = {};\r\n this.mutationCb(payload);\r\n };\r\n this.processMutation = (m) => {\r\n if (isIgnored(m.target, this.mirror)) {\r\n return;\r\n }\r\n switch (m.type) {\r\n case 'characterData': {\r\n const value = m.target.textContent;\r\n if (!isBlocked(m.target, this.blockClass, this.blockSelector, false) &&\r\n value !== m.oldValue) {\r\n this.texts.push({\r\n value: needMaskingText(m.target, this.maskTextClass, this.maskTextSelector) && value\r\n ? this.maskTextFn\r\n ? this.maskTextFn(value)\r\n : value.replace(/[\\S]/g, '*')\r\n : value,\r\n node: m.target,\r\n });\r\n }\r\n break;\r\n }\r\n case 'attributes': {\r\n const target = m.target;\r\n let value = m.target.getAttribute(m.attributeName);\r\n if (m.attributeName === 'value') {\r\n value = maskInputValue({\r\n maskInputOptions: this.maskInputOptions,\r\n tagName: m.target.tagName,\r\n type: m.target.getAttribute('type'),\r\n value,\r\n maskInputFn: this.maskInputFn,\r\n });\r\n }\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n value === m.oldValue) {\r\n return;\r\n }\r\n let item = this.attributes.find((a) => a.node === m.target);\r\n if (target.tagName === 'IFRAME' &&\r\n m.attributeName === 'src' &&\r\n !this.keepIframeSrcFn(value)) {\r\n if (!target.contentDocument) {\r\n m.attributeName = 'rr_src';\r\n }\r\n else {\r\n return;\r\n }\r\n }\r\n if (!item) {\r\n item = {\r\n node: m.target,\r\n attributes: {},\r\n };\r\n this.attributes.push(item);\r\n }\r\n if (m.attributeName === 'style') {\r\n const old = this.doc.createElement('span');\r\n if (m.oldValue) {\r\n old.setAttribute('style', m.oldValue);\r\n }\r\n if (item.attributes.style === undefined ||\r\n item.attributes.style === null) {\r\n item.attributes.style = {};\r\n }\r\n const styleObj = item.attributes.style;\r\n for (const pname of Array.from(target.style)) {\r\n const newValue = target.style.getPropertyValue(pname);\r\n const newPriority = target.style.getPropertyPriority(pname);\r\n if (newValue !== old.style.getPropertyValue(pname) ||\r\n newPriority !== old.style.getPropertyPriority(pname)) {\r\n if (newPriority === '') {\r\n styleObj[pname] = newValue;\r\n }\r\n else {\r\n styleObj[pname] = [newValue, newPriority];\r\n }\r\n }\r\n }\r\n for (const pname of Array.from(old.style)) {\r\n if (target.style.getPropertyValue(pname) === '') {\r\n styleObj[pname] = false;\r\n }\r\n }\r\n }\r\n else {\r\n item.attributes[m.attributeName] = transformAttribute(this.doc, target.tagName, m.attributeName, value);\r\n }\r\n break;\r\n }\r\n case 'childList': {\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, true))\r\n return;\r\n m.addedNodes.forEach((n) => this.genAdds(n, m.target));\r\n m.removedNodes.forEach((n) => {\r\n const nodeId = this.mirror.getId(n);\r\n const parentId = isShadowRoot(m.target)\r\n ? this.mirror.getId(m.target.host)\r\n : this.mirror.getId(m.target);\r\n if (isBlocked(m.target, this.blockClass, this.blockSelector, false) ||\r\n isIgnored(n, this.mirror) ||\r\n !isSerialized(n, this.mirror)) {\r\n return;\r\n }\r\n if (this.addedSet.has(n)) {\r\n deepDelete(this.addedSet, n);\r\n this.droppedSet.add(n);\r\n }\r\n else if (this.addedSet.has(m.target) && nodeId === -1) ;\r\n else if (isAncestorRemoved(m.target, this.mirror)) ;\r\n else if (this.movedSet.has(n) &&\r\n this.movedMap[moveKey(nodeId, parentId)]) {\r\n deepDelete(this.movedSet, n);\r\n }\r\n else {\r\n this.removes.push({\r\n parentId,\r\n id: nodeId,\r\n isShadow: isShadowRoot(m.target) && isNativeShadowDom(m.target)\r\n ? true\r\n : undefined,\r\n });\r\n }\r\n this.mapRemoves.push(n);\r\n });\r\n break;\r\n }\r\n }\r\n };\r\n this.genAdds = (n, target) => {\r\n if (this.mirror.hasNode(n)) {\r\n if (isIgnored(n, this.mirror)) {\r\n return;\r\n }\r\n this.movedSet.add(n);\r\n let targetId = null;\r\n if (target && this.mirror.hasNode(target)) {\r\n targetId = this.mirror.getId(target);\r\n }\r\n if (targetId && targetId !== -1) {\r\n this.movedMap[moveKey(this.mirror.getId(n), targetId)] = true;\r\n }\r\n }\r\n else {\r\n this.addedSet.add(n);\r\n this.droppedSet.delete(n);\r\n }\r\n if (!isBlocked(n, this.blockClass, this.blockSelector, false))\r\n n.childNodes.forEach((childN) => this.genAdds(childN));\r\n };\r\n }\r\n init(options) {\r\n [\r\n 'mutationCb',\r\n 'blockClass',\r\n 'blockSelector',\r\n 'maskTextClass',\r\n 'maskTextSelector',\r\n 'inlineStylesheet',\r\n 'maskInputOptions',\r\n 'maskTextFn',\r\n 'maskInputFn',\r\n 'keepIframeSrcFn',\r\n 'recordCanvas',\r\n 'inlineImages',\r\n 'slimDOMOptions',\r\n 'dataURLOptions',\r\n 'doc',\r\n 'mirror',\r\n 'iframeManager',\r\n 'stylesheetManager',\r\n 'shadowDomManager',\r\n 'canvasManager',\r\n ].forEach((key) => {\r\n this[key] = options[key];\r\n });\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n this.canvasManager.freeze();\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n this.canvasManager.unfreeze();\r\n this.emit();\r\n }\r\n isFrozen() {\r\n return this.frozen;\r\n }\r\n lock() {\r\n this.locked = true;\r\n this.canvasManager.lock();\r\n }\r\n unlock() {\r\n this.locked = false;\r\n this.canvasManager.unlock();\r\n this.emit();\r\n }\r\n reset() {\r\n this.shadowDomManager.reset();\r\n this.canvasManager.reset();\r\n }\r\n}\r\nfunction deepDelete(addsSet, n) {\r\n addsSet.delete(n);\r\n n.childNodes.forEach((childN) => deepDelete(addsSet, childN));\r\n}\r\nfunction isParentRemoved(removes, n, mirror) {\r\n if (removes.length === 0)\r\n return false;\r\n return _isParentRemoved(removes, n, mirror);\r\n}\r\nfunction _isParentRemoved(removes, n, mirror) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n const parentId = mirror.getId(parentNode);\r\n if (removes.some((r) => r.id === parentId)) {\r\n return true;\r\n }\r\n return _isParentRemoved(removes, parentNode, mirror);\r\n}\r\nfunction isAncestorInSet(set, n) {\r\n if (set.size === 0)\r\n return false;\r\n return _isAncestorInSet(set, n);\r\n}\r\nfunction _isAncestorInSet(set, n) {\r\n const { parentNode } = n;\r\n if (!parentNode) {\r\n return false;\r\n }\r\n if (set.has(parentNode)) {\r\n return true;\r\n }\r\n return _isAncestorInSet(set, parentNode);\r\n}\n\nexport { MutationBuffer as default };\n","import { maskInputValue } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { on, throttle, isBlocked, getWindowHeight, getWindowWidth, hookSetter, patch, isTouchEvent } from '../utils.js';\nimport { MouseInteractions, IncrementalSource } from '../../../types/dist/types.js';\nimport MutationBuffer from './mutation.js';\n\nconst mutationBuffers = [];\r\nconst isCSSGroupingRuleSupported = typeof CSSGroupingRule !== 'undefined';\r\nconst isCSSMediaRuleSupported = typeof CSSMediaRule !== 'undefined';\r\nconst isCSSSupportsRuleSupported = typeof CSSSupportsRule !== 'undefined';\r\nconst isCSSConditionRuleSupported = typeof CSSConditionRule !== 'undefined';\r\nfunction getEventTarget(event) {\r\n try {\r\n if ('composedPath' in event) {\r\n const path = event.composedPath();\r\n if (path.length) {\r\n return path[0];\r\n }\r\n }\r\n else if ('path' in event && event.path.length) {\r\n return event.path[0];\r\n }\r\n return event.target;\r\n }\r\n catch (_a) {\r\n return event.target;\r\n }\r\n}\r\nfunction initMutationObserver(options, rootEl) {\r\n var _a, _b;\r\n const mutationBuffer = new MutationBuffer();\r\n mutationBuffers.push(mutationBuffer);\r\n mutationBuffer.init(options);\r\n let mutationObserverCtor = window.MutationObserver ||\r\n window.__rrMutationObserver;\r\n const angularZoneSymbol = (_b = (_a = window === null || window === void 0 ? void 0 : window.Zone) === null || _a === void 0 ? void 0 : _a.__symbol__) === null || _b === void 0 ? void 0 : _b.call(_a, 'MutationObserver');\r\n if (angularZoneSymbol &&\r\n window[angularZoneSymbol]) {\r\n mutationObserverCtor = window[angularZoneSymbol];\r\n }\r\n const observer = new mutationObserverCtor(mutationBuffer.processMutations.bind(mutationBuffer));\r\n observer.observe(rootEl, {\r\n attributes: true,\r\n attributeOldValue: true,\r\n characterData: true,\r\n characterDataOldValue: true,\r\n childList: true,\r\n subtree: true,\r\n });\r\n return observer;\r\n}\r\nfunction initMoveObserver({ mousemoveCb, sampling, doc, mirror, }) {\r\n if (sampling.mousemove === false) {\r\n return () => {\r\n };\r\n }\r\n const threshold = typeof sampling.mousemove === 'number' ? sampling.mousemove : 50;\r\n const callbackThreshold = typeof sampling.mousemoveCallback === 'number'\r\n ? sampling.mousemoveCallback\r\n : 500;\r\n let positions = [];\r\n let timeBaseline;\r\n const wrappedCb = throttle((source) => {\r\n const totalOffset = Date.now() - timeBaseline;\r\n mousemoveCb(positions.map((p) => {\r\n p.timeOffset -= totalOffset;\r\n return p;\r\n }), source);\r\n positions = [];\r\n timeBaseline = null;\r\n }, callbackThreshold);\r\n const updatePosition = throttle((evt) => {\r\n const target = getEventTarget(evt);\r\n const { clientX, clientY } = isTouchEvent(evt)\r\n ? evt.changedTouches[0]\r\n : evt;\r\n if (!timeBaseline) {\r\n timeBaseline = Date.now();\r\n }\r\n positions.push({\r\n x: clientX,\r\n y: clientY,\r\n id: mirror.getId(target),\r\n timeOffset: Date.now() - timeBaseline,\r\n });\r\n wrappedCb(typeof DragEvent !== 'undefined' && evt instanceof DragEvent\r\n ? IncrementalSource.Drag\r\n : evt instanceof MouseEvent\r\n ? IncrementalSource.MouseMove\r\n : IncrementalSource.TouchMove);\r\n }, threshold, {\r\n trailing: false,\r\n });\r\n const handlers = [\r\n on('mousemove', updatePosition, doc),\r\n on('touchmove', updatePosition, doc),\r\n on('drag', updatePosition, doc),\r\n ];\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initMouseInteractionObserver({ mouseInteractionCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n if (sampling.mouseInteraction === false) {\r\n return () => {\r\n };\r\n }\r\n const disableMap = sampling.mouseInteraction === true ||\r\n sampling.mouseInteraction === undefined\r\n ? {}\r\n : sampling.mouseInteraction;\r\n const handlers = [];\r\n const getHandler = (eventKey) => {\r\n return (event) => {\r\n const target = getEventTarget(event);\r\n if (isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const e = isTouchEvent(event) ? event.changedTouches[0] : event;\r\n if (!e) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n const { clientX, clientY } = e;\r\n mouseInteractionCb({\r\n type: MouseInteractions[eventKey],\r\n id,\r\n x: clientX,\r\n y: clientY,\r\n });\r\n };\r\n };\r\n Object.keys(MouseInteractions)\r\n .filter((key) => Number.isNaN(Number(key)) &&\r\n !key.endsWith('_Departed') &&\r\n disableMap[key] !== false)\r\n .forEach((eventKey) => {\r\n const eventName = eventKey.toLowerCase();\r\n const handler = getHandler(eventKey);\r\n handlers.push(on(eventName, handler, doc));\r\n });\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initScrollObserver({ scrollCb, doc, mirror, blockClass, blockSelector, sampling, }) {\r\n const updatePosition = throttle((evt) => {\r\n const target = getEventTarget(evt);\r\n if (!target || isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const id = mirror.getId(target);\r\n if (target === doc) {\r\n const scrollEl = (doc.scrollingElement || doc.documentElement);\r\n scrollCb({\r\n id,\r\n x: scrollEl.scrollLeft,\r\n y: scrollEl.scrollTop,\r\n });\r\n }\r\n else {\r\n scrollCb({\r\n id,\r\n x: target.scrollLeft,\r\n y: target.scrollTop,\r\n });\r\n }\r\n }, sampling.scroll || 100);\r\n return on('scroll', updatePosition, doc);\r\n}\r\nfunction initViewportResizeObserver({ viewportResizeCb, }) {\r\n let lastH = -1;\r\n let lastW = -1;\r\n const updateDimension = throttle(() => {\r\n const height = getWindowHeight();\r\n const width = getWindowWidth();\r\n if (lastH !== height || lastW !== width) {\r\n viewportResizeCb({\r\n width: Number(width),\r\n height: Number(height),\r\n });\r\n lastH = height;\r\n lastW = width;\r\n }\r\n }, 200);\r\n return on('resize', updateDimension, window);\r\n}\r\nfunction wrapEventWithUserTriggeredFlag(v, enable) {\r\n const value = Object.assign({}, v);\r\n if (!enable)\r\n delete value.userTriggered;\r\n return value;\r\n}\r\nconst INPUT_TAGS = ['INPUT', 'TEXTAREA', 'SELECT'];\r\nconst lastInputValueMap = new WeakMap();\r\nfunction initInputObserver({ inputCb, doc, mirror, blockClass, blockSelector, ignoreClass, maskInputOptions, maskInputFn, sampling, userTriggeredOnInput, }) {\r\n function eventHandler(event) {\r\n let target = getEventTarget(event);\r\n const userTriggered = event.isTrusted;\r\n if (target && target.tagName === 'OPTION')\r\n target = target.parentElement;\r\n if (!target ||\r\n !target.tagName ||\r\n INPUT_TAGS.indexOf(target.tagName) < 0 ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const type = target.type;\r\n if (target.classList.contains(ignoreClass)) {\r\n return;\r\n }\r\n let text = target.value;\r\n let isChecked = false;\r\n if (type === 'radio' || type === 'checkbox') {\r\n isChecked = target.checked;\r\n }\r\n else if (maskInputOptions[target.tagName.toLowerCase()] ||\r\n maskInputOptions[type]) {\r\n text = maskInputValue({\r\n maskInputOptions,\r\n tagName: target.tagName,\r\n type,\r\n value: text,\r\n maskInputFn,\r\n });\r\n }\r\n cbWithDedup(target, wrapEventWithUserTriggeredFlag({ text, isChecked, userTriggered }, userTriggeredOnInput));\r\n const name = target.name;\r\n if (type === 'radio' && name && isChecked) {\r\n doc\r\n .querySelectorAll(`input[type=\"radio\"][name=\"${name}\"]`)\r\n .forEach((el) => {\r\n if (el !== target) {\r\n cbWithDedup(el, wrapEventWithUserTriggeredFlag({\r\n text: el.value,\r\n isChecked: !isChecked,\r\n userTriggered: false,\r\n }, userTriggeredOnInput));\r\n }\r\n });\r\n }\r\n }\r\n function cbWithDedup(target, v) {\r\n const lastInputValue = lastInputValueMap.get(target);\r\n if (!lastInputValue ||\r\n lastInputValue.text !== v.text ||\r\n lastInputValue.isChecked !== v.isChecked) {\r\n lastInputValueMap.set(target, v);\r\n const id = mirror.getId(target);\r\n inputCb(Object.assign(Object.assign({}, v), { id }));\r\n }\r\n }\r\n const events = sampling.input === 'last' ? ['change'] : ['input', 'change'];\r\n const handlers = events.map((eventName) => on(eventName, eventHandler, doc));\r\n const currentWindow = doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n }\r\n const propertyDescriptor = currentWindow.Object.getOwnPropertyDescriptor(currentWindow.HTMLInputElement.prototype, 'value');\r\n const hookProperties = [\r\n [currentWindow.HTMLInputElement.prototype, 'value'],\r\n [currentWindow.HTMLInputElement.prototype, 'checked'],\r\n [currentWindow.HTMLSelectElement.prototype, 'value'],\r\n [currentWindow.HTMLTextAreaElement.prototype, 'value'],\r\n [currentWindow.HTMLSelectElement.prototype, 'selectedIndex'],\r\n [currentWindow.HTMLOptionElement.prototype, 'selected'],\r\n ];\r\n if (propertyDescriptor && propertyDescriptor.set) {\r\n handlers.push(...hookProperties.map((p) => hookSetter(p[0], p[1], {\r\n set() {\r\n eventHandler({ target: this });\r\n },\r\n }, false, currentWindow)));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction getNestedCSSRulePositions(rule) {\r\n const positions = [];\r\n function recurse(childRule, pos) {\r\n if ((isCSSGroupingRuleSupported &&\r\n childRule.parentRule instanceof CSSGroupingRule) ||\r\n (isCSSMediaRuleSupported &&\r\n childRule.parentRule instanceof CSSMediaRule) ||\r\n (isCSSSupportsRuleSupported &&\r\n childRule.parentRule instanceof CSSSupportsRule) ||\r\n (isCSSConditionRuleSupported &&\r\n childRule.parentRule instanceof CSSConditionRule)) {\r\n const rules = Array.from(childRule.parentRule.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n else if (childRule.parentStyleSheet) {\r\n const rules = Array.from(childRule.parentStyleSheet.cssRules);\r\n const index = rules.indexOf(childRule);\r\n pos.unshift(index);\r\n }\r\n return pos;\r\n }\r\n return recurse(rule, positions);\r\n}\r\nfunction getIdAndStyleId(sheet, mirror, styleMirror) {\r\n let id, styleId;\r\n if (!sheet)\r\n return {};\r\n if (sheet.ownerNode)\r\n id = mirror.getId(sheet.ownerNode);\r\n else\r\n styleId = styleMirror.getId(sheet);\r\n return {\r\n styleId,\r\n id,\r\n };\r\n}\r\nfunction initStyleSheetObserver({ styleSheetRuleCb, mirror, stylesheetManager }, { win }) {\r\n const insertRule = win.CSSStyleSheet.prototype.insertRule;\r\n win.CSSStyleSheet.prototype.insertRule = function (rule, index) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [{ rule, index }],\r\n });\r\n }\r\n return insertRule.apply(this, [rule, index]);\r\n };\r\n const deleteRule = win.CSSStyleSheet.prototype.deleteRule;\r\n win.CSSStyleSheet.prototype.deleteRule = function (index) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [{ index }],\r\n });\r\n }\r\n return deleteRule.apply(this, [index]);\r\n };\r\n let replace;\r\n if (win.CSSStyleSheet.prototype.replace) {\r\n replace = win.CSSStyleSheet.prototype.replace;\r\n win.CSSStyleSheet.prototype.replace = function (text) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replace: text,\r\n });\r\n }\r\n return replace.apply(this, [text]);\r\n };\r\n }\r\n let replaceSync;\r\n if (win.CSSStyleSheet.prototype.replaceSync) {\r\n replaceSync = win.CSSStyleSheet.prototype.replaceSync;\r\n win.CSSStyleSheet.prototype.replaceSync = function (text) {\r\n const { id, styleId } = getIdAndStyleId(this, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n replaceSync: text,\r\n });\r\n }\r\n return replaceSync.apply(this, [text]);\r\n };\r\n }\r\n const supportedNestedCSSRuleTypes = {};\r\n if (isCSSGroupingRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSGroupingRule = win.CSSGroupingRule;\r\n }\r\n else {\r\n if (isCSSMediaRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSMediaRule = win.CSSMediaRule;\r\n }\r\n if (isCSSConditionRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSConditionRule = win.CSSConditionRule;\r\n }\r\n if (isCSSSupportsRuleSupported) {\r\n supportedNestedCSSRuleTypes.CSSSupportsRule = win.CSSSupportsRule;\r\n }\r\n }\r\n const unmodifiedFunctions = {};\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n unmodifiedFunctions[typeKey] = {\r\n insertRule: type.prototype.insertRule,\r\n deleteRule: type.prototype.deleteRule,\r\n };\r\n type.prototype.insertRule = function (rule, index) {\r\n const { id, styleId } = getIdAndStyleId(this.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n adds: [\r\n {\r\n rule,\r\n index: [\r\n ...getNestedCSSRulePositions(this),\r\n index || 0,\r\n ],\r\n },\r\n ],\r\n });\r\n }\r\n return unmodifiedFunctions[typeKey].insertRule.apply(this, [rule, index]);\r\n };\r\n type.prototype.deleteRule = function (index) {\r\n const { id, styleId } = getIdAndStyleId(this.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleSheetRuleCb({\r\n id,\r\n styleId,\r\n removes: [\r\n { index: [...getNestedCSSRulePositions(this), index] },\r\n ],\r\n });\r\n }\r\n return unmodifiedFunctions[typeKey].deleteRule.apply(this, [index]);\r\n };\r\n });\r\n return () => {\r\n win.CSSStyleSheet.prototype.insertRule = insertRule;\r\n win.CSSStyleSheet.prototype.deleteRule = deleteRule;\r\n replace && (win.CSSStyleSheet.prototype.replace = replace);\r\n replaceSync && (win.CSSStyleSheet.prototype.replaceSync = replaceSync);\r\n Object.entries(supportedNestedCSSRuleTypes).forEach(([typeKey, type]) => {\r\n type.prototype.insertRule = unmodifiedFunctions[typeKey].insertRule;\r\n type.prototype.deleteRule = unmodifiedFunctions[typeKey].deleteRule;\r\n });\r\n };\r\n}\r\nfunction initAdoptedStyleSheetObserver({ mirror, stylesheetManager, }, host) {\r\n var _a, _b, _c;\r\n let hostId = null;\r\n if (host.nodeName === '#document')\r\n hostId = mirror.getId(host);\r\n else\r\n hostId = mirror.getId(host.host);\r\n const patchTarget = host.nodeName === '#document'\r\n ? (_a = host.defaultView) === null || _a === void 0 ? void 0 : _a.Document\r\n : (_c = (_b = host.ownerDocument) === null || _b === void 0 ? void 0 : _b.defaultView) === null || _c === void 0 ? void 0 : _c.ShadowRoot;\r\n const originalPropertyDescriptor = Object.getOwnPropertyDescriptor(patchTarget === null || patchTarget === void 0 ? void 0 : patchTarget.prototype, 'adoptedStyleSheets');\r\n if (hostId === null ||\r\n hostId === -1 ||\r\n !patchTarget ||\r\n !originalPropertyDescriptor)\r\n return () => {\r\n };\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get() {\r\n var _a;\r\n return (_a = originalPropertyDescriptor.get) === null || _a === void 0 ? void 0 : _a.call(this);\r\n },\r\n set(sheets) {\r\n var _a;\r\n const result = (_a = originalPropertyDescriptor.set) === null || _a === void 0 ? void 0 : _a.call(this, sheets);\r\n if (hostId !== null && hostId !== -1) {\r\n try {\r\n stylesheetManager.adoptStyleSheets(sheets, hostId);\r\n }\r\n catch (e) {\r\n }\r\n }\r\n return result;\r\n },\r\n });\r\n return () => {\r\n Object.defineProperty(host, 'adoptedStyleSheets', {\r\n configurable: originalPropertyDescriptor.configurable,\r\n enumerable: originalPropertyDescriptor.enumerable,\r\n get: originalPropertyDescriptor.get,\r\n set: originalPropertyDescriptor.set,\r\n });\r\n };\r\n}\r\nfunction initStyleDeclarationObserver({ styleDeclarationCb, mirror, ignoreCSSAttributes, stylesheetManager, }, { win }) {\r\n const setProperty = win.CSSStyleDeclaration.prototype.setProperty;\r\n win.CSSStyleDeclaration.prototype.setProperty = function (property, value, priority) {\r\n var _a;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return setProperty.apply(this, [property, value, priority]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n set: {\r\n property,\r\n value,\r\n priority,\r\n },\r\n index: getNestedCSSRulePositions(this.parentRule),\r\n });\r\n }\r\n return setProperty.apply(this, [property, value, priority]);\r\n };\r\n const removeProperty = win.CSSStyleDeclaration.prototype.removeProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = function (property) {\r\n var _a;\r\n if (ignoreCSSAttributes.has(property)) {\r\n return removeProperty.apply(this, [property]);\r\n }\r\n const { id, styleId } = getIdAndStyleId((_a = this.parentRule) === null || _a === void 0 ? void 0 : _a.parentStyleSheet, mirror, stylesheetManager.styleMirror);\r\n if ((id && id !== -1) || (styleId && styleId !== -1)) {\r\n styleDeclarationCb({\r\n id,\r\n styleId,\r\n remove: {\r\n property,\r\n },\r\n index: getNestedCSSRulePositions(this.parentRule),\r\n });\r\n }\r\n return removeProperty.apply(this, [property]);\r\n };\r\n return () => {\r\n win.CSSStyleDeclaration.prototype.setProperty = setProperty;\r\n win.CSSStyleDeclaration.prototype.removeProperty = removeProperty;\r\n };\r\n}\r\nfunction initMediaInteractionObserver({ mediaInteractionCb, blockClass, blockSelector, mirror, sampling, }) {\r\n const handler = (type) => throttle((event) => {\r\n const target = getEventTarget(event);\r\n if (!target ||\r\n isBlocked(target, blockClass, blockSelector, true)) {\r\n return;\r\n }\r\n const { currentTime, volume, muted, playbackRate, } = target;\r\n mediaInteractionCb({\r\n type,\r\n id: mirror.getId(target),\r\n currentTime,\r\n volume,\r\n muted,\r\n playbackRate,\r\n });\r\n }, sampling.media || 500);\r\n const handlers = [\r\n on('play', handler(0)),\r\n on('pause', handler(1)),\r\n on('seeked', handler(2)),\r\n on('volumechange', handler(3)),\r\n on('ratechange', handler(4)),\r\n ];\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initFontObserver({ fontCb, doc }) {\r\n const win = doc.defaultView;\r\n if (!win) {\r\n return () => {\r\n };\r\n }\r\n const handlers = [];\r\n const fontMap = new WeakMap();\r\n const originalFontFace = win.FontFace;\r\n win.FontFace = function FontFace(family, source, descriptors) {\r\n const fontFace = new originalFontFace(family, source, descriptors);\r\n fontMap.set(fontFace, {\r\n family,\r\n buffer: typeof source !== 'string',\r\n descriptors,\r\n fontSource: typeof source === 'string'\r\n ? source\r\n : JSON.stringify(Array.from(new Uint8Array(source))),\r\n });\r\n return fontFace;\r\n };\r\n const restoreHandler = patch(doc.fonts, 'add', function (original) {\r\n return function (fontFace) {\r\n setTimeout(() => {\r\n const p = fontMap.get(fontFace);\r\n if (p) {\r\n fontCb(p);\r\n fontMap.delete(fontFace);\r\n }\r\n }, 0);\r\n return original.apply(this, [fontFace]);\r\n };\r\n });\r\n handlers.push(() => {\r\n win.FontFace = originalFontFace;\r\n });\r\n handlers.push(restoreHandler);\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\r\nfunction initSelectionObserver(param) {\r\n const { doc, mirror, blockClass, blockSelector, selectionCb } = param;\r\n let collapsed = true;\r\n const updateSelection = () => {\r\n const selection = doc.getSelection();\r\n if (!selection || (collapsed && (selection === null || selection === void 0 ? void 0 : selection.isCollapsed)))\r\n return;\r\n collapsed = selection.isCollapsed || false;\r\n const ranges = [];\r\n const count = selection.rangeCount || 0;\r\n for (let i = 0; i < count; i++) {\r\n const range = selection.getRangeAt(i);\r\n const { startContainer, startOffset, endContainer, endOffset } = range;\r\n const blocked = isBlocked(startContainer, blockClass, blockSelector, true) ||\r\n isBlocked(endContainer, blockClass, blockSelector, true);\r\n if (blocked)\r\n continue;\r\n ranges.push({\r\n start: mirror.getId(startContainer),\r\n startOffset,\r\n end: mirror.getId(endContainer),\r\n endOffset,\r\n });\r\n }\r\n selectionCb({ ranges });\r\n };\r\n updateSelection();\r\n return on('selectionchange', updateSelection);\r\n}\r\nfunction mergeHooks(o, hooks) {\r\n const { mutationCb, mousemoveCb, mouseInteractionCb, scrollCb, viewportResizeCb, inputCb, mediaInteractionCb, styleSheetRuleCb, styleDeclarationCb, canvasMutationCb, fontCb, selectionCb, } = o;\r\n o.mutationCb = (...p) => {\r\n if (hooks.mutation) {\r\n hooks.mutation(...p);\r\n }\r\n mutationCb(...p);\r\n };\r\n o.mousemoveCb = (...p) => {\r\n if (hooks.mousemove) {\r\n hooks.mousemove(...p);\r\n }\r\n mousemoveCb(...p);\r\n };\r\n o.mouseInteractionCb = (...p) => {\r\n if (hooks.mouseInteraction) {\r\n hooks.mouseInteraction(...p);\r\n }\r\n mouseInteractionCb(...p);\r\n };\r\n o.scrollCb = (...p) => {\r\n if (hooks.scroll) {\r\n hooks.scroll(...p);\r\n }\r\n scrollCb(...p);\r\n };\r\n o.viewportResizeCb = (...p) => {\r\n if (hooks.viewportResize) {\r\n hooks.viewportResize(...p);\r\n }\r\n viewportResizeCb(...p);\r\n };\r\n o.inputCb = (...p) => {\r\n if (hooks.input) {\r\n hooks.input(...p);\r\n }\r\n inputCb(...p);\r\n };\r\n o.mediaInteractionCb = (...p) => {\r\n if (hooks.mediaInteaction) {\r\n hooks.mediaInteaction(...p);\r\n }\r\n mediaInteractionCb(...p);\r\n };\r\n o.styleSheetRuleCb = (...p) => {\r\n if (hooks.styleSheetRule) {\r\n hooks.styleSheetRule(...p);\r\n }\r\n styleSheetRuleCb(...p);\r\n };\r\n o.styleDeclarationCb = (...p) => {\r\n if (hooks.styleDeclaration) {\r\n hooks.styleDeclaration(...p);\r\n }\r\n styleDeclarationCb(...p);\r\n };\r\n o.canvasMutationCb = (...p) => {\r\n if (hooks.canvasMutation) {\r\n hooks.canvasMutation(...p);\r\n }\r\n canvasMutationCb(...p);\r\n };\r\n o.fontCb = (...p) => {\r\n if (hooks.font) {\r\n hooks.font(...p);\r\n }\r\n fontCb(...p);\r\n };\r\n o.selectionCb = (...p) => {\r\n if (hooks.selection) {\r\n hooks.selection(...p);\r\n }\r\n selectionCb(...p);\r\n };\r\n}\r\nfunction initObservers(o, hooks = {}) {\r\n const currentWindow = o.doc.defaultView;\r\n if (!currentWindow) {\r\n return () => {\r\n };\r\n }\r\n mergeHooks(o, hooks);\r\n const mutationObserver = initMutationObserver(o, o.doc);\r\n const mousemoveHandler = initMoveObserver(o);\r\n const mouseInteractionHandler = initMouseInteractionObserver(o);\r\n const scrollHandler = initScrollObserver(o);\r\n const viewportResizeHandler = initViewportResizeObserver(o);\r\n const inputHandler = initInputObserver(o);\r\n const mediaInteractionHandler = initMediaInteractionObserver(o);\r\n const styleSheetObserver = initStyleSheetObserver(o, { win: currentWindow });\r\n const adoptedStyleSheetObserver = initAdoptedStyleSheetObserver(o, o.doc);\r\n const styleDeclarationObserver = initStyleDeclarationObserver(o, {\r\n win: currentWindow,\r\n });\r\n const fontObserver = o.collectFonts\r\n ? initFontObserver(o)\r\n : () => {\r\n };\r\n const selectionObserver = initSelectionObserver(o);\r\n const pluginHandlers = [];\r\n for (const plugin of o.plugins) {\r\n pluginHandlers.push(plugin.observer(plugin.callback, currentWindow, plugin.options));\r\n }\r\n return () => {\r\n mutationBuffers.forEach((b) => b.reset());\r\n mutationObserver.disconnect();\r\n mousemoveHandler();\r\n mouseInteractionHandler();\r\n scrollHandler();\r\n viewportResizeHandler();\r\n inputHandler();\r\n mediaInteractionHandler();\r\n styleSheetObserver();\r\n adoptedStyleSheetObserver();\r\n styleDeclarationObserver();\r\n fontObserver();\r\n selectionObserver();\r\n pluginHandlers.forEach((h) => h());\r\n };\r\n}\n\nexport { INPUT_TAGS, initAdoptedStyleSheetObserver, initMutationObserver, initObservers, initScrollObserver, mutationBuffers };\n","class CrossOriginIframeMirror {\r\n constructor(generateIdFn) {\r\n this.generateIdFn = generateIdFn;\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n }\r\n getId(iframe, remoteId, idToRemoteMap, remoteToIdMap) {\r\n const idToRemoteIdMap = idToRemoteMap || this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = remoteToIdMap || this.getRemoteIdToIdMap(iframe);\r\n let id = idToRemoteIdMap.get(remoteId);\r\n if (!id) {\r\n id = this.generateIdFn();\r\n idToRemoteIdMap.set(remoteId, id);\r\n remoteIdToIdMap.set(id, remoteId);\r\n }\r\n return id;\r\n }\r\n getIds(iframe, remoteId) {\r\n const idToRemoteIdMap = this.getIdToRemoteIdMap(iframe);\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return remoteId.map((id) => this.getId(iframe, id, idToRemoteIdMap, remoteIdToIdMap));\r\n }\r\n getRemoteId(iframe, id, map) {\r\n const remoteIdToIdMap = map || this.getRemoteIdToIdMap(iframe);\r\n if (typeof id !== 'number')\r\n return id;\r\n const remoteId = remoteIdToIdMap.get(id);\r\n if (!remoteId)\r\n return -1;\r\n return remoteId;\r\n }\r\n getRemoteIds(iframe, ids) {\r\n const remoteIdToIdMap = this.getRemoteIdToIdMap(iframe);\r\n return ids.map((id) => this.getRemoteId(iframe, id, remoteIdToIdMap));\r\n }\r\n reset(iframe) {\r\n if (!iframe) {\r\n this.iframeIdToRemoteIdMap = new WeakMap();\r\n this.iframeRemoteIdToIdMap = new WeakMap();\r\n return;\r\n }\r\n this.iframeIdToRemoteIdMap.delete(iframe);\r\n this.iframeRemoteIdToIdMap.delete(iframe);\r\n }\r\n getIdToRemoteIdMap(iframe) {\r\n let idToRemoteIdMap = this.iframeIdToRemoteIdMap.get(iframe);\r\n if (!idToRemoteIdMap) {\r\n idToRemoteIdMap = new Map();\r\n this.iframeIdToRemoteIdMap.set(iframe, idToRemoteIdMap);\r\n }\r\n return idToRemoteIdMap;\r\n }\r\n getRemoteIdToIdMap(iframe) {\r\n let remoteIdToIdMap = this.iframeRemoteIdToIdMap.get(iframe);\r\n if (!remoteIdToIdMap) {\r\n remoteIdToIdMap = new Map();\r\n this.iframeRemoteIdToIdMap.set(iframe, remoteIdToIdMap);\r\n }\r\n return remoteIdToIdMap;\r\n }\r\n}\n\nexport { CrossOriginIframeMirror as default };\n","import { genId } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport CrossOriginIframeMirror from './cross-origin-iframe-mirror.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\n\nclass IframeManager {\r\n constructor(options) {\r\n this.iframes = new WeakMap();\r\n this.crossOriginIframeMap = new WeakMap();\r\n this.crossOriginIframeMirror = new CrossOriginIframeMirror(genId);\r\n this.mutationCb = options.mutationCb;\r\n this.wrappedEmit = options.wrappedEmit;\r\n this.stylesheetManager = options.stylesheetManager;\r\n this.recordCrossOriginIframes = options.recordCrossOriginIframes;\r\n this.crossOriginIframeStyleMirror = new CrossOriginIframeMirror(this.stylesheetManager.styleMirror.generateId.bind(this.stylesheetManager.styleMirror));\r\n this.mirror = options.mirror;\r\n if (this.recordCrossOriginIframes) {\r\n window.addEventListener('message', this.handleMessage.bind(this));\r\n }\r\n }\r\n addIframe(iframeEl) {\r\n this.iframes.set(iframeEl, true);\r\n if (iframeEl.contentWindow)\r\n this.crossOriginIframeMap.set(iframeEl.contentWindow, iframeEl);\r\n }\r\n addLoadListener(cb) {\r\n this.loadListener = cb;\r\n }\r\n attachIframe(iframeEl, childSn) {\r\n var _a;\r\n this.mutationCb({\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: childSn,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n });\r\n (_a = this.loadListener) === null || _a === void 0 ? void 0 : _a.call(this, iframeEl);\r\n if (iframeEl.contentDocument &&\r\n iframeEl.contentDocument.adoptedStyleSheets &&\r\n iframeEl.contentDocument.adoptedStyleSheets.length > 0)\r\n this.stylesheetManager.adoptStyleSheets(iframeEl.contentDocument.adoptedStyleSheets, this.mirror.getId(iframeEl.contentDocument));\r\n }\r\n handleMessage(message) {\r\n if (message.data.type === 'rrweb') {\r\n const iframeSourceWindow = message.source;\r\n if (!iframeSourceWindow)\r\n return;\r\n const iframeEl = this.crossOriginIframeMap.get(message.source);\r\n if (!iframeEl)\r\n return;\r\n const transformedEvent = this.transformCrossOriginEvent(iframeEl, message.data.event);\r\n if (transformedEvent)\r\n this.wrappedEmit(transformedEvent, message.data.isCheckout);\r\n }\r\n }\r\n transformCrossOriginEvent(iframeEl, e) {\r\n var _a;\r\n switch (e.type) {\r\n case EventType.FullSnapshot: {\r\n this.crossOriginIframeMirror.reset(iframeEl);\r\n this.crossOriginIframeStyleMirror.reset(iframeEl);\r\n this.replaceIdOnNode(e.data.node, iframeEl);\r\n return {\r\n timestamp: e.timestamp,\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source: IncrementalSource.Mutation,\r\n adds: [\r\n {\r\n parentId: this.mirror.getId(iframeEl),\r\n nextId: null,\r\n node: e.data.node,\r\n },\r\n ],\r\n removes: [],\r\n texts: [],\r\n attributes: [],\r\n isAttachIframe: true,\r\n },\r\n };\r\n }\r\n case EventType.Meta:\r\n case EventType.Load:\r\n case EventType.DomContentLoaded: {\r\n return false;\r\n }\r\n case EventType.Plugin: {\r\n return e;\r\n }\r\n case EventType.Custom: {\r\n this.replaceIds(e.data.payload, iframeEl, ['id', 'parentId', 'previousId', 'nextId']);\r\n return e;\r\n }\r\n case EventType.IncrementalSnapshot: {\r\n switch (e.data.source) {\r\n case IncrementalSource.Mutation: {\r\n e.data.adds.forEach((n) => {\r\n this.replaceIds(n, iframeEl, [\r\n 'parentId',\r\n 'nextId',\r\n 'previousId',\r\n ]);\r\n this.replaceIdOnNode(n.node, iframeEl);\r\n });\r\n e.data.removes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['parentId', 'id']);\r\n });\r\n e.data.attributes.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n e.data.texts.forEach((n) => {\r\n this.replaceIds(n, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.Drag:\r\n case IncrementalSource.TouchMove:\r\n case IncrementalSource.MouseMove: {\r\n e.data.positions.forEach((p) => {\r\n this.replaceIds(p, iframeEl, ['id']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.ViewportResize: {\r\n return false;\r\n }\r\n case IncrementalSource.MediaInteraction:\r\n case IncrementalSource.MouseInteraction:\r\n case IncrementalSource.Scroll:\r\n case IncrementalSource.CanvasMutation:\r\n case IncrementalSource.Input: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n return e;\r\n }\r\n case IncrementalSource.StyleSheetRule:\r\n case IncrementalSource.StyleDeclaration: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleId']);\r\n return e;\r\n }\r\n case IncrementalSource.Font: {\r\n return e;\r\n }\r\n case IncrementalSource.Selection: {\r\n e.data.ranges.forEach((range) => {\r\n this.replaceIds(range, iframeEl, ['start', 'end']);\r\n });\r\n return e;\r\n }\r\n case IncrementalSource.AdoptedStyleSheet: {\r\n this.replaceIds(e.data, iframeEl, ['id']);\r\n this.replaceStyleIds(e.data, iframeEl, ['styleIds']);\r\n (_a = e.data.styles) === null || _a === void 0 ? void 0 : _a.forEach((style) => {\r\n this.replaceStyleIds(style, iframeEl, ['styleId']);\r\n });\r\n return e;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n replace(iframeMirror, obj, iframeEl, keys) {\r\n for (const key of keys) {\r\n if (!Array.isArray(obj[key]) && typeof obj[key] !== 'number')\r\n continue;\r\n if (Array.isArray(obj[key])) {\r\n obj[key] = iframeMirror.getIds(iframeEl, obj[key]);\r\n }\r\n else {\r\n obj[key] = iframeMirror.getId(iframeEl, obj[key]);\r\n }\r\n }\r\n return obj;\r\n }\r\n replaceIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeMirror, obj, iframeEl, keys);\r\n }\r\n replaceStyleIds(obj, iframeEl, keys) {\r\n return this.replace(this.crossOriginIframeStyleMirror, obj, iframeEl, keys);\r\n }\r\n replaceIdOnNode(node, iframeEl) {\r\n this.replaceIds(node, iframeEl, ['id']);\r\n if ('childNodes' in node) {\r\n node.childNodes.forEach((child) => {\r\n this.replaceIdOnNode(child, iframeEl);\r\n });\r\n }\r\n }\r\n}\n\nexport { IframeManager };\n","import { initMutationObserver, initScrollObserver, initAdoptedStyleSheetObserver } from './observer.js';\nimport { patch } from '../utils.js';\nimport { isNativeShadowDom } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\n\nclass ShadowDomManager {\r\n constructor(options) {\r\n this.shadowDoms = new WeakSet();\r\n this.restorePatches = [];\r\n this.mutationCb = options.mutationCb;\r\n this.scrollCb = options.scrollCb;\r\n this.bypassOptions = options.bypassOptions;\r\n this.mirror = options.mirror;\r\n const manager = this;\r\n this.restorePatches.push(patch(Element.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot)\r\n manager.addShadowRoot(this.shadowRoot, this.ownerDocument);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n addShadowRoot(shadowRoot, doc) {\r\n if (!isNativeShadowDom(shadowRoot))\r\n return;\r\n if (this.shadowDoms.has(shadowRoot))\r\n return;\r\n this.shadowDoms.add(shadowRoot);\r\n initMutationObserver(Object.assign(Object.assign({}, this.bypassOptions), { doc, mutationCb: this.mutationCb, mirror: this.mirror, shadowDomManager: this }), shadowRoot);\r\n initScrollObserver(Object.assign(Object.assign({}, this.bypassOptions), { scrollCb: this.scrollCb, doc: shadowRoot, mirror: this.mirror }));\r\n setTimeout(() => {\r\n if (shadowRoot.adoptedStyleSheets &&\r\n shadowRoot.adoptedStyleSheets.length > 0)\r\n this.bypassOptions.stylesheetManager.adoptStyleSheets(shadowRoot.adoptedStyleSheets, this.mirror.getId(shadowRoot.host));\r\n initAdoptedStyleSheetObserver({\r\n mirror: this.mirror,\r\n stylesheetManager: this.bypassOptions.stylesheetManager,\r\n }, shadowRoot);\r\n }, 0);\r\n }\r\n observeAttachShadow(iframeElement) {\r\n if (iframeElement.contentWindow) {\r\n const manager = this;\r\n this.restorePatches.push(patch(iframeElement.contentWindow.HTMLElement.prototype, 'attachShadow', function (original) {\r\n return function (option) {\r\n const shadowRoot = original.call(this, option);\r\n if (this.shadowRoot)\r\n manager.addShadowRoot(this.shadowRoot, iframeElement.contentDocument);\r\n return shadowRoot;\r\n };\r\n }));\r\n }\r\n }\r\n reset() {\r\n this.restorePatches.forEach((restorePatch) => restorePatch());\r\n this.shadowDoms = new WeakSet();\r\n }\r\n}\n\nexport { ShadowDomManager };\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\n\nexport { __awaiter, __rest };\n","/*\n * base64-arraybuffer 1.0.1 <https://github.com/niklasvh/base64-arraybuffer>\n * Copyright (c) 2021 Niklas von Hertzen <https://hertzen.com>\n * Released under MIT License\n */\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n// Use a lookup table to find the index.\nvar lookup = typeof Uint8Array === 'undefined' ? [] : new Uint8Array(256);\nfor (var i = 0; i < chars.length; i++) {\n lookup[chars.charCodeAt(i)] = i;\n}\nvar encode = function (arraybuffer) {\n var bytes = new Uint8Array(arraybuffer), i, len = bytes.length, base64 = '';\n for (i = 0; i < len; i += 3) {\n base64 += chars[bytes[i] >> 2];\n base64 += chars[((bytes[i] & 3) << 4) | (bytes[i + 1] >> 4)];\n base64 += chars[((bytes[i + 1] & 15) << 2) | (bytes[i + 2] >> 6)];\n base64 += chars[bytes[i + 2] & 63];\n }\n if (len % 3 === 2) {\n base64 = base64.substring(0, base64.length - 1) + '=';\n }\n else if (len % 3 === 1) {\n base64 = base64.substring(0, base64.length - 2) + '==';\n }\n return base64;\n};\nvar decode = function (base64) {\n var bufferLength = base64.length * 0.75, len = base64.length, i, p = 0, encoded1, encoded2, encoded3, encoded4;\n if (base64[base64.length - 1] === '=') {\n bufferLength--;\n if (base64[base64.length - 2] === '=') {\n bufferLength--;\n }\n }\n var arraybuffer = new ArrayBuffer(bufferLength), bytes = new Uint8Array(arraybuffer);\n for (i = 0; i < len; i += 4) {\n encoded1 = lookup[base64.charCodeAt(i)];\n encoded2 = lookup[base64.charCodeAt(i + 1)];\n encoded3 = lookup[base64.charCodeAt(i + 2)];\n encoded4 = lookup[base64.charCodeAt(i + 3)];\n bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);\n bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);\n bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);\n }\n return arraybuffer;\n};\n\nexport { decode, encode };\n","import { encode } from './../../../../../../ext/base64-arraybuffer/dist/base64-arraybuffer.es5.js';\n\nconst canvasVarMap = new Map();\r\nfunction variableListFor(ctx, ctor) {\r\n let contextMap = canvasVarMap.get(ctx);\r\n if (!contextMap) {\r\n contextMap = new Map();\r\n canvasVarMap.set(ctx, contextMap);\r\n }\r\n if (!contextMap.has(ctor)) {\r\n contextMap.set(ctor, []);\r\n }\r\n return contextMap.get(ctor);\r\n}\r\nconst saveWebGLVar = (value, win, ctx) => {\r\n if (!value ||\r\n !(isInstanceOfWebGLObject(value, win) || typeof value === 'object'))\r\n return;\r\n const name = value.constructor.name;\r\n const list = variableListFor(ctx, name);\r\n let index = list.indexOf(value);\r\n if (index === -1) {\r\n index = list.length;\r\n list.push(value);\r\n }\r\n return index;\r\n};\r\nfunction serializeArg(value, win, ctx) {\r\n if (value instanceof Array) {\r\n return value.map((arg) => serializeArg(arg, win, ctx));\r\n }\r\n else if (value === null) {\r\n return value;\r\n }\r\n else if (value instanceof Float32Array ||\r\n value instanceof Float64Array ||\r\n value instanceof Int32Array ||\r\n value instanceof Uint32Array ||\r\n value instanceof Uint8Array ||\r\n value instanceof Uint16Array ||\r\n value instanceof Int16Array ||\r\n value instanceof Int8Array ||\r\n value instanceof Uint8ClampedArray) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [Object.values(value)],\r\n };\r\n }\r\n else if (value instanceof ArrayBuffer) {\r\n const name = value.constructor.name;\r\n const base64 = encode(value);\r\n return {\r\n rr_type: name,\r\n base64,\r\n };\r\n }\r\n else if (value instanceof DataView) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [\r\n serializeArg(value.buffer, win, ctx),\r\n value.byteOffset,\r\n value.byteLength,\r\n ],\r\n };\r\n }\r\n else if (value instanceof HTMLImageElement) {\r\n const name = value.constructor.name;\r\n const { src } = value;\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof HTMLCanvasElement) {\r\n const name = 'HTMLImageElement';\r\n const src = value.toDataURL();\r\n return {\r\n rr_type: name,\r\n src,\r\n };\r\n }\r\n else if (value instanceof ImageData) {\r\n const name = value.constructor.name;\r\n return {\r\n rr_type: name,\r\n args: [serializeArg(value.data, win, ctx), value.width, value.height],\r\n };\r\n }\r\n else if (isInstanceOfWebGLObject(value, win) || typeof value === 'object') {\r\n const name = value.constructor.name;\r\n const index = saveWebGLVar(value, win, ctx);\r\n return {\r\n rr_type: name,\r\n index: index,\r\n };\r\n }\r\n return value;\r\n}\r\nconst serializeArgs = (args, win, ctx) => {\r\n return [...args].map((arg) => serializeArg(arg, win, ctx));\r\n};\r\nconst isInstanceOfWebGLObject = (value, win) => {\r\n const webGLConstructorNames = [\r\n 'WebGLActiveInfo',\r\n 'WebGLBuffer',\r\n 'WebGLFramebuffer',\r\n 'WebGLProgram',\r\n 'WebGLRenderbuffer',\r\n 'WebGLShader',\r\n 'WebGLShaderPrecisionFormat',\r\n 'WebGLTexture',\r\n 'WebGLUniformLocation',\r\n 'WebGLVertexArrayObject',\r\n 'WebGLVertexArrayObjectOES',\r\n ];\r\n const supportedWebGLConstructorNames = webGLConstructorNames.filter((name) => typeof win[name] === 'function');\r\n return Boolean(supportedWebGLConstructorNames.find((name) => value instanceof win[name]));\r\n};\n\nexport { isInstanceOfWebGLObject, saveWebGLVar, serializeArg, serializeArgs, variableListFor };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { serializeArgs } from './serialize-args.js';\n\nfunction initCanvas2DMutationObserver(cb, win, blockClass, blockSelector) {\r\n const handlers = [];\r\n const props2D = Object.getOwnPropertyNames(win.CanvasRenderingContext2D.prototype);\r\n for (const prop of props2D) {\r\n try {\r\n if (typeof win.CanvasRenderingContext2D.prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(win.CanvasRenderingContext2D.prototype, prop, function (original) {\r\n return function (...args) {\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n setTimeout(() => {\r\n const recordArgs = serializeArgs([...args], win, this);\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: recordArgs,\r\n });\r\n }, 0);\r\n }\r\n return original.apply(this, args);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(win.CanvasRenderingContext2D.prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type: CanvasContext['2D'],\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvas2DMutationObserver as default };\n","import { patch, isBlocked } from '../../../utils.js';\n\nfunction initCanvasContextObserver(win, blockClass, blockSelector) {\r\n const handlers = [];\r\n try {\r\n const restoreHandler = patch(win.HTMLCanvasElement.prototype, 'getContext', function (original) {\r\n return function (contextType, ...args) {\r\n if (!isBlocked(this, blockClass, blockSelector, true)) {\r\n if (!('__context' in this))\r\n this.__context = contextType;\r\n }\r\n return original.apply(this, [contextType, ...args]);\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n console.error('failed to patch HTMLCanvasElement.prototype.getContext');\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasContextObserver as default };\n","import { CanvasContext } from '../../../../../types/dist/types.js';\nimport { patch, isBlocked, hookSetter } from '../../../utils.js';\nimport { saveWebGLVar, serializeArgs } from './serialize-args.js';\n\nfunction patchGLPrototype(prototype, type, cb, blockClass, blockSelector, mirror, win) {\r\n const handlers = [];\r\n const props = Object.getOwnPropertyNames(prototype);\r\n for (const prop of props) {\r\n if ([\r\n 'isContextLost',\r\n 'canvas',\r\n 'drawingBufferWidth',\r\n 'drawingBufferHeight',\r\n ].includes(prop)) {\r\n continue;\r\n }\r\n try {\r\n if (typeof prototype[prop] !== 'function') {\r\n continue;\r\n }\r\n const restoreHandler = patch(prototype, prop, function (original) {\r\n return function (...args) {\r\n const result = original.apply(this, args);\r\n saveWebGLVar(result, win, this);\r\n if (!isBlocked(this.canvas, blockClass, blockSelector, true)) {\r\n const recordArgs = serializeArgs([...args], win, this);\r\n const mutation = {\r\n type,\r\n property: prop,\r\n args: recordArgs,\r\n };\r\n cb(this.canvas, mutation);\r\n }\r\n return result;\r\n };\r\n });\r\n handlers.push(restoreHandler);\r\n }\r\n catch (_a) {\r\n const hookHandler = hookSetter(prototype, prop, {\r\n set(v) {\r\n cb(this.canvas, {\r\n type,\r\n property: prop,\r\n args: [v],\r\n setter: true,\r\n });\r\n },\r\n });\r\n handlers.push(hookHandler);\r\n }\r\n }\r\n return handlers;\r\n}\r\nfunction initCanvasWebGLMutationObserver(cb, win, blockClass, blockSelector, mirror) {\r\n const handlers = [];\r\n handlers.push(...patchGLPrototype(win.WebGLRenderingContext.prototype, CanvasContext.WebGL, cb, blockClass, blockSelector, mirror, win));\r\n if (typeof win.WebGL2RenderingContext !== 'undefined') {\r\n handlers.push(...patchGLPrototype(win.WebGL2RenderingContext.prototype, CanvasContext.WebGL2, cb, blockClass, blockSelector, mirror, win));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n };\r\n}\n\nexport { initCanvasWebGLMutationObserver as default };\n","var WorkerClass = null;\n\ntry {\n var WorkerThreads =\n typeof module !== 'undefined' && typeof module.require === 'function' && module.require('worker_threads') ||\n typeof __non_webpack_require__ === 'function' && __non_webpack_require__('worker_threads') ||\n typeof require === 'function' && require('worker_threads');\n WorkerClass = WorkerThreads.Worker;\n} catch(e) {} // eslint-disable-line\n\nexport { WorkerClass };\n","import { WorkerClass } from './_rollup-plugin-web-worker-loader__helper__node__WorkerClass.js';\n\nfunction decodeBase64(base64, enableUnicode) {\n return Buffer.from(base64, 'base64').toString(enableUnicode ? 'utf16' : 'utf8');\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n var source = decodeBase64(base64, enableUnicode);\n var start = source.indexOf('\\n', 10) + 1;\n var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n return function WorkerFactory(options) {\n return new WorkerClass(body, Object.assign({}, options, { eval: true }));\n };\n}\n\nexport { createBase64WorkerFactory };\n","function decodeBase64(base64, enableUnicode) {\n var binaryString = atob(base64);\n if (enableUnicode) {\n var binaryView = new Uint8Array(binaryString.length);\n for (var i = 0, n = binaryString.length; i < n; ++i) {\n binaryView[i] = binaryString.charCodeAt(i);\n }\n return String.fromCharCode.apply(null, new Uint16Array(binaryView.buffer));\n }\n return binaryString;\n}\n\nfunction createURL(base64, sourcemapArg, enableUnicodeArg) {\n var sourcemap = sourcemapArg === undefined ? null : sourcemapArg;\n var enableUnicode = enableUnicodeArg === undefined ? false : enableUnicodeArg;\n var source = decodeBase64(base64, enableUnicode);\n var start = source.indexOf('\\n', 10) + 1;\n var body = source.substring(start) + (sourcemap ? '\\/\\/# sourceMappingURL=' + sourcemap : '');\n var blob = new Blob([body], { type: 'application/javascript' });\n return URL.createObjectURL(blob);\n}\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n var url;\n return function WorkerFactory(options) {\n url = url || createURL(base64, sourcemapArg, enableUnicodeArg);\n return new Worker(url, options);\n };\n}\n\nexport { createBase64WorkerFactory };\n","var kIsNodeJS = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n\nfunction isNodeJS() {\n return kIsNodeJS;\n}\n\nexport { isNodeJS };\n","import { createBase64WorkerFactory as createBase64WorkerFactory$1 } from './_rollup-plugin-web-worker-loader__helper__node__createBase64WorkerFactory.js';\nimport { createBase64WorkerFactory as createBase64WorkerFactory$2 } from './_rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';\nimport { isNodeJS } from './_rollup-plugin-web-worker-loader__helper__auto__isNodeJS.js';\n\nfunction createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {\n if (isNodeJS()) {\n return createBase64WorkerFactory$1(base64, sourcemapArg, enableUnicodeArg);\n }\n return createBase64WorkerFactory$2(base64, sourcemapArg, enableUnicodeArg);\n}\n\nexport { createBase64WorkerFactory };\n","import { createBase64WorkerFactory } from './_rollup-plugin-web-worker-loader__helper__auto__createBase64WorkerFactory.js';\n\nvar WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIC8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLg0KDQogICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55DQogICAgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLg0KDQogICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEgNCiAgICBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkNCiAgICBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsDQogICAgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NDQogICAgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1INCiAgICBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SDQogICAgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikgew0KICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH0NCiAgICAgICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7DQogICAgICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9DQogICAgICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfQ0KICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpOw0KICAgICAgICB9KTsNCiAgICB9CgogICAgLyoKICAgICAqIGJhc2U2NC1hcnJheWJ1ZmZlciAxLjAuMSA8aHR0cHM6Ly9naXRodWIuY29tL25pa2xhc3ZoL2Jhc2U2NC1hcnJheWJ1ZmZlcj4KICAgICAqIENvcHlyaWdodCAoYykgMjAyMSBOaWtsYXMgdm9uIEhlcnR6ZW4gPGh0dHBzOi8vaGVydHplbi5jb20+CiAgICAgKiBSZWxlYXNlZCB1bmRlciBNSVQgTGljZW5zZQogICAgICovCiAgICB2YXIgY2hhcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7CiAgICAvLyBVc2UgYSBsb29rdXAgdGFibGUgdG8gZmluZCB0aGUgaW5kZXguCiAgICB2YXIgbG9va3VwID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gW10gOiBuZXcgVWludDhBcnJheSgyNTYpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGFycy5sZW5ndGg7IGkrKykgewogICAgICAgIGxvb2t1cFtjaGFycy5jaGFyQ29kZUF0KGkpXSA9IGk7CiAgICB9CiAgICB2YXIgZW5jb2RlID0gZnVuY3Rpb24gKGFycmF5YnVmZmVyKSB7CiAgICAgICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlidWZmZXIpLCBpLCBsZW4gPSBieXRlcy5sZW5ndGgsIGJhc2U2NCA9ICcnOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gMykgewogICAgICAgICAgICBiYXNlNjQgKz0gY2hhcnNbYnl0ZXNbaV0gPj4gMl07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1soKGJ5dGVzW2ldICYgMykgPDwgNCkgfCAoYnl0ZXNbaSArIDFdID4+IDQpXTsKICAgICAgICAgICAgYmFzZTY0ICs9IGNoYXJzWygoYnl0ZXNbaSArIDFdICYgMTUpIDw8IDIpIHwgKGJ5dGVzW2kgKyAyXSA+PiA2KV07CiAgICAgICAgICAgIGJhc2U2NCArPSBjaGFyc1tieXRlc1tpICsgMl0gJiA2M107CiAgICAgICAgfQogICAgICAgIGlmIChsZW4gJSAzID09PSAyKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDEpICsgJz0nOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsZW4gJSAzID09PSAxKSB7CiAgICAgICAgICAgIGJhc2U2NCA9IGJhc2U2NC5zdWJzdHJpbmcoMCwgYmFzZTY0Lmxlbmd0aCAtIDIpICsgJz09JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJhc2U2NDsKICAgIH07CgogICAgY29uc3QgbGFzdEJsb2JNYXAgPSBuZXcgTWFwKCk7DQogICAgY29uc3QgdHJhbnNwYXJlbnRCbG9iTWFwID0gbmV3IE1hcCgpOw0KICAgIGZ1bmN0aW9uIGdldFRyYW5zcGFyZW50QmxvYkZvcih3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucykgew0KICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgew0KICAgICAgICAgICAgY29uc3QgaWQgPSBgJHt3aWR0aH0tJHtoZWlnaHR9YDsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgaWYgKHRyYW5zcGFyZW50QmxvYk1hcC5oYXMoaWQpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNwYXJlbnRCbG9iTWFwLmdldChpZCk7DQogICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2NyZWVuID0gbmV3IE9mZnNjcmVlbkNhbnZhcyh3aWR0aCwgaGVpZ2h0KTsNCiAgICAgICAgICAgICAgICBvZmZzY3JlZW4uZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0geWllbGQgYmxvYi5hcnJheUJ1ZmZlcigpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NCA9IGVuY29kZShhcnJheUJ1ZmZlcik7DQogICAgICAgICAgICAgICAgdHJhbnNwYXJlbnRCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTY0Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICcnOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9DQogICAgY29uc3Qgd29ya2VyID0gc2VsZjsNCiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsNCiAgICAgICAgICAgIGlmICgnT2Zmc2NyZWVuQ2FudmFzJyBpbiBnbG9iYWxUaGlzKSB7DQogICAgICAgICAgICAgICAgY29uc3QgeyBpZCwgYml0bWFwLCB3aWR0aCwgaGVpZ2h0LCBkYXRhVVJMT3B0aW9ucyB9ID0gZS5kYXRhOw0KICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zcGFyZW50QmFzZTY0ID0gZ2V0VHJhbnNwYXJlbnRCbG9iRm9yKHdpZHRoLCBoZWlnaHQsIGRhdGFVUkxPcHRpb25zKTsNCiAgICAgICAgICAgICAgICBjb25zdCBvZmZzY3JlZW4gPSBuZXcgT2Zmc2NyZWVuQ2FudmFzKHdpZHRoLCBoZWlnaHQpOw0KICAgICAgICAgICAgICAgIGNvbnN0IGN0eCA9IG9mZnNjcmVlbi5nZXRDb250ZXh0KCcyZCcpOw0KICAgICAgICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoYml0bWFwLCAwLCAwKTsNCiAgICAgICAgICAgICAgICBiaXRtYXAuY2xvc2UoKTsNCiAgICAgICAgICAgICAgICBjb25zdCBibG9iID0geWllbGQgb2Zmc2NyZWVuLmNvbnZlcnRUb0Jsb2IoZGF0YVVSTE9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGU7DQogICAgICAgICAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSB5aWVsZCBibG9iLmFycmF5QnVmZmVyKCk7DQogICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0ID0gZW5jb2RlKGFycmF5QnVmZmVyKTsNCiAgICAgICAgICAgICAgICBpZiAoIWxhc3RCbG9iTWFwLmhhcyhpZCkgJiYgKHlpZWxkIHRyYW5zcGFyZW50QmFzZTY0KSA9PT0gYmFzZTY0KSB7DQogICAgICAgICAgICAgICAgICAgIGxhc3RCbG9iTWFwLnNldChpZCwgYmFzZTY0KTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtlci5wb3N0TWVzc2FnZSh7IGlkIH0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAobGFzdEJsb2JNYXAuZ2V0KGlkKSA9PT0gYmFzZTY0KQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQgfSk7DQogICAgICAgICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsNCiAgICAgICAgICAgICAgICAgICAgaWQsDQogICAgICAgICAgICAgICAgICAgIHR5cGUsDQogICAgICAgICAgICAgICAgICAgIGJhc2U2NCwNCiAgICAgICAgICAgICAgICAgICAgd2lkdGgsDQogICAgICAgICAgICAgICAgICAgIGhlaWdodCwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICBsYXN0QmxvYk1hcC5zZXQoaWQsIGJhc2U2NCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gd29ya2VyLnBvc3RNZXNzYWdlKHsgaWQ6IGUuZGF0YS5pZCB9KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfTsKCn0pKCk7Cgo=', null, false);\n/* eslint-enable */\n\nexport { WorkerFactory as default };\n","import { __rest, __awaiter } from './../../../../../../ext/tslib/tslib.es6.js';\nimport { isBlocked } from '../../../utils.js';\nimport { CanvasContext } from '../../../../../types/dist/types.js';\nimport initCanvas2DMutationObserver from './2d.js';\nimport initCanvasContextObserver from './canvas.js';\nimport initCanvasWebGLMutationObserver from './webgl.js';\nimport WorkerFactory from '../../../../../../_virtual/image-bitmap-data-url-worker.js';\n\nclass CanvasManager {\r\n constructor(options) {\r\n this.pendingCanvasMutations = new Map();\r\n this.rafStamps = { latestId: 0, invokeId: null };\r\n this.frozen = false;\r\n this.locked = false;\r\n this.processMutation = (target, mutation) => {\r\n const newFrame = this.rafStamps.invokeId &&\r\n this.rafStamps.latestId !== this.rafStamps.invokeId;\r\n if (newFrame || !this.rafStamps.invokeId)\r\n this.rafStamps.invokeId = this.rafStamps.latestId;\r\n if (!this.pendingCanvasMutations.has(target)) {\r\n this.pendingCanvasMutations.set(target, []);\r\n }\r\n this.pendingCanvasMutations.get(target).push(mutation);\r\n };\r\n const { sampling = 'all', win, blockClass, blockSelector, recordCanvas, dataURLOptions, } = options;\r\n this.mutationCb = options.mutationCb;\r\n this.mirror = options.mirror;\r\n if (recordCanvas && sampling === 'all')\r\n this.initCanvasMutationObserver(win, blockClass, blockSelector);\r\n if (recordCanvas && typeof sampling === 'number')\r\n this.initCanvasFPSObserver(sampling, win, blockClass, blockSelector, {\r\n dataURLOptions,\r\n });\r\n }\r\n reset() {\r\n this.pendingCanvasMutations.clear();\r\n this.resetObservers && this.resetObservers();\r\n }\r\n freeze() {\r\n this.frozen = true;\r\n }\r\n unfreeze() {\r\n this.frozen = false;\r\n }\r\n lock() {\r\n this.locked = true;\r\n }\r\n unlock() {\r\n this.locked = false;\r\n }\r\n initCanvasFPSObserver(fps, win, blockClass, blockSelector, options) {\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector);\r\n const snapshotInProgressMap = new Map();\r\n const worker = new WorkerFactory();\r\n worker.onmessage = (e) => {\r\n const { id } = e.data;\r\n snapshotInProgressMap.set(id, false);\r\n if (!('base64' in e.data))\r\n return;\r\n const { base64, type, width, height } = e.data;\r\n this.mutationCb({\r\n id,\r\n type: CanvasContext['2D'],\r\n commands: [\r\n {\r\n property: 'clearRect',\r\n args: [0, 0, width, height],\r\n },\r\n {\r\n property: 'drawImage',\r\n args: [\r\n {\r\n rr_type: 'ImageBitmap',\r\n args: [\r\n {\r\n rr_type: 'Blob',\r\n data: [{ rr_type: 'ArrayBuffer', base64 }],\r\n type,\r\n },\r\n ],\r\n },\r\n 0,\r\n 0,\r\n ],\r\n },\r\n ],\r\n });\r\n };\r\n const timeBetweenSnapshots = 1000 / fps;\r\n let lastSnapshotTime = 0;\r\n let rafId;\r\n const getCanvas = () => {\r\n const matchedCanvas = [];\r\n win.document.querySelectorAll('canvas').forEach((canvas) => {\r\n if (!isBlocked(canvas, blockClass, blockSelector, true)) {\r\n matchedCanvas.push(canvas);\r\n }\r\n });\r\n return matchedCanvas;\r\n };\r\n const takeCanvasSnapshots = (timestamp) => {\r\n if (lastSnapshotTime &&\r\n timestamp - lastSnapshotTime < timeBetweenSnapshots) {\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n return;\r\n }\r\n lastSnapshotTime = timestamp;\r\n getCanvas()\r\n .forEach((canvas) => __awaiter(this, void 0, void 0, function* () {\r\n var _a;\r\n const id = this.mirror.getId(canvas);\r\n if (snapshotInProgressMap.get(id))\r\n return;\r\n snapshotInProgressMap.set(id, true);\r\n if (['webgl', 'webgl2'].includes(canvas.__context)) {\r\n const context = canvas.getContext(canvas.__context);\r\n if (((_a = context === null || context === void 0 ? void 0 : context.getContextAttributes()) === null || _a === void 0 ? void 0 : _a.preserveDrawingBuffer) === false) {\r\n context === null || context === void 0 ? void 0 : context.clear(context.COLOR_BUFFER_BIT);\r\n }\r\n }\r\n const bitmap = yield createImageBitmap(canvas);\r\n worker.postMessage({\r\n id,\r\n bitmap,\r\n width: canvas.width,\r\n height: canvas.height,\r\n dataURLOptions: options.dataURLOptions,\r\n }, [bitmap]);\r\n }));\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n };\r\n rafId = requestAnimationFrame(takeCanvasSnapshots);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n cancelAnimationFrame(rafId);\r\n };\r\n }\r\n initCanvasMutationObserver(win, blockClass, blockSelector) {\r\n this.startRAFTimestamping();\r\n this.startPendingCanvasMutationFlusher();\r\n const canvasContextReset = initCanvasContextObserver(win, blockClass, blockSelector);\r\n const canvas2DReset = initCanvas2DMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector);\r\n const canvasWebGL1and2Reset = initCanvasWebGLMutationObserver(this.processMutation.bind(this), win, blockClass, blockSelector, this.mirror);\r\n this.resetObservers = () => {\r\n canvasContextReset();\r\n canvas2DReset();\r\n canvasWebGL1and2Reset();\r\n };\r\n }\r\n startPendingCanvasMutationFlusher() {\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n startRAFTimestamping() {\r\n const setLatestRAFTimestamp = (timestamp) => {\r\n this.rafStamps.latestId = timestamp;\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n };\r\n requestAnimationFrame(setLatestRAFTimestamp);\r\n }\r\n flushPendingCanvasMutations() {\r\n this.pendingCanvasMutations.forEach((values, canvas) => {\r\n const id = this.mirror.getId(canvas);\r\n this.flushPendingCanvasMutationFor(canvas, id);\r\n });\r\n requestAnimationFrame(() => this.flushPendingCanvasMutations());\r\n }\r\n flushPendingCanvasMutationFor(canvas, id) {\r\n if (this.frozen || this.locked) {\r\n return;\r\n }\r\n const valuesWithType = this.pendingCanvasMutations.get(canvas);\r\n if (!valuesWithType || id === -1)\r\n return;\r\n const values = valuesWithType.map((value) => {\r\n const rest = __rest(value, [\"type\"]);\r\n return rest;\r\n });\r\n const { type } = valuesWithType[0];\r\n this.mutationCb({ id, type, commands: values });\r\n this.pendingCanvasMutations.delete(canvas);\r\n }\r\n}\n\nexport { CanvasManager };\n","import { getCssRuleString } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { StyleSheetMirror } from '../utils.js';\n\nclass StylesheetManager {\r\n constructor(options) {\r\n this.trackedLinkElements = new WeakSet();\r\n this.styleMirror = new StyleSheetMirror();\r\n this.mutationCb = options.mutationCb;\r\n this.adoptedStyleSheetCb = options.adoptedStyleSheetCb;\r\n }\r\n attachLinkElement(linkEl, childSn) {\r\n if ('_cssText' in childSn.attributes)\r\n this.mutationCb({\r\n adds: [],\r\n removes: [],\r\n texts: [],\r\n attributes: [\r\n {\r\n id: childSn.id,\r\n attributes: childSn\r\n .attributes,\r\n },\r\n ],\r\n });\r\n this.trackLinkElement(linkEl);\r\n }\r\n trackLinkElement(linkEl) {\r\n if (this.trackedLinkElements.has(linkEl))\r\n return;\r\n this.trackedLinkElements.add(linkEl);\r\n this.trackStylesheetInLinkElement(linkEl);\r\n }\r\n adoptStyleSheets(sheets, hostId) {\r\n if (sheets.length === 0)\r\n return;\r\n const adoptedStyleSheetData = {\r\n id: hostId,\r\n styleIds: [],\r\n };\r\n const styles = [];\r\n for (const sheet of sheets) {\r\n let styleId;\r\n if (!this.styleMirror.has(sheet)) {\r\n styleId = this.styleMirror.add(sheet);\r\n const rules = Array.from(sheet.rules || CSSRule);\r\n styles.push({\r\n styleId,\r\n rules: rules.map((r, index) => {\r\n return {\r\n rule: getCssRuleString(r),\r\n index,\r\n };\r\n }),\r\n });\r\n }\r\n else\r\n styleId = this.styleMirror.getId(sheet);\r\n adoptedStyleSheetData.styleIds.push(styleId);\r\n }\r\n if (styles.length > 0)\r\n adoptedStyleSheetData.styles = styles;\r\n this.adoptedStyleSheetCb(adoptedStyleSheetData);\r\n }\r\n reset() {\r\n this.styleMirror.reset();\r\n this.trackedLinkElements = new WeakSet();\r\n }\r\n trackStylesheetInLinkElement(linkEl) {\r\n }\r\n}\n\nexport { StylesheetManager };\n","import { createMirror, snapshot } from '../../../rrweb-snapshot/es/rrweb-snapshot.js';\nimport { initObservers, mutationBuffers } from './observer.js';\nimport { polyfill, on, getWindowWidth, getWindowHeight, isSerializedIframe, isSerializedStylesheet, hasShadowRoot } from '../utils.js';\nimport { EventType, IncrementalSource } from '../../../types/dist/types.js';\nimport { IframeManager } from './iframe-manager.js';\nimport { ShadowDomManager } from './shadow-dom-manager.js';\nimport { CanvasManager } from './observers/canvas/canvas-manager.js';\nimport { StylesheetManager } from './stylesheet-manager.js';\n\nfunction wrapEvent(e) {\r\n return Object.assign(Object.assign({}, e), { timestamp: Date.now() });\r\n}\r\nlet wrappedEmit;\r\nlet takeFullSnapshot;\r\nlet canvasManager;\r\nlet recording = false;\r\nconst mirror = createMirror();\r\nfunction record(options = {}) {\r\n const { emit, checkoutEveryNms, checkoutEveryNth, blockClass = 'rr-block', blockSelector = null, ignoreClass = 'rr-ignore', maskTextClass = 'rr-mask', maskTextSelector = null, inlineStylesheet = true, maskAllInputs, maskInputOptions: _maskInputOptions, slimDOMOptions: _slimDOMOptions, maskInputFn, maskTextFn, hooks, packFn, sampling = {}, dataURLOptions = {}, mousemoveWait, recordCanvas = false, recordCrossOriginIframes = false, userTriggeredOnInput = false, collectFonts = false, inlineImages = false, plugins, keepIframeSrcFn = () => false, ignoreCSSAttributes = new Set([]), } = options;\r\n const inEmittingFrame = recordCrossOriginIframes\r\n ? window.parent === window\r\n : true;\r\n let passEmitsToParent = false;\r\n if (!inEmittingFrame) {\r\n try {\r\n window.parent.document;\r\n passEmitsToParent = false;\r\n }\r\n catch (e) {\r\n passEmitsToParent = true;\r\n }\r\n }\r\n if (inEmittingFrame && !emit) {\r\n throw new Error('emit function is required');\r\n }\r\n if (mousemoveWait !== undefined && sampling.mousemove === undefined) {\r\n sampling.mousemove = mousemoveWait;\r\n }\r\n mirror.reset();\r\n const maskInputOptions = maskAllInputs === true\r\n ? {\r\n color: true,\r\n date: true,\r\n 'datetime-local': true,\r\n email: true,\r\n month: true,\r\n number: true,\r\n range: true,\r\n search: true,\r\n tel: true,\r\n text: true,\r\n time: true,\r\n url: true,\r\n week: true,\r\n textarea: true,\r\n select: true,\r\n password: true,\r\n }\r\n : _maskInputOptions !== undefined\r\n ? _maskInputOptions\r\n : { password: true };\r\n const slimDOMOptions = _slimDOMOptions === true || _slimDOMOptions === 'all'\r\n ? {\r\n script: true,\r\n comment: true,\r\n headFavicon: true,\r\n headWhitespace: true,\r\n headMetaSocial: true,\r\n headMetaRobots: true,\r\n headMetaHttpEquiv: true,\r\n headMetaVerification: true,\r\n headMetaAuthorship: _slimDOMOptions === 'all',\r\n headMetaDescKeywords: _slimDOMOptions === 'all',\r\n }\r\n : _slimDOMOptions\r\n ? _slimDOMOptions\r\n : {};\r\n polyfill();\r\n let lastFullSnapshotEvent;\r\n let incrementalSnapshotCount = 0;\r\n const eventProcessor = (e) => {\r\n for (const plugin of plugins || []) {\r\n if (plugin.eventProcessor) {\r\n e = plugin.eventProcessor(e);\r\n }\r\n }\r\n if (packFn) {\r\n e = packFn(e);\r\n }\r\n return e;\r\n };\r\n wrappedEmit = (e, isCheckout) => {\r\n var _a;\r\n if (((_a = mutationBuffers[0]) === null || _a === void 0 ? void 0 : _a.isFrozen()) &&\r\n e.type !== EventType.FullSnapshot &&\r\n !(e.type === EventType.IncrementalSnapshot &&\r\n e.data.source === IncrementalSource.Mutation)) {\r\n mutationBuffers.forEach((buf) => buf.unfreeze());\r\n }\r\n if (inEmittingFrame) {\r\n emit === null || emit === void 0 ? void 0 : emit(eventProcessor(e), isCheckout);\r\n }\r\n else if (passEmitsToParent) {\r\n const message = {\r\n type: 'rrweb',\r\n event: eventProcessor(e),\r\n isCheckout,\r\n };\r\n window.parent.postMessage(message, '*');\r\n }\r\n if (e.type === EventType.FullSnapshot) {\r\n lastFullSnapshotEvent = e;\r\n incrementalSnapshotCount = 0;\r\n }\r\n else if (e.type === EventType.IncrementalSnapshot) {\r\n if (e.data.source === IncrementalSource.Mutation &&\r\n e.data.isAttachIframe) {\r\n return;\r\n }\r\n incrementalSnapshotCount++;\r\n const exceedCount = checkoutEveryNth && incrementalSnapshotCount >= checkoutEveryNth;\r\n const exceedTime = checkoutEveryNms &&\r\n e.timestamp - lastFullSnapshotEvent.timestamp > checkoutEveryNms;\r\n if (exceedCount || exceedTime) {\r\n takeFullSnapshot(true);\r\n }\r\n }\r\n };\r\n const wrappedMutationEmit = (m) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Mutation }, m),\r\n }));\r\n };\r\n const wrappedScrollEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Scroll }, p),\r\n }));\r\n const wrappedCanvasMutationEmit = (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.CanvasMutation }, p),\r\n }));\r\n const wrappedAdoptedStyleSheetEmit = (a) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.AdoptedStyleSheet }, a),\r\n }));\r\n const stylesheetManager = new StylesheetManager({\r\n mutationCb: wrappedMutationEmit,\r\n adoptedStyleSheetCb: wrappedAdoptedStyleSheetEmit,\r\n });\r\n const iframeManager = new IframeManager({\r\n mirror,\r\n mutationCb: wrappedMutationEmit,\r\n stylesheetManager: stylesheetManager,\r\n recordCrossOriginIframes,\r\n wrappedEmit,\r\n });\r\n for (const plugin of plugins || []) {\r\n if (plugin.getMirror)\r\n plugin.getMirror({\r\n nodeMirror: mirror,\r\n crossOriginIframeMirror: iframeManager.crossOriginIframeMirror,\r\n crossOriginIframeStyleMirror: iframeManager.crossOriginIframeStyleMirror,\r\n });\r\n }\r\n canvasManager = new CanvasManager({\r\n recordCanvas,\r\n mutationCb: wrappedCanvasMutationEmit,\r\n win: window,\r\n blockClass,\r\n blockSelector,\r\n mirror,\r\n sampling: sampling.canvas,\r\n dataURLOptions,\r\n });\r\n const shadowDomManager = new ShadowDomManager({\r\n mutationCb: wrappedMutationEmit,\r\n scrollCb: wrappedScrollEmit,\r\n bypassOptions: {\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskInputOptions,\r\n dataURLOptions,\r\n maskTextFn,\r\n maskInputFn,\r\n recordCanvas,\r\n inlineImages,\r\n sampling,\r\n slimDOMOptions,\r\n iframeManager,\r\n stylesheetManager,\r\n canvasManager,\r\n keepIframeSrcFn,\r\n },\r\n mirror,\r\n });\r\n takeFullSnapshot = (isCheckout = false) => {\r\n var _a, _b, _c, _d, _e, _f;\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Meta,\r\n data: {\r\n href: window.location.href,\r\n width: getWindowWidth(),\r\n height: getWindowHeight(),\r\n },\r\n }), isCheckout);\r\n stylesheetManager.reset();\r\n mutationBuffers.forEach((buf) => buf.lock());\r\n const node = snapshot(document, {\r\n mirror,\r\n blockClass,\r\n blockSelector,\r\n maskTextClass,\r\n maskTextSelector,\r\n inlineStylesheet,\r\n maskAllInputs: maskInputOptions,\r\n maskTextFn,\r\n slimDOM: slimDOMOptions,\r\n dataURLOptions,\r\n recordCanvas,\r\n inlineImages,\r\n onSerialize: (n) => {\r\n if (isSerializedIframe(n, mirror)) {\r\n iframeManager.addIframe(n);\r\n }\r\n if (isSerializedStylesheet(n, mirror)) {\r\n stylesheetManager.trackLinkElement(n);\r\n }\r\n if (hasShadowRoot(n)) {\r\n shadowDomManager.addShadowRoot(n.shadowRoot, document);\r\n }\r\n },\r\n onIframeLoad: (iframe, childSn) => {\r\n iframeManager.attachIframe(iframe, childSn);\r\n shadowDomManager.observeAttachShadow(iframe);\r\n },\r\n onStylesheetLoad: (linkEl, childSn) => {\r\n stylesheetManager.attachLinkElement(linkEl, childSn);\r\n },\r\n keepIframeSrcFn,\r\n });\r\n if (!node) {\r\n return console.warn('Failed to snapshot the document');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.FullSnapshot,\r\n data: {\r\n node,\r\n initialOffset: {\r\n left: window.pageXOffset !== undefined\r\n ? window.pageXOffset\r\n : (document === null || document === void 0 ? void 0 : document.documentElement.scrollLeft) ||\r\n ((_b = (_a = document === null || document === void 0 ? void 0 : document.body) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.scrollLeft) ||\r\n ((_c = document === null || document === void 0 ? void 0 : document.body) === null || _c === void 0 ? void 0 : _c.scrollLeft) ||\r\n 0,\r\n top: window.pageYOffset !== undefined\r\n ? window.pageYOffset\r\n : (document === null || document === void 0 ? void 0 : document.documentElement.scrollTop) ||\r\n ((_e = (_d = document === null || document === void 0 ? void 0 : document.body) === null || _d === void 0 ? void 0 : _d.parentElement) === null || _e === void 0 ? void 0 : _e.scrollTop) ||\r\n ((_f = document === null || document === void 0 ? void 0 : document.body) === null || _f === void 0 ? void 0 : _f.scrollTop) ||\r\n 0,\r\n },\r\n },\r\n }));\r\n mutationBuffers.forEach((buf) => buf.unlock());\r\n if (document.adoptedStyleSheets && document.adoptedStyleSheets.length > 0)\r\n stylesheetManager.adoptStyleSheets(document.adoptedStyleSheets, mirror.getId(document));\r\n };\r\n try {\r\n const handlers = [];\r\n handlers.push(on('DOMContentLoaded', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.DomContentLoaded,\r\n data: {},\r\n }));\r\n }));\r\n const observe = (doc) => {\r\n var _a;\r\n return initObservers({\r\n mutationCb: wrappedMutationEmit,\r\n mousemoveCb: (positions, source) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: {\r\n source,\r\n positions,\r\n },\r\n })),\r\n mouseInteractionCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MouseInteraction }, d),\r\n })),\r\n scrollCb: wrappedScrollEmit,\r\n viewportResizeCb: (d) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.ViewportResize }, d),\r\n })),\r\n inputCb: (v) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Input }, v),\r\n })),\r\n mediaInteractionCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.MediaInteraction }, p),\r\n })),\r\n styleSheetRuleCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleSheetRule }, r),\r\n })),\r\n styleDeclarationCb: (r) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.StyleDeclaration }, r),\r\n })),\r\n canvasMutationCb: wrappedCanvasMutationEmit,\r\n fontCb: (p) => wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Font }, p),\r\n })),\r\n selectionCb: (p) => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.IncrementalSnapshot,\r\n data: Object.assign({ source: IncrementalSource.Selection }, p),\r\n }));\r\n },\r\n blockClass,\r\n ignoreClass,\r\n maskTextClass,\r\n maskTextSelector,\r\n maskInputOptions,\r\n inlineStylesheet,\r\n sampling,\r\n recordCanvas,\r\n inlineImages,\r\n userTriggeredOnInput,\r\n collectFonts,\r\n doc,\r\n maskInputFn,\r\n maskTextFn,\r\n keepIframeSrcFn,\r\n blockSelector,\r\n slimDOMOptions,\r\n dataURLOptions,\r\n mirror,\r\n iframeManager,\r\n stylesheetManager,\r\n shadowDomManager,\r\n canvasManager,\r\n ignoreCSSAttributes,\r\n plugins: ((_a = plugins === null || plugins === void 0 ? void 0 : plugins.filter((p) => p.observer)) === null || _a === void 0 ? void 0 : _a.map((p) => ({\r\n observer: p.observer,\r\n options: p.options,\r\n callback: (payload) => wrappedEmit(wrapEvent({\r\n type: EventType.Plugin,\r\n data: {\r\n plugin: p.name,\r\n payload,\r\n },\r\n })),\r\n }))) || [],\r\n }, hooks);\r\n };\r\n iframeManager.addLoadListener((iframeEl) => {\r\n handlers.push(observe(iframeEl.contentDocument));\r\n });\r\n const init = () => {\r\n takeFullSnapshot();\r\n handlers.push(observe(document));\r\n recording = true;\r\n };\r\n if (document.readyState === 'interactive' ||\r\n document.readyState === 'complete') {\r\n init();\r\n }\r\n else {\r\n handlers.push(on('load', () => {\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Load,\r\n data: {},\r\n }));\r\n init();\r\n }, window));\r\n }\r\n return () => {\r\n handlers.forEach((h) => h());\r\n recording = false;\r\n };\r\n }\r\n catch (error) {\r\n console.warn(error);\r\n }\r\n}\r\nrecord.addCustomEvent = (tag, payload) => {\r\n if (!recording) {\r\n throw new Error('please add custom event after start recording');\r\n }\r\n wrappedEmit(wrapEvent({\r\n type: EventType.Custom,\r\n data: {\r\n tag,\r\n payload,\r\n },\r\n }));\r\n};\r\nrecord.freezePage = () => {\r\n mutationBuffers.forEach((buf) => buf.freeze());\r\n};\r\nrecord.takeFullSnapshot = (isCheckout) => {\r\n if (!recording) {\r\n throw new Error('please take full snapshot after start recording');\r\n }\r\n takeFullSnapshot(isCheckout);\r\n};\r\nrecord.mirror = mirror;\n\nexport { record as default };\n","/**\n * RRWebRecorder — Wraps rrweb's record() to capture DOM mutations,\n * mouse events, scroll, and input for streaming to the vision backend.\n *\n * Masks sensitive inputs (passwords, emails, phone numbers).\n * Excludes the widget's own DOM (#holostaff-widget-root).\n * Full snapshot every 30s for replay drift correction.\n */\n\nimport { record } from 'rrweb'\nimport type { eventWithTime } from '@rrweb/types'\n\nconst CHECKOUT_INTERVAL_MS = 30_000\n\n// rrweb constants\nconst RRWEB_INCREMENTAL = 3\nconst SRC_MUTATION = 0\n\n/**\n * Check if an IncrementalSnapshot is a style-only mutation (GSAP, CSS transitions, popmotion).\n * These fire 60 times/sec but tell the VLM nothing about user behavior.\n * Structural mutations (node adds/removes, text changes, class changes) are preserved.\n */\nfunction isStyleOnlyMutation(event: eventWithTime): boolean {\n if (event.type !== RRWEB_INCREMENTAL) return false\n const data = (event as any).data\n if (!data || data.source !== SRC_MUTATION) return false\n\n const { adds, removes, texts, attributes } = data\n if ((adds && adds.length) || (removes && removes.length) || (texts && texts.length)) return false\n\n // Only attribute mutations — check if ALL are just `style` changes\n if (attributes && attributes.length > 0) {\n return attributes.every(\n (attr: any) => attr.attributes && Object.keys(attr.attributes).length === 1 && 'style' in attr.attributes,\n )\n }\n\n return true // empty mutation\n}\n\n/**\n * Patch non-Element node prototypes so rrweb's blockSelector check\n * doesn't throw \"i.matches is not a function\" on text/comment nodes.\n * rrweb calls node.matches(blockSelector) without checking nodeType first.\n */\nfunction patchNonElementMatches(): void {\n for (const Proto of [Text, Comment, CDATASection, ProcessingInstruction]) {\n if (!(Proto.prototype as any).matches) {\n (Proto.prototype as any).matches = function () { return false }\n }\n }\n}\n\nexport class RRWebRecorder {\n /** Called for each rrweb event. Wire this to the WebSocket client. */\n onEvent: ((event: eventWithTime) => void) | null = null\n\n private stopFn: (() => void) | null = null\n private _recording = false\n private _paused = false\n\n get isRecording(): boolean {\n return this._recording\n }\n\n get isPaused(): boolean {\n return this._paused\n }\n\n /** Start recording the host page. */\n start(): void {\n if (this._recording) return\n\n // Patch non-Element nodes before rrweb attaches its MutationObserver\n patchNonElementMatches()\n\n const stop = record({\n emit: (event: eventWithTime) => {\n if (this._paused) return\n if (isStyleOnlyMutation(event)) return // drop GSAP/CSS animation noise\n this.onEvent?.(event)\n },\n checkoutEveryNms: CHECKOUT_INTERVAL_MS,\n // Block video elements (massive mutation noise), widget, and sensitive fields\n blockClass: 'hs-no-record',\n blockSelector: '#holostaff-widget-root, #holostaff-agent, [id^=\"anam-avatar\"], video, [autocomplete^=\"cc-\"], [data-hs-no-record]',\n // Mask sensitive input types + elements marked with data-hs-mask\n maskAllInputs: false,\n maskInputOptions: {\n password: true,\n email: true,\n tel: true,\n },\n maskTextSelector: '[data-hs-mask]',\n // Throttle high-frequency events to reduce volume\n sampling: {\n mousemove: 100,\n scroll: 150,\n input: 'last',\n },\n })\n\n if (stop) {\n this.stopFn = stop\n this._recording = true\n this._paused = false\n console.log('[RRWebRecorder] Started recording')\n } else {\n console.warn('[RRWebRecorder] record() returned undefined — recording may have failed')\n }\n }\n\n /** Stop recording and release resources. */\n stop(): void {\n if (!this._recording) return\n this.stopFn?.()\n this.stopFn = null\n this._recording = false\n this._paused = false\n console.log('[RRWebRecorder] Stopped recording')\n }\n\n /** Pause event emission (recording continues internally but events are discarded). */\n pause(): void {\n if (!this._recording || this._paused) return\n this._paused = true\n console.log('[RRWebRecorder] Paused')\n }\n\n /** Resume event emission. */\n resume(): void {\n if (!this._recording || !this._paused) return\n this._paused = false\n // Take a fresh full snapshot so the replay can resync\n record.takeFullSnapshot()\n console.log('[RRWebRecorder] Resumed (full snapshot taken)')\n }\n}\n","/**\n * VisionWSClient — WebSocket client that streams rrweb events to the\n * vision loop backend and receives intervention commands.\n *\n * Upstream messages: init, rrweb, action_complete, conversation_started, conversation_ended\n * Downstream messages: suggest_intervention, status\n */\n\nimport type { eventWithTime } from '@rrweb/types'\n\n// ---------------------------------------------------------------------------\n// Types — match the WebSocket protocol defined in the v3 PRD §4.3\n// ---------------------------------------------------------------------------\n\nexport interface InitMessage {\n type: 'init'\n staffId: string\n visitorId: string\n pageUrl: string\n pageTitle: string\n pagePatterns?: Array<{ pattern: string; container?: string }>\n}\n\nexport interface InterventionMessage {\n type: 'suggest_intervention'\n actionId: string\n message: string\n goalId: string\n context: string // rolling summary for conversation injection\n}\n\nexport interface StatusMessage {\n type: 'status'\n state: 'observing' | 'paused' | 'acting'\n}\n\nexport type ActionResult = 'accepted' | 'declined' | 'ignored'\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Resolve a potentially relative WebSocket URL against the page location. */\nfunction resolveWsUrl(url: string): string {\n if (url.startsWith('ws://') || url.startsWith('wss://')) return url\n // Relative path — derive from page host\n const proto = location.protocol === 'https:' ? 'wss:' : 'ws:'\n return `${proto}//${location.host}${url.startsWith('/') ? '' : '/'}${url}`\n}\n\nconst RECONNECT_BASE_MS = 1000\nconst RECONNECT_MAX_MS = 30_000\nconst EVENT_BUFFER_MAX = 500\n\n// ---------------------------------------------------------------------------\n// Client\n// ---------------------------------------------------------------------------\n\nexport class VisionWSClient {\n // --- Callbacks ---\n onIntervention: ((msg: InterventionMessage) => void) | null = null\n onStatus: ((msg: StatusMessage) => void) | null = null\n onConnected: (() => void) | null = null\n onDisconnected: (() => void) | null = null\n\n // --- Internal ---\n private ws: WebSocket | null = null\n private url: string\n private initPayload: InitMessage\n private eventBuffer: object[] = []\n private reconnectDelay = RECONNECT_BASE_MS\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null\n private _connected = false\n private _closed = false\n\n constructor(url: string, init: Omit<InitMessage, 'type'>) {\n this.url = resolveWsUrl(url)\n this.initPayload = { type: 'init', ...init }\n }\n\n get isConnected(): boolean {\n return this._connected\n }\n\n // -----------------------------------------------------------------------\n // Public — lifecycle\n // -----------------------------------------------------------------------\n\n /** Open the WebSocket connection. Automatically reconnects on failure. */\n connect(): void {\n if (this._closed) return\n this.doConnect()\n }\n\n /** Close permanently (no reconnect). */\n close(): void {\n this._closed = true\n this.clearReconnectTimer()\n if (this.ws) {\n try { this.ws.close() } catch {}\n this.ws = null\n }\n this._connected = false\n }\n\n // -----------------------------------------------------------------------\n // Public — upstream messages\n // -----------------------------------------------------------------------\n\n /** Stream an rrweb event to the backend. */\n sendRRWebEvent(event: eventWithTime): void {\n this.send({ type: 'rrweb', event })\n }\n\n /** Signal that the user responded to an intervention suggestion. */\n sendActionComplete(actionId: string, result: ActionResult): void {\n this.send({ type: 'action_complete', actionId, result })\n }\n\n /** Signal that a voice conversation has started. */\n sendConversationStarted(): void {\n this.send({ type: 'conversation_started' })\n }\n\n /** Signal that a voice conversation has ended. */\n sendConversationEnded(summary: string): void {\n this.send({ type: 'conversation_ended', summary })\n }\n\n /** Notify the server that the user navigated to a new page (SPA route change). */\n sendPageChanged(url: string, pathname: string, title: string): void {\n this.send({ type: 'page_changed', url, pathname, title })\n }\n\n // -----------------------------------------------------------------------\n // Private — connection\n // -----------------------------------------------------------------------\n\n private doConnect(): void {\n if (this._closed) return\n\n try {\n this.ws = new WebSocket(this.url)\n } catch (err) {\n console.warn('[VisionWS] Failed to create WebSocket:', err)\n this.scheduleReconnect()\n return\n }\n\n this.ws.onopen = () => {\n console.log('[VisionWS] Connected')\n this._connected = true\n this.reconnectDelay = RECONNECT_BASE_MS\n\n // Send init message first\n this.ws!.send(JSON.stringify(this.initPayload))\n\n // Flush buffered events\n this.flushBuffer()\n\n this.onConnected?.()\n }\n\n this.ws.onmessage = (e) => {\n const data = e.data\n if (typeof data === 'string') {\n this.parseAndHandle(data)\n } else if (data instanceof Blob) {\n data.text().then(text => this.parseAndHandle(text))\n } else if (data instanceof ArrayBuffer) {\n this.parseAndHandle(new TextDecoder().decode(data))\n } else {\n console.warn('[VisionWS] Unknown message data type:', typeof data)\n }\n }\n\n this.ws.onclose = () => {\n const wasConnected = this._connected\n this._connected = false\n this.ws = null\n\n if (wasConnected) {\n console.log('[VisionWS] Disconnected')\n this.onDisconnected?.()\n }\n\n if (!this._closed) {\n this.scheduleReconnect()\n }\n }\n\n this.ws.onerror = (err) => {\n console.warn('[VisionWS] Error:', err)\n // onclose will fire after onerror, triggering reconnect\n }\n }\n\n private parseAndHandle(text: string): void {\n try {\n const msg = JSON.parse(text)\n switch (msg.type) {\n case 'suggest_intervention':\n this.onIntervention?.(msg as InterventionMessage)\n break\n case 'status':\n this.onStatus?.(msg as StatusMessage)\n break\n default:\n console.log('[VisionWS] Unknown message type:', msg.type)\n }\n } catch (err) {\n console.warn('[VisionWS] Failed to parse message:', err)\n }\n }\n\n // -----------------------------------------------------------------------\n // Private — send + buffer\n // -----------------------------------------------------------------------\n\n private send(msg: object): void {\n if (this._connected && this.ws?.readyState === WebSocket.OPEN) {\n this.ws.send(JSON.stringify(msg))\n } else {\n // Buffer events while disconnected (drop oldest if full)\n if (this.eventBuffer.length >= EVENT_BUFFER_MAX) {\n this.eventBuffer.shift()\n }\n this.eventBuffer.push(msg)\n }\n }\n\n private flushBuffer(): void {\n if (!this._connected || !this.ws) return\n for (const msg of this.eventBuffer) {\n this.ws.send(JSON.stringify(msg))\n }\n if (this.eventBuffer.length > 0) {\n console.log(`[VisionWS] Flushed ${this.eventBuffer.length} buffered messages`)\n }\n this.eventBuffer = []\n }\n\n // -----------------------------------------------------------------------\n // Private — reconnect\n // -----------------------------------------------------------------------\n\n private scheduleReconnect(): void {\n if (this._closed || this.reconnectTimer) return\n\n const delay = this.reconnectDelay\n this.reconnectDelay = Math.min(this.reconnectDelay * 2, RECONNECT_MAX_MS)\n\n console.log(`[VisionWS] Reconnecting in ${delay}ms...`)\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null\n this.doConnect()\n }, delay)\n }\n\n private clearReconnectTimer(): void {\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer)\n this.reconnectTimer = null\n }\n }\n}\n","/**\n * Glass Panel Factory — creates frosted-glass DOM elements\n * with consistent styling from the Liquid Glass design tokens.\n */\n\nexport type GlassElevation = 'base' | 'elevated' | 'solid'\n\nexport interface GlassPanelOptions {\n /** Tag name for the element. Default: 'div' */\n tag?: string\n /** Corner radius token. Default: 'md' */\n radius?: 'sm' | 'md' | 'lg' | 'pill'\n /** Glass elevation / opacity level. Default: 'base' */\n elevation?: GlassElevation\n /** Whether to add the hover border-brighten effect. Default: false */\n interactive?: boolean\n /** Extra CSS class names. */\n className?: string\n /** ARIA role. */\n role?: string\n}\n\nconst RADIUS_MAP = {\n sm: 'var(--hs-radius-sm)',\n md: 'var(--hs-radius-md)',\n lg: 'var(--hs-radius-lg)',\n pill: 'var(--hs-radius-pill)',\n}\n\nconst BG_MAP: Record<GlassElevation, string> = {\n base: 'var(--hs-glass-bg)',\n elevated: 'var(--hs-glass-bg-elevated)',\n solid: 'var(--hs-glass-bg-solid)',\n}\n\n/**\n * Create a glass panel element with liquid glass styling applied.\n * All visual properties use CSS custom properties so they respond\n * to theme changes (dark ↔ light).\n */\nexport function createGlassPanel(options: GlassPanelOptions = {}): HTMLElement {\n const {\n tag = 'div',\n radius = 'md',\n elevation = 'base',\n interactive = false,\n className,\n role,\n } = options\n\n const el = document.createElement(tag)\n if (className) el.className = className\n if (role) el.setAttribute('role', role)\n\n Object.assign(el.style, {\n background: BG_MAP[elevation],\n backdropFilter: `blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))`,\n WebkitBackdropFilter: `blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))`,\n border: '1px solid var(--hs-glass-border)',\n borderRadius: RADIUS_MAP[radius],\n boxShadow: elevation === 'elevated'\n ? 'var(--hs-glass-shadow-elevated)'\n : 'var(--hs-glass-shadow)',\n color: 'var(--hs-text-primary)',\n fontFamily: 'var(--hs-font)',\n fontSize: 'var(--hs-text-base)',\n lineHeight: 'var(--hs-line-height)',\n boxSizing: 'border-box',\n })\n\n if (interactive) {\n el.style.transition = `border-color var(--hs-fade-duration) var(--hs-ease-fast),\n box-shadow var(--hs-fade-duration) var(--hs-ease-fast)`\n el.style.cursor = 'pointer'\n el.addEventListener('mouseenter', () => {\n el.style.borderColor = 'var(--hs-glass-border-hover)'\n })\n el.addEventListener('mouseleave', () => {\n el.style.borderColor = 'var(--hs-glass-border)'\n })\n }\n\n return el\n}\n\n/** Apply glass text styling to an element. */\nexport function glassText(\n el: HTMLElement,\n variant: 'primary' | 'secondary' | 'tertiary' = 'primary',\n size: 'xs' | 'sm' | 'base' | 'lg' | 'xl' = 'base',\n weight: 'normal' | 'medium' | 'semibold' = 'normal',\n): HTMLElement {\n const colorMap = {\n primary: 'var(--hs-text-primary)',\n secondary: 'var(--hs-text-secondary)',\n tertiary: 'var(--hs-text-tertiary)',\n }\n const sizeMap = {\n xs: 'var(--hs-text-xs)',\n sm: 'var(--hs-text-sm)',\n base: 'var(--hs-text-base)',\n lg: 'var(--hs-text-lg)',\n xl: 'var(--hs-text-xl)',\n }\n const weightMap = {\n normal: 'var(--hs-weight-normal)',\n medium: 'var(--hs-weight-medium)',\n semibold: 'var(--hs-weight-semibold)',\n }\n\n Object.assign(el.style, {\n color: colorMap[variant],\n fontSize: sizeMap[size],\n fontWeight: weightMap[weight],\n fontFamily: 'var(--hs-font)',\n lineHeight: 'var(--hs-line-height)',\n margin: '0',\n })\n\n return el\n}\n\n/** Create a glass-styled button. */\nexport function createGlassButton(options: {\n label: string\n variant?: 'default' | 'accent' | 'ghost'\n size?: 'sm' | 'md'\n icon?: string\n onClick?: (e: MouseEvent) => void\n}): HTMLButtonElement {\n const { label, variant = 'default', size = 'md', icon, onClick } = options\n\n const btn = document.createElement('button')\n btn.textContent = icon ? `${icon} ${label}` : label\n\n const padding = size === 'sm' ? '4px 10px' : '8px 16px'\n const fontSize = size === 'sm' ? 'var(--hs-text-sm)' : 'var(--hs-text-base)'\n\n Object.assign(btn.style, {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 'var(--hs-space-1)',\n padding,\n fontSize,\n fontWeight: 'var(--hs-weight-medium)',\n fontFamily: 'var(--hs-font)',\n lineHeight: '1',\n border: 'none',\n borderRadius: 'var(--hs-radius-pill)',\n cursor: 'pointer',\n transition: `all var(--hs-fade-duration) var(--hs-ease-fast)`,\n outline: 'none',\n whiteSpace: 'nowrap',\n })\n\n switch (variant) {\n case 'accent':\n Object.assign(btn.style, {\n background: 'var(--hs-accent)',\n color: 'var(--hs-accent-text)',\n boxShadow: `0 2px 12px var(--hs-accent-glow)`,\n })\n btn.addEventListener('mouseenter', () => {\n btn.style.filter = 'brightness(1.12)'\n btn.style.transform = 'scale(1.03)'\n })\n btn.addEventListener('mouseleave', () => {\n btn.style.filter = ''\n btn.style.transform = ''\n })\n break\n\n case 'ghost':\n Object.assign(btn.style, {\n background: 'transparent',\n color: 'var(--hs-text-secondary)',\n })\n btn.addEventListener('mouseenter', () => {\n btn.style.background = 'var(--hs-glass-bg)'\n btn.style.color = 'var(--hs-text-primary)'\n })\n btn.addEventListener('mouseleave', () => {\n btn.style.background = 'transparent'\n btn.style.color = 'var(--hs-text-secondary)'\n })\n break\n\n default: // 'default'\n Object.assign(btn.style, {\n background: 'var(--hs-glass-bg-elevated)',\n color: 'var(--hs-text-primary)',\n backdropFilter: `blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))`,\n WebkitBackdropFilter: `blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))`,\n border: '1px solid var(--hs-glass-border)',\n })\n btn.addEventListener('mouseenter', () => {\n btn.style.borderColor = 'var(--hs-glass-border-hover)'\n btn.style.transform = 'scale(1.03)'\n })\n btn.addEventListener('mouseleave', () => {\n btn.style.borderColor = 'var(--hs-glass-border)'\n btn.style.transform = ''\n })\n break\n }\n\n if (onClick) {\n btn.addEventListener('click', (e) => {\n e.stopPropagation()\n onClick(e)\n })\n }\n\n return btn\n}\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","var warning = function () { };\r\nvar invariant = function () { };\r\nif (process.env.NODE_ENV !== 'production') {\r\n warning = function (check, message) {\r\n if (!check && typeof console !== 'undefined') {\r\n console.warn(message);\r\n }\r\n };\r\n invariant = function (check, message) {\r\n if (!check) {\r\n throw new Error(message);\r\n }\r\n };\r\n}\n\nexport { invariant, warning };\n","const clamp = (min, max, v) => Math.min(Math.max(v, min), max);\n\nexport { clamp };\n","import { warning } from 'hey-listen';\nimport { clamp } from '../../utils/clamp.mjs';\n\nconst safeMin = 0.001;\nconst minDuration = 0.01;\nconst maxDuration = 10.0;\nconst minDamping = 0.05;\nconst maxDamping = 1;\nfunction findSpring({ duration = 800, bounce = 0.25, velocity = 0, mass = 1, }) {\n let envelope;\n let derivative;\n warning(duration <= maxDuration * 1000, \"Spring duration must be 10 seconds or less\");\n let dampingRatio = 1 - bounce;\n dampingRatio = clamp(minDamping, maxDamping, dampingRatio);\n duration = clamp(minDuration, maxDuration, duration / 1000);\n if (dampingRatio < 1) {\n envelope = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const a = exponentialDecay - velocity;\n const b = calcAngularFreq(undampedFreq, dampingRatio);\n const c = Math.exp(-delta);\n return safeMin - (a / b) * c;\n };\n derivative = (undampedFreq) => {\n const exponentialDecay = undampedFreq * dampingRatio;\n const delta = exponentialDecay * duration;\n const d = delta * velocity + velocity;\n const e = Math.pow(dampingRatio, 2) * Math.pow(undampedFreq, 2) * duration;\n const f = Math.exp(-delta);\n const g = calcAngularFreq(Math.pow(undampedFreq, 2), dampingRatio);\n const factor = -envelope(undampedFreq) + safeMin > 0 ? -1 : 1;\n return (factor * ((d - e) * f)) / g;\n };\n }\n else {\n envelope = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (undampedFreq - velocity) * duration + 1;\n return -safeMin + a * b;\n };\n derivative = (undampedFreq) => {\n const a = Math.exp(-undampedFreq * duration);\n const b = (velocity - undampedFreq) * (duration * duration);\n return a * b;\n };\n }\n const initialGuess = 5 / duration;\n const undampedFreq = approximateRoot(envelope, derivative, initialGuess);\n duration = duration * 1000;\n if (isNaN(undampedFreq)) {\n return {\n stiffness: 100,\n damping: 10,\n duration,\n };\n }\n else {\n const stiffness = Math.pow(undampedFreq, 2) * mass;\n return {\n stiffness,\n damping: dampingRatio * 2 * Math.sqrt(mass * stiffness),\n duration,\n };\n }\n}\nconst rootIterations = 12;\nfunction approximateRoot(envelope, derivative, initialGuess) {\n let result = initialGuess;\n for (let i = 1; i < rootIterations; i++) {\n result = result - envelope(result) / derivative(result);\n }\n return result;\n}\nfunction calcAngularFreq(undampedFreq, dampingRatio) {\n return undampedFreq * Math.sqrt(1 - dampingRatio * dampingRatio);\n}\n\nexport { calcAngularFreq, findSpring, maxDamping, maxDuration, minDamping, minDuration };\n","import { __rest } from 'tslib';\nimport { findSpring, calcAngularFreq } from '../utils/find-spring.mjs';\n\nconst durationKeys = [\"duration\", \"bounce\"];\nconst physicsKeys = [\"stiffness\", \"damping\", \"mass\"];\nfunction isSpringType(options, keys) {\n return keys.some((key) => options[key] !== undefined);\n}\nfunction getSpringOptions(options) {\n let springOptions = Object.assign({ velocity: 0.0, stiffness: 100, damping: 10, mass: 1.0, isResolvedFromDuration: false }, options);\n if (!isSpringType(options, physicsKeys) &&\n isSpringType(options, durationKeys)) {\n const derived = findSpring(options);\n springOptions = Object.assign(Object.assign(Object.assign({}, springOptions), derived), { velocity: 0.0, mass: 1.0 });\n springOptions.isResolvedFromDuration = true;\n }\n return springOptions;\n}\nfunction spring(_a) {\n var { from = 0.0, to = 1.0, restSpeed = 2, restDelta } = _a, options = __rest(_a, [\"from\", \"to\", \"restSpeed\", \"restDelta\"]);\n const state = { done: false, value: from };\n let { stiffness, damping, mass, velocity, duration, isResolvedFromDuration, } = getSpringOptions(options);\n let resolveSpring = zero;\n let resolveVelocity = zero;\n function createSpring() {\n const initialVelocity = velocity ? -(velocity / 1000) : 0.0;\n const initialDelta = to - from;\n const dampingRatio = damping / (2 * Math.sqrt(stiffness * mass));\n const undampedAngularFreq = Math.sqrt(stiffness / mass) / 1000;\n if (restDelta === undefined) {\n restDelta = Math.min(Math.abs(to - from) / 100, 0.4);\n }\n if (dampingRatio < 1) {\n const angularFreq = calcAngularFreq(undampedAngularFreq, dampingRatio);\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (to -\n envelope *\n (((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) /\n angularFreq) *\n Math.sin(angularFreq * t) +\n initialDelta * Math.cos(angularFreq * t)));\n };\n resolveVelocity = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n return (dampingRatio *\n undampedAngularFreq *\n envelope *\n ((Math.sin(angularFreq * t) *\n (initialVelocity +\n dampingRatio *\n undampedAngularFreq *\n initialDelta)) /\n angularFreq +\n initialDelta * Math.cos(angularFreq * t)) -\n envelope *\n (Math.cos(angularFreq * t) *\n (initialVelocity +\n dampingRatio *\n undampedAngularFreq *\n initialDelta) -\n angularFreq *\n initialDelta *\n Math.sin(angularFreq * t)));\n };\n }\n else if (dampingRatio === 1) {\n resolveSpring = (t) => to -\n Math.exp(-undampedAngularFreq * t) *\n (initialDelta +\n (initialVelocity + undampedAngularFreq * initialDelta) *\n t);\n }\n else {\n const dampedAngularFreq = undampedAngularFreq * Math.sqrt(dampingRatio * dampingRatio - 1);\n resolveSpring = (t) => {\n const envelope = Math.exp(-dampingRatio * undampedAngularFreq * t);\n const freqForT = Math.min(dampedAngularFreq * t, 300);\n return (to -\n (envelope *\n ((initialVelocity +\n dampingRatio * undampedAngularFreq * initialDelta) *\n Math.sinh(freqForT) +\n dampedAngularFreq *\n initialDelta *\n Math.cosh(freqForT))) /\n dampedAngularFreq);\n };\n }\n }\n createSpring();\n return {\n next: (t) => {\n const current = resolveSpring(t);\n if (!isResolvedFromDuration) {\n const currentVelocity = resolveVelocity(t) * 1000;\n const isBelowVelocityThreshold = Math.abs(currentVelocity) <= restSpeed;\n const isBelowDisplacementThreshold = Math.abs(to - current) <= restDelta;\n state.done =\n isBelowVelocityThreshold && isBelowDisplacementThreshold;\n }\n else {\n state.done = t >= duration;\n }\n state.value = state.done ? to : current;\n return state;\n },\n flipTarget: () => {\n velocity = -velocity;\n [from, to] = [to, from];\n createSpring();\n },\n };\n}\nspring.needsInterpolation = (a, b) => typeof a === \"string\" || typeof b === \"string\";\nconst zero = (_t) => 0;\n\nexport { spring };\n","const progress = (from, to, value) => {\n const toFromDifference = to - from;\n return toFromDifference === 0 ? 1 : (value - from) / toFromDifference;\n};\n\nexport { progress };\n","const mix = (from, to, progress) => -progress * from + progress * to + from;\n\nexport { mix };\n","const clamp = (min, max) => (v) => Math.max(Math.min(v, max), min);\nconst sanitize = (v) => (v % 1 ? Number(v.toFixed(5)) : v);\nconst floatRegex = /(-)?([\\d]*\\.?[\\d])+/g;\nconst colorRegex = /(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))/gi;\nconst singleColorRegex = /^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\\((-?[\\d\\.]+%?[,\\s]+){2}(-?[\\d\\.]+%?)\\s*[\\,\\/]?\\s*[\\d\\.]*%?\\))$/i;\nfunction isString(v) {\n return typeof v === 'string';\n}\n\nexport { clamp, colorRegex, floatRegex, isString, sanitize, singleColorRegex };\n","import { clamp } from '../utils.mjs';\n\nconst number = {\n test: (v) => typeof v === 'number',\n parse: parseFloat,\n transform: (v) => v,\n};\nconst alpha = Object.assign(Object.assign({}, number), { transform: clamp(0, 1) });\nconst scale = Object.assign(Object.assign({}, number), { default: 1 });\n\nexport { alpha, number, scale };\n","import { isString } from '../utils.mjs';\n\nconst createUnitType = (unit) => ({\n test: (v) => isString(v) && v.endsWith(unit) && v.split(' ').length === 1,\n parse: parseFloat,\n transform: (v) => `${v}${unit}`,\n});\nconst degrees = createUnitType('deg');\nconst percent = createUnitType('%');\nconst px = createUnitType('px');\nconst vh = createUnitType('vh');\nconst vw = createUnitType('vw');\nconst progressPercentage = Object.assign(Object.assign({}, percent), { parse: (v) => percent.parse(v) / 100, transform: (v) => percent.transform(v * 100) });\n\nexport { degrees, percent, progressPercentage, px, vh, vw };\n","import { isString, singleColorRegex, floatRegex } from '../utils.mjs';\n\nconst isColorString = (type, testProp) => (v) => {\n return Boolean((isString(v) && singleColorRegex.test(v) && v.startsWith(type)) ||\n (testProp && Object.prototype.hasOwnProperty.call(v, testProp)));\n};\nconst splitColor = (aName, bName, cName) => (v) => {\n if (!isString(v))\n return v;\n const [a, b, c, alpha] = v.match(floatRegex);\n return {\n [aName]: parseFloat(a),\n [bName]: parseFloat(b),\n [cName]: parseFloat(c),\n alpha: alpha !== undefined ? parseFloat(alpha) : 1,\n };\n};\n\nexport { isColorString, splitColor };\n","import { alpha } from '../numbers/index.mjs';\nimport { percent } from '../numbers/units.mjs';\nimport { sanitize } from '../utils.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst hsla = {\n test: isColorString('hsl', 'hue'),\n parse: splitColor('hue', 'saturation', 'lightness'),\n transform: ({ hue, saturation, lightness, alpha: alpha$1 = 1 }) => {\n return ('hsla(' +\n Math.round(hue) +\n ', ' +\n percent.transform(sanitize(saturation)) +\n ', ' +\n percent.transform(sanitize(lightness)) +\n ', ' +\n sanitize(alpha.transform(alpha$1)) +\n ')');\n },\n};\n\nexport { hsla };\n","import { number, alpha } from '../numbers/index.mjs';\nimport { sanitize, clamp } from '../utils.mjs';\nimport { isColorString, splitColor } from './utils.mjs';\n\nconst clampRgbUnit = clamp(0, 255);\nconst rgbUnit = Object.assign(Object.assign({}, number), { transform: (v) => Math.round(clampRgbUnit(v)) });\nconst rgba = {\n test: isColorString('rgb', 'red'),\n parse: splitColor('red', 'green', 'blue'),\n transform: ({ red, green, blue, alpha: alpha$1 = 1 }) => 'rgba(' +\n rgbUnit.transform(red) +\n ', ' +\n rgbUnit.transform(green) +\n ', ' +\n rgbUnit.transform(blue) +\n ', ' +\n sanitize(alpha.transform(alpha$1)) +\n ')',\n};\n\nexport { rgbUnit, rgba };\n","import { rgba } from './rgba.mjs';\nimport { isColorString } from './utils.mjs';\n\nfunction parseHex(v) {\n let r = '';\n let g = '';\n let b = '';\n let a = '';\n if (v.length > 5) {\n r = v.substr(1, 2);\n g = v.substr(3, 2);\n b = v.substr(5, 2);\n a = v.substr(7, 2);\n }\n else {\n r = v.substr(1, 1);\n g = v.substr(2, 1);\n b = v.substr(3, 1);\n a = v.substr(4, 1);\n r += r;\n g += g;\n b += b;\n a += a;\n }\n return {\n red: parseInt(r, 16),\n green: parseInt(g, 16),\n blue: parseInt(b, 16),\n alpha: a ? parseInt(a, 16) / 255 : 1,\n };\n}\nconst hex = {\n test: isColorString('#'),\n parse: parseHex,\n transform: rgba.transform,\n};\n\nexport { hex };\n","import { isString } from '../utils.mjs';\nimport { hex } from './hex.mjs';\nimport { hsla } from './hsla.mjs';\nimport { rgba } from './rgba.mjs';\n\nconst color = {\n test: (v) => rgba.test(v) || hex.test(v) || hsla.test(v),\n parse: (v) => {\n if (rgba.test(v)) {\n return rgba.parse(v);\n }\n else if (hsla.test(v)) {\n return hsla.parse(v);\n }\n else {\n return hex.parse(v);\n }\n },\n transform: (v) => {\n return isString(v)\n ? v\n : v.hasOwnProperty('red')\n ? rgba.transform(v)\n : hsla.transform(v);\n },\n};\n\nexport { color };\n","import { color } from '../color/index.mjs';\nimport { number } from '../numbers/index.mjs';\nimport { isString, floatRegex, colorRegex, sanitize } from '../utils.mjs';\n\nconst colorToken = '${c}';\nconst numberToken = '${n}';\nfunction test(v) {\n var _a, _b, _c, _d;\n return (isNaN(v) &&\n isString(v) &&\n ((_b = (_a = v.match(floatRegex)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) + ((_d = (_c = v.match(colorRegex)) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0) > 0);\n}\nfunction analyse(v) {\n if (typeof v === 'number')\n v = `${v}`;\n const values = [];\n let numColors = 0;\n const colors = v.match(colorRegex);\n if (colors) {\n numColors = colors.length;\n v = v.replace(colorRegex, colorToken);\n values.push(...colors.map(color.parse));\n }\n const numbers = v.match(floatRegex);\n if (numbers) {\n v = v.replace(floatRegex, numberToken);\n values.push(...numbers.map(number.parse));\n }\n return { values, numColors, tokenised: v };\n}\nfunction parse(v) {\n return analyse(v).values;\n}\nfunction createTransformer(v) {\n const { values, numColors, tokenised } = analyse(v);\n const numValues = values.length;\n return (v) => {\n let output = tokenised;\n for (let i = 0; i < numValues; i++) {\n output = output.replace(i < numColors ? colorToken : numberToken, i < numColors ? color.transform(v[i]) : sanitize(v[i]));\n }\n return output;\n };\n}\nconst convertNumbersToZero = (v) => typeof v === 'number' ? 0 : v;\nfunction getAnimatableNone(v) {\n const parsed = parse(v);\n const transformer = createTransformer(v);\n return transformer(parsed.map(convertNumbersToZero));\n}\nconst complex = { test, parse, createTransformer, getAnimatableNone };\n\nexport { complex };\n","function hueToRgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\nfunction hslaToRgba({ hue, saturation, lightness, alpha }) {\n hue /= 360;\n saturation /= 100;\n lightness /= 100;\n let red = 0;\n let green = 0;\n let blue = 0;\n if (!saturation) {\n red = green = blue = lightness;\n }\n else {\n const q = lightness < 0.5\n ? lightness * (1 + saturation)\n : lightness + saturation - lightness * saturation;\n const p = 2 * lightness - q;\n red = hueToRgb(p, q, hue + 1 / 3);\n green = hueToRgb(p, q, hue);\n blue = hueToRgb(p, q, hue - 1 / 3);\n }\n return {\n red: Math.round(red * 255),\n green: Math.round(green * 255),\n blue: Math.round(blue * 255),\n alpha,\n };\n}\n\nexport { hslaToRgba };\n","import { mix } from './mix.mjs';\nimport { hsla, rgba, hex } from 'style-value-types';\nimport { invariant } from 'hey-listen';\nimport { hslaToRgba } from './hsla-to-rgba.mjs';\n\nconst mixLinearColor = (from, to, v) => {\n const fromExpo = from * from;\n const toExpo = to * to;\n return Math.sqrt(Math.max(0, v * (toExpo - fromExpo) + fromExpo));\n};\nconst colorTypes = [hex, rgba, hsla];\nconst getColorType = (v) => colorTypes.find((type) => type.test(v));\nconst notAnimatable = (color) => `'${color}' is not an animatable color. Use the equivalent color code instead.`;\nconst mixColor = (from, to) => {\n let fromColorType = getColorType(from);\n let toColorType = getColorType(to);\n invariant(!!fromColorType, notAnimatable(from));\n invariant(!!toColorType, notAnimatable(to));\n let fromColor = fromColorType.parse(from);\n let toColor = toColorType.parse(to);\n if (fromColorType === hsla) {\n fromColor = hslaToRgba(fromColor);\n fromColorType = rgba;\n }\n if (toColorType === hsla) {\n toColor = hslaToRgba(toColor);\n toColorType = rgba;\n }\n const blended = Object.assign({}, fromColor);\n return (v) => {\n for (const key in blended) {\n if (key !== \"alpha\") {\n blended[key] = mixLinearColor(fromColor[key], toColor[key], v);\n }\n }\n blended.alpha = mix(fromColor.alpha, toColor.alpha, v);\n return fromColorType.transform(blended);\n };\n};\n\nexport { mixColor, mixLinearColor };\n","const zeroPoint = {\n x: 0,\n y: 0,\n z: 0\n};\nconst isNum = (v) => typeof v === 'number';\n\nexport { isNum, zeroPoint };\n","const combineFunctions = (a, b) => (v) => b(a(v));\nconst pipe = (...transformers) => transformers.reduce(combineFunctions);\n\nexport { pipe };\n","import { complex, color } from 'style-value-types';\nimport { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { isNum } from './inc.mjs';\nimport { pipe } from './pipe.mjs';\nimport { warning } from 'hey-listen';\n\nfunction getMixer(origin, target) {\n if (isNum(origin)) {\n return (v) => mix(origin, target, v);\n }\n else if (color.test(origin)) {\n return mixColor(origin, target);\n }\n else {\n return mixComplex(origin, target);\n }\n}\nconst mixArray = (from, to) => {\n const output = [...from];\n const numValues = output.length;\n const blendValue = from.map((fromThis, i) => getMixer(fromThis, to[i]));\n return (v) => {\n for (let i = 0; i < numValues; i++) {\n output[i] = blendValue[i](v);\n }\n return output;\n };\n};\nconst mixObject = (origin, target) => {\n const output = Object.assign(Object.assign({}, origin), target);\n const blendValue = {};\n for (const key in output) {\n if (origin[key] !== undefined && target[key] !== undefined) {\n blendValue[key] = getMixer(origin[key], target[key]);\n }\n }\n return (v) => {\n for (const key in blendValue) {\n output[key] = blendValue[key](v);\n }\n return output;\n };\n};\nfunction analyse(value) {\n const parsed = complex.parse(value);\n const numValues = parsed.length;\n let numNumbers = 0;\n let numRGB = 0;\n let numHSL = 0;\n for (let i = 0; i < numValues; i++) {\n if (numNumbers || typeof parsed[i] === \"number\") {\n numNumbers++;\n }\n else {\n if (parsed[i].hue !== undefined) {\n numHSL++;\n }\n else {\n numRGB++;\n }\n }\n }\n return { parsed, numNumbers, numRGB, numHSL };\n}\nconst mixComplex = (origin, target) => {\n const template = complex.createTransformer(target);\n const originStats = analyse(origin);\n const targetStats = analyse(target);\n const canInterpolate = originStats.numHSL === targetStats.numHSL &&\n originStats.numRGB === targetStats.numRGB &&\n originStats.numNumbers >= targetStats.numNumbers;\n if (canInterpolate) {\n return pipe(mixArray(originStats.parsed, targetStats.parsed), template);\n }\n else {\n warning(true, `Complex values '${origin}' and '${target}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`);\n return (p) => `${p > 0 ? target : origin}`;\n }\n};\n\nexport { mixArray, mixComplex, mixObject };\n","import { progress } from './progress.mjs';\nimport { mix } from './mix.mjs';\nimport { mixColor } from './mix-color.mjs';\nimport { mixComplex, mixArray, mixObject } from './mix-complex.mjs';\nimport { color } from 'style-value-types';\nimport { clamp } from './clamp.mjs';\nimport { pipe } from './pipe.mjs';\nimport { invariant } from 'hey-listen';\n\nconst mixNumber = (from, to) => (p) => mix(from, to, p);\nfunction detectMixerFactory(v) {\n if (typeof v === 'number') {\n return mixNumber;\n }\n else if (typeof v === 'string') {\n if (color.test(v)) {\n return mixColor;\n }\n else {\n return mixComplex;\n }\n }\n else if (Array.isArray(v)) {\n return mixArray;\n }\n else if (typeof v === 'object') {\n return mixObject;\n }\n}\nfunction createMixers(output, ease, customMixer) {\n const mixers = [];\n const mixerFactory = customMixer || detectMixerFactory(output[0]);\n const numMixers = output.length - 1;\n for (let i = 0; i < numMixers; i++) {\n let mixer = mixerFactory(output[i], output[i + 1]);\n if (ease) {\n const easingFunction = Array.isArray(ease) ? ease[i] : ease;\n mixer = pipe(easingFunction, mixer);\n }\n mixers.push(mixer);\n }\n return mixers;\n}\nfunction fastInterpolate([from, to], [mixer]) {\n return (v) => mixer(progress(from, to, v));\n}\nfunction slowInterpolate(input, mixers) {\n const inputLength = input.length;\n const lastInputIndex = inputLength - 1;\n return (v) => {\n let mixerIndex = 0;\n let foundMixerIndex = false;\n if (v <= input[0]) {\n foundMixerIndex = true;\n }\n else if (v >= input[lastInputIndex]) {\n mixerIndex = lastInputIndex - 1;\n foundMixerIndex = true;\n }\n if (!foundMixerIndex) {\n let i = 1;\n for (; i < inputLength; i++) {\n if (input[i] > v || i === lastInputIndex) {\n break;\n }\n }\n mixerIndex = i - 1;\n }\n const progressInRange = progress(input[mixerIndex], input[mixerIndex + 1], v);\n return mixers[mixerIndex](progressInRange);\n };\n}\nfunction interpolate(input, output, { clamp: isClamp = true, ease, mixer } = {}) {\n const inputLength = input.length;\n invariant(inputLength === output.length, 'Both input and output ranges must be the same length');\n invariant(!ease || !Array.isArray(ease) || ease.length === inputLength - 1, 'Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values.');\n if (input[0] > input[inputLength - 1]) {\n input = [].concat(input);\n output = [].concat(output);\n input.reverse();\n output.reverse();\n }\n const mixers = createMixers(output, ease, mixer);\n const interpolator = inputLength === 2\n ? fastInterpolate(input, mixers)\n : slowInterpolate(input, mixers);\n return isClamp\n ? (v) => interpolator(clamp(input[0], input[inputLength - 1], v))\n : interpolator;\n}\n\nexport { interpolate };\n","const reverseEasing = easing => p => 1 - easing(1 - p);\nconst mirrorEasing = easing => p => p <= 0.5 ? easing(2 * p) / 2 : (2 - easing(2 * (1 - p))) / 2;\nconst createExpoIn = (power) => p => Math.pow(p, power);\nconst createBackIn = (power) => p => p * p * ((power + 1) * p - power);\nconst createAnticipate = (power) => {\n const backEasing = createBackIn(power);\n return p => (p *= 2) < 1\n ? 0.5 * backEasing(p)\n : 0.5 * (2 - Math.pow(2, -10 * (p - 1)));\n};\n\nexport { createAnticipate, createBackIn, createExpoIn, mirrorEasing, reverseEasing };\n","import { createExpoIn, reverseEasing, mirrorEasing, createBackIn, createAnticipate } from './utils.mjs';\n\nconst DEFAULT_OVERSHOOT_STRENGTH = 1.525;\nconst BOUNCE_FIRST_THRESHOLD = 4.0 / 11.0;\nconst BOUNCE_SECOND_THRESHOLD = 8.0 / 11.0;\nconst BOUNCE_THIRD_THRESHOLD = 9.0 / 10.0;\nconst linear = p => p;\nconst easeIn = createExpoIn(2);\nconst easeOut = reverseEasing(easeIn);\nconst easeInOut = mirrorEasing(easeIn);\nconst circIn = p => 1 - Math.sin(Math.acos(p));\nconst circOut = reverseEasing(circIn);\nconst circInOut = mirrorEasing(circOut);\nconst backIn = createBackIn(DEFAULT_OVERSHOOT_STRENGTH);\nconst backOut = reverseEasing(backIn);\nconst backInOut = mirrorEasing(backIn);\nconst anticipate = createAnticipate(DEFAULT_OVERSHOOT_STRENGTH);\nconst ca = 4356.0 / 361.0;\nconst cb = 35442.0 / 1805.0;\nconst cc = 16061.0 / 1805.0;\nconst bounceOut = (p) => {\n if (p === 1 || p === 0)\n return p;\n const p2 = p * p;\n return p < BOUNCE_FIRST_THRESHOLD\n ? 7.5625 * p2\n : p < BOUNCE_SECOND_THRESHOLD\n ? 9.075 * p2 - 9.9 * p + 3.4\n : p < BOUNCE_THIRD_THRESHOLD\n ? ca * p2 - cb * p + cc\n : 10.8 * p * p - 20.52 * p + 10.72;\n};\nconst bounceIn = reverseEasing(bounceOut);\nconst bounceInOut = (p) => p < 0.5\n ? 0.5 * (1.0 - bounceOut(1.0 - p * 2.0))\n : 0.5 * bounceOut(p * 2.0 - 1.0) + 0.5;\n\nexport { anticipate, backIn, backInOut, backOut, bounceIn, bounceInOut, bounceOut, circIn, circInOut, circOut, easeIn, easeInOut, easeOut, linear };\n","import { interpolate } from '../../utils/interpolate.mjs';\nimport { easeInOut } from '../../easing/index.mjs';\n\nfunction defaultEasing(values, easing) {\n return values.map(() => easing || easeInOut).splice(0, values.length - 1);\n}\nfunction defaultOffset(values) {\n const numValues = values.length;\n return values.map((_value, i) => i !== 0 ? i / (numValues - 1) : 0);\n}\nfunction convertOffsetToTimes(offset, duration) {\n return offset.map((o) => o * duration);\n}\nfunction keyframes({ from = 0, to = 1, ease, offset, duration = 300, }) {\n const state = { done: false, value: from };\n const values = Array.isArray(to) ? to : [from, to];\n const times = convertOffsetToTimes(offset && offset.length === values.length\n ? offset\n : defaultOffset(values), duration);\n function createInterpolator() {\n return interpolate(times, values, {\n ease: Array.isArray(ease) ? ease : defaultEasing(values, ease),\n });\n }\n let interpolator = createInterpolator();\n return {\n next: (t) => {\n state.value = interpolator(t);\n state.done = t >= duration;\n return state;\n },\n flipTarget: () => {\n values.reverse();\n interpolator = createInterpolator();\n },\n };\n}\n\nexport { convertOffsetToTimes, defaultEasing, defaultOffset, keyframes };\n","function decay({ velocity = 0, from = 0, power = 0.8, timeConstant = 350, restDelta = 0.5, modifyTarget, }) {\n const state = { done: false, value: from };\n let amplitude = power * velocity;\n const ideal = from + amplitude;\n const target = modifyTarget === undefined ? ideal : modifyTarget(ideal);\n if (target !== ideal)\n amplitude = target - from;\n return {\n next: (t) => {\n const delta = -amplitude * Math.exp(-t / timeConstant);\n state.done = !(delta > restDelta || delta < -restDelta);\n state.value = state.done ? target : target + delta;\n return state;\n },\n flipTarget: () => { },\n };\n}\n\nexport { decay };\n","import { spring } from '../generators/spring.mjs';\nimport { keyframes } from '../generators/keyframes.mjs';\nimport { decay } from '../generators/decay.mjs';\n\nconst types = { keyframes, spring, decay };\nfunction detectAnimationFromOptions(config) {\n if (Array.isArray(config.to)) {\n return keyframes;\n }\n else if (types[config.type]) {\n return types[config.type];\n }\n const keys = new Set(Object.keys(config));\n if (keys.has(\"ease\") ||\n (keys.has(\"duration\") && !keys.has(\"dampingRatio\"))) {\n return keyframes;\n }\n else if (keys.has(\"dampingRatio\") ||\n keys.has(\"stiffness\") ||\n keys.has(\"mass\") ||\n keys.has(\"damping\") ||\n keys.has(\"restSpeed\") ||\n keys.has(\"restDelta\")) {\n return spring;\n }\n return keyframes;\n}\n\nexport { detectAnimationFromOptions };\n","const defaultTimestep = (1 / 60) * 1000;\nconst getCurrentTime = typeof performance !== \"undefined\"\n ? () => performance.now()\n : () => Date.now();\nconst onNextFrame = typeof window !== \"undefined\"\n ? (callback) => window.requestAnimationFrame(callback)\n : (callback) => setTimeout(() => callback(getCurrentTime()), defaultTimestep);\n\nexport { defaultTimestep, onNextFrame };\n","function createRenderStep(runNextFrame) {\n let toRun = [];\n let toRunNextFrame = [];\n let numToRun = 0;\n let isProcessing = false;\n let flushNextFrame = false;\n const toKeepAlive = new WeakSet();\n const step = {\n schedule: (callback, keepAlive = false, immediate = false) => {\n const addToCurrentFrame = immediate && isProcessing;\n const buffer = addToCurrentFrame ? toRun : toRunNextFrame;\n if (keepAlive)\n toKeepAlive.add(callback);\n if (buffer.indexOf(callback) === -1) {\n buffer.push(callback);\n if (addToCurrentFrame && isProcessing)\n numToRun = toRun.length;\n }\n return callback;\n },\n cancel: (callback) => {\n const index = toRunNextFrame.indexOf(callback);\n if (index !== -1)\n toRunNextFrame.splice(index, 1);\n toKeepAlive.delete(callback);\n },\n process: (frameData) => {\n if (isProcessing) {\n flushNextFrame = true;\n return;\n }\n isProcessing = true;\n [toRun, toRunNextFrame] = [toRunNextFrame, toRun];\n toRunNextFrame.length = 0;\n numToRun = toRun.length;\n if (numToRun) {\n for (let i = 0; i < numToRun; i++) {\n const callback = toRun[i];\n callback(frameData);\n if (toKeepAlive.has(callback)) {\n step.schedule(callback);\n runNextFrame();\n }\n }\n }\n isProcessing = false;\n if (flushNextFrame) {\n flushNextFrame = false;\n step.process(frameData);\n }\n },\n };\n return step;\n}\n\nexport { createRenderStep };\n","import { onNextFrame, defaultTimestep } from './on-next-frame.mjs';\nimport { createRenderStep } from './create-render-step.mjs';\n\nconst maxElapsed = 40;\nlet useDefaultElapsed = true;\nlet runNextFrame = false;\nlet isProcessing = false;\nconst frame = {\n delta: 0,\n timestamp: 0,\n};\nconst stepsOrder = [\n \"read\",\n \"update\",\n \"preRender\",\n \"render\",\n \"postRender\",\n];\nconst steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(() => (runNextFrame = true));\n return acc;\n}, {});\nconst sync = stepsOrder.reduce((acc, key) => {\n const step = steps[key];\n acc[key] = (process, keepAlive = false, immediate = false) => {\n if (!runNextFrame)\n startLoop();\n return step.schedule(process, keepAlive, immediate);\n };\n return acc;\n}, {});\nconst cancelSync = stepsOrder.reduce((acc, key) => {\n acc[key] = steps[key].cancel;\n return acc;\n}, {});\nconst flushSync = stepsOrder.reduce((acc, key) => {\n acc[key] = () => steps[key].process(frame);\n return acc;\n}, {});\nconst processStep = (stepId) => steps[stepId].process(frame);\nconst processFrame = (timestamp) => {\n runNextFrame = false;\n frame.delta = useDefaultElapsed\n ? defaultTimestep\n : Math.max(Math.min(timestamp - frame.timestamp, maxElapsed), 1);\n frame.timestamp = timestamp;\n isProcessing = true;\n stepsOrder.forEach(processStep);\n isProcessing = false;\n if (runNextFrame) {\n useDefaultElapsed = false;\n onNextFrame(processFrame);\n }\n};\nconst startLoop = () => {\n runNextFrame = true;\n useDefaultElapsed = true;\n if (!isProcessing)\n onNextFrame(processFrame);\n};\nconst getFrameData = () => frame;\n\nexport default sync;\nexport { cancelSync, flushSync, getFrameData };\n","function loopElapsed(elapsed, duration, delay = 0) {\n return elapsed - duration - delay;\n}\nfunction reverseElapsed(elapsed, duration, delay = 0, isForwardPlayback = true) {\n return isForwardPlayback\n ? loopElapsed(duration + -elapsed, duration, delay)\n : duration - (elapsed - duration) + delay;\n}\nfunction hasRepeatDelayElapsed(elapsed, duration, delay, isForwardPlayback) {\n return isForwardPlayback ? elapsed >= duration + delay : elapsed <= -delay;\n}\n\nexport { hasRepeatDelayElapsed, loopElapsed, reverseElapsed };\n","import { __rest } from 'tslib';\nimport { detectAnimationFromOptions } from './utils/detect-animation-from-options.mjs';\nimport sync, { cancelSync } from 'framesync';\nimport { interpolate } from '../utils/interpolate.mjs';\nimport { hasRepeatDelayElapsed, reverseElapsed, loopElapsed } from './utils/elapsed.mjs';\n\nconst framesync = (update) => {\n const passTimestamp = ({ delta }) => update(delta);\n return {\n start: () => sync.update(passTimestamp, true),\n stop: () => cancelSync.update(passTimestamp),\n };\n};\nfunction animate(_a) {\n var _b, _c;\n var { from, autoplay = true, driver = framesync, elapsed = 0, repeat: repeatMax = 0, repeatType = \"loop\", repeatDelay = 0, onPlay, onStop, onComplete, onRepeat, onUpdate } = _a, options = __rest(_a, [\"from\", \"autoplay\", \"driver\", \"elapsed\", \"repeat\", \"repeatType\", \"repeatDelay\", \"onPlay\", \"onStop\", \"onComplete\", \"onRepeat\", \"onUpdate\"]);\n let { to } = options;\n let driverControls;\n let repeatCount = 0;\n let computedDuration = options.duration;\n let latest;\n let isComplete = false;\n let isForwardPlayback = true;\n let interpolateFromNumber;\n const animator = detectAnimationFromOptions(options);\n if ((_c = (_b = animator).needsInterpolation) === null || _c === void 0 ? void 0 : _c.call(_b, from, to)) {\n interpolateFromNumber = interpolate([0, 100], [from, to], {\n clamp: false,\n });\n from = 0;\n to = 100;\n }\n const animation = animator(Object.assign(Object.assign({}, options), { from, to }));\n function repeat() {\n repeatCount++;\n if (repeatType === \"reverse\") {\n isForwardPlayback = repeatCount % 2 === 0;\n elapsed = reverseElapsed(elapsed, computedDuration, repeatDelay, isForwardPlayback);\n }\n else {\n elapsed = loopElapsed(elapsed, computedDuration, repeatDelay);\n if (repeatType === \"mirror\")\n animation.flipTarget();\n }\n isComplete = false;\n onRepeat && onRepeat();\n }\n function complete() {\n driverControls.stop();\n onComplete && onComplete();\n }\n function update(delta) {\n if (!isForwardPlayback)\n delta = -delta;\n elapsed += delta;\n if (!isComplete) {\n const state = animation.next(Math.max(0, elapsed));\n latest = state.value;\n if (interpolateFromNumber)\n latest = interpolateFromNumber(latest);\n isComplete = isForwardPlayback ? state.done : elapsed <= 0;\n }\n onUpdate === null || onUpdate === void 0 ? void 0 : onUpdate(latest);\n if (isComplete) {\n if (repeatCount === 0)\n computedDuration !== null && computedDuration !== void 0 ? computedDuration : (computedDuration = elapsed);\n if (repeatCount < repeatMax) {\n hasRepeatDelayElapsed(elapsed, computedDuration, repeatDelay, isForwardPlayback) && repeat();\n }\n else {\n complete();\n }\n }\n }\n function play() {\n onPlay === null || onPlay === void 0 ? void 0 : onPlay();\n driverControls = driver(update);\n driverControls.start();\n }\n autoplay && play();\n return {\n stop: () => {\n onStop === null || onStop === void 0 ? void 0 : onStop();\n driverControls.stop();\n },\n };\n}\n\nexport { animate };\n","/**\n * Spring Animation Module — wraps popmotion for liquid-feel motion.\n *\n * Provides high-level helpers for common widget animations:\n * enter/exit, scale, slide, and interruptible springs.\n */\n\nimport { animate, spring as popmotionSpring } from 'popmotion'\n\n// ---------------------------------------------------------------------------\n// Spring presets — Apple-inspired defaults\n// ---------------------------------------------------------------------------\n\nexport const SPRING_PRESETS = {\n /** Snappy entrance (cards, bubbles) */\n snappy: { stiffness: 300, damping: 28, mass: 0.8 },\n /** Gentle settle (avatar slide-in) */\n gentle: { stiffness: 170, damping: 26, mass: 1 },\n /** Bouncy overshoot (chat pill appear) */\n bouncy: { stiffness: 400, damping: 20, mass: 0.6 },\n /** Smooth fade (opacity transitions) */\n smooth: { stiffness: 200, damping: 30, mass: 1 },\n} as const\n\nexport type SpringPreset = keyof typeof SPRING_PRESETS\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SpringAnimation {\n stop: () => void\n}\n\nexport interface SpringOptions {\n from: number\n to: number\n preset?: SpringPreset\n stiffness?: number\n damping?: number\n mass?: number\n onUpdate: (value: number) => void\n onComplete?: () => void\n}\n\n// ---------------------------------------------------------------------------\n// Core spring function\n// ---------------------------------------------------------------------------\n\n/** Run a spring animation. Returns a handle to stop it. */\nexport function springAnimate(opts: SpringOptions): SpringAnimation {\n const preset = opts.preset ? SPRING_PRESETS[opts.preset] : undefined\n\n const playback = animate({\n from: opts.from,\n to: opts.to,\n type: 'spring',\n stiffness: opts.stiffness ?? preset?.stiffness ?? 170,\n damping: opts.damping ?? preset?.damping ?? 26,\n mass: opts.mass ?? preset?.mass ?? 1,\n onUpdate: opts.onUpdate,\n onComplete: opts.onComplete,\n })\n\n return { stop: () => playback.stop() }\n}\n\n// ---------------------------------------------------------------------------\n// High-level animation helpers for common patterns\n// ---------------------------------------------------------------------------\n\n/** Spring-animate a CSS transform property on an element. */\nexport function springTransform(\n el: HTMLElement,\n property: string,\n from: number,\n to: number,\n unit = '',\n preset: SpringPreset = 'snappy',\n): SpringAnimation {\n return springAnimate({\n from,\n to,\n preset,\n onUpdate: (v) => {\n el.style.transform = `${property}(${v}${unit})`\n },\n })\n}\n\n/** Spring-animate opacity. */\nexport function springOpacity(\n el: HTMLElement,\n from: number,\n to: number,\n preset: SpringPreset = 'smooth',\n onComplete?: () => void,\n): SpringAnimation {\n return springAnimate({\n from,\n to,\n preset,\n onUpdate: (v) => {\n el.style.opacity = String(v)\n },\n onComplete,\n })\n}\n\n/**\n * Combined enter animation: fade in + scale up + slide.\n * Returns a handle that stops all sub-animations.\n */\nexport function springEnter(\n el: HTMLElement,\n options: {\n from?: { opacity?: number; scale?: number; y?: number }\n preset?: SpringPreset\n onComplete?: () => void\n } = {},\n): SpringAnimation {\n const { from = {}, preset = 'snappy', onComplete } = options\n const startOpacity = from.opacity ?? 0\n const startScale = from.scale ?? 0.92\n const startY = from.y ?? 8\n\n el.style.opacity = String(startOpacity)\n el.style.transform = `scale(${startScale}) translateY(${startY}px)`\n\n const animations: SpringAnimation[] = []\n let completed = 0\n const total = 3\n const checkDone = () => { if (++completed >= total) onComplete?.() }\n\n animations.push(springAnimate({\n from: startOpacity, to: 1, preset,\n onUpdate: (v) => { el.style.opacity = String(v) },\n onComplete: checkDone,\n }))\n\n animations.push(springAnimate({\n from: startScale, to: 1, preset,\n onUpdate: (v) => {\n const currentY = parseFloat(el.style.transform.match(/translateY\\(([^)]+)\\)/)?.[1] ?? '0')\n el.style.transform = `scale(${v}) translateY(${currentY}px)`\n },\n onComplete: checkDone,\n }))\n\n animations.push(springAnimate({\n from: startY, to: 0, preset,\n onUpdate: (v) => {\n const currentScale = parseFloat(el.style.transform.match(/scale\\(([^)]+)\\)/)?.[1] ?? '1')\n el.style.transform = `scale(${currentScale}) translateY(${v}px)`\n },\n onComplete: checkDone,\n }))\n\n return {\n stop: () => animations.forEach(a => a.stop()),\n }\n}\n\n/**\n * Combined exit animation: fade out + scale down + slide.\n * Removes the element from DOM on complete.\n */\nexport function springExit(\n el: HTMLElement,\n options: {\n to?: { opacity?: number; scale?: number; y?: number }\n preset?: SpringPreset\n remove?: boolean\n onComplete?: () => void\n } = {},\n): SpringAnimation {\n const { to = {}, preset = 'smooth', remove = true, onComplete } = options\n const endOpacity = to.opacity ?? 0\n const endScale = to.scale ?? 0.92\n const endY = to.y ?? 8\n\n const animations: SpringAnimation[] = []\n let completed = 0\n const total = 3\n const checkDone = () => {\n if (++completed >= total) {\n if (remove) el.remove()\n onComplete?.()\n }\n }\n\n animations.push(springAnimate({\n from: parseFloat(el.style.opacity || '1'), to: endOpacity, preset,\n onUpdate: (v) => { el.style.opacity = String(v) },\n onComplete: checkDone,\n }))\n\n animations.push(springAnimate({\n from: 1, to: endScale, preset,\n onUpdate: (v) => {\n const currentY = parseFloat(el.style.transform.match(/translateY\\(([^)]+)\\)/)?.[1] ?? '0')\n el.style.transform = `scale(${v}) translateY(${currentY}px)`\n },\n onComplete: checkDone,\n }))\n\n animations.push(springAnimate({\n from: 0, to: endY, preset,\n onUpdate: (v) => {\n const currentScale = parseFloat(el.style.transform.match(/scale\\(([^)]+)\\)/)?.[1] ?? '1')\n el.style.transform = `scale(${currentScale}) translateY(${v}px)`\n },\n onComplete: checkDone,\n }))\n\n return {\n stop: () => animations.forEach(a => a.stop()),\n }\n}\n","/**\n * Liquid Glass Design Tokens — injected once into <head> as CSS custom properties.\n *\n * Host sites can override any --hs-* variable to adapt the widget's appearance.\n * The token set switches between dark-glass and light-glass via a data attribute\n * on the widget root ([data-hs-theme=\"dark\"|\"light\"]).\n */\n\nconst STYLE_ID = 'holostaff-liquid-tokens'\n\n/** All design tokens with dark/light variants. */\nexport const tokens = {\n // --- Surfaces ---\n glassBlur: '20px',\n glassSaturate: '180%',\n\n // Dark glass (default — white-tinted glass on dark backgrounds)\n dark: {\n glassBg: 'rgba(255, 255, 255, 0.10)',\n glassBgElevated: 'rgba(255, 255, 255, 0.16)',\n glassBgSolid: 'rgba(30, 30, 40, 0.85)',\n glassBorder: 'rgba(255, 255, 255, 0.14)',\n glassBorderHover: 'rgba(255, 255, 255, 0.28)',\n glassShadow: '0 8px 32px rgba(0, 0, 0, 0.24)',\n glassShadowElevated: '0 12px 48px rgba(0, 0, 0, 0.32)',\n textPrimary: 'rgba(255, 255, 255, 0.92)',\n textSecondary: 'rgba(255, 255, 255, 0.56)',\n textTertiary: 'rgba(255, 255, 255, 0.32)',\n divider: 'rgba(255, 255, 255, 0.08)',\n },\n\n // Light glass (dark-tinted glass on light backgrounds)\n light: {\n glassBg: 'rgba(255, 255, 255, 0.55)',\n glassBgElevated: 'rgba(255, 255, 255, 0.72)',\n glassBgSolid: 'rgba(255, 255, 255, 0.92)',\n glassBorder: 'rgba(0, 0, 0, 0.06)',\n glassBorderHover: 'rgba(0, 0, 0, 0.12)',\n glassShadow: '0 8px 32px rgba(0, 0, 0, 0.08)',\n glassShadowElevated: '0 12px 48px rgba(0, 0, 0, 0.12)',\n textPrimary: 'rgba(0, 0, 0, 0.85)',\n textSecondary: 'rgba(0, 0, 0, 0.50)',\n textTertiary: 'rgba(0, 0, 0, 0.28)',\n divider: 'rgba(0, 0, 0, 0.06)',\n },\n\n // --- Radii ---\n radiusSm: '10px',\n radiusMd: '16px',\n radiusLg: '24px',\n radiusPill: '9999px',\n\n // --- Typography ---\n font: \"-apple-system, 'Inter', 'Segoe UI', system-ui, sans-serif\",\n textXs: '11px',\n textSm: '12px',\n textBase: '14px',\n textLg: '16px',\n textXl: '20px',\n weightNormal: '400',\n weightMedium: '500',\n weightSemibold: '600',\n lineHeight: '1.45',\n\n // --- Motion ---\n springDuration: '500ms',\n springEasing: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n easeFast: 'cubic-bezier(0.25, 0.1, 0.25, 1)',\n fadeDuration: '200ms',\n\n // --- Accent ---\n accent: '#7C5CFF',\n accentGlow: 'rgba(124, 92, 255, 0.35)',\n accentText: '#ffffff',\n\n // --- Spacing ---\n space1: '4px',\n space2: '8px',\n space3: '12px',\n space4: '16px',\n space5: '20px',\n space6: '24px',\n space8: '32px',\n\n // --- Z-index layers ---\n zBase: '2147483640',\n zOverlay: '2147483644',\n zControls: '2147483646',\n zTop: '2147483647',\n} as const\n\n/** Inject the CSS custom properties stylesheet into <head>. Idempotent. */\nexport function injectTokens(): void {\n if (document.getElementById(STYLE_ID)) return\n\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = `\n /* Holostaff Liquid Glass Design Tokens */\n :root {\n --hs-glass-blur: ${tokens.glassBlur};\n --hs-glass-saturate: ${tokens.glassSaturate};\n\n --hs-radius-sm: ${tokens.radiusSm};\n --hs-radius-md: ${tokens.radiusMd};\n --hs-radius-lg: ${tokens.radiusLg};\n --hs-radius-pill: ${tokens.radiusPill};\n\n --hs-font: ${tokens.font};\n --hs-text-xs: ${tokens.textXs};\n --hs-text-sm: ${tokens.textSm};\n --hs-text-base: ${tokens.textBase};\n --hs-text-lg: ${tokens.textLg};\n --hs-text-xl: ${tokens.textXl};\n --hs-weight-normal: ${tokens.weightNormal};\n --hs-weight-medium: ${tokens.weightMedium};\n --hs-weight-semibold: ${tokens.weightSemibold};\n --hs-line-height: ${tokens.lineHeight};\n\n --hs-spring-duration: ${tokens.springDuration};\n --hs-spring-easing: ${tokens.springEasing};\n --hs-ease-fast: ${tokens.easeFast};\n --hs-fade-duration: ${tokens.fadeDuration};\n\n --hs-accent: ${tokens.accent};\n --hs-accent-glow: ${tokens.accentGlow};\n --hs-accent-text: ${tokens.accentText};\n\n --hs-space-1: ${tokens.space1};\n --hs-space-2: ${tokens.space2};\n --hs-space-3: ${tokens.space3};\n --hs-space-4: ${tokens.space4};\n --hs-space-5: ${tokens.space5};\n --hs-space-6: ${tokens.space6};\n --hs-space-8: ${tokens.space8};\n }\n\n /* Dark glass (default) */\n [data-hs-theme=\"dark\"] {\n --hs-glass-bg: ${tokens.dark.glassBg};\n --hs-glass-bg-elevated: ${tokens.dark.glassBgElevated};\n --hs-glass-bg-solid: ${tokens.dark.glassBgSolid};\n --hs-glass-border: ${tokens.dark.glassBorder};\n --hs-glass-border-hover: ${tokens.dark.glassBorderHover};\n --hs-glass-shadow: ${tokens.dark.glassShadow};\n --hs-glass-shadow-elevated: ${tokens.dark.glassShadowElevated};\n --hs-text-primary: ${tokens.dark.textPrimary};\n --hs-text-secondary: ${tokens.dark.textSecondary};\n --hs-text-tertiary: ${tokens.dark.textTertiary};\n --hs-divider: ${tokens.dark.divider};\n }\n\n /* Light glass */\n [data-hs-theme=\"light\"] {\n --hs-glass-bg: ${tokens.light.glassBg};\n --hs-glass-bg-elevated: ${tokens.light.glassBgElevated};\n --hs-glass-bg-solid: ${tokens.light.glassBgSolid};\n --hs-glass-border: ${tokens.light.glassBorder};\n --hs-glass-border-hover: ${tokens.light.glassBorderHover};\n --hs-glass-shadow: ${tokens.light.glassShadow};\n --hs-glass-shadow-elevated: ${tokens.light.glassShadowElevated};\n --hs-text-primary: ${tokens.light.textPrimary};\n --hs-text-secondary: ${tokens.light.textSecondary};\n --hs-text-tertiary: ${tokens.light.textTertiary};\n --hs-divider: ${tokens.light.divider};\n }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n :root {\n --hs-spring-duration: 0ms;\n --hs-fade-duration: 0ms;\n }\n }\n `\n document.head.appendChild(style)\n}\n","/**\n * ActionExecutor — Handles suggest_intervention commands from the vision\n * loop server. Displays suggestions using the persistent chat pill or\n * card overlay depending on viewport visibility.\n *\n * Hybrid display strategy:\n * - If the inline home card is visible → glass overlay on the card\n * - Otherwise → suggestion appears in the persistent chat pill\n *\n * Flow:\n * 1. Server sends suggest_intervention → display via pill or card overlay\n * 2. User can: accept (click CTA), decline (click dismiss), ignore (auto-dismiss)\n * 3. Result sent back to server via action_complete\n * 4. If accepted, triggers conversation start with vision context\n */\n\nimport type { VisionWSClient, InterventionMessage } from './wsClient'\nimport type { GlassChatPill } from '../ui/components/chatPill'\nimport { createGlassPanel, createGlassButton, glassText } from '../ui/glass'\nimport { springEnter, springExit, type SpringAnimation } from '../ui/spring'\nimport { injectTokens, tokens } from '../ui/tokens'\n\ntype WidgetStateGetter = () => string\ntype HomeVisibleGetter = () => boolean\n\nconst AUTO_DISMISS_MS = 15_000\n\nexport class ActionExecutor {\n private wsClient: VisionWSClient\n private getWidgetState: WidgetStateGetter\n private getHomeVisible: HomeVisibleGetter\n private inlineTarget: HTMLElement | null\n private pill: GlassChatPill | null\n\n private currentIntervention: InterventionMessage | null = null\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null\n private _active = false\n\n // Card overlay elements\n private cardOverlay: HTMLElement | null = null\n private cardOverlayAnim: SpringAnimation | null = null\n\n /** Called when the user accepts a suggestion. */\n onAccept: ((context: string) => void) | null = null\n\n constructor(opts: {\n wsClient: VisionWSClient\n getWidgetState: WidgetStateGetter\n getHomeVisible: HomeVisibleGetter\n inlineTarget?: HTMLElement | null\n pill?: GlassChatPill | null\n }) {\n this.wsClient = opts.wsClient\n this.getWidgetState = opts.getWidgetState\n this.getHomeVisible = opts.getHomeVisible\n this.inlineTarget = opts.inlineTarget ?? null\n this.pill = opts.pill ?? null\n\n this.wsClient.onIntervention = (msg) => this.handleIntervention(msg)\n }\n\n get isActive(): boolean {\n return this._active\n }\n\n destroy(): void {\n this.cleanup()\n this.wsClient.onIntervention = null\n }\n\n // -----------------------------------------------------------------------\n // Intervention handling\n // -----------------------------------------------------------------------\n\n private handleIntervention(msg: InterventionMessage): void {\n const state = this.getWidgetState()\n if (state === 'active' || state === 'connecting') {\n this.wsClient.sendActionComplete(msg.actionId, 'ignored')\n return\n }\n\n if (this._active) return\n\n console.log(`[ActionExecutor] Showing suggestion: \"${msg.message}\"`)\n this.currentIntervention = msg\n this._active = true\n\n const homeVisible = this.getHomeVisible()\n\n if (this.inlineTarget && homeVisible) {\n this.showCardOverlay(msg.message)\n } else if (this.pill) {\n this.showInPill(msg.message)\n }\n\n this.autoDismissTimer = setTimeout(() => this.handleIgnore(), AUTO_DISMISS_MS)\n }\n\n // -----------------------------------------------------------------------\n // Display mode A: Card overlay (inline home is visible)\n // -----------------------------------------------------------------------\n\n private showCardOverlay(message: string): void {\n if (!this.inlineTarget) return\n injectTokens()\n\n this.inlineTarget.querySelector('.hs-suggestion-overlay')?.remove()\n\n this.cardOverlay = createGlassPanel({\n radius: 'lg',\n elevation: 'solid',\n className: 'hs-suggestion-overlay',\n })\n\n Object.assign(this.cardOverlay.style, {\n position: 'absolute',\n inset: '0',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n padding: tokens.space4,\n boxSizing: 'border-box',\n zIndex: '10',\n textAlign: 'center',\n opacity: '0',\n })\n this.cardOverlay.setAttribute('data-hs-theme', 'dark')\n\n const msgEl = document.createElement('p')\n glassText(msgEl, 'primary', 'base', 'normal')\n Object.assign(msgEl.style, { margin: `0 0 ${tokens.space4} 0`, maxWidth: '260px' })\n msgEl.textContent = message\n this.cardOverlay.appendChild(msgEl)\n\n const actions = document.createElement('div')\n Object.assign(actions.style, { display: 'flex', gap: tokens.space3 })\n\n actions.appendChild(createGlassButton({\n label: \"Let's talk\",\n variant: 'accent',\n size: 'md',\n onClick: () => this.handleAccept(),\n }))\n\n actions.appendChild(createGlassButton({\n label: 'Not now',\n variant: 'ghost',\n size: 'sm',\n onClick: () => this.handleDecline(),\n }))\n\n this.cardOverlay.appendChild(actions)\n this.inlineTarget.style.position = 'relative'\n this.inlineTarget.appendChild(this.cardOverlay)\n\n this.cardOverlayAnim = springEnter(this.cardOverlay, {\n preset: 'snappy',\n from: { opacity: 0, scale: 0.96, y: 8 },\n })\n }\n\n private hideCardOverlay(): void {\n this.cardOverlayAnim?.stop()\n if (this.cardOverlay) {\n const el = this.cardOverlay\n this.cardOverlay = null\n this.cardOverlayAnim = springExit(el, { remove: true, preset: 'smooth' })\n }\n }\n\n // -----------------------------------------------------------------------\n // Display mode B: Suggestion in the persistent pill\n // -----------------------------------------------------------------------\n\n private showInPill(message: string): void {\n if (!this.pill) return\n\n this.pill.showSuggestion(message)\n this.pill.onSuggestionAccept = () => this.handleAccept()\n this.pill.onSuggestionDismiss = () => this.handleDecline()\n }\n\n private clearPillSuggestion(): void {\n if (!this.pill) return\n this.pill.clearSuggestion()\n this.pill.onSuggestionAccept = null\n this.pill.onSuggestionDismiss = null\n }\n\n // -----------------------------------------------------------------------\n // Response handlers\n // -----------------------------------------------------------------------\n\n private handleAccept(): void {\n if (!this._active || !this.currentIntervention) return\n console.log('[ActionExecutor] User accepted suggestion')\n\n const intervention = this.currentIntervention\n const context = `${intervention.context}\\n\\nThe user accepted your suggestion: \"${intervention.message}\"\\nContinue the conversation naturally from this context.`\n const actionId = intervention.actionId\n\n this.cleanup()\n this.wsClient.sendActionComplete(actionId, 'accepted')\n this.onAccept?.(context)\n }\n\n private handleDecline(): void {\n if (!this._active || !this.currentIntervention) return\n console.log('[ActionExecutor] User declined suggestion')\n\n const actionId = this.currentIntervention.actionId\n this.cleanup()\n this.wsClient.sendActionComplete(actionId, 'declined')\n }\n\n private handleIgnore(): void {\n if (!this._active || !this.currentIntervention) return\n console.log('[ActionExecutor] Suggestion auto-dismissed (ignored)')\n\n const actionId = this.currentIntervention.actionId\n this.cleanup()\n this.wsClient.sendActionComplete(actionId, 'ignored')\n }\n\n // -----------------------------------------------------------------------\n // Cleanup\n // -----------------------------------------------------------------------\n\n private cleanup(): void {\n this._active = false\n\n if (this.autoDismissTimer) {\n clearTimeout(this.autoDismissTimer)\n this.autoDismissTimer = null\n }\n\n this.hideCardOverlay()\n this.clearPillSuggestion()\n this.currentIntervention = null\n }\n}\n","/**\n * Theme Detector — samples the background luminance behind a target element\n * to determine whether dark-glass or light-glass tokens should be used.\n *\n * Uses a small offscreen canvas to read averaged pixel color from the area\n * underneath the widget, then derives perceived luminance.\n */\n\nexport type GlassTheme = 'dark' | 'light'\n\n/**\n * Sample the average luminance of the page background behind a given rect.\n * Returns 'dark' if the background is light (use dark text / light glass),\n * 'light' if the background is dark (use light text / dark glass).\n *\n * Note: the naming follows the *glass* convention — \"dark glass\" appears on\n * dark backgrounds, \"light glass\" appears on light backgrounds.\n */\nexport function detectTheme(rect: DOMRect): GlassTheme {\n try {\n // Sample the center point's computed background color up the DOM tree\n const centerX = rect.left + rect.width / 2\n const centerY = rect.top + rect.height / 2\n const el = document.elementFromPoint(centerX, centerY)\n\n if (!el) return 'dark'\n\n const bgColor = getEffectiveBackgroundColor(el as HTMLElement)\n const luminance = relativeLuminance(bgColor)\n\n // Light background → light glass (translucent white, dark text)\n // Dark background → dark glass (translucent white on dark, light text)\n return luminance > 0.5 ? 'light' : 'dark'\n } catch {\n return 'dark' // safe default\n }\n}\n\n/**\n * Walk up the DOM tree to find the first element with a non-transparent background.\n * Returns the color as [r, g, b].\n */\nfunction getEffectiveBackgroundColor(el: HTMLElement): [number, number, number] {\n let current: HTMLElement | null = el\n\n while (current) {\n const style = getComputedStyle(current)\n const bg = style.backgroundColor\n\n if (bg && bg !== 'transparent' && bg !== 'rgba(0, 0, 0, 0)') {\n return parseColor(bg)\n }\n\n current = current.parentElement\n }\n\n // Fallback: assume white page\n return [255, 255, 255]\n}\n\n/** Parse a CSS color string (rgb/rgba) into [r, g, b]. */\nfunction parseColor(color: string): [number, number, number] {\n const match = color.match(/rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)/)\n if (match) {\n return [parseInt(match[1]), parseInt(match[2]), parseInt(match[3])]\n }\n return [255, 255, 255] // fallback\n}\n\n/**\n * Compute relative luminance (0 = black, 1 = white) per WCAG 2.0.\n * https://www.w3.org/TR/WCAG20/#relativeluminancedef\n */\nfunction relativeLuminance([r, g, b]: [number, number, number]): number {\n const [rs, gs, bs] = [r / 255, g / 255, b / 255].map(c =>\n c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4),\n )\n return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs\n}\n\n/**\n * Apply the detected theme as a data attribute on an element.\n * All child glass components will pick up the themed CSS variables.\n */\nexport function applyTheme(container: HTMLElement, theme: GlassTheme): void {\n container.setAttribute('data-hs-theme', theme)\n}\n\n/**\n * Auto-detect and apply theme. Call this on init and optionally on scroll/resize.\n * Returns the detected theme.\n */\nexport function autoDetectAndApply(container: HTMLElement, referenceRect?: DOMRect): GlassTheme {\n const rect = referenceRect ?? container.getBoundingClientRect()\n const theme = detectTheme(rect)\n applyTheme(container, theme)\n return theme\n}\n","/**\n * AvatarFrame — Liquid glass wrapper around the avatar video/canvas.\n *\n * Wraps the PixiJS canvas and idle video in a glass-bordered container\n * with status indicator, glow effects, and spring-animated state transitions.\n */\n\nimport { createGlassPanel } from '../glass'\nimport { springEnter, springExit, springAnimate, type SpringAnimation } from '../spring'\nimport { injectTokens } from '../tokens'\nimport { autoDetectAndApply, type GlassTheme } from '../themeDetector'\n\nexport type AvatarStatus = 'idle' | 'listening' | 'thinking' | 'speaking' | 'connecting'\n\nconst STATUS_COLORS: Record<AvatarStatus, string> = {\n idle: 'var(--hs-text-tertiary)',\n listening: '#34C759', // green\n thinking: '#FF9F0A', // amber\n speaking: 'var(--hs-accent)',\n connecting: 'var(--hs-text-tertiary)',\n}\n\nconst STATUS_LABELS: Record<AvatarStatus, string> = {\n idle: '',\n listening: 'Listening',\n thinking: 'Thinking',\n speaking: 'Speaking',\n connecting: 'Connecting',\n}\n\nexport class AvatarFrame {\n readonly el: HTMLDivElement\n private statusDot: HTMLDivElement\n private statusLabel: HTMLSpanElement\n private statusBar: HTMLDivElement\n private glowRing: HTMLDivElement\n private pulseAnim: SpringAnimation | null = null\n private currentStatus: AvatarStatus = 'idle'\n private theme: GlassTheme = 'dark'\n\n constructor() {\n injectTokens()\n\n // Outer glass frame\n this.el = createGlassPanel({\n radius: 'lg',\n elevation: 'base',\n className: 'hs-avatar-frame',\n }) as HTMLDivElement\n\n Object.assign(this.el.style, {\n position: 'relative',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n })\n\n // Glow ring — subtle colored border glow during active states\n this.glowRing = document.createElement('div')\n Object.assign(this.glowRing.style, {\n position: 'absolute',\n inset: '-1px',\n borderRadius: 'inherit',\n border: '2px solid transparent',\n pointerEvents: 'none',\n transition: 'border-color 0.3s ease, box-shadow 0.3s ease',\n zIndex: '2',\n })\n this.el.appendChild(this.glowRing)\n\n // Status bar — bottom overlay with dot + label\n this.statusBar = document.createElement('div')\n Object.assign(this.statusBar.style, {\n position: 'absolute',\n bottom: '0',\n left: '0',\n right: '0',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 'var(--hs-space-2)',\n padding: 'var(--hs-space-2) var(--hs-space-3)',\n background: 'linear-gradient(transparent, rgba(0,0,0,0.3))',\n zIndex: '3',\n opacity: '0',\n transition: 'opacity 0.2s ease',\n pointerEvents: 'none',\n })\n\n this.statusDot = document.createElement('div')\n Object.assign(this.statusDot.style, {\n width: '6px',\n height: '6px',\n borderRadius: '50%',\n background: STATUS_COLORS.idle,\n transition: 'background 0.3s ease, box-shadow 0.3s ease',\n flexShrink: '0',\n })\n\n this.statusLabel = document.createElement('span')\n Object.assign(this.statusLabel.style, {\n fontSize: 'var(--hs-text-xs)',\n fontFamily: 'var(--hs-font)',\n fontWeight: 'var(--hs-weight-medium)',\n color: 'rgba(255,255,255,0.8)',\n letterSpacing: '0.02em',\n })\n\n this.statusBar.appendChild(this.statusDot)\n this.statusBar.appendChild(this.statusLabel)\n this.el.appendChild(this.statusBar)\n }\n\n /** Set the size of the frame. */\n setSize(width: number, height: number): void {\n this.el.style.width = `${width}px`\n this.el.style.height = `${height}px`\n }\n\n /** Append a child element (video, canvas) into the frame. */\n appendContent(child: HTMLElement): void {\n // Insert before the glow ring and status bar (they should overlay)\n this.el.insertBefore(child, this.glowRing)\n }\n\n /** Update the avatar status — changes glow, dot, and label. */\n setStatus(status: AvatarStatus): void {\n if (status === this.currentStatus) return\n this.currentStatus = status\n\n const color = STATUS_COLORS[status]\n const label = STATUS_LABELS[status]\n\n // Status dot\n this.statusDot.style.background = color\n this.statusDot.style.boxShadow = status !== 'idle' ? `0 0 6px ${color}` : 'none'\n\n // Status label\n this.statusLabel.textContent = label\n\n // Status bar visibility\n this.statusBar.style.opacity = status === 'idle' ? '0' : '1'\n\n // Glow ring\n if (status === 'speaking' || status === 'listening') {\n this.glowRing.style.borderColor = color\n this.glowRing.style.boxShadow = `0 0 16px ${color}40, inset 0 0 16px ${color}10`\n this.startPulse(color)\n } else {\n this.glowRing.style.borderColor = 'transparent'\n this.glowRing.style.boxShadow = 'none'\n this.stopPulse()\n }\n }\n\n /** Detect and apply the correct glass theme based on background. */\n detectTheme(): GlassTheme {\n this.theme = autoDetectAndApply(this.el)\n return this.theme\n }\n\n /** Manually set the theme. */\n setTheme(theme: GlassTheme): void {\n this.theme = theme\n this.el.setAttribute('data-hs-theme', theme)\n }\n\n /** Spring-animated entrance. */\n show(): SpringAnimation {\n this.el.style.display = 'flex'\n return springEnter(this.el, { preset: 'gentle' })\n }\n\n /** Spring-animated exit. */\n hide(remove = false): SpringAnimation {\n return springExit(this.el, { remove, preset: 'smooth' })\n }\n\n private startPulse(color: string): void {\n this.stopPulse()\n let direction = 1\n let value = 0\n\n this.pulseAnim = springAnimate({\n from: 0,\n to: 1,\n preset: 'gentle',\n onUpdate: (v) => {\n const intensity = 0.15 + v * 0.25\n this.glowRing.style.boxShadow =\n `0 0 ${16 + v * 8}px ${color}${Math.round(intensity * 255).toString(16).padStart(2, '0')}, ` +\n `inset 0 0 ${16 + v * 4}px ${color}10`\n },\n onComplete: () => {\n // Reverse — create gentle pulsing loop\n if (this.currentStatus === 'speaking' || this.currentStatus === 'listening') {\n this.startPulse(color)\n }\n },\n })\n }\n\n private stopPulse(): void {\n this.pulseAnim?.stop()\n this.pulseAnim = null\n }\n\n destroy(): void {\n this.stopPulse()\n this.el.remove()\n }\n}\n","/**\n * SpeechBubble — Liquid glass speech bubble (DOM-based, replaces PixiJS version).\n *\n * Positioned above the avatar with a tail pointer. Supports:\n * - Typewriter text animation\n * - Prompt cycling (idle teaser messages)\n * - Static messages (\"Connecting...\")\n * - Accept/dismiss action buttons (for VLM suggestions)\n * - Spring enter/exit animations\n */\n\nimport { createGlassPanel, createGlassButton, glassText } from '../glass'\nimport { springEnter, springExit, type SpringAnimation } from '../spring'\nimport { injectTokens } from '../tokens'\n\n/** Typewriter speed (ms per character). */\nconst TYPE_SPEED_MS = 30\n/** How long to display each message before cycling. */\nconst HOLD_MS = 3000\n/** Pause between messages during cycling. */\nconst CYCLE_PAUSE_MS = 500\n\nexport class GlassSpeechBubble {\n readonly el: HTMLDivElement\n private textEl: HTMLSpanElement\n private actionsEl: HTMLDivElement\n private tailEl: HTMLDivElement\n\n private prompts: string[] = []\n private promptIndex = 0\n private typeTimer: ReturnType<typeof setTimeout> | null = null\n private holdTimer: ReturnType<typeof setTimeout> | null = null\n private cycling = false\n private currentAnim: SpringAnimation | null = null\n\n // Callbacks\n onClick: (() => void) | null = null\n onAccept: (() => void) | null = null\n onDismiss: (() => void) | null = null\n\n constructor(prompts?: string[]) {\n injectTokens()\n this.prompts = prompts ?? [\n 'Need help finding something?',\n 'I can walk you through this page.',\n \"Questions? I'm here to help.\",\n ]\n\n // Main bubble panel\n this.el = createGlassPanel({\n radius: 'md',\n elevation: 'elevated',\n className: 'hs-speech-bubble',\n }) as HTMLDivElement\n\n Object.assign(this.el.style, {\n position: 'absolute',\n bottom: '100%',\n left: '50%',\n transform: 'translateX(-50%)',\n marginBottom: '12px',\n padding: 'var(--hs-space-3) var(--hs-space-4)',\n maxWidth: '280px',\n minWidth: '120px',\n pointerEvents: 'auto',\n cursor: 'pointer',\n opacity: '0',\n display: 'none',\n zIndex: '4',\n })\n\n // Text content\n this.textEl = document.createElement('span')\n glassText(this.textEl, 'primary', 'base', 'normal')\n this.textEl.style.display = 'block'\n this.el.appendChild(this.textEl)\n\n // Action buttons container (hidden by default)\n this.actionsEl = document.createElement('div')\n Object.assign(this.actionsEl.style, {\n display: 'none',\n gap: 'var(--hs-space-2)',\n marginTop: 'var(--hs-space-3)',\n justifyContent: 'flex-end',\n })\n this.el.appendChild(this.actionsEl)\n\n // Tail (downward pointing triangle)\n this.tailEl = document.createElement('div')\n Object.assign(this.tailEl.style, {\n position: 'absolute',\n bottom: '-6px',\n left: '50%',\n transform: 'translateX(-50%) rotate(45deg)',\n width: '12px',\n height: '12px',\n background: 'var(--hs-glass-bg-elevated)',\n backdropFilter: 'blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))',\n WebkitBackdropFilter: 'blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))',\n borderRight: '1px solid var(--hs-glass-border)',\n borderBottom: '1px solid var(--hs-glass-border)',\n zIndex: '-1',\n })\n this.el.appendChild(this.tailEl)\n\n // Click on bubble → start conversation\n this.el.addEventListener('click', (e) => {\n e.stopPropagation()\n this.onClick?.()\n })\n }\n\n // -----------------------------------------------------------------------\n // Prompt cycling (teaser mode)\n // -----------------------------------------------------------------------\n\n /** Start cycling through prompts with typewriter animation. */\n start(): void {\n if (this.cycling) return\n this.cycling = true\n this.promptIndex = 0\n this.showNextPrompt()\n }\n\n /** Stop cycling and hide the bubble. */\n stop(): void {\n this.cycling = false\n this.clearTimers()\n this.hide()\n }\n\n private showNextPrompt(): void {\n if (!this.cycling) return\n\n const text = this.prompts[this.promptIndex % this.prompts.length]\n this.promptIndex++\n\n this.actionsEl.style.display = 'none'\n this.typewrite(text, () => {\n this.holdTimer = setTimeout(() => {\n this.fadeOutAndNext()\n }, HOLD_MS)\n })\n }\n\n private fadeOutAndNext(): void {\n this.currentAnim = springExit(this.el, {\n remove: false,\n preset: 'smooth',\n onComplete: () => {\n this.el.style.display = 'none'\n setTimeout(() => {\n if (this.cycling) this.showNextPrompt()\n }, CYCLE_PAUSE_MS)\n },\n })\n }\n\n // -----------------------------------------------------------------------\n // Typewriter\n // -----------------------------------------------------------------------\n\n private typewrite(text: string, onDone?: () => void): void {\n this.clearTimers()\n this.textEl.textContent = ''\n\n // Show the bubble\n this.el.style.display = 'block'\n this.currentAnim = springEnter(this.el, { preset: 'snappy' })\n\n let i = 0\n const tick = () => {\n if (i < text.length) {\n this.textEl.textContent = text.slice(0, ++i)\n this.typeTimer = setTimeout(tick, TYPE_SPEED_MS)\n } else {\n onDone?.()\n }\n }\n this.typeTimer = setTimeout(tick, TYPE_SPEED_MS)\n }\n\n // -----------------------------------------------------------------------\n // Static messages (e.g. \"Connecting...\")\n // -----------------------------------------------------------------------\n\n /** Show a static message (no cycling, no typewriter). */\n showStatic(text: string): void {\n this.clearTimers()\n this.cycling = false\n this.actionsEl.style.display = 'none'\n this.textEl.textContent = text\n\n this.el.style.display = 'block'\n this.currentAnim = springEnter(this.el, { preset: 'snappy' })\n }\n\n /** Hide a static message. */\n hideStatic(): void {\n this.hide()\n }\n\n // -----------------------------------------------------------------------\n // Suggestion messages (with accept/dismiss buttons)\n // -----------------------------------------------------------------------\n\n /** Show a VLM suggestion with action buttons. */\n showSuggestion(message: string): void {\n this.clearTimers()\n this.cycling = false\n this.textEl.textContent = ''\n\n // Build action buttons\n this.actionsEl.innerHTML = ''\n const acceptBtn = createGlassButton({\n label: 'Sure',\n variant: 'accent',\n size: 'sm',\n icon: '\\u2713',\n onClick: () => {\n this.onAccept?.()\n this.hide()\n },\n })\n const dismissBtn = createGlassButton({\n label: 'Not now',\n variant: 'ghost',\n size: 'sm',\n icon: '\\u2715',\n onClick: () => {\n this.onDismiss?.()\n this.hide()\n },\n })\n this.actionsEl.appendChild(acceptBtn)\n this.actionsEl.appendChild(dismissBtn)\n this.actionsEl.style.display = 'flex'\n\n // Typewrite the message\n this.el.style.display = 'block'\n this.currentAnim = springEnter(this.el, { preset: 'snappy' })\n\n let i = 0\n const tick = () => {\n if (i < message.length) {\n this.textEl.textContent = message.slice(0, ++i)\n this.typeTimer = setTimeout(tick, TYPE_SPEED_MS)\n }\n }\n this.typeTimer = setTimeout(tick, TYPE_SPEED_MS)\n }\n\n // -----------------------------------------------------------------------\n // Visibility\n // -----------------------------------------------------------------------\n\n private hide(): void {\n this.currentAnim?.stop()\n if (this.el.style.display === 'none') return\n\n this.currentAnim = springExit(this.el, {\n remove: false,\n preset: 'smooth',\n onComplete: () => {\n this.el.style.display = 'none'\n },\n })\n }\n\n private clearTimers(): void {\n if (this.typeTimer) { clearTimeout(this.typeTimer); this.typeTimer = null }\n if (this.holdTimer) { clearTimeout(this.holdTimer); this.holdTimer = null }\n }\n\n destroy(): void {\n this.currentAnim?.stop()\n this.clearTimers()\n this.el.remove()\n }\n}\n","/**\n * GlassChatPill — Persistent floating copilot pill with progressive disclosure.\n *\n * States:\n * 1. Hidden — not mounted / display:none\n * 2. Ambient — small circle with static avatar photo (no text)\n * 3. Named — avatar + staff name (shown after card has been seen)\n * 4. Suggestion — avatar video plays, suggestion text + \"Let's talk\" + dismiss\n * 5. Connecting — avatar photo + \"Connecting...\" text\n *\n * Transitions:\n * t=0 → hidden (clean page load)\n * t=5s → ambient (small avatar circle fades in)\n * card seen → named (avatar + name)\n * VLM msg → suggestion (video plays, text expands, avatar pulses)\n * dismiss → named (reverts)\n * click CTA → connecting\n * video rdy → hidden\n * conv end → named (if card not visible) or hidden (if card visible)\n */\n\nimport { createGlassPanel, createGlassButton, glassText } from '../glass'\nimport { springEnter, springExit, type SpringAnimation } from '../spring'\nimport { injectTokens, tokens } from '../tokens'\nimport { autoDetectAndApply } from '../themeDetector'\n\nexport type PillState = 'hidden' | 'ambient' | 'named' | 'suggestion' | 'connecting'\n\nconst PULSE_KEYFRAMES = `\n@keyframes hs-pill-pulse {\n 0%, 100% { box-shadow: 0 0 0 0 var(--hs-accent-glow); }\n 50% { box-shadow: 0 0 14px 5px var(--hs-accent-glow); }\n}\n`\n\nexport class GlassChatPill {\n private el: HTMLDivElement | null = null\n private avatarWrap: HTMLDivElement | null = null\n private avatarImg: HTMLImageElement | null = null\n private avatarVideo: HTMLVideoElement | null = null\n private nameEl: HTMLSpanElement | null = null\n private suggestionArea: HTMLDivElement | null = null\n private suggestionText: HTMLSpanElement | null = null\n private currentAnim: SpringAnimation | null = null\n private _state: PillState = 'hidden'\n private pulseStyleInjected = false\n private avatarUrl: string | null = null\n private videoUrl: string | null = null\n private staffName = ''\n\n // Callbacks\n onClick: (() => void) | null = null\n onSuggestionAccept: (() => void) | null = null\n onSuggestionDismiss: (() => void) | null = null\n\n /** Build the pill DOM (once). Must call a transition method to make it visible. */\n init(avatarUrl: string | null, videoUrl: string | null, staffName: string): void {\n if (this.el) return\n injectTokens()\n\n this.avatarUrl = avatarUrl\n this.videoUrl = videoUrl\n this.staffName = staffName\n\n this.el = createGlassPanel({\n radius: 'pill',\n elevation: 'elevated',\n interactive: true,\n className: 'hs-chat-pill',\n }) as HTMLDivElement\n\n Object.assign(this.el.style, {\n position: 'fixed',\n bottom: 'var(--hs-space-5)',\n left: '0',\n right: '0',\n margin: '0 auto',\n width: 'fit-content',\n maxWidth: 'min(90vw, 600px)',\n display: 'none',\n alignItems: 'center',\n gap: '0px',\n padding: '5px',\n zIndex: tokens.zControls,\n cursor: 'pointer',\n userSelect: 'none',\n opacity: '0',\n boxShadow: '0 4px 24px rgba(0, 0, 0, 0.18)',\n transition: 'gap 0.3s ease, padding 0.3s ease, box-shadow 0.2s ease',\n overflow: 'hidden',\n })\n\n autoDetectAndApply(this.el)\n\n // Hover effect\n this.el.addEventListener('mouseenter', () => {\n if (this.el) this.el.style.boxShadow = '0 6px 32px rgba(0, 0, 0, 0.24)'\n })\n this.el.addEventListener('mouseleave', () => {\n if (this.el) this.el.style.boxShadow = '0 4px 24px rgba(0, 0, 0, 0.18)'\n })\n\n // --- Avatar wrapper (holds both photo and video) ---\n this.avatarWrap = document.createElement('div')\n Object.assign(this.avatarWrap.style, {\n width: '36px',\n height: '36px',\n borderRadius: '50%',\n overflow: 'hidden',\n flexShrink: '0',\n position: 'relative',\n border: '1.5px solid var(--hs-glass-border)',\n transition: 'box-shadow 0.3s ease, width 0.3s ease, height 0.3s ease',\n })\n\n // Static avatar image\n if (avatarUrl) {\n this.avatarImg = document.createElement('img')\n this.avatarImg.src = avatarUrl\n this.avatarImg.alt = staffName\n Object.assign(this.avatarImg.style, {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n })\n this.avatarWrap.appendChild(this.avatarImg)\n } else {\n // Fallback circle\n const circle = document.createElement('div')\n Object.assign(circle.style, {\n width: '100%',\n height: '100%',\n background: 'var(--hs-accent)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: 'var(--hs-text-sm)',\n fontWeight: 'var(--hs-weight-semibold)',\n color: 'var(--hs-accent-text)',\n })\n circle.textContent = staffName.charAt(0).toUpperCase()\n this.avatarWrap.appendChild(circle)\n }\n\n // Video element (hidden until suggestion, plays idle video loop)\n if (videoUrl) {\n this.avatarVideo = document.createElement('video')\n this.avatarVideo.src = videoUrl\n this.avatarVideo.muted = true\n this.avatarVideo.loop = true\n this.avatarVideo.playsInline = true\n this.avatarVideo.setAttribute('playsinline', '')\n Object.assign(this.avatarVideo.style, {\n position: 'absolute',\n inset: '0',\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'none',\n })\n this.avatarWrap.appendChild(this.avatarVideo)\n }\n\n this.el.appendChild(this.avatarWrap)\n\n // --- Name label (hidden in ambient state) ---\n this.nameEl = document.createElement('span')\n glassText(this.nameEl, 'primary', 'base', 'medium')\n this.nameEl.textContent = staffName\n Object.assign(this.nameEl.style, {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n maxWidth: '0',\n opacity: '0',\n transition: 'max-width 0.3s ease, opacity 0.25s ease, margin 0.3s ease',\n marginLeft: '0',\n })\n this.el.appendChild(this.nameEl)\n\n // --- Suggestion area (hidden until suggestion) ---\n this.suggestionArea = document.createElement('div')\n Object.assign(this.suggestionArea.style, {\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--hs-space-2)',\n maxWidth: '0',\n opacity: '0',\n overflow: 'hidden',\n transition: 'max-width 0.35s ease, opacity 0.25s ease, margin 0.3s ease',\n marginLeft: '0',\n })\n\n // Separator\n const sep = document.createElement('span')\n Object.assign(sep.style, {\n width: '1px',\n height: '20px',\n background: 'var(--hs-divider)',\n flexShrink: '0',\n })\n this.suggestionArea.appendChild(sep)\n\n // Suggestion text\n this.suggestionText = document.createElement('span')\n glassText(this.suggestionText, 'secondary', 'sm', 'normal')\n Object.assign(this.suggestionText.style, {\n whiteSpace: 'normal',\n lineHeight: '1.4',\n display: '-webkit-box',\n WebkitLineClamp: '2',\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n })\n this.suggestionArea.appendChild(this.suggestionText)\n\n // \"Let's talk\" CTA\n const ctaBtn = createGlassButton({\n label: \"Let's talk\",\n variant: 'accent',\n size: 'sm',\n onClick: (e) => {\n e.stopPropagation()\n this.onSuggestionAccept?.()\n },\n })\n ctaBtn.style.flexShrink = '0'\n this.suggestionArea.appendChild(ctaBtn)\n\n // Dismiss X\n const dismissBtn = document.createElement('button')\n dismissBtn.textContent = '\\u2715'\n Object.assign(dismissBtn.style, {\n background: 'none',\n border: 'none',\n color: 'var(--hs-text-tertiary)',\n fontSize: '12px',\n cursor: 'pointer',\n padding: '4px',\n flexShrink: '0',\n lineHeight: '1',\n transition: 'color 0.15s ease',\n })\n dismissBtn.addEventListener('mouseenter', () => { dismissBtn.style.color = 'var(--hs-text-primary)' })\n dismissBtn.addEventListener('mouseleave', () => { dismissBtn.style.color = 'var(--hs-text-tertiary)' })\n dismissBtn.addEventListener('click', (e) => {\n e.stopPropagation()\n this.onSuggestionDismiss?.()\n this.clearSuggestion()\n })\n this.suggestionArea.appendChild(dismissBtn)\n\n this.el.appendChild(this.suggestionArea)\n\n // Click on pill body → start conversation\n this.el.addEventListener('click', (e) => {\n if (!(e.target as HTMLElement).closest('button')) {\n this.onClick?.()\n }\n })\n\n document.body.appendChild(this.el)\n }\n\n // -----------------------------------------------------------------------\n // State transitions\n // -----------------------------------------------------------------------\n\n /** Show as small avatar circle only (ambient presence). */\n showAmbient(): void {\n if (!this.el || this._state === 'ambient') return\n this._state = 'ambient'\n\n // Collapse name and suggestion\n this.collapseName()\n this.collapseSuggestion()\n this.stopAvatarVideo()\n\n this.el.style.display = 'flex'\n this.el.style.gap = '0px'\n this.el.style.padding = '5px'\n\n this.currentAnim?.stop()\n this.currentAnim = springEnter(this.el, {\n preset: 'gentle',\n from: { opacity: 0, scale: 0.8, y: 12 },\n })\n }\n\n /** Show avatar + name (after card has been seen). */\n showNamed(): void {\n if (!this.el) return\n if (this._state === 'named') return\n const wasHidden = this._state === 'hidden'\n this._state = 'named'\n\n this.collapseSuggestion()\n this.stopAvatarVideo()\n this.expandName()\n\n this.el.style.display = 'flex'\n this.el.style.gap = 'var(--hs-space-3)'\n this.el.style.padding = '8px 20px 8px 8px'\n\n if (wasHidden) {\n this.currentAnim?.stop()\n this.el.style.opacity = '0'\n this.currentAnim = springEnter(this.el, {\n preset: 'bouncy',\n from: { opacity: 0, scale: 0.85, y: 16 },\n })\n }\n }\n\n /** Show suggestion (avatar video plays, text + CTA expand). */\n showSuggestion(message: string): void {\n if (!this.el || !this.suggestionText) return\n const wasHidden = this._state === 'hidden'\n this._state = 'suggestion'\n\n // Ensure pill is visible — hide name to make room for suggestion text\n this.el.style.display = 'flex'\n this.el.style.gap = 'var(--hs-space-3)'\n this.el.style.padding = '10px 16px 10px 10px'\n this.el.style.borderRadius = 'var(--hs-radius-lg)' // rounded rect, not capsule\n this.collapseName()\n\n if (wasHidden) {\n this.currentAnim?.stop()\n this.el.style.opacity = '0'\n this.currentAnim = springEnter(this.el, {\n preset: 'bouncy',\n from: { opacity: 0, scale: 0.9, y: 12 },\n })\n }\n\n // Start avatar video (animated idle loop)\n this.startAvatarVideo()\n this.startAvatarPulse()\n\n // Expand suggestion text\n this.suggestionText.textContent = message\n this.suggestionText.title = message\n requestAnimationFrame(() => {\n if (this.suggestionArea) {\n this.suggestionArea.style.maxWidth = '500px'\n this.suggestionArea.style.opacity = '1'\n this.suggestionArea.style.marginLeft = 'var(--hs-space-2)'\n }\n })\n }\n\n /** Clear suggestion, revert to named state. */\n clearSuggestion(): void {\n if (!this.el) return\n this._state = 'named'\n this.stopAvatarPulse()\n this.stopAvatarVideo()\n this.collapseSuggestion()\n this.expandName()\n this.el.style.padding = '8px 20px 8px 8px'\n this.el.style.borderRadius = 'var(--hs-radius-pill)' // back to capsule\n }\n\n /** Show \"Connecting...\" state. */\n showConnecting(): void {\n if (!this.el || !this.nameEl) return\n this._state = 'connecting'\n\n this.stopAvatarPulse()\n this.stopAvatarVideo()\n this.collapseSuggestion()\n this.expandName()\n\n this.nameEl.textContent = 'Connecting...'\n this.nameEl.style.opacity = '0.6'\n\n this.el.style.display = 'flex'\n this.el.style.gap = 'var(--hs-space-3)'\n this.el.style.padding = '8px 20px 8px 8px'\n\n if (this.el.style.opacity === '0') {\n this.currentAnim?.stop()\n this.currentAnim = springEnter(this.el, {\n preset: 'snappy',\n from: { opacity: 0, scale: 0.9, y: 8 },\n })\n }\n }\n\n /** Restore name after connecting (e.g. if connection fails). */\n restoreName(): void {\n if (!this.nameEl) return\n this.nameEl.textContent = this.staffName\n this.nameEl.style.opacity = '1'\n // Don't set _state here — showNamed() needs to detect the transition from hidden\n }\n\n /** Hide the pill with animation. */\n hide(): void {\n this.currentAnim?.stop()\n if (!this.el) return\n this._state = 'hidden'\n\n this.stopAvatarPulse()\n this.stopAvatarVideo()\n\n const el = this.el\n this.currentAnim = springExit(el, {\n remove: false,\n preset: 'smooth',\n to: { opacity: 0, scale: 0.9, y: 12 },\n onComplete: () => { el.style.display = 'none' },\n })\n }\n\n /** Remove from DOM entirely. */\n destroy(): void {\n this.currentAnim?.stop()\n this.stopAvatarPulse()\n this.stopAvatarVideo()\n this.el?.remove()\n this.el = null\n this._state = 'hidden'\n }\n\n get state(): PillState { return this._state }\n get isVisible(): boolean { return this._state !== 'hidden' }\n\n // -----------------------------------------------------------------------\n // Private — expand/collapse helpers\n // -----------------------------------------------------------------------\n\n private expandName(): void {\n if (!this.nameEl) return\n this.nameEl.textContent = this.staffName\n this.nameEl.style.opacity = '1'\n this.nameEl.style.maxWidth = '150px'\n this.nameEl.style.marginLeft = 'var(--hs-space-2)'\n }\n\n private collapseName(): void {\n if (!this.nameEl) return\n this.nameEl.style.maxWidth = '0'\n this.nameEl.style.opacity = '0'\n this.nameEl.style.marginLeft = '0'\n }\n\n private collapseSuggestion(): void {\n if (!this.suggestionArea) return\n this.suggestionArea.style.maxWidth = '0'\n this.suggestionArea.style.opacity = '0'\n this.suggestionArea.style.marginLeft = '0'\n }\n\n // -----------------------------------------------------------------------\n // Private — avatar video + pulse\n // -----------------------------------------------------------------------\n\n private startAvatarVideo(): void {\n if (!this.avatarVideo || !this.avatarImg) return\n this.avatarVideo.style.display = 'block'\n this.avatarVideo.currentTime = 0\n this.avatarVideo.play().catch(() => {})\n this.avatarImg.style.opacity = '0'\n }\n\n private stopAvatarVideo(): void {\n if (!this.avatarVideo || !this.avatarImg) return\n this.avatarVideo.pause()\n this.avatarVideo.style.display = 'none'\n this.avatarImg.style.opacity = '1'\n }\n\n private startAvatarPulse(): void {\n if (!this.avatarWrap) return\n this.injectPulseStyle()\n this.avatarWrap.style.animation = 'hs-pill-pulse 1.5s ease-in-out infinite'\n }\n\n private stopAvatarPulse(): void {\n if (!this.avatarWrap) return\n this.avatarWrap.style.animation = ''\n }\n\n private injectPulseStyle(): void {\n if (this.pulseStyleInjected) return\n this.pulseStyleInjected = true\n const style = document.createElement('style')\n style.textContent = PULSE_KEYFRAMES\n document.head.appendChild(style)\n }\n}\n","/**\n * OverlayCard — Liquid glass overlay cards for text, images, and bullet lists.\n *\n * Positioned above the avatar, stacked with spacing.\n * Auto-dismiss after timeout. Spring-animated enter/exit.\n */\n\nimport { createGlassPanel, glassText, createGlassButton } from '../glass'\nimport { springEnter, springExit, type SpringAnimation } from '../spring'\nimport { injectTokens, tokens } from '../tokens'\n\n/** Auto-dismiss after 15 seconds. */\nconst AUTO_DISMISS_MS = 15_000\n/** Max width of overlay cards. */\nconst MAX_WIDTH = 320\n\ninterface ActiveCard {\n el: HTMLElement\n timer: ReturnType<typeof setTimeout>\n anim: SpringAnimation | null\n}\n\nexport class GlassOverlayRenderer {\n private cards: ActiveCard[] = []\n private anchor: HTMLElement | null = null\n\n /** Set the anchor element that cards stack above. */\n setAnchor(el: HTMLElement): void {\n this.anchor = el\n }\n\n /** Show a text card. */\n showTextCard(title: string, body: string): void {\n const card = this.createCard()\n\n const titleEl = document.createElement('div')\n glassText(titleEl, 'primary', 'base', 'semibold')\n titleEl.textContent = title\n titleEl.style.marginBottom = 'var(--hs-space-2)'\n card.el.appendChild(titleEl)\n\n const bodyEl = document.createElement('div')\n glassText(bodyEl, 'secondary', 'sm', 'normal')\n bodyEl.textContent = body\n bodyEl.style.whiteSpace = 'pre-wrap'\n card.el.appendChild(bodyEl)\n\n this.mountCard(card)\n }\n\n /** Show an image card. */\n showImageCard(imageUrl: string, caption?: string): void {\n const card = this.createCard()\n\n const img = document.createElement('img')\n img.src = imageUrl\n img.alt = caption || ''\n Object.assign(img.style, {\n width: '100%',\n borderRadius: 'var(--hs-radius-sm)',\n display: 'block',\n marginBottom: caption ? 'var(--hs-space-2)' : '0',\n })\n card.el.appendChild(img)\n\n if (caption) {\n const cap = document.createElement('div')\n glassText(cap, 'secondary', 'sm', 'normal')\n cap.textContent = caption\n card.el.appendChild(cap)\n }\n\n this.mountCard(card)\n }\n\n /** Show a bullet list card. */\n showBulletList(title: string, items: string[]): void {\n const card = this.createCard()\n\n const titleEl = document.createElement('div')\n glassText(titleEl, 'primary', 'base', 'semibold')\n titleEl.textContent = title\n titleEl.style.marginBottom = 'var(--hs-space-2)'\n card.el.appendChild(titleEl)\n\n const list = document.createElement('ul')\n Object.assign(list.style, {\n margin: '0',\n paddingLeft: 'var(--hs-space-5)',\n listStyleType: 'none',\n })\n\n items.forEach(text => {\n const li = document.createElement('li')\n Object.assign(li.style, {\n marginBottom: 'var(--hs-space-1)',\n position: 'relative',\n paddingLeft: '0',\n })\n\n // Custom bullet (accent colored dot)\n const bullet = document.createElement('span')\n Object.assign(bullet.style, {\n position: 'absolute',\n left: '-16px',\n top: '6px',\n width: '5px',\n height: '5px',\n borderRadius: '50%',\n background: 'var(--hs-accent)',\n })\n li.appendChild(bullet)\n\n const span = document.createElement('span')\n glassText(span, 'secondary', 'sm', 'normal')\n span.textContent = text\n li.appendChild(span)\n\n list.appendChild(li)\n })\n\n card.el.appendChild(list)\n this.mountCard(card)\n }\n\n /** Dismiss all visible cards. */\n dismissAll(): void {\n this.cards.forEach(card => this.removeCard(card))\n this.cards = []\n }\n\n // -----------------------------------------------------------------------\n // Internal\n // -----------------------------------------------------------------------\n\n private createCard(): ActiveCard {\n injectTokens()\n\n const el = createGlassPanel({\n radius: 'md',\n elevation: 'elevated',\n className: 'hs-overlay-card',\n })\n\n Object.assign(el.style, {\n position: 'fixed',\n maxWidth: `${Math.min(MAX_WIDTH, window.innerWidth - 32)}px`,\n padding: 'var(--hs-space-4)',\n zIndex: tokens.zOverlay,\n opacity: '0',\n pointerEvents: 'auto',\n })\n\n // Close button\n const closeBtn = createGlassButton({\n label: '\\u2715',\n variant: 'ghost',\n size: 'sm',\n onClick: () => this.dismiss(card),\n })\n Object.assign(closeBtn.style, {\n position: 'absolute',\n top: 'var(--hs-space-2)',\n right: 'var(--hs-space-2)',\n minWidth: '0',\n padding: '2px 6px',\n fontSize: 'var(--hs-text-xs)',\n })\n el.appendChild(closeBtn)\n\n const timer = setTimeout(() => this.dismiss(card), AUTO_DISMISS_MS)\n const card: ActiveCard = { el, timer, anim: null }\n return card\n }\n\n private mountCard(card: ActiveCard): void {\n document.body.appendChild(card.el)\n this.positionCard(card.el, this.cards.length)\n this.cards.push(card)\n\n card.anim = springEnter(card.el, { preset: 'snappy' })\n }\n\n private positionCard(el: HTMLElement, stackIndex: number): void {\n // Stack above the avatar area, bottom-center\n const bottomOffset = 500 + stackIndex * 10 // base offset + stack spacing\n const cardHeight = el.offsetHeight || 80\n\n Object.assign(el.style, {\n bottom: `${bottomOffset + stackIndex * (cardHeight + 8)}px`,\n left: '50%',\n transform: 'translateX(-50%)',\n })\n }\n\n private dismiss(card: ActiveCard): void {\n const idx = this.cards.indexOf(card)\n if (idx >= 0) this.cards.splice(idx, 1)\n this.removeCard(card)\n }\n\n private removeCard(card: ActiveCard): void {\n clearTimeout(card.timer)\n card.anim?.stop()\n card.anim = springExit(card.el, { remove: true, preset: 'smooth' })\n }\n}\n","/**\n * GlassControls — Liquid glass minimize/close/mute control bar.\n *\n * Fixed bottom-center, sits below the avatar during active conversation.\n * Spring-animated entrance. Glassmorphic icon buttons.\n */\n\nimport { createGlassPanel, createGlassButton } from '../glass'\nimport { springEnter, springExit, type SpringAnimation } from '../spring'\nimport { injectTokens, tokens } from '../tokens'\nimport { autoDetectAndApply } from '../themeDetector'\n\nexport class GlassControls {\n private el: HTMLDivElement | null = null\n private currentAnim: SpringAnimation | null = null\n private minimized = false\n\n onMinimize: (() => void) | null = null\n onRestore: (() => void) | null = null\n onClose: (() => void) | null = null\n\n show(): void {\n injectTokens()\n this.hide()\n\n this.el = createGlassPanel({\n radius: 'pill',\n elevation: 'elevated',\n className: 'hs-controls',\n }) as HTMLDivElement\n\n Object.assign(this.el.style, {\n position: 'fixed',\n bottom: 'var(--hs-space-3)',\n left: '0',\n right: '0',\n margin: '0 auto',\n width: 'fit-content',\n display: 'flex',\n alignItems: 'center',\n gap: 'var(--hs-space-1)',\n padding: '4px',\n zIndex: tokens.zControls,\n opacity: '0',\n })\n\n autoDetectAndApply(this.el)\n\n // Minimize button\n const minBtn = createGlassButton({\n label: this.minimized ? '\\u25B2' : '\\u2014', // ▲ or —\n variant: 'ghost',\n size: 'sm',\n onClick: () => {\n if (this.minimized) {\n this.minimized = false\n minBtn.textContent = '\\u2014'\n this.onRestore?.()\n } else {\n this.minimized = true\n minBtn.textContent = '\\u25B2'\n this.onMinimize?.()\n }\n },\n })\n Object.assign(minBtn.style, {\n minWidth: '32px',\n height: '32px',\n padding: '0',\n fontSize: '14px',\n borderRadius: '50%',\n })\n this.el.appendChild(minBtn)\n\n // Close button\n const closeBtn = createGlassButton({\n label: '\\u2715',\n variant: 'ghost',\n size: 'sm',\n onClick: () => this.onClose?.(),\n })\n Object.assign(closeBtn.style, {\n minWidth: '32px',\n height: '32px',\n padding: '0',\n fontSize: '14px',\n borderRadius: '50%',\n })\n this.el.appendChild(closeBtn)\n\n document.body.appendChild(this.el)\n\n this.currentAnim = springEnter(this.el, {\n preset: 'snappy',\n from: { opacity: 0, scale: 0.9, y: 8 },\n })\n }\n\n hide(): void {\n this.currentAnim?.stop()\n if (!this.el) return\n\n const el = this.el\n this.el = null\n this.minimized = false\n\n this.currentAnim = springExit(el, { remove: true, preset: 'smooth' })\n }\n}\n","/**\n * GlassConfirmPrompt — Liquid glass confirmation dialog for page actions.\n *\n * \"Allow the agent to scroll to the pricing section?\"\n * [Yes] [No]\n *\n * Auto-declines after 10 seconds. Spring-animated.\n */\n\nimport { createGlassPanel, createGlassButton, glassText } from '../glass'\nimport { springEnter, springExit, type SpringAnimation } from '../spring'\nimport { injectTokens, tokens } from '../tokens'\nimport { autoDetectAndApply } from '../themeDetector'\n\nconst AUTO_DECLINE_MS = 10_000\n\nexport class GlassConfirmPrompt {\n private el: HTMLDivElement | null = null\n private currentAnim: SpringAnimation | null = null\n private autoTimer: ReturnType<typeof setTimeout> | null = null\n private resolver: ((result: boolean) => void) | null = null\n\n /** Show a confirmation prompt. Returns a promise that resolves true/false. */\n ask(description: string): Promise<boolean> {\n injectTokens()\n this.dismiss()\n\n return new Promise<boolean>((resolve) => {\n this.resolver = resolve\n\n this.el = createGlassPanel({\n radius: 'lg',\n elevation: 'elevated',\n role: 'alertdialog',\n className: 'hs-confirm-prompt',\n }) as HTMLDivElement\n\n Object.assign(this.el.style, {\n position: 'fixed',\n bottom: '320px',\n left: '50%',\n transform: 'translateX(-50%)',\n padding: 'var(--hs-space-5)',\n maxWidth: '340px',\n minWidth: '240px',\n zIndex: tokens.zTop,\n opacity: '0',\n textAlign: 'center',\n })\n\n this.el.setAttribute('aria-label', 'Action confirmation')\n autoDetectAndApply(this.el)\n\n // Description\n const desc = document.createElement('p')\n glassText(desc, 'primary', 'base', 'normal')\n desc.textContent = description\n desc.style.marginBottom = 'var(--hs-space-4)'\n this.el.appendChild(desc)\n\n // Buttons\n const actions = document.createElement('div')\n Object.assign(actions.style, {\n display: 'flex',\n gap: 'var(--hs-space-3)',\n justifyContent: 'center',\n })\n\n actions.appendChild(createGlassButton({\n label: 'Yes',\n variant: 'accent',\n size: 'md',\n onClick: () => this.resolve(true),\n }))\n\n actions.appendChild(createGlassButton({\n label: 'No',\n variant: 'default',\n size: 'md',\n onClick: () => this.resolve(false),\n }))\n\n this.el.appendChild(actions)\n document.body.appendChild(this.el)\n\n this.currentAnim = springEnter(this.el, { preset: 'snappy' })\n\n // Auto-decline\n this.autoTimer = setTimeout(() => this.resolve(false), AUTO_DECLINE_MS)\n })\n }\n\n /** Dismiss any active prompt (resolves as declined). */\n dismiss(): void {\n if (this.resolver) {\n this.resolver(false)\n this.resolver = null\n }\n this.cleanup()\n }\n\n private resolve(result: boolean): void {\n this.resolver?.(result)\n this.resolver = null\n this.cleanup()\n }\n\n private cleanup(): void {\n if (this.autoTimer) { clearTimeout(this.autoTimer); this.autoTimer = null }\n this.currentAnim?.stop()\n\n if (this.el) {\n const el = this.el\n this.el = null\n this.currentAnim = springExit(el, { remove: true, preset: 'smooth' })\n }\n }\n}\n","/**\n * StageBackdrop — Liquid glass container for the bottom-center conversation area.\n *\n * The video sits inside a translucent glass frame with internal padding,\n * showing the glass border and backdrop blur around the avatar video.\n * Rounded top corners, flush with viewport bottom.\n */\n\nimport { createGlassPanel } from '../glass'\nimport { springEnter, springExit, type SpringAnimation } from '../spring'\nimport { injectTokens, tokens } from '../tokens'\nimport { autoDetectAndApply } from '../themeDetector'\n\nconst STAGE_WIDTH = 520\nconst STAGE_HEIGHT = 340\nconst VIDEO_PADDING = 12\n\nexport class GlassStageBackdrop {\n readonly el: HTMLDivElement\n private contentArea: HTMLDivElement\n private currentAnim: SpringAnimation | null = null\n\n constructor() {\n injectTokens()\n\n this.el = createGlassPanel({\n radius: 'lg',\n elevation: 'elevated',\n className: 'hs-stage-backdrop',\n }) as HTMLDivElement\n\n Object.assign(this.el.style, {\n position: 'fixed',\n bottom: '0',\n left: '0',\n right: '0',\n margin: '0 auto',\n width: `${STAGE_WIDTH}px`,\n height: `${STAGE_HEIGHT}px`,\n zIndex: tokens.zOverlay,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n opacity: '0',\n padding: `${VIDEO_PADDING}px ${VIDEO_PADDING}px 0 ${VIDEO_PADDING}px`,\n // Round only top corners — bottom sits flush with viewport edge\n borderRadius: 'var(--hs-radius-lg) var(--hs-radius-lg) 0 0',\n borderBottom: 'none',\n })\n\n autoDetectAndApply(this.el)\n\n // Content area — video sits inside with rounded corners\n this.contentArea = document.createElement('div')\n Object.assign(this.contentArea.style, {\n flex: '1',\n position: 'relative',\n overflow: 'hidden',\n borderRadius: 'var(--hs-radius-md) var(--hs-radius-md) 0 0',\n })\n this.el.appendChild(this.contentArea)\n }\n\n /** Append a child (Anam video element) into the stage content area. */\n appendContent(child: HTMLElement): void {\n Object.assign(child.style, {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n borderRadius: 'inherit',\n })\n this.contentArea.appendChild(child)\n }\n\n /** Mount the stage to the DOM with spring animation. */\n show(): void {\n document.body.appendChild(this.el)\n this.currentAnim = springEnter(this.el, {\n preset: 'gentle',\n from: { opacity: 0, scale: 0.95, y: 24 },\n })\n }\n\n /** Spring-animated exit, removes from DOM. */\n hide(): void {\n this.currentAnim?.stop()\n this.currentAnim = springExit(this.el, {\n remove: true,\n preset: 'smooth',\n to: { opacity: 0, scale: 0.95, y: 16 },\n })\n }\n\n get contentElement(): HTMLDivElement {\n return this.contentArea\n }\n\n destroy(): void {\n this.currentAnim?.stop()\n this.el.remove()\n }\n}\n","/**\n * HighlightOverlay — Liquid glass element highlight effect.\n *\n * Draws a glowing border around a target DOM element to draw attention.\n * Uses accent color glow instead of hardcoded blue.\n */\n\nimport { injectTokens, tokens } from '../tokens'\nimport { springOpacity, type SpringAnimation } from '../spring'\n\nconst PULSE_KEYFRAMES = `\n@keyframes hs-highlight-glow {\n 0%, 100% { box-shadow: 0 0 8px var(--hs-accent-glow), inset 0 0 4px var(--hs-accent-glow); }\n 50% { box-shadow: 0 0 20px var(--hs-accent-glow), inset 0 0 8px var(--hs-accent-glow); }\n}\n`\n\nlet pulseStyleInjected = false\n\ninterface ActiveHighlight {\n overlay: HTMLDivElement\n timer: ReturnType<typeof setTimeout>\n scrollHandler: () => void\n anim: SpringAnimation | null\n}\n\nexport class GlassHighlightRenderer {\n private highlights: ActiveHighlight[] = []\n\n /** Highlight a DOM element with a glowing border. */\n highlight(el: HTMLElement, durationMs = 3000): void {\n injectTokens()\n this.injectPulseStyle()\n\n const overlay = document.createElement('div')\n overlay.className = 'hs-highlight-overlay'\n overlay.setAttribute('data-hs-theme', 'dark')\n\n const updatePosition = () => {\n const rect = el.getBoundingClientRect()\n Object.assign(overlay.style, {\n position: 'fixed',\n top: `${rect.top - 3}px`,\n left: `${rect.left - 3}px`,\n width: `${rect.width + 6}px`,\n height: `${rect.height + 6}px`,\n border: '2px solid var(--hs-accent)',\n borderRadius: 'var(--hs-radius-sm)',\n animation: 'hs-highlight-glow 1.5s ease-in-out infinite',\n pointerEvents: 'none',\n zIndex: tokens.zOverlay,\n boxSizing: 'border-box',\n })\n }\n\n updatePosition()\n document.body.appendChild(overlay)\n\n const scrollHandler = () => updatePosition()\n window.addEventListener('scroll', scrollHandler, { passive: true })\n\n const timer = setTimeout(() => this.removeHighlight(entry), durationMs)\n const entry: ActiveHighlight = { overlay, timer, scrollHandler, anim: null }\n this.highlights.push(entry)\n }\n\n /** Remove all highlights. */\n clearAll(): void {\n this.highlights.forEach(h => this.removeHighlight(h))\n this.highlights = []\n }\n\n private removeHighlight(entry: ActiveHighlight): void {\n clearTimeout(entry.timer)\n window.removeEventListener('scroll', entry.scrollHandler)\n\n entry.anim = springOpacity(entry.overlay, 1, 0, 'smooth', () => {\n entry.overlay.remove()\n })\n\n const idx = this.highlights.indexOf(entry)\n if (idx >= 0) this.highlights.splice(idx, 1)\n }\n\n private injectPulseStyle(): void {\n if (pulseStyleInjected) return\n pulseStyleInjected = true\n\n const style = document.createElement('style')\n style.textContent = PULSE_KEYFRAMES\n document.head.appendChild(style)\n }\n}\n","import { type WidgetConfig } from './config'\nimport { WidgetStage } from './rendering/stage'\nimport { AvatarRenderer } from './rendering/avatarRenderer'\nimport { fetchWidgetSession, type WidgetSessionResponse } from './api/backend'\nimport { RealtimeSession, type RealtimeTool } from './engine/realtimeSession'\nimport { AudioForwarder } from './engine/audioForwarder'\nimport { AnamSession } from './engine/anamSession'\nimport { DomAnalyzer } from './engine/domAnalyzer'\nimport { ToolHandler } from './engine/toolHandler'\nimport { PageActions } from './actions/pageActions'\nimport { OverlayActions } from './actions/overlayActions'\nimport { ConversationLogger } from './api/logger'\nimport { RRWebRecorder } from './vision/rrwebRecorder'\nimport { VisionWSClient } from './vision/wsClient'\nimport { ActionExecutor } from './vision/actionExecutor'\n\n// Liquid Glass UI components\nimport {\n injectTokens,\n autoDetectAndApply,\n AvatarFrame,\n GlassSpeechBubble,\n GlassChatPill,\n GlassOverlayRenderer,\n GlassControls,\n GlassConfirmPrompt,\n GlassHighlightRenderer,\n GlassStageBackdrop,\n} from './ui'\n\ntype WidgetState = 'idle' | 'teasing' | 'connecting' | 'active' | 'minimized' | 'destroyed'\ntype AvatarState = 'idle' | 'listening' | 'thinking' | 'speaking'\n\n/** Delay after slide-in completes before the speech bubble appears. */\nconst BUBBLE_DELAY_MS = 800\n/** Max session duration (10 minutes). */\nconst MAX_DURATION_MS = 10 * 60 * 1000\n/** Warning before max duration (9 minutes). */\nconst MAX_DURATION_WARN_MS = 9 * 60 * 1000\n/** Inactivity threshold before prompting (60 seconds). */\nconst INACTIVITY_PROMPT_MS = 60 * 1000\n/** Inactivity threshold before auto-close (90 seconds total). */\nconst INACTIVITY_CLOSE_MS = 90 * 1000\n\n/** Tool definitions sent to the Realtime API. */\nconst WIDGET_TOOLS: RealtimeTool[] = [\n {\n type: 'function',\n name: 'page_action',\n description:\n 'Interact with the webpage the visitor is viewing. You can scroll to elements, highlight elements, click buttons/links, fill form fields, or read the page content. Describe what you want to do in natural language. Call this to understand the page, guide the visitor, or take actions on their behalf.',\n parameters: {\n type: 'object',\n properties: {\n instruction: {\n type: 'string',\n description:\n \"What to do on the page, e.g. 'scroll to pricing section', 'highlight the sign-up button', 'fill the email field with test@example.com', 'read the page to understand what it contains'\",\n },\n },\n required: ['instruction'],\n },\n },\n {\n type: 'function',\n name: 'show_text_card',\n description: 'Display a floating text card overlay near the avatar with additional information for the visitor. Use for key points, explanations, or summaries that benefit from visual display.',\n parameters: {\n type: 'object',\n properties: {\n title: { type: 'string', description: 'Card title' },\n body: { type: 'string', description: 'Card body text' },\n },\n required: ['title', 'body'],\n },\n },\n {\n type: 'function',\n name: 'show_image_card',\n description: 'Display a floating image card overlay with an optional caption.',\n parameters: {\n type: 'object',\n properties: {\n image_url: { type: 'string', description: 'URL of the image to display' },\n caption: { type: 'string', description: 'Optional caption below the image' },\n },\n required: ['image_url'],\n },\n },\n {\n type: 'function',\n name: 'show_bullet_list',\n description: 'Display a styled list of key points as a floating overlay card.',\n parameters: {\n type: 'object',\n properties: {\n title: { type: 'string', description: 'List title' },\n items: { type: 'array', items: { type: 'string' }, description: 'List items' },\n },\n required: ['title', 'items'],\n },\n },\n {\n type: 'function',\n name: 'dismiss_overlays',\n description: 'Dismiss all currently visible overlay cards.',\n parameters: { type: 'object', properties: {}, required: [] },\n },\n]\n\nexport class HolostaffWidget {\n private config: WidgetConfig\n private stage: WidgetStage | null = null\n private avatar: AvatarRenderer | null = null\n private state: WidgetState = 'idle'\n private avatarState: AvatarState = 'idle'\n private scrollHandler: (() => void) | null = null\n private idleVideoUrl: string | null = null\n private idleImageUrl: string | null = null\n private bubbleTimer: ReturnType<typeof setTimeout> | null = null\n\n // Conversation session\n private realtimeSession: RealtimeSession | null = null\n private audioForwarder: AudioForwarder | null = null\n private anamSession: AnamSession | null = null\n private sessionResponse: WidgetSessionResponse | null = null\n\n // Page actions (Issue 9) + overlays (Issue 10)\n private domAnalyzer: DomAnalyzer | null = null\n private toolHandler: ToolHandler | null = null\n\n // Timers (Issue 11)\n private maxDurationTimer: ReturnType<typeof setTimeout> | null = null\n private maxDurationWarnTimer: ReturnType<typeof setTimeout> | null = null\n private inactivityTimer: ReturnType<typeof setTimeout> | null = null\n private inactivityCloseTimer: ReturnType<typeof setTimeout> | null = null\n private sessionStartTime = 0\n\n // Conversation logging (Issue 12)\n private logger: ConversationLogger | null = null\n\n // Vision loop (v3) — observer is owned externally (Issue 26), presenter hooks into it\n private rrwebRecorder: RRWebRecorder | null = null\n private visionWs: VisionWSClient | null = null\n private externalObserver = false\n private actionExecutor: ActionExecutor | null = null\n private visionContext: string | null = null\n private staffDisplayName = 'Assistant'\n private staffAvatarUrl: string | null = null\n private hasHadConversation = false\n private visitorId: string\n private widgetPrompts: string[] | null\n\n // Liquid Glass UI components\n private avatarFrame: AvatarFrame | null = null\n private bubble: GlassSpeechBubble | null = null\n private chatPill: GlassChatPill | null = null\n private overlayRenderer: GlassOverlayRenderer | null = null\n private controls: GlassControls | null = null\n private confirmationPrompt: GlassConfirmPrompt | null = null\n private highlightRenderer: GlassHighlightRenderer | null = null\n private stageBackdrop: GlassStageBackdrop | null = null\n\n // Issue 24: Home Base ↔ Stage elements\n private stageEl: HTMLDivElement | null = null\n private homePlaceholder: HTMLDivElement | null = null\n private homeObserver: IntersectionObserver | null = null\n private homeVisible = true\n private homeEverSeen = false\n private pillProtected = false // skip observer hide for one cycle after conversation ends\n\n constructor(config: WidgetConfig, widgetPrompts?: string[] | null) {\n this.config = config\n this.widgetPrompts = widgetPrompts ?? null\n this.visitorId = this.getOrCreateVisitorId()\n }\n\n private paused = false\n\n /** Whether the widget is in inline embed mode. */\n get isInline(): boolean {\n return this.config.mode === 'inline' && !!this.config.container\n }\n\n /** The current inline container selector (for SPA route change comparison). */\n get activeContainer(): string | null {\n return this.config.container\n }\n\n async init(): Promise<void> {\n injectTokens()\n\n this.stage = new WidgetStage()\n await this.stage.init(this.config.mode, this.config.container)\n\n this.avatar = new AvatarRenderer(this.stage.stageWidth, this.stage.stageHeight)\n this.stage.app.stage.addChild(this.avatar.container)\n\n await this.loadIdleAsset()\n\n // Liquid Glass: avatar frame wraps the widget root\n this.avatarFrame = new AvatarFrame()\n if (this.stage.rootElement) {\n autoDetectAndApply(this.stage.rootElement)\n }\n\n // Liquid Glass: speech bubble (DOM element, positioned above widget root)\n this.bubble = new GlassSpeechBubble(this.widgetPrompts ?? undefined)\n this.bubble.onClick = () => this.onAvatarClick()\n if (this.stage.rootElement) {\n this.stage.rootElement.style.position = 'relative'\n this.stage.rootElement.appendChild(this.bubble.el)\n }\n\n this.avatar.setInteractive(() => this.onAvatarClick())\n\n // Persistent pill + viewport observer (inline mode) — must be before startVisionLoop\n // so the action executor can receive the pill reference\n if (this.isInline) {\n this.chatPill = new GlassChatPill()\n this.chatPill.init(this.staffAvatarUrl, this.idleVideoUrl, this.staffDisplayName)\n this.chatPill.onClick = () => this.onAvatarClick()\n\n // After 5s, show pill (avatar + name) if card is not visible\n setTimeout(() => {\n const isIdle = this.state === 'idle' || this.state === 'teasing'\n if (isIdle && !this.homeVisible && this.chatPill?.state === 'hidden') {\n this.chatPill.showNamed()\n }\n }, 5000)\n\n this.startHomeObserver()\n }\n\n this.setupTrigger()\n this.startVisionLoop()\n\n // Flush conversation log on page unload (e.g. user navigates away mid-conversation)\n window.addEventListener('beforeunload', () => {\n if (this.state === 'active' || this.state === 'connecting') {\n this.logger?.flush()\n }\n })\n\n console.log('[HolostaffWidget] Initialized', {\n staffId: this.config.staffId,\n trigger: this.config.trigger,\n visionEnabled: !!this.config.visionWsUrl,\n })\n }\n\n private async loadIdleAsset(): Promise<void> {\n if (!this.avatar || !this.stage) return\n if (this.idleVideoUrl) {\n try {\n if (this.isInline && this.stage.inlineTarget) {\n // Inline mode: render a glass card with video on top + label below\n const target = this.stage.inlineTarget\n\n // Ensure the target container is a positioning context\n target.style.position = 'relative'\n\n // Create the glass card wrapper — absolute positioned to fill container\n const card = document.createElement('div')\n card.className = 'hs-inline-card'\n card.setAttribute('data-hs-theme', 'dark')\n Object.assign(card.style, {\n position: 'absolute',\n inset: '0',\n display: 'flex',\n flexDirection: 'column',\n borderRadius: 'var(--hs-radius-lg)',\n overflow: 'hidden',\n background: 'var(--hs-glass-bg)',\n backdropFilter: 'blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))',\n WebkitBackdropFilter: 'blur(var(--hs-glass-blur)) saturate(var(--hs-glass-saturate))',\n border: '1px solid var(--hs-glass-border)',\n boxShadow: 'var(--hs-glass-shadow)',\n cursor: 'pointer',\n padding: 'var(--hs-space-3)',\n boxSizing: 'border-box',\n })\n\n // Video section — inset with visible border inside the card\n const videoWrap = document.createElement('div')\n Object.assign(videoWrap.style, {\n flex: '1',\n overflow: 'hidden',\n position: 'relative',\n borderRadius: 'var(--hs-radius-md)',\n border: '1px solid var(--hs-glass-border)',\n })\n\n const vid = document.createElement('video')\n vid.src = this.idleVideoUrl\n vid.autoplay = true\n vid.loop = true\n vid.muted = true\n vid.playsInline = true\n vid.setAttribute('playsinline', '')\n Object.assign(vid.style, {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n })\n videoWrap.appendChild(vid)\n card.appendChild(videoWrap)\n\n // Label section below the video\n const labelSection = document.createElement('div')\n Object.assign(labelSection.style, {\n padding: 'var(--hs-space-3) var(--hs-space-4)',\n textAlign: 'center',\n })\n const title = document.createElement('div')\n Object.assign(title.style, {\n color: 'var(--hs-text-primary)',\n fontSize: 'var(--hs-text-base)',\n fontWeight: 'var(--hs-weight-semibold)',\n fontFamily: 'var(--hs-font)',\n lineHeight: 'var(--hs-line-height)',\n })\n title.textContent = `${this.staffDisplayName}, your AI copilot`\n labelSection.appendChild(title)\n\n const subtitle = document.createElement('div')\n Object.assign(subtitle.style, {\n color: 'var(--hs-text-tertiary)',\n fontSize: 'var(--hs-text-xs)',\n fontFamily: 'var(--hs-font)',\n marginTop: '2px',\n })\n subtitle.textContent = 'Powered by Holostaff'\n labelSection.appendChild(subtitle)\n\n card.appendChild(labelSection)\n\n // Click handler\n card.addEventListener('click', () => this.onAvatarClick())\n\n target.appendChild(card)\n\n // Hide the PixiJS canvas in inline mode — the glass card IS the idle display\n if (this.stage.rootElement) {\n this.stage.rootElement.style.display = 'none'\n }\n } else {\n // Floating mode: use PixiJS avatar renderer\n const root = this.stage.rootElement\n if (!root) throw new Error('Widget root not available')\n await this.avatar.loadIdleVideo(this.idleVideoUrl, root)\n }\n return\n } catch {\n console.warn('[HolostaffWidget] Failed to load idle video, trying image fallback')\n }\n }\n if (this.idleImageUrl) {\n await this.avatar.loadIdleImage(this.idleImageUrl)\n } else {\n console.warn('[HolostaffWidget] No idle video or image configured')\n }\n }\n\n setIdleVideo(url: string): void {\n this.idleVideoUrl = url\n }\n\n setIdleImage(url: string): void {\n this.idleImageUrl = url\n }\n\n /** Attach an externally-created observer (rrweb + vision WS) — Issue 26. */\n setObserver(recorder: RRWebRecorder, ws: VisionWSClient): void {\n this.rrwebRecorder = recorder\n this.visionWs = ws\n this.externalObserver = true\n }\n\n /** Set staff display info for the chat-again pill. */\n setStaffInfo(name: string, avatarUrl: string | null): void {\n this.staffDisplayName = name\n this.staffAvatarUrl = avatarUrl\n }\n\n // -----------------------------------------------------------------------\n // Trigger & Teaser\n // -----------------------------------------------------------------------\n\n private setupTrigger(): void {\n // Inline mode: always show avatar immediately (it's part of the page)\n if (this.isInline) {\n this.showAvatarOnly()\n return\n }\n\n // In v3 (vision loop enabled), show the avatar immediately but without\n // speech bubble prompts — the VLM will craft contextual messages.\n if (this.config.visionWsUrl) {\n this.showAvatarOnly()\n return\n }\n\n switch (this.config.trigger) {\n case 'scroll':\n this.setupScrollTrigger()\n break\n case 'delay':\n setTimeout(() => this.showTeaser(), this.config.delayMs)\n break\n case 'immediate':\n this.showTeaser()\n break\n }\n }\n\n private setupScrollTrigger(): void {\n this.scrollHandler = () => {\n const scrollY = window.scrollY\n const docHeight = document.documentElement.scrollHeight - window.innerHeight\n const scrollPct = docHeight > 0 ? scrollY / docHeight : 0\n\n if (scrollPct >= this.config.scrollThreshold && this.state === 'idle') {\n this.showTeaser()\n } else if (scrollPct < this.config.scrollThreshold * 0.5 && this.state === 'teasing') {\n this.hideTeaser()\n }\n }\n window.addEventListener('scroll', this.scrollHandler, { passive: true })\n }\n\n /** v3: Show avatar immediately without speech bubble prompts. */\n private showAvatarOnly(): void {\n if (this.state !== 'idle' || !this.avatar || !this.stage) return\n this.state = 'teasing'\n this.avatar.slideIn(this.stage.app.ticker)\n // No speech bubble — VLM will send contextual messages via suggest_intervention\n }\n\n private showTeaser(): void {\n if (this.state !== 'idle' || !this.avatar || !this.stage) return\n this.state = 'teasing'\n this.avatar.slideIn(this.stage.app.ticker)\n this.bubbleTimer = setTimeout(() => this.bubble?.start(), BUBBLE_DELAY_MS)\n }\n\n private hideTeaser(): void {\n if (this.state !== 'teasing' || !this.avatar || !this.stage) return\n this.state = 'idle'\n if (this.bubbleTimer) { clearTimeout(this.bubbleTimer); this.bubbleTimer = null }\n this.bubble?.stop()\n this.avatar.slideOut(this.stage.app.ticker)\n }\n\n // -----------------------------------------------------------------------\n // Conversation lifecycle (Issues 5-8)\n // -----------------------------------------------------------------------\n\n private async onAvatarClick(): Promise<void> {\n // Allow click from teasing state (v2 scroll trigger) or idle state (v3 accepted suggestion)\n if (this.state !== 'teasing' && this.state !== 'idle') return\n\n this.state = 'connecting'\n // Don't stop the observer — it keeps homeVisible accurate.\n // The observer callback checks state === 'idle' so it won't show/hide pill during conversation.\n this.bubble?.stop()\n this.bubble?.hideStatic()\n\n // Dismiss any active suggestion (toast or card overlay)\n this.actionExecutor?.destroy()\n this.actionExecutor = null\n\n if (this.isInline) {\n // Show \"Connecting...\" in the pill\n this.chatPill?.showConnecting()\n\n // Freeze idle video in place — don't move to stage yet (wait for Anam video)\n const idleVid = this.stage?.inlineTarget?.querySelector('.hs-inline-card video') as HTMLVideoElement\n if (idleVid) idleVid.pause()\n } else {\n // Floating mode\n if (this.stage?.rootElement) {\n this.stage.rootElement.style.display = ''\n }\n const idleVid = document.querySelector('#holostaff-widget-root video') as HTMLVideoElement\n if (idleVid) idleVid.pause()\n this.bubble?.showStatic('Connecting...')\n }\n console.log('[HolostaffWidget] Starting conversation...')\n\n try {\n // 1. Fetch session tokens\n this.sessionResponse = await fetchWidgetSession(\n this.config.staffId,\n this.config.backendUrl,\n )\n console.log('[HolostaffWidget] Session tokens received')\n\n // 1b. Create conversation logger\n this.logger = new ConversationLogger({\n staffId: this.config.staffId,\n staffName: this.sessionResponse.staff.name,\n backendUrl: this.config.backendUrl,\n })\n\n // 2. Connect Anam first (so avatar video is ready when AI speaks)\n await this.connectAnam()\n\n // 3. Connect Realtime API\n await this.connectRealtimeApi()\n\n this.state = 'active'\n this.setAvatarState('listening')\n this.sessionStartTime = Date.now()\n this.bubble?.hideStatic() // Hide \"Connecting...\"\n\n // 5. Show controls\n this.showControls()\n\n // 6. Start session timers\n this.startSessionTimers()\n\n // 7. Pause vision loop during conversation\n this.visionWs?.sendConversationStarted()\n this.rrwebRecorder?.pause()\n\n console.log('[HolostaffWidget] Conversation active')\n\n } catch (err) {\n console.error('[HolostaffWidget] Failed to start conversation:', err)\n this.bubble?.hideStatic()\n this.endConversation()\n }\n }\n\n // -----------------------------------------------------------------------\n // Issue 24: Home Base ↔ Stage lifecycle\n // -----------------------------------------------------------------------\n\n /** Move the conversation to a fixed bottom-center glass stage (inline mode). */\n private moveToStage(): void {\n if (!this.isInline || !this.stage?.inlineTarget) return\n\n // 1. Hide the glass card and its contents\n const card = this.stage.inlineTarget.querySelector('.hs-inline-card') as HTMLElement\n if (card) card.style.display = 'none'\n this.stage.inlineTarget.querySelectorAll('video').forEach(el => {\n if (el instanceof HTMLVideoElement) el.pause()\n })\n\n // 2. Glass-styled placeholder in the inline container\n this.homePlaceholder = document.createElement('div')\n this.homePlaceholder.setAttribute('data-hs-theme', 'dark')\n Object.assign(this.homePlaceholder.style, {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '100%',\n color: 'var(--hs-text-secondary)',\n fontSize: 'var(--hs-text-sm)',\n fontFamily: 'var(--hs-font)',\n textAlign: 'center',\n padding: 'var(--hs-space-4)',\n boxSizing: 'border-box',\n })\n this.homePlaceholder.innerHTML = 'Agent is active below ↓'\n this.stage.inlineTarget.appendChild(this.homePlaceholder)\n\n // 3. Create glass stage backdrop at bottom-center\n this.stageBackdrop = new GlassStageBackdrop()\n this.stageEl = this.stageBackdrop.el\n this.stageBackdrop.show()\n\n console.log('[HolostaffWidget] Moved to glass stage (bottom-center)')\n }\n\n /** Return the avatar from the stage back to the inline home container. */\n private returnToHome(): void {\n // Remove glass stage\n this.stageBackdrop?.destroy()\n this.stageBackdrop = null\n this.stageEl = null\n\n // Remove placeholder from inline container\n this.homePlaceholder?.remove()\n this.homePlaceholder = null\n\n if (!this.stage?.inlineTarget) return\n\n // Restore the glass card and its video (PixiJS rootElement stays hidden in inline mode)\n const card = this.stage.inlineTarget.querySelector('.hs-inline-card') as HTMLElement\n if (card) card.style.display = ''\n\n this.stage.inlineTarget.querySelectorAll('.hs-inline-card video').forEach(el => {\n (el as HTMLElement).style.display = ''\n if (el instanceof HTMLVideoElement) el.play()\n })\n\n console.log('[HolostaffWidget] Returned to home (inline container)')\n }\n\n /**\n * Watch the inline home container — show chat pill when it scrolls out\n * of viewport, hide pill when it's visible again.\n */\n private startHomeObserver(): void {\n this.stopHomeObserver()\n const target = this.stage?.inlineTarget\n if (!target) return\n\n // Synchronous initial check — don't default to true\n const rect = target.getBoundingClientRect()\n this.homeVisible = rect.top < window.innerHeight && rect.bottom > 0\n\n this.homeObserver = new IntersectionObserver(\n ([entry]) => {\n const wasVisible = this.homeVisible\n this.homeVisible = entry.isIntersecting\n\n if (this.homeVisible && !this.homeEverSeen) {\n this.homeEverSeen = true\n }\n\n const isIdle = this.state === 'idle' || this.state === 'teasing'\n if (isIdle && this.chatPill) {\n if (this.homeVisible) {\n // Skip one hide cycle after conversation ends (pill should stay visible briefly)\n if (this.pillProtected) {\n this.pillProtected = false\n return\n }\n // Card visible → hide pill\n this.chatPill.hide()\n } else if (!this.homeVisible && wasVisible && this.homeEverSeen) {\n // Card just scrolled away (after being seen) → show named pill\n this.chatPill.showNamed()\n } else if (!this.homeVisible && !this.homeEverSeen) {\n // Card not yet seen, not visible → show named if not already\n if (this.chatPill.state === 'hidden') {\n this.chatPill.showNamed()\n }\n }\n }\n },\n { threshold: 0.1 },\n )\n\n this.homeObserver.observe(target)\n }\n\n private stopHomeObserver(): void {\n this.homeObserver?.disconnect()\n this.homeObserver = null\n }\n\n // -----------------------------------------------------------------------\n // Anam connection (avatar rendering, BYO audio mode)\n // -----------------------------------------------------------------------\n\n private async connectAnam(): Promise<void> {\n if (!this.sessionResponse) return\n\n this.anamSession = new AnamSession({\n sessionToken: this.sessionResponse.anamSessionToken,\n inlineMode: this.isInline && !!this.stageBackdrop,\n })\n\n this.anamSession.onConnected = () => {\n console.log('[HolostaffWidget] Anam connected')\n }\n\n this.anamSession.onVideoReady = (videoEl) => {\n console.log('[HolostaffWidget] Anam avatar video ready')\n this.bubble?.hideStatic()\n // Hide the pill when video conversation starts\n this.chatPill?.hide()\n\n if (this.isInline) {\n // Issue 24: Now move to stage — crossfade idle card out, stage in\n this.moveToStage()\n this.stageBackdrop?.appendContent(videoEl)\n } else if (this.avatar && this.stage) {\n // Floating mode: render via PixiJS as before\n this.avatar.setLiveVideo(videoEl, this.stage.app.ticker)\n }\n }\n\n this.anamSession.onTalkStreamInterrupted = () => {\n console.log('[HolostaffWidget] Anam talk stream interrupted')\n }\n\n this.anamSession.onDisconnected = (reason) => {\n console.log('[HolostaffWidget] Anam disconnected:', reason)\n this.endConversation()\n }\n\n this.anamSession.onError = (err) => {\n console.error('[HolostaffWidget] Anam error:', err.message)\n }\n\n await this.anamSession.connect()\n console.log('[HolostaffWidget] Anam session ready')\n }\n\n // -----------------------------------------------------------------------\n // Realtime API connection + conversation orchestration (Issues 5, 6, 8)\n // -----------------------------------------------------------------------\n\n private async connectRealtimeApi(): Promise<void> {\n if (!this.sessionResponse) return\n\n // Build a quick page summary for the system prompt\n const pageTitle = document.title || ''\n const pageUrl = location.href\n const metaDesc = document.querySelector('meta[name=\"description\"]')?.getAttribute('content') || ''\n // Grab visible headings for a structural overview\n const headings = Array.from(document.querySelectorAll('h1, h2, h3')).slice(0, 10)\n .map(h => h.textContent?.trim()).filter(Boolean).join(' | ')\n\n // Append page interaction instructions + vision context\n let instructions = (this.sessionResponse.staff.instructions ?? '') +\n `\\n\\n## Current Page\\nTitle: ${pageTitle}\\nURL: ${pageUrl}` +\n (metaDesc ? `\\nDescription: ${metaDesc}` : '') +\n (headings ? `\\nSections: ${headings}` : '') +\n '\\n\\n## Page Interaction\\n' +\n 'You can interact with the webpage the visitor is viewing by calling the page_action tool.\\n' +\n 'Call it with instruction \"read the page content\" to get a detailed DOM snapshot.\\n' +\n 'Then you can scroll to elements, highlight them, click links/buttons, or fill form fields.\\n' +\n 'All actions except form filling require the visitor to confirm before executing.'\n\n // Inject vision context if the conversation was triggered by an accepted suggestion\n if (this.visionContext) {\n instructions += '\\n\\n## Context from observing the user\\'s session\\n' + this.visionContext\n this.visionContext = null // consume it\n }\n\n this.realtimeSession = new RealtimeSession({\n ephemeralKey: this.sessionResponse.realtimeEphemeralKey,\n webrtcUrl: this.sessionResponse.realtimeWebrtcUrl,\n voice: this.sessionResponse.staff.voiceId,\n instructions,\n tools: WIDGET_TOOLS,\n })\n\n // Set up page action handlers\n this.domAnalyzer = new DomAnalyzer()\n this.highlightRenderer = new GlassHighlightRenderer()\n this.confirmationPrompt = new GlassConfirmPrompt()\n\n this.realtimeSession.onConnected = () => {\n console.log('[HolostaffWidget] Realtime API connected')\n // Inject opening text as the avatar's first message\n const openingText = this.sessionResponse?.staff.openingText\n if (openingText?.trim()) {\n this.realtimeSession?.sendJSON({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'user',\n content: [{ type: 'input_text', text: '(conversation started — greet the visitor now)' }],\n },\n })\n this.realtimeSession?.sendJSON({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'assistant',\n content: [{ type: 'text', text: openingText }],\n },\n })\n this.realtimeSession?.sendJSON({ type: 'response.create' })\n }\n }\n\n this.realtimeSession.onDisconnected = () => {\n console.log('[HolostaffWidget] Realtime API disconnected')\n if (this.state === 'active' || this.state === 'connecting') {\n this.endConversation()\n }\n }\n\n // Remote audio track → AudioForwarder → Anam (lip-sync + playback)\n this.realtimeSession.onRemoteTrack = async (stream) => {\n console.log('[HolostaffWidget] Remote audio track → starting audio forwarder')\n this.audioForwarder = new AudioForwarder()\n\n this.audioForwarder.onAudioChunk = (pcmData) => {\n // Forward PCM audio to Anam for lip-sync and audio playback\n this.anamSession?.sendAudioChunk(pcmData)\n }\n\n await this.audioForwarder.start(stream)\n }\n\n // Create tool handler (needs realtimeSession to exist)\n this.overlayRenderer = new GlassOverlayRenderer()\n this.toolHandler = new ToolHandler({\n realtimeSession: this.realtimeSession,\n domAnalyzer: this.domAnalyzer!,\n pageActions: new PageActions(this.domAnalyzer!, this.highlightRenderer!),\n overlayActions: new OverlayActions(this.overlayRenderer),\n confirmationPrompt: this.confirmationPrompt!,\n staffId: this.config.staffId,\n backendUrl: this.config.backendUrl,\n })\n\n // Log tool calls\n this.toolHandler.onToolCall = (tool, args) => {\n this.logger?.addAction(tool, args)\n }\n\n // Data channel message handling (Issue 8 orchestration + Issue 9 tools)\n this.realtimeSession.onDataMessage = (msg) => {\n this.handleDataChannelMessage(msg)\n }\n\n this.realtimeSession.onError = (err) => {\n console.error('[HolostaffWidget] Realtime error:', err.message)\n this.endConversation()\n }\n\n await this.realtimeSession.connect()\n }\n\n // -----------------------------------------------------------------------\n // Data channel message handling (Issue 8)\n // -----------------------------------------------------------------------\n\n private handleDataChannelMessage(msg: any): void {\n // Delegate tool call messages to the tool handler first\n if (this.toolHandler?.handleMessage(msg)) return\n\n const type = msg.type as string\n\n switch (type) {\n // --- Session lifecycle ---\n case 'session.created':\n case 'session.updated':\n console.log('[HolostaffWidget] Data:', type)\n break\n\n // --- VAD: user started speaking → interrupt avatar ---\n case 'input_audio_buffer.speech_started':\n console.log('[HolostaffWidget] User started speaking')\n this.anamSession?.interrupt()\n this.audioForwarder?.pause()\n this.setAvatarState('listening')\n this.resetInactivityTimer()\n break\n\n // --- VAD: user stopped speaking → thinking ---\n case 'input_audio_buffer.speech_stopped':\n console.log('[HolostaffWidget] User stopped speaking')\n this.setAvatarState('thinking')\n break\n\n // --- AI response started → resume audio forwarding ---\n case 'response.created':\n console.log('[HolostaffWidget] AI response started')\n this.audioForwarder?.resume()\n this.setAvatarState('speaking')\n break\n\n // --- AI response done → signal end of audio turn to Anam ---\n case 'response.done':\n console.log('[HolostaffWidget] AI response done')\n this.anamSession?.endSequence()\n this.setAvatarState('listening')\n this.resetInactivityTimer()\n // Extract AI transcript from response output for logging\n this.extractAiTranscript(msg.response)\n break\n\n // --- Transcription (user speech) ---\n case 'conversation.item.input_audio_transcription.completed':\n console.log('[HolostaffWidget] User said:', msg.transcript)\n this.logger?.addUserMessage(msg.transcript ?? '')\n break\n\n // --- Errors ---\n case 'error':\n console.error('[HolostaffWidget] Realtime error event:', msg.error)\n break\n\n // --- Response cancelled/failed ---\n case 'response.cancelled':\n case 'response.canceled':\n case 'response.failed':\n console.warn('[HolostaffWidget] Response ended:', type)\n this.anamSession?.endSequence()\n this.audioForwarder?.pause()\n this.setAvatarState('listening')\n break\n }\n }\n\n /** Extract AI-generated text from a response.done payload for logging. */\n private extractAiTranscript(response: any): void {\n if (!response?.output || !this.logger) return\n for (const item of response.output) {\n if (item.type === 'message' && item.content) {\n for (const part of item.content) {\n if (part.transcript) {\n this.logger.addStaffMessage(part.transcript)\n } else if (part.text) {\n this.logger.addStaffMessage(part.text)\n }\n }\n }\n }\n }\n\n // -----------------------------------------------------------------------\n // Avatar state management (Issue 8)\n // -----------------------------------------------------------------------\n\n private setAvatarState(newState: AvatarState): void {\n if (this.avatarState === newState) return\n const prev = this.avatarState\n this.avatarState = newState\n console.log(`[HolostaffWidget] Avatar: ${prev} → ${newState}`)\n\n switch (newState) {\n case 'listening':\n case 'thinking':\n case 'speaking':\n case 'idle':\n // Avatar pose is driven by Anam's native lip-sync (no explicit state commands needed)\n break\n }\n }\n\n // -----------------------------------------------------------------------\n // Controls — minimize, restore, close (Issue 11)\n // -----------------------------------------------------------------------\n\n private showControls(): void {\n this.controls = new GlassControls()\n\n this.controls.onMinimize = () => {\n this.state = 'minimized'\n // Hide avatar but keep session alive\n if (this.avatar && this.stage) {\n this.avatar.slideOut(this.stage.app.ticker)\n }\n this.overlayRenderer?.dismissAll()\n console.log('[HolostaffWidget] Minimized')\n }\n\n this.controls.onRestore = () => {\n this.state = 'active'\n if (this.avatar && this.stage) {\n this.avatar.slideIn(this.stage.app.ticker)\n }\n console.log('[HolostaffWidget] Restored')\n }\n\n this.controls.onClose = () => {\n console.log('[HolostaffWidget] Close button clicked')\n this.endConversation()\n }\n\n this.controls.show()\n }\n\n // -----------------------------------------------------------------------\n // Session timers — max duration + inactivity (Issue 11)\n // -----------------------------------------------------------------------\n\n private startSessionTimers(): void {\n // Max duration warning at 9 minutes\n this.maxDurationWarnTimer = setTimeout(() => {\n console.log('[HolostaffWidget] Session approaching max duration')\n this.realtimeSession?.sendJSON({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'system',\n content: [{ type: 'input_text', text: 'The session will end in about one minute. Please wrap up the conversation gracefully.' }],\n },\n })\n this.realtimeSession?.sendJSON({ type: 'response.create' })\n }, MAX_DURATION_WARN_MS)\n\n // Max duration hard close at 10 minutes\n this.maxDurationTimer = setTimeout(() => {\n console.log('[HolostaffWidget] Max session duration reached')\n this.endConversation()\n }, MAX_DURATION_MS)\n\n // Start inactivity tracking\n this.resetInactivityTimer()\n }\n\n /** Reset the inactivity timer (called whenever there's activity). */\n private resetInactivityTimer(): void {\n if (this.inactivityTimer) clearTimeout(this.inactivityTimer)\n if (this.inactivityCloseTimer) clearTimeout(this.inactivityCloseTimer)\n\n // Prompt after 60s of silence\n this.inactivityTimer = setTimeout(() => {\n if (this.state !== 'active') return\n console.log('[HolostaffWidget] Inactivity — prompting user')\n this.realtimeSession?.sendJSON({\n type: 'conversation.item.create',\n item: {\n type: 'message',\n role: 'system',\n content: [{ type: 'input_text', text: 'The visitor has been silent for a while. Ask them \"Still there?\" in a friendly way.' }],\n },\n })\n this.realtimeSession?.sendJSON({ type: 'response.create' })\n\n // Auto-close after another 30s\n this.inactivityCloseTimer = setTimeout(() => {\n if (this.state !== 'active') return\n console.log('[HolostaffWidget] Inactivity — auto-closing')\n this.endConversation()\n }, INACTIVITY_CLOSE_MS - INACTIVITY_PROMPT_MS)\n }, INACTIVITY_PROMPT_MS)\n }\n\n private clearSessionTimers(): void {\n if (this.maxDurationTimer) { clearTimeout(this.maxDurationTimer); this.maxDurationTimer = null }\n if (this.maxDurationWarnTimer) { clearTimeout(this.maxDurationWarnTimer); this.maxDurationWarnTimer = null }\n if (this.inactivityTimer) { clearTimeout(this.inactivityTimer); this.inactivityTimer = null }\n if (this.inactivityCloseTimer) { clearTimeout(this.inactivityCloseTimer); this.inactivityCloseTimer = null }\n }\n\n // -----------------------------------------------------------------------\n // End conversation\n // -----------------------------------------------------------------------\n\n private endConversation(): void {\n // Flush conversation log (fire-and-forget)\n this.logger?.flush()\n this.logger = null\n\n // Clear all timers\n this.clearSessionTimers()\n\n // Hide controls\n this.controls?.hide()\n this.controls = null\n\n this.audioForwarder?.stop()\n this.audioForwarder = null\n\n this.anamSession?.close()\n this.anamSession = null\n\n this.realtimeSession?.close()\n this.realtimeSession = null\n\n this.sessionResponse = null\n this.avatarState = 'idle'\n\n // Clean up page action + overlay resources\n this.toolHandler = null\n this.domAnalyzer = null\n this.highlightRenderer?.clearAll()\n this.highlightRenderer = null\n this.confirmationPrompt?.dismiss()\n this.confirmationPrompt = null\n this.overlayRenderer?.dismissAll()\n this.overlayRenderer = null\n\n\n // Crossfade back to idle video\n if (this.avatar && this.stage) {\n this.avatar.clearLiveVideo(this.stage.app.ticker)\n }\n\n // Resume vision loop with conversation summary\n const conversationSummary = this.buildConversationSummary()\n this.visionWs?.sendConversationEnded(conversationSummary)\n this.rrwebRecorder?.resume()\n\n this.hasHadConversation = true\n this.state = 'idle'\n\n // Remove any leftover Anam video elements\n document.querySelectorAll('[id^=\"anam-avatar-wrapper\"]').forEach(el => el.remove())\n document.querySelectorAll('video[id^=\"anam-avatar-video\"]').forEach(el => el.remove())\n\n if (this.isInline) {\n // Issue 24: Return from stage to home (inline container) — restores glass card + video\n this.returnToHome()\n\n // Always restore and show the pill after conversation\n // Protect from immediate observer hide (card is in viewport after returnToHome)\n this.pillProtected = true\n this.chatPill?.restoreName()\n this.chatPill?.showNamed()\n\n // Re-attach action executor so future interventions work\n this.attachActionExecutor()\n } else {\n // Floating mode: hide everything and show the minimal chat pill\n if (this.avatar) {\n this.avatar.container.visible = false\n }\n if (this.stage?.rootElement) {\n this.stage.rootElement.style.display = 'none'\n }\n this.showChatPill()\n }\n\n console.log('[HolostaffWidget] Conversation ended')\n }\n\n private showChatPill(): void {\n if (!this.chatPill) {\n this.chatPill = new GlassChatPill()\n this.chatPill.init(this.staffAvatarUrl, this.idleVideoUrl, this.staffDisplayName)\n this.chatPill.onClick = () => this.onAvatarClick()\n }\n this.chatPill.showNamed()\n }\n\n private hideChatPill(): void {\n this.chatPill?.hide()\n }\n\n // -----------------------------------------------------------------------\n // Vision loop (v3)\n // -----------------------------------------------------------------------\n\n private startVisionLoop(): void {\n if (this.externalObserver && this.visionWs) {\n // Issue 26: Observer already running externally — just attach the action executor\n this.attachActionExecutor()\n console.log('[HolostaffWidget] Action executor attached to external observer')\n return\n }\n\n // Fallback: create our own observer (for backwards compatibility / no page targeting)\n const wsUrl = this.config.visionWsUrl\n if (!wsUrl) return\n\n this.rrwebRecorder = new RRWebRecorder()\n\n this.visionWs = new VisionWSClient(wsUrl, {\n staffId: this.config.staffId,\n visitorId: this.visitorId,\n pageUrl: location.href,\n pageTitle: document.title,\n })\n\n this.rrwebRecorder.onEvent = (event) => {\n this.visionWs?.sendRRWebEvent(event)\n }\n\n this.attachActionExecutor()\n\n this.visionWs.connect()\n\n if (this.config.visionConsent === 'required') {\n console.log('[HolostaffWidget] Vision loop started (recording deferred — consent required)')\n } else {\n this.rrwebRecorder.start()\n console.log('[HolostaffWidget] Vision loop started', { visitorId: this.visitorId })\n }\n }\n\n /** Wire the action executor to handle suggest_intervention from the vision WS. */\n private attachActionExecutor(): void {\n if (!this.visionWs) return\n\n this.actionExecutor = new ActionExecutor({\n wsClient: this.visionWs,\n getWidgetState: () => this.state,\n getHomeVisible: () => this.homeVisible,\n inlineTarget: this.stage?.inlineTarget ?? null,\n pill: this.chatPill,\n })\n\n this.actionExecutor.onAccept = (context) => {\n console.log('[HolostaffWidget] Suggestion accepted — starting conversation with vision context')\n this.visionContext = context\n this.onAvatarClick()\n }\n }\n\n private stopVisionLoop(): void {\n this.actionExecutor?.destroy()\n this.actionExecutor = null\n\n // Only stop observer if we own it (not external)\n if (!this.externalObserver) {\n this.rrwebRecorder?.stop()\n this.rrwebRecorder = null\n this.visionWs?.close()\n this.visionWs = null\n }\n }\n\n private buildConversationSummary(): string {\n return this.logger?.getSummary() ?? 'Conversation ended (no transcript available).'\n }\n\n private getOrCreateVisitorId(): string {\n const COOKIE_NAME = 'hs_visitor_id'\n const existing = document.cookie\n .split('; ')\n .find(c => c.startsWith(`${COOKIE_NAME}=`))\n ?.split('=')[1]\n\n if (existing) return existing\n\n const id = `v_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`\n document.cookie = `${COOKIE_NAME}=${id}; max-age=${365 * 24 * 60 * 60}; path=/; SameSite=Lax`\n return id\n }\n\n // -----------------------------------------------------------------------\n // Page targeting — pause / resume / container swap (Issues 22, 23)\n // -----------------------------------------------------------------------\n\n /** Hide the presenter when SPA navigates away from a matched page. Observer keeps running. */\n pause(): void {\n if (this.paused) return\n this.paused = true\n console.log('[HolostaffWidget] Presenter paused (page not targeted — observer continues)')\n\n // End any active conversation\n if (this.state === 'active' || this.state === 'connecting') {\n this.endConversation()\n }\n\n // Hide all visible elements\n if (this.stage?.rootElement) {\n this.stage.rootElement.style.display = 'none'\n }\n this.hideChatPill()\n this.bubble?.stop()\n\n // Detach action executor so interventions are suppressed while hidden\n this.actionExecutor?.destroy()\n this.actionExecutor = null\n }\n\n /** Show the presenter when SPA navigates to a matched page. */\n resume(): void {\n if (!this.paused) return\n this.paused = false\n console.log('[HolostaffWidget] Presenter resumed (page targeted)')\n\n if (this.stage?.rootElement) {\n this.stage.rootElement.style.display = ''\n }\n\n // Re-attach action executor so interventions work again\n this.attachActionExecutor()\n\n // Re-trigger the teaser/idle state\n if (this.state === 'idle' || this.state === 'teasing') {\n this.state = 'idle'\n this.setupTrigger()\n }\n }\n\n /** Switch inline container when SPA navigates to a page with a different container. */\n updateContainer(container: string | null): void {\n const newMode = container ? 'inline' : 'floating'\n const changed = this.config.container !== container || this.config.mode !== newMode\n\n if (!changed) return\n\n console.log('[HolostaffWidget] Updating container:', container ?? '(floating)')\n this.config = { ...this.config, mode: newMode, container }\n\n // If the stage is already initialized, we need to re-init it with the new container\n // For now, destroy and re-create (conversations are ended on page nav anyway)\n if (this.stage) {\n // End conversation if active\n if (this.state === 'active' || this.state === 'connecting') {\n this.endConversation()\n }\n\n this.bubble?.destroy()\n this.avatar?.destroy()\n this.stage.destroy()\n this.stage = null\n this.avatar = null\n this.bubble = null\n this.state = 'idle'\n\n // Re-init\n this.init()\n }\n }\n\n // -----------------------------------------------------------------------\n // Cleanup\n // -----------------------------------------------------------------------\n\n destroy(): void {\n this.state = 'destroyed'\n this.endConversation()\n this.hideChatPill()\n this.stopHomeObserver()\n this.stopVisionLoop()\n\n if (this.scrollHandler) {\n window.removeEventListener('scroll', this.scrollHandler)\n }\n if (this.bubbleTimer) {\n clearTimeout(this.bubbleTimer)\n }\n this.bubble?.destroy()\n this.avatar?.destroy()\n this.stage?.destroy()\n this.bubble = null\n this.avatar = null\n this.stage = null\n }\n}\n","/**\n * PageTargeting — URL pattern matching + SPA route change detection.\n *\n * Determines whether the widget should be active on the current page,\n * and resolves per-page inline container selectors.\n */\n\nexport interface PagePattern {\n pattern: string\n container?: string\n label?: string\n}\n\n/** Normalize raw patterns from server (can be string or object). */\nexport function normalizePatterns(\n raw: (string | { pattern: string; container?: string; label?: string })[] | null | undefined,\n): PagePattern[] {\n if (!raw || raw.length === 0) return [{ pattern: '*' }]\n return raw.map(p => (typeof p === 'string' ? { pattern: p } : p))\n}\n\n/** Check if a pathname matches a single pattern. */\nexport function matchPattern(pathname: string, pattern: string): boolean {\n if (pattern === '*') return true\n\n // Exact match\n if (!pattern.endsWith('/*')) {\n // Normalize trailing slashes for comparison\n const normPath = pathname.replace(/\\/+$/, '') || '/'\n const normPattern = pattern.replace(/\\/+$/, '') || '/'\n return normPath === normPattern\n }\n\n // Wildcard suffix: /docs/* matches /docs, /docs/, /docs/anything\n const prefix = pattern.slice(0, -2) // remove /*\n const normPath = pathname.replace(/\\/+$/, '') || '/'\n const normPrefix = prefix.replace(/\\/+$/, '') || '/'\n return normPath === normPrefix || normPath.startsWith(normPrefix + '/')\n}\n\n/** Find the first matching pattern for the current pathname. Returns null if none match. */\nexport function findMatch(pathname: string, patterns: PagePattern[]): PagePattern | null {\n for (const p of patterns) {\n if (matchPattern(pathname, p.pattern)) return p\n }\n return null\n}\n\n/**\n * SPARouter — watches for SPA route changes via popstate + pushState/replaceState interception.\n * Calls the provided callback whenever the pathname changes.\n */\nexport class SPARouter {\n private currentPath: string\n private onChange: (newPath: string) => void\n private origPushState: typeof history.pushState\n private origReplaceState: typeof history.replaceState\n\n constructor(onChange: (newPath: string) => void) {\n this.currentPath = location.pathname\n this.onChange = onChange\n\n // Save originals\n this.origPushState = history.pushState.bind(history)\n this.origReplaceState = history.replaceState.bind(history)\n\n // Intercept pushState\n history.pushState = (...args: Parameters<typeof history.pushState>) => {\n this.origPushState(...args)\n this.check()\n }\n\n // Intercept replaceState\n history.replaceState = (...args: Parameters<typeof history.replaceState>) => {\n this.origReplaceState(...args)\n this.check()\n }\n\n // Listen for popstate (back/forward)\n window.addEventListener('popstate', () => this.check())\n }\n\n private check(): void {\n const newPath = location.pathname\n if (newPath !== this.currentPath) {\n this.currentPath = newPath\n this.onChange(newPath)\n }\n }\n\n destroy(): void {\n history.pushState = this.origPushState\n history.replaceState = this.origReplaceState\n }\n}\n","import { extractConfig, applyServerDefaults, type WidgetConfig } from './config'\nimport { fetchWidgetConfig, type StaffPublicConfig } from './api/backend'\nimport { HolostaffWidget } from './widget'\nimport { normalizePatterns, findMatch, SPARouter } from './routing/pageTargeting'\nimport { RRWebRecorder } from './vision/rrwebRecorder'\nimport { VisionWSClient } from './vision/wsClient'\n\n// Helper: generate or retrieve persistent visitor ID\nfunction getOrCreateVisitorId(): string {\n const COOKIE_NAME = 'hs_visitor_id'\n const existing = document.cookie\n .split('; ')\n .find(c => c.startsWith(`${COOKIE_NAME}=`))\n ?.split('=')[1]\n\n if (existing) return existing\n\n const id = `v_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 6)}`\n document.cookie = `${COOKIE_NAME}=${id}; max-age=${365 * 24 * 60 * 60}; path=/; SameSite=Lax`\n return id\n}\n\n// Auto-bootstrap: find the script tag that loaded us and extract config\nfunction bootstrap(): void {\n const scriptEl = document.currentScript as HTMLScriptElement | null\n ?? document.querySelector<HTMLScriptElement>('script[data-staff-id]')\n\n if (!scriptEl) {\n console.error('[HolostaffWidget] Could not find script tag with data-staff-id')\n return\n }\n\n try {\n const config = extractConfig(scriptEl)\n\n async function initWidget() {\n let finalConfig = config\n let widgetPrompts: string[] | null = null\n let serverConfig: StaffPublicConfig | null = null\n\n // Fetch server config to get RTDB-stored defaults + widgetPrompts + pagePatterns\n try {\n serverConfig = await fetchWidgetConfig(config.staffId, config.backendUrl)\n finalConfig = applyServerDefaults(config, scriptEl!, serverConfig)\n widgetPrompts = serverConfig.widgetPrompts\n } catch (err) {\n if ((err as any).name === 'WidgetDisabledError') {\n // Agent deleted or inactive — nothing should appear on the host page\n console.log('[HolostaffWidget] Agent is not active — widget suppressed')\n return\n }\n console.warn('[HolostaffWidget] Failed to fetch server config, using embed defaults:', err)\n }\n\n // --- Issue 26: Start observer layer on ALL pages ---\n const patterns = normalizePatterns(serverConfig?.pagePatterns)\n const visitorId = getOrCreateVisitorId()\n let recorder: RRWebRecorder | null = null\n let visionWs: VisionWSClient | null = null\n\n if (finalConfig.visionWsUrl) {\n recorder = new RRWebRecorder()\n\n visionWs = new VisionWSClient(finalConfig.visionWsUrl, {\n staffId: finalConfig.staffId,\n visitorId,\n pageUrl: location.href,\n pageTitle: document.title,\n pagePatterns: patterns.map(p => {\n const entry: { pattern: string; container?: string } = { pattern: p.pattern }\n if (p.container) entry.container = p.container\n return entry\n }),\n })\n\n recorder.onEvent = (event) => {\n visionWs?.sendRRWebEvent(event)\n }\n\n visionWs.connect()\n\n if (finalConfig.visionConsent === 'required') {\n console.log('[HolostaffWidget] Observer started (recording deferred — consent required)')\n } else {\n recorder.start()\n console.log('[HolostaffWidget] Observer started on all pages', { visitorId })\n }\n }\n\n // --- Page targeting (Issue 22): presenter only on matched pages ---\n let currentMatch = findMatch(location.pathname, patterns)\n let widget: HolostaffWidget | null = null\n\n if (currentMatch) {\n let cfg = finalConfig\n if (currentMatch.container) {\n cfg = { ...finalConfig, mode: 'inline', container: currentMatch.container }\n }\n widget = createWidget(cfg, serverConfig, widgetPrompts, recorder, visionWs)\n ;(window as any).holostaffWidget = widget\n widget.init()\n } else {\n console.log('[HolostaffWidget] No matching page pattern for', location.pathname, '— presenter not loaded (observer active)')\n }\n\n // --- SPA route change detection ---\n const spaRouter = new SPARouter((newPath) => {\n // Always notify the vision server about page changes (Issue 26)\n visionWs?.sendPageChanged(location.href, newPath, document.title)\n\n const newMatch = findMatch(newPath, patterns)\n\n if (newMatch && !widget) {\n // First time landing on a targeted page — create presenter\n console.log('[HolostaffWidget] SPA navigated to matching page:', newPath)\n let cfg = finalConfig\n if (newMatch.container) {\n cfg = { ...finalConfig, mode: 'inline', container: newMatch.container }\n }\n widget = createWidget(cfg, serverConfig, widgetPrompts, recorder, visionWs)\n ;(window as any).holostaffWidget = widget\n widget.init()\n } else if (newMatch && widget) {\n // Already have a presenter — update container if needed, resume\n const newContainer = newMatch.container ?? null\n if (newContainer !== widget.activeContainer) {\n widget.updateContainer(newContainer)\n }\n widget.resume()\n } else if (!newMatch && widget) {\n // Left a targeted page — hide presenter (observer keeps running)\n widget.pause()\n }\n })\n\n ;(window as any).__holostaffSPARouter = spaRouter\n }\n\n function createWidget(\n cfg: WidgetConfig,\n serverConfig: StaffPublicConfig | null,\n widgetPrompts: string[] | null,\n recorder: RRWebRecorder | null,\n visionWs: VisionWSClient | null,\n ): HolostaffWidget {\n const widget = new HolostaffWidget(cfg, widgetPrompts)\n\n // Attach external observer (Issue 26)\n if (recorder && visionWs) {\n widget.setObserver(recorder, visionWs)\n }\n\n if (serverConfig?.idleVideoUrl) widget.setIdleVideo(serverConfig.idleVideoUrl)\n else if (serverConfig?.avatarImageUrl) widget.setIdleImage(serverConfig.avatarImageUrl)\n\n if (serverConfig) {\n widget.setStaffInfo(serverConfig.name, serverConfig.avatarImageUrl)\n }\n\n return widget\n }\n\n // Initialize when DOM is ready\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => initWidget())\n } else {\n initWidget()\n }\n } catch (err) {\n console.error('[HolostaffWidget]', err)\n }\n}\n\nbootstrap()\n\nexport { HolostaffWidget }\nexport type { WidgetConfig }\n"],"names":["DEFAULTS","extractConfig","scriptEl","staffId","VALID_POSITIONS","VALID_TRIGGERS","VALID_THEMES","applyServerDefaults","config","serverConfig","updated","DEFAULT_BACKEND","fetchWidgetSession","backendUrl","res","body","WidgetDisabledError","message","fetchWidgetConfig","postPageAction","domSnapshot","instruction","ExtensionType","ExtensionType2","normalizeExtension","ext","normalizeExtensionPriority","defaultPriority","extensions","extensions2","type","_a","_b","handlers","queue","onAdd","onRemove","addHandlers","removeHandlers","map","extension","item","a","b","index","list","Target","sources","source","browserExt","webworkerExt","ObservablePoint","observer","x","y","p","value","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","clearEvent","EventEmitter","names","events","name","i","l","ee","listeners","a1","a2","a3","a4","a5","len","args","length","j","module","PI_2","RAD_TO_DEG","DEG_TO_RAD","Point","tempPoint","Matrix","c","d","tx","ty","array","transpose","out","pos","newPos","id","angle","cos","sin","c1","tx1","matrix","b1","d1","b2","c2","d2","pivotX","pivotY","scaleX","scaleY","rotation","skewX","skewY","transform","pivot","delta","n","identityMatrix","tempMatrix","ux","uy","vx","vy","rotationCayley","rotationMatrices","signum","init","row","_ux","_uy","_vx","_vy","k","mat","groupD8","ind","rotationSecond","rotationFirst","dx","dy","dw","dh","finalTx","finalTy","rect","sourceFrame","width","height","frameX","frameY","frameWidth","frameHeight","tempPoints","Rectangle","bounds","rectangle","strokeWidth","alignment","_x","_y","strokeWidthOuter","strokeWidthInner","outerLeft","outerRight","outerTop","outerBottom","innerLeft","innerRight","innerTop","innerBottom","other","x02","y02","x0","x1","y0","y1","lt","lb","rt","rb","s","nx","ny","n00","n10","n01","n11","mx","my","m00","m10","m01","m11","paddingX","paddingY","x2","y2","resolution","eps","uidCache","uid","warnings","v8_0_0","v8_3_4","deprecationState","deprecation","version","ignoreDepth","stack","deprecationMessage","useGroup","NOOP","nextPow2","v","isPow2","definedProps","obj","result","key","idHash","createResourceIdFromString","_TextureStyle","options","bigKey","TextureStyle","_TextureSource","resource","newPixelWidth","newPixelHeight","_resource","TextureSource","BufferImageSource","buffer","format","tempMat","TextureMatrix","texture","clampMargin","uvs","tex","orig","trim","texBase","frame","margin","offset","Texture","label","defaultAnchor","defaultBorders","rotate","dynamic","nX","nY","nW","nH","w2","h2","cX","cY","destroySource","updateQuadBounds","anchor","sourceWidth","sourceHeight","defaultMatrix","Bounds","minX","minY","maxX","maxY","mask","left","right","top","bottom","vertexData","beginOffset","endOffset","localX","localY","r","t","e","u","o","h","g","f","m","N","M","H","$","w","S","namesPlugin","extend","_Color","value1","value2","type1","keys1","keys2","alpha","applyToRGB","hexString","alphaString","int","match","color","colord","min","max","Color","cullingMixin","warnCount","maxWarnings","warn","GlobalResourceRegistry","pool","Pool","ClassType","initialSize","total","data","PoolGroupClass","Class","stats","BigPool","cacheAsTextureMixin","val","removeItems","arr","startIdx","removeCount","childrenHelperMixin","beginIndex","endIndex","end","range","removed","child","renderGroup","children","sameParent","currentIndex","child2","index1","index2","childMat","newMatrix","oldChild","newChild","collectRenderablesMixin","instructionSet","renderer","currentLayer","renderPipes","effect","FilterEffect","MaskEffectManagerClass","test","MaskEffectManager","effectsMixin","hasFilters","hadFilters","didChange","findMixin","deep","found","matrixPool","boundsPool","getFastGlobalBoundsMixin","factorRenderLayers","localBounds","manageEffects","viewBounds","advanced","getGlobalBounds","target","skipUpdateTransform","parentTransform","pooledMatrix","updateTransformBackwards","_getGlobalBounds","worldTransform","parentBounds","preserveBounds","renderableBounds","parent","multiplyHexColors","color1","color2","r1","g1","r2","g2","WHITE_BGR","multiplyColors","localBGRColor","parentBGRColor","bgr2rgb","getGlobalMixin","skipUpdate","current","getLocalBounds","relativeMatrix","_getLocalBounds","rootContainer","isRoot","relativeTransform","localTransform","checkChildrenDidChange","container","previousData","measureMixin","localWidth","sign","localHeight","localBoundsCacheData","onRenderMixin","func","sortMixin","sortChildren","toLocalGlobalMixin","point","position","globalMatrix","from","InstructionSet","count","TexturePoolClass","textureOptions","pixelWidth","pixelHeight","antialias","autoGenerateMipmaps","textureSource","po2Width","po2Height","antialiasFlag","mipmapFlag","renderTexture","resetStyle","destroyTextures","textures","TexturePool","RenderGroup","root","cachedParent","childrenAtDepth","renderGroupChild","childrenToUpdate","renderable","parentCacheAsTexture","assignWithIgnore","ignore","defaultSkew","defaultPivot","defaultScale","defaultOrigin","UPDATE_COLOR","UPDATE_BLEND","UPDATE_VISIBLE","Container","parentRenderGroup","size","skew","opts","localTransformChangeId","scale","origin","sx","sy","px","py","ox","oy","bgr","valueNumber","oldChildren","ViewContainer","pipe","Sprite","roundPixels","rest","skipCache","currentTexture","destroyTextureSource","tempBounds","addMaskBounds","boundsToMask","addMaskLocalBounds","localRoot","relativeMask","getMatrixRelativeToParent","AlphaMask","hitTestFn","ColorMask","StencilMask","BrowserAdapter","canvas","url","xml","currentAdapter","DOMAdapter","adapter","CanvasSource","didResize","ImageSource","UPDATE_PRIORITY","UPDATE_PRIORITY2","TickerListener","priority","ticker","redirect","previous","hard","_Ticker","time","currentTime","elapsedMS","head","fps","minFPMS","shared","system","Ticker","promise","detectVideoAlphaMode","gl","video","resolve","video2","framebuffer","pixel","_VideoSource","reject","VideoSource","convertToList","input","forceTransform","CacheClass","keys","cacheableAssets","parser","cacheableMap","key2","cacheKeys","cachedAssets","cacheMap","Cache","textureSourceFrom","hasResource","Source","resourceToTexture","textureFrom","LoaderParserPriority","LoaderParserPriority2","assertPath","path2","removeUrlParams","escapeRegExp","string","replaceAll","str","find","replace","normalizeStringPosix","allowAboveRoot","lastSegmentLength","lastSlash","dots","code","lastSlashIndex","path","matchFile","matchProtocol","customBaseUrl","customRootUrl","baseUrl","rootUrl","protocol","isAbsolute","trailingSeparator","segments","joined","arg","prevArg","hasRoot","matchedSlash","proto","origpath","start","extIdx","firstNonSlashEnd","startDot","startPart","preDotState","ret","processX","base","ids","depth","tags","createStringVariations","regex","vars","split","isSingleItem","Resolver","bundleId","assetId","assetBundleId","bundleIdentifier","preferOrders","prefer","basePath","rootPath","searchParams","queryValues","asset","alias","src","manifest","bundle","assets","assetNames","convertedAssets","srcs","aliases","bundleAssetId","bundleIds","keyCheck","userDefinedLoadParser","userDefinedParser","srcsToUse","src2","aliasesToUse","resolvedAssets","parseUrl","formattedAsset","singleAsset","results","preferredOrder","priorityKey","filteredAssets","preferred","preference","paramConnector","assetData","loadParser","progressSize","getUrlExtension","copySearchParams","targetUrl","sourceUrl","_Spritesheet","optionsOrTexture","arg1","cachePrefix","metaResolution","initialFrameIndex","processAll","frameIndex","maxFrames","sourceSize","animations","animName","frameName","callback","destroyBase","Spritesheet","validImages","getCacheableAssets","ignoreMultiPack","out2","spritesheetAsset","loader","imageTexture","imageFilename","imagePath","spritesheet","multiPacks","promises","itemUrl","sp","_resolvedAsset","environments","loadEnvironmentExtensions","skip","env","unsafeEval","unsafeEvalSupported","CLEAR","CLEAR2","SystemRunner","a0","a6","a7","items","defaultRunners","_AbstractRenderer","combinedRunners","systemName","deprecated","isRGBAArray","desiredScreenWidth","desiredScreenHeight","previousResolution","clear","clearColor","mipLevel","layer","runnerIds","runnerId","systems","ClassRef","pipes","pipeAdaptors","adaptors","acc","adaptor","PipeClass","Adaptor","runner","AbstractRenderer","_isWebGLSupported","isWebGLSupported","failIfMajorPerformanceCaveat","contextOptions","success","loseContext","_isWebGPUSupported","isWebGPUSupported","gpu","renderPriority","autoDetectRenderer","RendererClass","finalOptions","rendererType","WebGPURenderer","WebGLRenderer","CanvasRenderer","VERSION","ApplicationInitHook","RendererInitHook","ResizePlugin","dom","clientWidth","clientHeight","TickerPlugin","oldTicker","_Application","plugin","rendererDestroyOptions","plugins","Application","STAGE_WIDTH","STAGE_HEIGHT","WidgetStage","mode","targetSelector","onResize","vw","prefersReducedMotion","Easing","tween","props","duration","easing","delay","onComplete","startValues","elapsed","cancelled","update","dt","progress","eased","AVATAR_WIDTH","AVATAR_HEIGHT","LIVE_AVATAR_WIDTH","AvatarRenderer","stageWidth","stageHeight","videoUrl","widgetRoot","imageUrl","sprite","targetY","onClick","videoEl","createSprite","vh","onReady","ICE_SERVERS","ICE_GATHER_TIMEOUT_MS","DATA_CHANNEL_NAME","RealtimeSession","track","offer","localSdp","answerSdp","err","error","msg","_c","_d","state","pc","timer","done","onState","webrtcUrl","ephemeralKey","model","voice","separator","text","session","TARGET_SAMPLE_RATE","SAMPLES_PER_CHUNK","WORKLET_CODE","float32ToInt16","float32","int16","AudioForwarder","remoteStream","blob","workletUrl","silentSink","base64Js","byteLength","toByteArray","fromByteArray","lookup","revLookup","Arr","getLens","b64","validLen","placeHoldersLen","lens","_byteLength","tmp","curByte","tripletToBase64","num","encodeChunk","uint8","output","extraBytes","parts","maxChunkLength","len2","ieee754","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","base64","require$$0","require$$1","customInspectSymbol","exports","Buffer","SlowBuffer","K_MAX_LENGTH","typedArraySupport","createBuffer","buf","encodingOrOffset","allocUnsafe","fromString","fromArrayView","isInstance","fromArrayBuffer","valueOf","fromObject","assertSize","alloc","fill","encoding","checked","actual","fromArrayLike","arrayView","copy","byteOffset","numberIsNaN","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","thisStart","thisEnd","thisCopy","targetCopy","bidirectionalIndexOf","dir","arrayIndexOf","indexSize","arrLength","valLength","read","foundIndex","hexWrite","remaining","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","base64Write","ucs2Write","utf16leToBytes","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","MAX_ARGUMENTS_LENGTH","codePoints","hexSliceLookupTable","bytes","newBuf","checkOffset","noAssert","mul","defineBigIntMethod","validateNumber","first","last","boundsError","lo","hi","checkInt","maxBytes","wrtBigUInt64LE","checkIntBI","wrtBigUInt64BE","limit","sub","checkIEEE754","writeFloat","littleEndian","writeDouble","targetStart","errors","E","sym","getMessage","Base","received","addNumericalSeparator","checkBounds","INVALID_BASE64_RE","base64clean","units","leadSurrogate","byteArray","dst","alphabet","table","i16","BufferBigIntNotDefined","DEFAULT_API_BASE_URL","DEFAULT_API_VERSION","CLIENT_METADATA","__awaiter","thisArg","_arguments","P","generator","adopt","fulfilled","step","rejected","DEFAULT_ANAM_METRICS_BASE_URL","DEFAULT_ANAM_API_VERSION","ClientMetricMeasurement","anamCurrentBaseUrl","anamCurrentApiVersion","apiGatewayConfig","metricsDisabled","setClientMetricsBaseUrl","apiVersion","setClientMetricsApiGateway","setClientMetricsDisabled","disabled","anamMetricsContext","setMetricsContext","sendClientMetric","metricTags","targetPath","headers","createRTCStatsReport","outputFormat","statsByType","report","jsonReport","inboundVideo","_e","videoData","inboundAudio","audioData","outboundAudio","userAudioData","codecData","transportData","issues","issue","ErrorCode","ClientError","statusCode","details","generateCorrelationId","validateApiGatewayConfig","SignalMessageAction","DataChannelMessage","AudioPermissionState","MessageRole","AnamEvent","InternalEvent","ConnectionClosedCode","AgentAudioInputStream","signallingClient","payload","binary","byte","DEFAULT_HEARTBEAT_INTERVAL_SECONDS","DEFAULT_WS_RECONNECTION_ATTEMPTS","SignallingClient","sessionId","publicEventEmitter","internalEventEmitter","heartbeatIntervalSeconds","maxWsReconnectionAttempts","gatewayUrl","wsPath","httpProtocol","targetProtocol","httpUrl","targetWsPath","initUrl","localDescription","offerMessagePayload","offerMessage","candidate","iceCandidateMessage","chatMessage","newBuffer","heartbeatInterval","heartbeatMessage","heartbeatMessageJson","isCustomPersonaConfig","personaConfig","CoreApiRestClient","sessionToken","apiKey","baseHeaders","sessionOptions","response","errorCause","EngineApiRestClient","content","queryString","InternalEventEmitter","MessageHistoryClient","messageEvent","userMessage","personaMessage","existingMessageIndex","existingMessage","messageStreamEvent","PublicEventEmitter","closeCode","TalkMessageStreamState","TalkMessageStream","correlationId","signalMessage","partialMessage","endOfSpeech","calculateExecutionTime","startTimestamp","endTimestamp","executionTime","ToolCallManager","toolName","handler","toolCallEvent","tool_name","timestamp","parsedTimestamp","tool_call_id","webRtcEvent","pendingCall","SUCCESS_METRIC_POLLING_TIMEOUT_MS","STATS_COLLECTION_INTERVAL_MS","ICE_CANDIDATE_POOL_SIZE","StreamingClient","toolCallManager","inputAudio","oldState","newState","metrics","timeoutId","videoDetected","detectionMethod","oldAudioState","newAudioState","deviceId","wasMuted","audioConstraints","videoElementId","videoElement","answer","iceCandidateConfig","reason","handle","dataChannel","webRtcToolEvent","clientToolEvent","webRtcToolCallStartedEvent","webRtcToolCallCompletedEvent","webRtcToolCallFailedEvent","errorMessage","audioTrack","audioSender","sender","ReasoningHistoryClient","ReasoningStreamEvent","AnamClient","configError","token","base64Payload","payloadString","apiGatewayError","decodedToken","tokenType","userProvidedAudioStream","_f","_g","_h","_j","_k","_l","_m","clientConfig","engineHost","engineProtocol","signallingEndpoint","defaultIceServers","iceServers","attemptCorrelationId","streams","videoReceived","audioReceived","videoStream","audioStream","audioElementId","currentTimestamp","createClient","videoIdCounter","AnamSession","videoId","pcmData","el","INTERACTIVE_TAGS","INTERACTIVE_ROLES","HEADING_TAGS","USEFUL_ATTRS","DomAnalyzer","lines","walk","node","tag","isInteractive","isHeading","idx","attrs","attrStr","innerText","level","hashes","style","role","attr","CONFIRM_ACTIONS","ToolHandler","itemId","callId","argsStr","lowerInstr","actions","cmd","PageActions","analyzer","highlightRenderer","overflow","elTop","durationMs","select","option","nativeSetter","OverlayActions","title","caption","ConversationLogger","tool","msgs","lastMsg","NodeType","isElement","isShadowRoot","host","isNativeShadowDom","shadowRoot","fixBrowserCompatibilityIssuesInCSS","cssText","getCssRulesString","rules","getCssRuleString","rule","cssStringified","isCSSImportRule","Mirror","_this","childNode","meta","oldNode","createMirror","maskInputValue","maskInputOptions","tagName","maskInputFn","ORIGINAL_ATTRIBUTE_NAME","is2DCanvasBlank","ctx","chunkSize","getImageData","originalGetImageData","pixelBuffer","_id","tagNameRegex","IGNORED_NODE","genId","getValidTagName","element","processedTagName","stringifyStyleSheet","sheet","extractOrigin","canvasService","canvasCtx","URL_IN_CSS_REF","RELATIVE_PATH","DATA_URI","absoluteToStylesheet","href","quote1","path1","quote2","path3","filePath","maybeQuote","_i","parts_1","part","SRCSET_NOT_SPACES","SRCSET_COMMAS_OR_SPACES","getAbsoluteSrcsetString","doc","attributeValue","collectCharacters","regEx","chars","absoluteToDoc","descriptorsStr","inParens","isSVGElement","getHref","transformAttribute","_isBlockedElement","blockClass","blockSelector","eIndex","className","classMatchesRegex","checkAncestors","needMaskingText","maskTextClass","maskTextSelector","onceIframeLoaded","iframeEl","iframeLoadTimeout","win","fired","readyState","timer_1","blankUrl","onceStylesheetLoaded","link","styleSheetLoadTimeout","styleSheetLoaded","serializeNode","mirror","inlineStylesheet","maskTextFn","dataURLOptions","inlineImages","recordCanvas","keepIframeSrcFn","newlyAddedElement","rootId","getRootId","serializeElementNode","serializeTextNode","docId","parentTagName","textContent","isStyle","isScript","needBlock","attributes","stylesheet","canvasDataURL","blankCanvas","blankCanvasDataURL","image_1","oldValue_1","recordInlineImage","lowerIfExists","maybeAttr","slimDOMExcluded","sn","slimDOMOptions","serializeNodeWithId","skipChild","onSerialize","onIframeLoad","onStylesheetLoad","stylesheetLoadTimeout","preserveWhiteSpace","_serializedNode","serializedNode","recordChild","bypassOptions","childN","serializedChildNode","_o","_p","iframeDoc","serializedIframeNode","serializedLinkNode","snapshot","maskAllInputs","slimDOM","on","DEPARTED_MIRROR_ACCESS_WARNING","_mirror","prop","receiver","throttle","wait","timeout","now","hookSetter","isRevoked","original","patch","replacement","wrapped","getWindowHeight","getWindowWidth","isBlocked","isSerialized","isIgnored","isAncestorRemoved","isTouchEvent","polyfill","isSerializedIframe","isSerializedStylesheet","hasShadowRoot","StyleSheetMirror","newId","EventType","EventType2","IncrementalSource","IncrementalSource2","MouseInteractions","MouseInteractions2","CanvasContext","CanvasContext2","isNodeInLinkedList","DoubleLinkedList","moveKey","parentId","MutationBuffer","mutations","adds","addList","getNextId","ns","nextId","pushAdd","shadowHost","rootShadowHost","notInDoc","currentN","iframe","childSn","isParentRemoved","isAncestorInSet","_node","unhandledNode","attribute","old","styleObj","pname","newValue","newPriority","nodeId","deepDelete","targetId","addsSet","removes","_isParentRemoved","parentNode","set","_isAncestorInSet","mutationBuffers","isCSSGroupingRuleSupported","isCSSMediaRuleSupported","isCSSSupportsRuleSupported","isCSSConditionRuleSupported","getEventTarget","initMutationObserver","rootEl","mutationBuffer","mutationObserverCtor","angularZoneSymbol","initMoveObserver","mousemoveCb","sampling","threshold","callbackThreshold","positions","timeBaseline","wrappedCb","totalOffset","updatePosition","clientX","clientY","initMouseInteractionObserver","mouseInteractionCb","disableMap","getHandler","eventKey","eventName","initScrollObserver","scrollCb","scrollEl","initViewportResizeObserver","viewportResizeCb","lastH","lastW","updateDimension","wrapEventWithUserTriggeredFlag","enable","INPUT_TAGS","lastInputValueMap","initInputObserver","inputCb","ignoreClass","userTriggeredOnInput","eventHandler","userTriggered","isChecked","cbWithDedup","lastInputValue","currentWindow","propertyDescriptor","hookProperties","getNestedCSSRulePositions","recurse","childRule","getIdAndStyleId","styleMirror","styleId","initStyleSheetObserver","styleSheetRuleCb","stylesheetManager","insertRule","deleteRule","replaceSync","supportedNestedCSSRuleTypes","unmodifiedFunctions","typeKey","initAdoptedStyleSheetObserver","hostId","patchTarget","originalPropertyDescriptor","sheets","initStyleDeclarationObserver","styleDeclarationCb","ignoreCSSAttributes","setProperty","property","removeProperty","initMediaInteractionObserver","mediaInteractionCb","volume","muted","playbackRate","initFontObserver","fontCb","fontMap","originalFontFace","family","descriptors","fontFace","restoreHandler","initSelectionObserver","param","selectionCb","collapsed","updateSelection","selection","ranges","startContainer","startOffset","endContainer","mergeHooks","hooks","mutationCb","canvasMutationCb","initObservers","mutationObserver","mousemoveHandler","mouseInteractionHandler","scrollHandler","viewportResizeHandler","inputHandler","mediaInteractionHandler","styleSheetObserver","adoptedStyleSheetObserver","styleDeclarationObserver","fontObserver","selectionObserver","pluginHandlers","CrossOriginIframeMirror","generateIdFn","remoteId","idToRemoteMap","remoteToIdMap","idToRemoteIdMap","remoteIdToIdMap","IframeManager","cb","transformedEvent","iframeMirror","ShadowDomManager","manager","iframeElement","restorePatch","__rest","encode","arraybuffer","canvasVarMap","variableListFor","ctor","contextMap","saveWebGLVar","isInstanceOfWebGLObject","serializeArg","serializeArgs","initCanvas2DMutationObserver","props2D","recordArgs","hookHandler","initCanvasContextObserver","contextType","patchGLPrototype","prototype","mutation","initCanvasWebGLMutationObserver","WorkerClass","WorkerThreads","decodeBase64","enableUnicode","createBase64WorkerFactory","sourcemapArg","enableUnicodeArg","binaryString","createURL","kIsNodeJS","isNodeJS","createBase64WorkerFactory$1","createBase64WorkerFactory$2","WorkerFactory","CanvasManager","canvasContextReset","snapshotInProgressMap","worker","timeBetweenSnapshots","lastSnapshotTime","rafId","getCanvas","matchedCanvas","takeCanvasSnapshots","bitmap","canvas2DReset","canvasWebGL1and2Reset","setLatestRAFTimestamp","values","valuesWithType","StylesheetManager","linkEl","adoptedStyleSheetData","styles","wrapEvent","wrappedEmit","takeFullSnapshot","canvasManager","recording","record","emit","checkoutEveryNms","checkoutEveryNth","_maskInputOptions","_slimDOMOptions","packFn","mousemoveWait","recordCrossOriginIframes","collectFonts","inEmittingFrame","passEmitsToParent","lastFullSnapshotEvent","incrementalSnapshotCount","eventProcessor","isCheckout","exceedCount","exceedTime","wrappedMutationEmit","wrappedScrollEmit","wrappedCanvasMutationEmit","wrappedAdoptedStyleSheetEmit","iframeManager","shadowDomManager","observe","CHECKOUT_INTERVAL_MS","RRWEB_INCREMENTAL","SRC_MUTATION","isStyleOnlyMutation","texts","patchNonElementMatches","Proto","RRWebRecorder","stop","resolveWsUrl","RECONNECT_BASE_MS","RECONNECT_MAX_MS","EVENT_BUFFER_MAX","VisionWSClient","actionId","summary","pathname","wasConnected","RADIUS_MAP","BG_MAP","createGlassPanel","radius","elevation","interactive","glassText","variant","weight","colorMap","sizeMap","weightMap","createGlassButton","icon","btn","padding","fontSize","invariant","clamp","safeMin","minDuration","maxDuration","minDamping","maxDamping","findSpring","bounce","velocity","mass","envelope","derivative","dampingRatio","undampedFreq","exponentialDecay","calcAngularFreq","initialGuess","approximateRoot","stiffness","rootIterations","durationKeys","physicsKeys","isSpringType","getSpringOptions","springOptions","derived","spring","to","restSpeed","restDelta","damping","isResolvedFromDuration","resolveSpring","zero","resolveVelocity","createSpring","initialVelocity","initialDelta","undampedAngularFreq","angularFreq","dampedAngularFreq","freqForT","currentVelocity","isBelowVelocityThreshold","isBelowDisplacementThreshold","_t","toFromDifference","mix","sanitize","floatRegex","colorRegex","singleColorRegex","isString","number","createUnitType","unit","percent","isColorString","testProp","splitColor","aName","bName","cName","hsla","hue","saturation","lightness","alpha$1","clampRgbUnit","rgbUnit","rgba","red","green","blue","parseHex","hex","colorToken","numberToken","analyse","numColors","colors","numbers","parse","createTransformer","tokenised","numValues","convertNumbersToZero","getAnimatableNone","complex","hueToRgb","q","hslaToRgba","mixLinearColor","fromExpo","toExpo","colorTypes","getColorType","mixColor","fromColorType","toColorType","fromColor","toColor","blended","isNum","combineFunctions","transformers","getMixer","mixComplex","mixArray","blendValue","fromThis","mixObject","numNumbers","numRGB","numHSL","template","originStats","targetStats","mixNumber","detectMixerFactory","createMixers","ease","customMixer","mixers","mixerFactory","numMixers","mixer","easingFunction","fastInterpolate","slowInterpolate","inputLength","lastInputIndex","mixerIndex","foundMixerIndex","progressInRange","interpolate","isClamp","interpolator","mirrorEasing","createExpoIn","power","easeIn","easeInOut","defaultEasing","defaultOffset","_value","convertOffsetToTimes","keyframes","times","createInterpolator","decay","timeConstant","modifyTarget","amplitude","ideal","types","detectAnimationFromOptions","defaultTimestep","getCurrentTime","onNextFrame","createRenderStep","runNextFrame","toRun","toRunNextFrame","numToRun","isProcessing","flushNextFrame","toKeepAlive","keepAlive","immediate","addToCurrentFrame","frameData","maxElapsed","useDefaultElapsed","stepsOrder","steps","sync","process","startLoop","cancelSync","processStep","stepId","processFrame","loopElapsed","reverseElapsed","isForwardPlayback","hasRepeatDelayElapsed","framesync","passTimestamp","animate","autoplay","driver","repeatMax","repeatType","repeatDelay","onPlay","onStop","onRepeat","onUpdate","driverControls","repeatCount","computedDuration","latest","isComplete","interpolateFromNumber","animator","animation","repeat","complete","play","SPRING_PRESETS","springAnimate","preset","playback","springOpacity","springEnter","startOpacity","startScale","startY","completed","checkDone","currentY","currentScale","springExit","remove","endOpacity","endScale","endY","STYLE_ID","tokens","injectTokens","AUTO_DISMISS_MS","ActionExecutor","homeVisible","msgEl","intervention","detectTheme","centerX","centerY","bgColor","getEffectiveBackgroundColor","relativeLuminance","bg","parseColor","rs","gs","bs","applyTheme","theme","autoDetectAndApply","referenceRect","STATUS_COLORS","STATUS_LABELS","AvatarFrame","status","intensity","TYPE_SPEED_MS","HOLD_MS","CYCLE_PAUSE_MS","GlassSpeechBubble","prompts","onDone","tick","acceptBtn","dismissBtn","PULSE_KEYFRAMES","GlassChatPill","avatarUrl","staffName","circle","sep","ctaBtn","wasHidden","MAX_WIDTH","GlassOverlayRenderer","card","titleEl","bodyEl","img","cap","li","bullet","span","closeBtn","stackIndex","bottomOffset","cardHeight","GlassControls","minBtn","AUTO_DECLINE_MS","GlassConfirmPrompt","description","desc","VIDEO_PADDING","GlassStageBackdrop","pulseStyleInjected","GlassHighlightRenderer","overlay","entry","BUBBLE_DELAY_MS","MAX_DURATION_MS","MAX_DURATION_WARN_MS","INACTIVITY_PROMPT_MS","INACTIVITY_CLOSE_MS","WIDGET_TOOLS","HolostaffWidget","widgetPrompts","videoWrap","vid","labelSection","subtitle","recorder","ws","scrollY","docHeight","scrollPct","idleVid","wasVisible","pageTitle","pageUrl","metaDesc","headings","instructions","openingText","stream","prev","conversationSummary","wsUrl","COOKIE_NAME","existing","newMode","normalizePatterns","raw","matchPattern","pattern","normPath","normPattern","normPrefix","findMatch","patterns","SPARouter","onChange","newPath","getOrCreateVisitorId","bootstrap","createWidget","cfg","visionWs","widget","initWidget","finalConfig","visitorId","currentMatch","spaRouter","newMatch","newContainer"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199]}
|