@twick/live-player 0.14.11 → 0.14.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +6596 -6028
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6596 -6028
- package/dist/index.mjs.map +1 -1
- package/dist/internal-CHEF557f.js.map +1 -1
- package/dist/internal-pPYo5Irb.cjs.map +1 -1
- package/dist/style.css +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal-pPYo5Irb.cjs","sources":["../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/events/EventDispatcherBase.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/events/AsyncEventDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/events/EventDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/events/FlagDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/events/ValueDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/tweening/helpers.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/useScene.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/DetailedError.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/useThread.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/errorToLog.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/getContext.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/math.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/Semaphore.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/utils/usePlayback.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/tweening/interpolationFunctions.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/decorators/decorate.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/decorators/threadable.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/tweening/timingFunctions.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/tweening/tween.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/types/alignment-enums.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/flow/scheduling.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/flow/names.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/flow/run.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/signals/DependencyContext.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/signals/symbols.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/signals/utils.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/signals/SignalContext.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/signals/CompoundSignalContext.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/types/Type.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/types/Vector.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/app/PlaybackManager.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/app/PlaybackStatus.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/app/SharedWebGLContext.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/app/Player.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/app/project-settings.js","../../../node_modules/.pnpm/@twick+core@0.14.0/node_modules/@twick/core/lib/app/Stage.js","../../../node_modules/.pnpm/@twick+player-react@0.14.0/node_modules/@twick/player-react/dist/internal.js"],"sourcesContent":["/**\n * A base for dispatching {@link Subscribable}s.\n *\n * @typeParam TValue - The type of the argument passed to subscribers.\n * @typeParam THandler - The type of the callback function.\n */\nexport class EventDispatcherBase {\n constructor() {\n this.subscribable = new Subscribable(this);\n this.subscribers = new Set();\n }\n /**\n * {@inheritDoc Subscribable.subscribe}\n */\n subscribe(handler) {\n this.subscribers.add(handler);\n return () => this.unsubscribe(handler);\n }\n /**\n * {@inheritDoc Subscribable.unsubscribe}\n */\n unsubscribe(handler) {\n this.subscribers.delete(handler);\n }\n /**\n * Unsubscribe all subscribers from the event.\n */\n clear() {\n this.subscribers.clear();\n }\n notifySubscribers(value) {\n return [...this.subscribers].map(handler => handler(value));\n }\n}\n/**\n * Provides safe access to the public interface of {@link EventDispatcherBase}.\n *\n * @remarks\n * External classes can use it to subscribe to an event without being able to\n * dispatch it.\n *\n * @typeParam TValue - The type of the argument passed to subscribers.\n * @typeParam THandler - The type of the callback function.\n */\nexport class Subscribable {\n constructor(dispatcher) {\n this.dispatcher = dispatcher;\n }\n /**\n * Subscribe to the event.\n *\n * @param handler - The handler to invoke when the event occurs.\n *\n * @returns A callback function that cancels the subscription.\n */\n subscribe(handler) {\n return this.dispatcher.subscribe(handler);\n }\n /**\n * Unsubscribe from the event.\n *\n * @param handler - The handler to unsubscribe.\n */\n unsubscribe(handler) {\n this.dispatcher.unsubscribe(handler);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnREaXNwYXRjaGVyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldmVudHMvRXZlbnREaXNwYXRjaGVyQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBZ0IsbUJBQW1CO0lBQXpDO1FBSWtCLGlCQUFZLEdBQzFCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVksQ0FBQztJQTJCNUMsQ0FBQztJQXpCQzs7T0FFRztJQUNJLFNBQVMsQ0FBQyxPQUFpQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLE9BQWlCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNZLFVBQWlEO1FBQWpELGVBQVUsR0FBVixVQUFVLENBQXVDO0lBQzFELENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQUMsT0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxPQUFpQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YifQ==","import { EventDispatcherBase } from './EventDispatcherBase';\n/**\n * Dispatches an asynchronous {@link SubscribableEvent}.\n *\n * @remarks\n * The {@link dispatch} method returns a promise that resolves when all the\n * handlers resolve.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onValueChanged {\n * return this.value.subscribable;\n * }\n * // create a private dispatcher\n * private value = new AsyncEventDispatcher<number>();\n *\n * private async dispatchExample() {\n * // dispatching returns a Promise.\n * await this.value.dispatch(0);\n * }\n * }\n * ```\n *\n * @typeParam T - The type of the argument passed to subscribers.\n */\nexport class AsyncEventDispatcher extends EventDispatcherBase {\n async dispatch(value) {\n await Promise.all(this.notifySubscribers(value));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXN5bmNFdmVudERpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL0FzeW5jRXZlbnREaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBTTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxPQUFPLG9CQUF3QixTQUFRLG1CQUc1QztJQUNRLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBUTtRQUM1QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNGIn0=","import { EventDispatcherBase } from './EventDispatcherBase';\n/**\n * Dispatches a {@link SubscribableEvent}.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onValueChanged {\n * return this.value.subscribable;\n * }\n * // create a private dispatcher\n * private value = new EventDispatcher<number>();\n *\n * private dispatchExample() {\n * // dispatching will notify all subscribers.\n * this.value.dispatch(0);\n * }\n * }\n * ```\n *\n * @typeParam T - The type of the value argument to subscribers.\n */\nexport class EventDispatcher extends EventDispatcherBase {\n dispatch(value) {\n this.notifySubscribers(value);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnREaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9FdmVudERpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sT0FBTyxlQUFtQixTQUFRLG1CQUFzQjtJQUNyRCxRQUFRLENBQUMsS0FBUTtRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGIn0=","import { EventDispatcherBase } from './EventDispatcherBase';\n/**\n * Dispatches a {@link SubscribableFlagEvent}.\n *\n * @remarks\n * Subscribers are notified only when the flag is set.\n * Subsequent calls to {@link raise} don't trigger anything.\n * Any handlers added while the flag is raised are immediately invoked.\n *\n * Resetting the flag doesn't notify the subscribers, but raising it again does.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onChanged {\n * return this.flag.subscribable;\n * }\n * // create a private dispatcher\n * private flag = new FlagDispatcher();\n *\n * private dispatchExample() {\n * // setting the flag will notify all subscribers\n * this.flag.raise();\n * }\n * }\n * ```\n */\nexport class FlagDispatcher extends EventDispatcherBase {\n constructor() {\n super(...arguments);\n this.value = false;\n }\n /**\n * Notify all current and future subscribers.\n */\n raise() {\n if (!this.value) {\n this.value = true;\n this.notifySubscribers();\n }\n }\n /**\n * Stop notifying future subscribers.\n */\n reset() {\n this.value = false;\n }\n /**\n * Are subscribers being notified?\n */\n isRaised() {\n return this.value;\n }\n subscribe(handler) {\n const unsubscribe = super.subscribe(handler);\n if (this.value) {\n handler();\n }\n return unsubscribe;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxhZ0Rpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL0ZsYWdEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsbUJBQXlCO0lBQTdEOztRQUNVLFVBQUssR0FBRyxLQUFLLENBQUM7SUFpQ3hCLENBQUM7SUEvQkM7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxPQUEyQjtRQUMxQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIn0=","import { EventDispatcherBase, Subscribable } from './EventDispatcherBase';\n/**\n * Dispatches a {@link SubscribableValueEvent}\n *\n * @remarks\n * Changing the value stored by a value dispatcher will immediately notify all\n * its subscribers.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onValueChanged {\n * return this.value.subscribable;\n * }\n * // create a private dispatcher\n * private value = new ValueDispatcher(0);\n *\n * private changingValueExample() {\n * // changing the value will notify all subscribers.\n * this.value.current = 7;\n * }\n * }\n * ```\n *\n * @typeParam T - The type of the value passed to subscribers.\n */\nexport class ValueDispatcher extends EventDispatcherBase {\n /**\n * {@inheritDoc SubscribableValueEvent.current}\n */\n get current() {\n return this.value;\n }\n /**\n * Set the current value of this dispatcher.\n *\n * @remarks\n * Setting the value will immediately notify all subscribers.\n *\n * @param value - The new value.\n */\n set current(value) {\n this.value = value;\n this.notifySubscribers(value);\n }\n /**\n * @param value - The initial value.\n */\n constructor(value) {\n super();\n this.value = value;\n this.subscribable = new SubscribableValueEvent(this);\n }\n /**\n * {@inheritDoc SubscribableValueEvent.subscribe}\n */\n subscribe(handler, dispatchImmediately = true) {\n const unsubscribe = super.subscribe(handler);\n if (dispatchImmediately) {\n handler(this.value);\n }\n return unsubscribe;\n }\n}\n/**\n * Provides safe access to the public interface of {@link ValueDispatcher}.\n *\n * @remarks\n * External classes can use it to subscribe to an event without being able to\n * dispatch it.\n *\n * @typeParam T - The type of the value passed to subscribers.\n */\nexport class SubscribableValueEvent extends Subscribable {\n /**\n * Get the most recent value of this dispatcher.\n */\n get current() {\n return this.dispatcher.current;\n }\n /**\n * Subscribe to the event.\n *\n * Subscribing will immediately invoke the handler with the most recent value.\n *\n * @param handler - The handler to invoke when the event occurs.\n * @param dispatchImmediately - Whether the handler should be immediately\n * invoked with the most recent value.\n *\n * @returns Callback function that cancels the subscription.\n */\n subscribe(handler, dispatchImmediately = true) {\n return this.dispatcher.subscribe(handler, dispatchImmediately);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsdWVEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9WYWx1ZURpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxPQUFPLGVBQW1CLFNBQVEsbUJBQXNCO0lBSTVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsT0FBTyxDQUFDLEtBQVE7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQTJCLEtBQVE7UUFDakMsS0FBSyxFQUFFLENBQUM7UUFEaUIsVUFBSyxHQUFMLEtBQUssQ0FBRztRQTFCbkIsaUJBQVksR0FDMUIsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQTJCbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE9BQXdCLEVBQUUsbUJBQW1CLEdBQUcsSUFBSTtRQUNuRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxzQkFBMEIsU0FBUSxZQUc5QztJQUNDOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQTRCLElBQUksQ0FBQyxVQUFXLENBQUMsT0FBTyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksU0FBUyxDQUNkLE9BQXdCLEVBQ3hCLG1CQUFtQixHQUFHLElBQUk7UUFFMUIsT0FBNEIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxTQUFTLENBQ3BELE9BQU8sRUFDUCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9","export function map(from, to, value) {\n return from + (to - from) * value;\n}\nexport function remap(fromIn, toIn, fromOut, toOut, value) {\n return fromOut + ((value - fromIn) * (toOut - fromOut)) / (toIn - fromIn);\n}\nexport function clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n}\nexport function clampRemap(fromIn, toIn, fromOut, toOut, value) {\n const remappedValue = remap(fromIn, toIn, fromOut, toOut, value);\n if (fromOut > toOut)\n [fromOut, toOut] = [toOut, fromOut];\n return clamp(fromOut, toOut, remappedValue);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90d2VlbmluZy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxLQUFhO0lBQ3pELE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FDbkIsTUFBYyxFQUNkLElBQVksRUFDWixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWE7SUFFYixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQzNELE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsTUFBYyxFQUNkLElBQVksRUFDWixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWE7SUFFYixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxHQUFHLEtBQUs7UUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzlDLENBQUMifQ==","const SceneStack = [];\n/**\n * Get a reference to the current scene.\n */\nexport function useScene() {\n const scene = SceneStack.at(-1);\n if (!scene) {\n throw new Error('The scene is not available in the current context.');\n }\n return scene;\n}\nexport function startScene(scene) {\n SceneStack.push(scene);\n}\nexport function endScene(scene) {\n if (SceneStack.pop() !== scene) {\n throw new Error('startScene/endScene were called out of order.');\n }\n}\nexport function useLogger() {\n return SceneStack.at(-1)?.logger ?? console;\n}\n/**\n * Mark the current scene as ready to transition out.\n *\n * @remarks\n * Usually used together with transitions. When a scene is marked as finished,\n * the transition will start but the scene generator will continue running.\n */\nexport function finishScene() {\n useScene().enterCanTransitionOut();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlU2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlU2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLEdBQVksRUFBRSxDQUFDO0FBRS9COztHQUVHO0FBQ0gsTUFBTSxVQUFVLFFBQVE7SUFDdEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFZO0lBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUNuQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVztJQUN6QixRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3JDLENBQUMifQ==","export class DetailedError extends Error {\n constructor(props, remarks) {\n if (typeof props === 'string') {\n super(props);\n this.remarks = remarks;\n }\n else {\n super(props.message);\n this.remarks = props.remarks;\n this.object = props.object;\n this.durationMs = props.durationMs;\n this.inspect = props.inspect;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGV0YWlsZWRFcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9EZXRhaWxlZEVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxhQUFjLFNBQVEsS0FBSztJQW9CdEMsWUFBbUIsS0FBa0MsRUFBRSxPQUFnQjtRQUNyRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7Q0FDRiJ9","import { DetailedError } from './DetailedError';\nconst ThreadStack = [];\n/**\n * Get a reference to the current thread.\n */\nexport function useThread() {\n const thread = ThreadStack.at(-1);\n if (!thread) {\n throw new DetailedError('The thread is not available in the current context.', \n // language=markdown\n `\\`useThread()\\` can only be called from within generator functions.\n It's not available during rendering.`);\n }\n return thread;\n}\nexport function startThread(thread) {\n ThreadStack.push(thread);\n}\nexport function endThread(thread) {\n if (ThreadStack.pop() !== thread) {\n throw new Error('startThread/endThread was called out of order.');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3VzZVRocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxhQUFhLENBQ3JCLHFEQUFxRDtRQUNyRCxvQkFBb0I7UUFDcEI7MkNBQ3FDLENBQ3RDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYztJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWM7SUFDdEMsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7QUFDSCxDQUFDIn0=","export function errorToLog(error) {\n return {\n message: error.message,\n stack: error.stack,\n remarks: error.remarks,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JUb0xvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lcnJvclRvTG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBVTtJQUNuQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87S0FDdkIsQ0FBQztBQUNKLENBQUMifQ==","export function getContext(options, canvas = document.createElement('canvas')) {\n const context = canvas.getContext('2d', options);\n if (!context) {\n throw new Error('Could not create a 2D context.');\n }\n return context;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9nZXRDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxVQUFVLENBQ3hCLE9BQTBDLEVBQzFDLFNBQTRCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRTVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyJ9","/**\n * A constant for converting radians to degrees\n *\n * @example\n * const degrees = 0.6 * RAD2DEG;\n */\nexport const RAD2DEG = 180 / Math.PI;\n/**\n * A constant for converting degrees to radians\n *\n * @example\n * const radians = 30 * DEG2RAD;\n */\nexport const DEG2RAD = Math.PI / 180;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBRXJDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDIn0=","/**\n * A simple semaphore implementation with a capacity of 1.\n *\n * @internal\n */\nexport class Semaphore {\n constructor() {\n this.resolveCurrent = null;\n this.current = null;\n }\n async acquire() {\n while (this.current) {\n await this.current;\n }\n this.current = new Promise(resolve => {\n this.resolveCurrent = resolve;\n });\n }\n release() {\n this.current = null;\n this.resolveCurrent?.();\n this.resolveCurrent = null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VtYXBob3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1NlbWFwaG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUFDVSxtQkFBYyxHQUF3QixJQUFJLENBQUM7UUFDM0MsWUFBTyxHQUF5QixJQUFJLENBQUM7SUFnQi9DLENBQUM7SUFkUSxLQUFLLENBQUMsT0FBTztRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7Q0FDRiJ9","const PlaybackStack = [];\n/**\n * Get a reference to the playback status.\n */\nexport function usePlayback() {\n const playback = PlaybackStack.at(-1);\n if (!playback) {\n throw new Error('The playback is not available in the current context.');\n }\n return playback;\n}\nexport function startPlayback(playback) {\n PlaybackStack.push(playback);\n}\nexport function endPlayback(playback) {\n if (PlaybackStack.pop() !== playback) {\n throw new Error('startPlayback/endPlayback were called out of order.');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUGxheWJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlUGxheWJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQXFCLEVBQUUsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQXdCO0lBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBd0I7SUFDbEQsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDIn0=","import { useLogger } from '../utils';\nimport { clamp, map } from './helpers';\nexport function textLerp(from, to, value) {\n // left to right\n if (to.length >= from.length) {\n const current = Math.floor(to.length * value);\n const currentLength = Math.floor(map(from.length - 1, to.length, value));\n let text = '';\n for (let i = 0; i < to.length; i++) {\n if (i < current) {\n text += to[i];\n }\n else if (from[i] || i <= currentLength) {\n text += from[i] ?? to[i];\n }\n }\n return text;\n }\n // right to left\n else {\n const current = Math.round(from.length * (1 - value));\n const currentLength = Math.floor(map(from.length + 1, to.length, value));\n const text = [];\n for (let i = from.length - 1; i >= 0; i--) {\n if (i < current) {\n text.unshift(from[i]);\n }\n else if (to[i] || i < currentLength) {\n text.unshift(to[i] ?? from[i]);\n }\n }\n return text.join('');\n }\n}\nexport function deepLerp(from, to, value, suppressWarnings = false) {\n if (value === 0)\n return from;\n if (value === 1)\n return to;\n if (from == null || to == null) {\n if (!suppressWarnings) {\n useLogger().warn(`Attempting to lerp ${from} -> ${to} may result in unexpected behavior.`);\n }\n return undefined;\n }\n if (typeof from === 'number' && typeof to === 'number') {\n return map(from, to, value);\n }\n if (typeof from === 'string' && typeof to === 'string') {\n return textLerp(from, to, value);\n }\n if (typeof from === 'boolean' && typeof to === 'boolean') {\n return value < 0.5 ? from : to;\n }\n if ('lerp' in from) {\n return from.lerp(to, value);\n }\n if (from && to && typeof from === 'object' && typeof to === 'object') {\n if (Array.isArray(from) && Array.isArray(to)) {\n if (from.length === to.length) {\n return from.map((f, i) => deepLerp(f, to[i], value));\n }\n }\n else {\n let toObject = false;\n if (!(from instanceof Map) && !(to instanceof Map)) {\n toObject = true;\n from = new Map(Object.entries(from));\n to = new Map(Object.entries(to));\n }\n if (from instanceof Map && to instanceof Map) {\n const result = new Map();\n for (const key of new Set([...from.keys(), ...to.keys()])) {\n const inter = deepLerp(from.get(key), to.get(key), value, true);\n if (inter !== undefined)\n result.set(key, inter);\n }\n return toObject ? Object.fromEntries(result) : result;\n }\n }\n }\n // fallback with an immediate jump to the new value\n return to;\n}\nexport function boolLerp(from, to, value) {\n return value < 0.5 ? from : to;\n}\nexport function arcLerp(value, reverse, ratio) {\n let flip = reverse;\n if (ratio > 1) {\n ratio = 1 / ratio;\n }\n else {\n flip = !flip;\n }\n const normalized = flip\n ? Math.acos(clamp(-1, 1, 1 - value))\n : Math.asin(value);\n const radians = map(normalized, map(0, Math.PI / 2, value), ratio);\n let xValue = Math.sin(radians);\n let yValue = 1 - Math.cos(radians);\n if (reverse) {\n [xValue, yValue] = [yValue, xValue];\n }\n return { x: xValue, y: yValue };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90d2VlbmluZy9pbnRlcnBvbGF0aW9uRnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFNckMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFZLEVBQUUsRUFBVSxFQUFFLEtBQWE7SUFDOUQsZ0JBQWdCO0lBQ2hCLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDO1FB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","export function decorate(fn, ...decorators) {\n const target = { [fn.name]: fn };\n const descriptor = Object.getOwnPropertyDescriptor(target, fn.name);\n if (descriptor) {\n for (let i = decorators.length - 1; i >= 0; i--) {\n decorators[i](target, fn.name, descriptor);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjb3JhdG9ycy9kZWNvcmF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEVBQVksRUFBRSxHQUFHLFVBQTZCO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLEVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDL0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==","export function threadable(customName) {\n return function (_, propertyKey, descriptor) {\n descriptor.value.prototype.name = customName ?? propertyKey;\n descriptor.value.prototype.threadable = true;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL3RocmVhZGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFVBQVUsQ0FBQyxVQUFtQjtJQUM1QyxPQUFPLFVBQ0wsQ0FBVSxFQUNWLFdBQTRCLEVBQzVCLFVBQThCO1FBRTlCLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksV0FBVyxDQUFDO1FBQzVELFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDL0MsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9","import { map, remap } from './helpers';\n/*\n * All easing implementations taken from https://easings.net/\n */\n// Sine\nexport function sin(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.sin(value));\n}\nexport function easeInSine(value, from = 0, to = 1) {\n value = 1 - Math.cos((value * Math.PI) / 2);\n return map(from, to, value);\n}\nexport function easeOutSine(value, from = 0, to = 1) {\n value = Math.sin((value * Math.PI) / 2);\n return map(from, to, value);\n}\nexport function easeInOutSine(value, from = 0, to = 1) {\n value = -(Math.cos(Math.PI * value) - 1) / 2;\n return map(from, to, value);\n}\n// Quadratic\nexport function easeInQuad(value, from = 0, to = 1) {\n value = value * value;\n return map(from, to, value);\n}\nexport function easeOutQuad(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 2);\n return map(from, to, value);\n}\nexport function easeInOutQuad(value, from = 0, to = 1) {\n value = value < 0.5 ? 2 * value * value : 1 - Math.pow(-2 * value + 2, 2) / 2;\n return map(from, to, value);\n}\n// Cubic\nexport function easeInCubic(value, from = 0, to = 1) {\n value = value * value * value;\n return map(from, to, value);\n}\nexport function easeOutCubic(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 3);\n return map(from, to, value);\n}\nexport function easeInOutCubic(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? 4 * value * value * value\n : 1 - Math.pow(-2 * value + 2, 3) / 2;\n return map(from, to, value);\n}\n// Quartic\nexport function easeInQuart(value, from = 0, to = 1) {\n value = value * value * value * value;\n return map(from, to, value);\n}\nexport function easeOutQuart(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 4);\n return map(from, to, value);\n}\nexport function easeInOutQuart(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? 8 * value * value * value * value\n : 1 - Math.pow(-2 * value + 2, 4) / 2;\n return map(from, to, value);\n}\n// Quintic\nexport function easeInQuint(value, from = 0, to = 1) {\n value = value * value * value * value * value;\n return map(from, to, value);\n}\nexport function easeOutQuint(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 5);\n return map(from, to, value);\n}\nexport function easeInOutQuint(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? 16 * value * value * value * value * value\n : 1 - Math.pow(-2 * value + 2, 5) / 2;\n return map(from, to, value);\n}\n// Exponential\nexport function easeInExpo(value, from = 0, to = 1) {\n value = value === 0 ? 0 : Math.pow(2, 10 * value - 10);\n return map(from, to, value);\n}\nexport function easeOutExpo(value, from = 0, to = 1) {\n value = value === 1 ? 1 : 1 - Math.pow(2, -10 * value);\n return map(from, to, value);\n}\nexport function easeInOutExpo(value, from = 0, to = 1) {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : value < 0.5\n ? Math.pow(2, 20 * value - 10) / 2\n : (2 - Math.pow(2, -20 * value + 10)) / 2;\n return map(from, to, value);\n}\n// Circular\nexport function easeInCirc(value, from = 0, to = 1) {\n value = 1 - Math.sqrt(1 - Math.pow(value, 2));\n return map(from, to, value);\n}\nexport function easeOutCirc(value, from = 0, to = 1) {\n value = Math.sqrt(1 - Math.pow(value - 1, 2));\n return map(from, to, value);\n}\nexport function easeInOutCirc(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * value, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * value + 2, 2)) + 1) / 2;\n return map(from, to, value);\n}\n// Back\nexport function createEaseInBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = (s + 1) * value * value * value - s * value * value;\n return map(from, to, value);\n };\n}\nexport function createEaseOutBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = 1 + (s + 1) * Math.pow(value - 1, 3) + s * Math.pow(value - 1, 2);\n return map(from, to, value);\n };\n}\nexport function createEaseInOutBack(s = 1.70158, v = 1.525) {\n return (value, from = 0, to = 1) => {\n value =\n value < 0.5\n ? (Math.pow(2 * value, 2) * ((s * v + 1) * 2 * value - s * v)) / 2\n : (Math.pow(2 * value - 2, 2) *\n ((s * v + 1) * (value * 2 - 2) + s * v) +\n 2) /\n 2;\n return map(from, to, value);\n };\n}\n// Elastic\nexport function createEaseInElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : -Math.pow(2, 10 * value - 10) * Math.sin((value * 10 - 10.75) * s);\n return map(from, to, value);\n };\n}\nexport function createEaseOutElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : Math.pow(2, -10 * value) * Math.sin((value * 10 - 0.75) * s) + 1;\n return map(from, to, value);\n };\n}\nexport function createEaseInOutElastic(s = 1.39626) {\n return (value, from = 0, to = 1) => {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : value < 0.5\n ? -(Math.pow(2, 20 * value - 10) *\n Math.sin((20 * value - 11.125) * s)) / 2\n : (Math.pow(2, -20 * value + 10) *\n Math.sin((20 * value - 11.125) * s)) /\n 2 +\n 1;\n return map(from, to, value);\n };\n}\n// Bounce\nexport function createEaseInBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return 1 - easeOutBounce(1 - value, from, to);\n };\n}\nexport function createEaseOutBounce(n = 7.5625, d = 2.75) {\n return (value, from = 0, to = 1) => {\n if (value < 1 / d) {\n value = n * value * value;\n }\n else if (value < 2 / d) {\n value = n * (value -= 1.505 / d) * value + 0.75;\n }\n else if (value < 2.5 / d) {\n value = n * (value -= 2.25 / d) * value + 0.9375;\n }\n else {\n value = n * (value -= 2.625 / d) * value + 0.984375;\n }\n return map(from, to, value);\n };\n}\nexport function createEaseInOutBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return value < 0.5\n ? (1 - easeOutBounce(1 - 2 * value, from, to)) / 2\n : (1 + easeOutBounce(2 * value - 1, from, to)) / 2;\n };\n}\n// Linear\nexport function linear(value, from = 0, to = 1) {\n return map(from, to, value);\n}\n// Cosine\nexport function cos(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.cos(value));\n}\n// Sensible defaults for functions with parameters that can be user defined\nexport const easeInBack = createEaseInBack();\nexport const easeOutBack = createEaseOutBack();\nexport const easeInOutBack = createEaseInOutBack();\nexport const easeInBounce = createEaseInBounce();\nexport const easeOutBounce = createEaseOutBounce();\nexport const easeInOutBounce = createEaseInOutBounce();\nexport const easeInElastic = createEaseInElastic();\nexport const easeOutElastic = createEaseOutElastic();\nexport const easeInOutElastic = createEaseInOutElastic();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nRnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R3ZWVuaW5nL3RpbWluZ0Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQU1yQzs7R0FFRztBQUVILE9BQU87QUFDUCxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2pELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUN4RCxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDekQsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLElBQUksR0FB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LENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMxRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQzVELEtBQUs7UUFDSCxLQUFLLEdBQUcsR0FBRztZQUNULENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSztZQUNuQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsVUFBVTtBQUNWLE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDekQsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFOUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMxRCxLQUFLLEdB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","import { decorate, threadable } from '../decorators';\nimport { useThread } from '../utils';\ndecorate(tween, threadable());\nexport function* tween(seconds, onProgress, onEnd) {\n const thread = useThread();\n const startTime = thread.time();\n const endTime = thread.time() + seconds;\n onProgress(0, 0);\n while (endTime > thread.fixed) {\n const time = thread.fixed - startTime;\n const value = time / seconds;\n if (time > 0) {\n onProgress(value, time);\n }\n yield;\n }\n thread.time(endTime);\n onProgress(1, seconds);\n onEnd?.(1, seconds);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdlZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHdlZW5pbmcvdHdlZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDOUIsTUFBTSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQ3BCLE9BQWUsRUFDZixVQUFpRCxFQUNqRCxLQUE2QztJQUU3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUUzQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV4QyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE9BQU8sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsS0FBSyxDQUFDO0lBQ1IsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckIsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEIsQ0FBQyJ9","export var Direction;\n(function (Direction) {\n Direction[Direction[\"Top\"] = 4] = \"Top\";\n Direction[Direction[\"Bottom\"] = 8] = \"Bottom\";\n Direction[Direction[\"Left\"] = 16] = \"Left\";\n Direction[Direction[\"Right\"] = 32] = \"Right\";\n})(Direction || (Direction = {}));\nexport var Center;\n(function (Center) {\n Center[Center[\"Vertical\"] = 1] = \"Vertical\";\n Center[Center[\"Horizontal\"] = 2] = \"Horizontal\";\n})(Center || (Center = {}));\nexport var Origin;\n(function (Origin) {\n Origin[Origin[\"Middle\"] = 3] = \"Middle\";\n Origin[Origin[\"Top\"] = 5] = \"Top\";\n Origin[Origin[\"Bottom\"] = 9] = \"Bottom\";\n Origin[Origin[\"Left\"] = 18] = \"Left\";\n Origin[Origin[\"Right\"] = 34] = \"Right\";\n Origin[Origin[\"TopLeft\"] = 20] = \"TopLeft\";\n Origin[Origin[\"TopRight\"] = 36] = \"TopRight\";\n Origin[Origin[\"BottomLeft\"] = 24] = \"BottomLeft\";\n Origin[Origin[\"BottomRight\"] = 40] = \"BottomRight\";\n})(Origin || (Origin = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25tZW50LWVudW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2FsaWdubWVudC1lbnVtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLHVDQUFPLENBQUE7SUFDUCw2Q0FBVSxDQUFBO0lBQ1YsMENBQVMsQ0FBQTtJQUNULDRDQUFVLENBQUE7QUFDWixDQUFDLEVBTFcsU0FBUyxLQUFULFNBQVMsUUFLcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxNQUdYO0FBSEQsV0FBWSxNQUFNO0lBQ2hCLDJDQUFZLENBQUE7SUFDWiwrQ0FBYyxDQUFBO0FBQ2hCLENBQUMsRUFIVyxNQUFNLEtBQU4sTUFBTSxRQUdqQjtBQUVELE1BQU0sQ0FBTixJQUFZLE1BVVg7QUFWRCxXQUFZLE1BQU07SUFDaEIsdUNBQVUsQ0FBQTtJQUNWLGlDQUFPLENBQUE7SUFDUCx1Q0FBVSxDQUFBO0lBQ1Ysb0NBQVMsQ0FBQTtJQUNULHNDQUFVLENBQUE7SUFDViwwQ0FBWSxDQUFBO0lBQ1osNENBQWEsQ0FBQTtJQUNiLGdEQUFlLENBQUE7SUFDZixrREFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBVlcsTUFBTSxLQUFOLE1BQU0sUUFVakIifQ==","import { decorate, threadable } from '../decorators';\nimport { usePlayback, useThread } from '../utils';\ndecorate(waitFor, threadable());\n/**\n * Wait for the given amount of time.\n *\n * @example\n * ```ts\n * // current time: 0s\n * yield waitFor(2);\n * // current time: 2s\n * yield waitFor(3);\n * // current time: 5s\n * ```\n *\n * @param seconds - The relative time in seconds.\n * @param after - An optional task to be run after the function completes.\n */\nexport function* waitFor(seconds = 0, after) {\n const thread = useThread();\n const step = usePlayback().framesToSeconds(1);\n const targetTime = thread.time() + seconds;\n // subtracting the step is not necessary, but it keeps the thread time ahead\n // of the project time.\n while (targetTime - step > thread.fixed) {\n yield;\n }\n thread.time(targetTime);\n if (after) {\n yield* after;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG93L3NjaGVkdWxpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEQsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQ3RCLE9BQU8sR0FBRyxDQUFDLEVBQ1gsS0FBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDM0MsNEVBQTRFO0lBQzVFLHVCQUF1QjtJQUN2QixPQUFPLFVBQVUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQztJQUNSLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyJ9","export function setTaskName(task, source) {\n const prototype = Object.getPrototypeOf(task);\n if (!prototype.threadable) {\n prototype.threadable = true;\n prototype.name = typeof source === 'string' ? source : getTaskName(source);\n }\n}\nexport function getTaskName(task) {\n return Object.getPrototypeOf(task).name ?? null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxvdy9uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWUsRUFBRSxNQUEwQjtJQUNyRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUIsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDNUIsU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFlO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2xELENBQUMifQ==","import { setTaskName } from './names';\nexport function run(firstArg, runner) {\n let task;\n if (typeof firstArg === 'string') {\n task = runner();\n setTaskName(task, firstArg);\n }\n else {\n task = firstArg();\n setTaskName(task, task);\n }\n return task;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zsb3cvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFnRHBDLE1BQU0sVUFBVSxHQUFHLENBQ2pCLFFBQTBDLEVBQzFDLE1BQThCO0lBRTlCLElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEdBQUcsTUFBTyxFQUFFLENBQUM7UUFDakIsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNsQixXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==","import { FlagDispatcher } from '../events';\nimport { DetailedError } from '../utils';\nexport class DependencyContext {\n static collectPromise(promise, initialValue = null) {\n const handle = {\n promise,\n value: initialValue,\n stack: new Error().stack,\n };\n const context = this.collectionStack.at(-1);\n if (context) {\n handle.owner = context.owner;\n }\n promise.then(value => {\n handle.value = value;\n context?.markDirty();\n });\n this.promises.push(handle);\n return handle;\n }\n static hasPromises() {\n return this.promises.length > 0;\n }\n static async consumePromises() {\n const promises = [...this.promises];\n await Promise.all(promises.map(handle => handle.promise));\n this.promises = this.promises.filter(v => !promises.includes(v));\n return promises;\n }\n constructor(owner) {\n this.owner = owner;\n this.dependencies = new Set();\n this.event = new FlagDispatcher();\n this.markDirty = () => this.event.raise();\n this.invokable = this.invoke.bind(this);\n Object.defineProperty(this.invokable, 'context', {\n value: this,\n });\n Object.defineProperty(this.invokable, 'toPromise', {\n value: this.toPromise.bind(this),\n });\n }\n invoke() {\n // do nothing\n }\n startCollecting() {\n if (DependencyContext.collectionSet.has(this)) {\n throw new DetailedError('A circular dependency occurred between signals.', `This can happen when signals reference each other in a loop.\n Try using the attached stack trace to locate said loop.`);\n }\n DependencyContext.collectionSet.add(this);\n DependencyContext.collectionStack.push(this);\n }\n finishCollecting() {\n DependencyContext.collectionSet.delete(this);\n if (DependencyContext.collectionStack.pop() !== this) {\n throw new Error('collectStart/collectEnd was called out of order.');\n }\n }\n clearDependencies() {\n this.dependencies.forEach(dep => dep.unsubscribe(this.markDirty));\n this.dependencies.clear();\n }\n collect() {\n const signal = DependencyContext.collectionStack.at(-1);\n if (signal) {\n signal.dependencies.add(this.event.subscribable);\n this.event.subscribe(signal.markDirty);\n }\n }\n dispose() {\n this.clearDependencies();\n this.event.clear();\n this.owner = null;\n }\n async toPromise() {\n do {\n await DependencyContext.consumePromises();\n this.invokable();\n } while (DependencyContext.hasPromises());\n return this.invokable;\n }\n}\nDependencyContext.collectionSet = new Set();\nDependencyContext.collectionStack = [];\nDependencyContext.promises = [];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmFscy9EZXBlbmRlbmN5Q29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFTdkMsTUFBTSxPQUFPLGlCQUFpQjtJQVlyQixNQUFNLENBQUMsY0FBYyxDQUMxQixPQUFtQixFQUNuQixlQUF5QixJQUFJO1FBRTdCLE1BQU0sTUFBTSxHQUE0QjtZQUN0QyxPQUFPO1lBQ1AsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSztTQUN6QixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJ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","export const DEFAULT = Symbol.for('@twick/core/signals/default');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduYWxzL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQyJ9","export function isReactive(value) {\n return typeof value === 'function';\n}\nexport function modify(value, modification) {\n return isReactive(value) ? () => modification(value()) : modification(value);\n}\nexport function unwrap(value) {\n return isReactive(value) ? value() : value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmFscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsVUFBVSxDQUFJLEtBQXFCO0lBQ2pELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUNwQixLQUF5QixFQUN6QixZQUFtQztJQUVuQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBSSxLQUFxQjtJQUM3QyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3QyxDQUFDIn0=","import { run, waitFor } from '../flow';\nimport { easeInOutCubic, tween } from '../tweening';\nimport { errorToLog, useLogger } from '../utils';\nimport { DependencyContext } from './DependencyContext';\nimport { DEFAULT } from './symbols';\nimport { isReactive, unwrap } from './utils';\nexport class SignalContext extends DependencyContext {\n constructor(initial, interpolation, owner = undefined, parser = value => value, extensions = {}) {\n super(owner);\n this.initial = initial;\n this.interpolation = interpolation;\n this.parser = parser;\n this.tweening = false;\n Object.defineProperty(this.invokable, 'reset', {\n value: this.reset.bind(this),\n });\n Object.defineProperty(this.invokable, 'save', {\n value: this.save.bind(this),\n });\n Object.defineProperty(this.invokable, 'isInitial', {\n value: this.isInitial.bind(this),\n });\n if (this.initial !== undefined) {\n this.current = this.initial;\n this.markDirty();\n if (!isReactive(this.initial)) {\n this.last = this.parse(this.initial);\n }\n }\n this.extensions = {\n getter: this.getter.bind(this),\n setter: this.setter.bind(this),\n tweener: this.tweener.bind(this),\n ...extensions,\n };\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n set(value) {\n this.extensions.setter(value);\n return this.owner;\n }\n setter(value) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n if (this.current === value) {\n return this.owner;\n }\n this.current = value;\n this.markDirty();\n this.clearDependencies();\n if (!isReactive(value)) {\n this.last = this.parse(value);\n }\n return this.owner;\n }\n get() {\n return this.extensions.getter();\n }\n getter() {\n if (this.event.isRaised() && isReactive(this.current)) {\n this.clearDependencies();\n this.startCollecting();\n try {\n this.last = this.parse(this.current());\n }\n catch (e) {\n useLogger().error({\n ...errorToLog(e),\n inspect: this.owner?.key,\n });\n }\n this.finishCollecting();\n }\n this.event.reset();\n this.collect();\n return this.last;\n }\n invoke(value, duration, timingFunction = easeInOutCubic, interpolationFunction = this.interpolation) {\n if (value === undefined) {\n return this.get();\n }\n if (duration === undefined) {\n return this.set(value);\n }\n const queue = this.createQueue(timingFunction, interpolationFunction);\n return queue.to(value, duration);\n }\n createQueue(defaultTimingFunction, defaultInterpolationFunction) {\n const initial = this.get();\n const queue = [];\n const task = run('animation chain', function* animate() {\n while (queue.length > 0) {\n yield* queue.shift();\n }\n });\n task.to = (value, duration, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(this.tween(value, duration, timingFunction, interpolationFunction));\n return task;\n };\n task.back = (time, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(this.tween(initial, time, defaultTimingFunction, defaultInterpolationFunction));\n return task;\n };\n task.wait = (duration) => {\n queue.push(waitFor(duration));\n return task;\n };\n task.run = (generator) => {\n queue.push(generator);\n return task;\n };\n task.do = (callback) => {\n queue.push(run(function* () {\n callback();\n }));\n return task;\n };\n return task;\n }\n *tween(value, duration, timingFunction, interpolationFunction) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n this.tweening = true;\n yield* this.extensions.tweener(value, duration, timingFunction, interpolationFunction);\n this.set(value);\n this.tweening = false;\n }\n *tweener(value, duration, timingFunction, interpolationFunction) {\n const from = this.get();\n yield* tween(duration, v => {\n this.set(interpolationFunction(from, this.parse(unwrap(value)), timingFunction(v)));\n });\n }\n dispose() {\n super.dispose();\n this.initial = undefined;\n this.current = undefined;\n this.last = undefined;\n }\n /**\n * Reset the signal to its initial value (if one has been set).\n *\n * @example\n * ```ts\n * const signal = createSignal(7);\n *\n * signal.reset();\n * // same as:\n * signal(7);\n * ```\n */\n reset() {\n if (this.initial !== undefined) {\n this.set(this.initial);\n }\n return this.owner;\n }\n /**\n * Compute the current value of the signal and immediately set it.\n *\n * @remarks\n * This method can be used to stop the signal from updating while keeping its\n * current value.\n *\n * @example\n * ```ts\n * signal.save();\n * // same as:\n * signal(signal());\n * ```\n */\n save() {\n return this.set(this.get());\n }\n /**\n * Check if the signal is currently using its initial value.\n *\n * @example\n * ```ts\n *\n * const signal = createSignal(0);\n * signal.isInitial(); // true\n *\n * signal(5);\n * signal.isInitial(); // false\n *\n * signal(DEFAULT);\n * signal.isInitial(); // true\n * ```\n */\n isInitial() {\n this.collect();\n return this.current === this.initial;\n }\n /**\n * Get the initial value of this signal.\n */\n getInitial() {\n return this.initial;\n }\n /**\n * Get the raw value of this signal.\n *\n * @remarks\n * If the signal was provided with a factory function, the function itself\n * will be returned, without invoking it.\n *\n * This method can be used to create copies of signals.\n *\n * @example\n * ```ts\n * const a = createSignal(2);\n * const b = createSignal(() => a);\n * // b() == 2\n *\n * const bClone = createSignal(b.raw());\n * // bClone() == 2\n *\n * a(4);\n * // b() == 4\n * // bClone() == 4\n * ```\n */\n raw() {\n return this.current;\n }\n /**\n * Is the signal undergoing a tween?\n */\n isTweening() {\n return this.tweening;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmFsQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduYWxzL1NpZ25hbENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFHckMsT0FBTyxFQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQVNsQyxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQWtDM0MsTUFBTSxPQUFPLGFBSVgsU0FBUSxpQkFBeUI7SUFNakMsWUFDVSxPQUE4QyxFQUNyQyxhQUE0QyxFQUM3RCxRQUFrQyxTQUFVLEVBQ2xDLFNBQTBDLEtBQUssQ0FBQyxFQUFFLENBQVMsS0FBSyxFQUMxRSxhQUE4RCxFQUFFO1FBRWhFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQU5MLFlBQU8sR0FBUCxPQUFPLENBQXVDO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUErQjtRQUVuRCxXQUFNLEdBQU4sTUFBTSxDQUEwRDtRQU5sRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBV3pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7WUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQzVDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFB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","import { map } from '../tweening/helpers';\nimport { SignalContext } from './SignalContext';\nimport { isReactive, modify } from './utils';\nexport class CompoundSignalContext extends SignalContext {\n constructor(entries, parser, initial, interpolation, owner = undefined, extensions = {}) {\n var _a;\n super(undefined, interpolation, owner, parser, extensions);\n this.entries = entries;\n this.signals = [];\n this.parser = parser;\n for (const entry of entries) {\n let key;\n let signal;\n if (Array.isArray(entry)) {\n [key, signal] = entry;\n (_a = signal.context).owner ?? (_a.owner = this);\n }\n else {\n key = entry;\n signal = new SignalContext(modify(initial, value => parser(value)[entry]), map, owner ?? this.invokable).toSignal();\n }\n this.signals.push([key, signal]);\n Object.defineProperty(this.invokable, key, { value: signal });\n }\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n getter() {\n return this.parse((Object.fromEntries(this.signals.map(([key, property]) => [key, property()]))));\n }\n setter(value) {\n if (isReactive(value)) {\n for (const [key, property] of this.signals) {\n property(() => this.parser(value())[key]);\n }\n }\n else {\n const parsed = this.parse(value);\n for (const [key, property] of this.signals) {\n property(parsed[key]);\n }\n }\n return this.owner;\n }\n reset() {\n for (const [, signal] of this.signals) {\n signal.reset();\n }\n return this.owner;\n }\n save() {\n for (const [, signal] of this.signals) {\n signal.save();\n }\n return this.owner;\n }\n isInitial() {\n for (const [, signal] of this.signals) {\n if (!signal.isInitial()) {\n return false;\n }\n }\n return true;\n }\n raw() {\n return Object.fromEntries(this.signals.map(([key, property]) => [key, property.context.raw()]));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG91bmRTaWduYWxDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpZ25hbHMvQ29tcG91bmRTaWduYWxDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFrQjNDLE1BQU0sT0FBTyxxQkFLWCxTQUFRLGFBQTJDO0lBR25ELFlBQ21CLE9BR2QsRUFDSCxNQUF1QyxFQUN2QyxPQUFrQyxFQUNsQyxhQUE0QyxFQUM1QyxRQUFrQyxTQUFVLEVBQzVDLGFBQThELEVBQUU7O1FBRWhFLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFWMUMsWUFBTyxHQUFQLE9BQU8sQ0FHckI7UUFOVyxZQUFPLEdBQStDLEVBQUUsQ0FBQztRQWN2RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksR0FBaUIsQ0FBQztZQUN0QixJQUFJLE1BQWdDLENBQUM7WUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsTUFBQyxNQUFNLENBQUMsT0FBZSxFQUFDLEtBQUssUUFBTCxLQUFLLEdBQUssSUFBSSxFQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUNaLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FDeEIsTUFBTSxDQUFDLE9BQU8s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","export const EPSILON = 0.000001;\nexport function isType(value) {\n return value && typeof value === 'object' && 'toSymbol' in value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9UeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFVaEMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUFVO0lBQy9CLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0FBQ25FLENBQUMifQ==","import { CompoundSignalContext } from '../signals';\nimport { arcLerp, clamp, map } from '../tweening';\nimport { DEG2RAD, RAD2DEG } from '../utils';\nimport { Direction, Origin } from './alignment-enums';\nimport { EPSILON } from './Type';\n/**\n * Represents a two-dimensional vector.\n */\nexport class Vector2 {\n static createSignal(initial, interpolation = Vector2.lerp, owner) {\n return new CompoundSignalContext(['x', 'y'], (value) => new Vector2(value), initial, interpolation, owner).toSignal();\n }\n static lerp(from, to, value) {\n let valueX;\n let valueY;\n if (typeof value === 'number') {\n valueX = valueY = value;\n }\n else {\n valueX = value.x;\n valueY = value.y;\n }\n return new Vector2(map(from.x, to.x, valueX), map(from.y, to.y, valueY));\n }\n static arcLerp(from, to, value, reverse = false, ratio) {\n ratio ?? (ratio = from.sub(to).ctg);\n return Vector2.lerp(from, to, new Vector2(arcLerp(value, reverse, ratio)));\n }\n static createArcLerp(reverse, ratio) {\n return (from, to, value) => Vector2.arcLerp(from, to, value, reverse, ratio);\n }\n /**\n * Interpolates between two vectors on the polar plane by interpolating\n * the angles and magnitudes of the vectors individually.\n *\n * @param from - The starting vector.\n * @param to - The target vector.\n * @param value - The t-value of the interpolation.\n * @param counterclockwise - Whether the vector should get rotated\n * counterclockwise. Defaults to `false`.\n * @param origin - The center of rotation. Defaults to the origin.\n *\n * @remarks\n * This function is useful when used in conjunction with {@link rotate} to\n * animate an object's position on a circular arc (see examples).\n *\n * @example\n * Animating an object in a circle around the origin\n * ```tsx\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.polarLerp\n * );\n * ```\n * @example\n * Rotating an object around the point `[-200, 100]`\n * ```ts\n * circle().position(\n * circle().position().rotate(180, [-200, 100]),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(false, [-200, 100]),\n * );\n * ```\n * @example\n * Rotating an object counterclockwise around the origin\n * ```ts\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(true),\n * );\n * ```\n */\n static polarLerp(from, to, value, counterclockwise = false, origin = Vector2.zero) {\n from = from.sub(origin);\n to = to.sub(origin);\n const fromAngle = from.degrees;\n let toAngle = to.degrees;\n const isCounterclockwise = fromAngle > toAngle;\n if (isCounterclockwise !== counterclockwise) {\n toAngle = toAngle + (counterclockwise ? -360 : 360);\n }\n const angle = map(fromAngle, toAngle, value) * DEG2RAD;\n const magnitude = map(from.magnitude, to.magnitude, value);\n return new Vector2(magnitude * Math.cos(angle) + origin.x, magnitude * Math.sin(angle) + origin.y);\n }\n /**\n * Helper function to create a {@link Vector2.polarLerp} interpolation\n * function with additional parameters.\n *\n * @param counterclockwise - Whether the point should get rotated\n * counterclockwise.\n * @param center - The center of rotation. Defaults to the origin.\n */\n static createPolarLerp(counterclockwise = false, center = Vector2.zero) {\n return (from, to, value) => Vector2.polarLerp(from, to, value, counterclockwise, new Vector2(center));\n }\n static fromOrigin(origin) {\n const position = new Vector2();\n if (origin === Origin.Middle) {\n return position;\n }\n if (origin & Direction.Left) {\n position.x = -1;\n }\n else if (origin & Direction.Right) {\n position.x = 1;\n }\n if (origin & Direction.Top) {\n position.y = -1;\n }\n else if (origin & Direction.Bottom) {\n position.y = 1;\n }\n return position;\n }\n static fromScalar(value) {\n return new Vector2(value, value);\n }\n static fromRadians(radians) {\n return new Vector2(Math.cos(radians), Math.sin(radians));\n }\n static fromDegrees(degrees) {\n return Vector2.fromRadians(degrees * DEG2RAD);\n }\n /**\n * Return the angle in radians between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n */\n static radians(x, y) {\n return Math.atan2(y, x);\n }\n /**\n * Return the angle in degrees between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n static degrees(x, y) {\n return Vector2.radians(x, y) * RAD2DEG;\n }\n static magnitude(x, y) {\n return Math.sqrt(x * x + y * y);\n }\n static squaredMagnitude(x, y) {\n return x * x + y * y;\n }\n static angleBetween(u, v) {\n return (Math.acos(clamp(-1, 1, u.dot(v) / (u.magnitude * v.magnitude))) *\n (u.cross(v) >= 0 ? 1 : -1));\n }\n get width() {\n return this.x;\n }\n set width(value) {\n this.x = value;\n }\n get height() {\n return this.y;\n }\n set height(value) {\n this.y = value;\n }\n get magnitude() {\n return Vector2.magnitude(this.x, this.y);\n }\n get squaredMagnitude() {\n return Vector2.squaredMagnitude(this.x, this.y);\n }\n get normalized() {\n return this.scale(1 / Vector2.magnitude(this.x, this.y));\n }\n get safe() {\n return new Vector2(isNaN(this.x) ? 0 : this.x, isNaN(this.y) ? 0 : this.y);\n }\n get flipped() {\n return new Vector2(-this.x, -this.y);\n }\n get floored() {\n return new Vector2(Math.floor(this.x), Math.floor(this.y));\n }\n get perpendicular() {\n return new Vector2(this.y, -this.x);\n }\n /**\n * Return the angle in radians between the vector and the positive x-axis.\n */\n get radians() {\n return Vector2.radians(this.x, this.y);\n }\n /**\n * Return the angle in degrees between the vector and the positive x-axis.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n get degrees() {\n return Vector2.degrees(this.x, this.y);\n }\n get ctg() {\n return this.x / this.y;\n }\n constructor(one, two) {\n this.x = 0;\n this.y = 0;\n if (one === undefined || one === null) {\n return;\n }\n if (typeof one !== 'object') {\n this.x = one;\n this.y = two ?? one;\n return;\n }\n if (Array.isArray(one)) {\n this.x = one[0];\n this.y = one[1];\n return;\n }\n if ('width' in one) {\n this.x = one.width;\n this.y = one.height;\n return;\n }\n this.x = one.x;\n this.y = one.y;\n }\n lerp(to, value) {\n return Vector2.lerp(this, to, value);\n }\n getOriginOffset(origin) {\n const offset = Vector2.fromOrigin(origin);\n offset.x *= this.x / 2;\n offset.y *= this.y / 2;\n return offset;\n }\n scale(value) {\n return new Vector2(this.x * value, this.y * value);\n }\n mul(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x * vector.x, this.y * vector.y);\n }\n div(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x / vector.x, this.y / vector.y);\n }\n add(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x + vector.x, this.y + vector.y);\n }\n sub(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x - vector.x, this.y - vector.y);\n }\n dot(possibleVector) {\n const vector = new Vector2(possibleVector);\n return this.x * vector.x + this.y * vector.y;\n }\n cross(possibleVector) {\n const vector = new Vector2(possibleVector);\n return this.x * vector.y - this.y * vector.x;\n }\n mod(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x % vector.x, this.y % vector.y);\n }\n addX(value) {\n return new Vector2(this.x + value, this.y);\n }\n addY(value) {\n return new Vector2(this.x, this.y + value);\n }\n toSymbol() {\n return Vector2.symbol;\n }\n toString() {\n return `Vector2(${this.x}, ${this.y})`;\n }\n toUniform(gl, location) {\n gl.uniform2f(location, this.x, this.y);\n }\n serialize() {\n return { x: this.x, y: this.y };\n }\n /**\n * Check if two vectors are exactly equal to each other.\n *\n * @remarks\n * If you need to compensate for floating point inaccuracies, use the\n * {@link equals} method, instead.\n *\n * @param other - The vector to compare.\n */\n exactlyEquals(other) {\n return this.x === other.x && this.y === other.y;\n }\n /**\n * Check if two vectors are equal to each other.\n *\n * @remarks\n * This method allows passing an allowed error margin when comparing vectors\n * to compensate for floating point inaccuracies. To check if two vectors are\n * exactly equal, use the {@link exactlyEquals} method, instead.\n *\n * @param other - The vector to compare.\n * @param threshold - The allowed error threshold when comparing the vectors.\n */\n equals(other, threshold = EPSILON) {\n return (Math.abs(this.x - other.x) <= threshold + Number.EPSILON &&\n Math.abs(this.y - other.y) <= threshold + Number.EPSILON);\n }\n}\nVector2.symbol = Symbol.for('@twick/core/types/Vector2');\nVector2.zero = new Vector2();\nVector2.one = new Vector2(1, 1);\nVector2.right = new Vector2(1, 0);\nVector2.left = new Vector2(-1, 0);\nVector2.up = new Vector2(0, 1);\nVector2.down = new Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, -1)`\n */\nVector2.top = new Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, 1)`\n */\nVector2.bottom = new Vector2(0, 1);\n/**\n * A constant equal to `Vector2(-1, -1)`\n */\nVector2.topLeft = new Vector2(-1, -1);\n/**\n * A constant equal to `Vector2(1, -1)`\n */\nVector2.topRight = new Vector2(1, -1);\n/**\n * A constant equal to `Vector2(-1, 1)`\n */\nVector2.bottomLeft = new Vector2(-1, 1);\n/**\n * A constant equal to `Vector2(1, 1)`\n */\nVector2.bottomRight = new Vector2(1, 1);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL1ZlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFakQsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQXVCL0I7O0dBRUc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQXNDWCxNQUFNLENBQUMsWUFBWSxDQUN4QixPQUFzQyxFQUN0QyxnQkFBZ0QsT0FBTyxDQUFDLElBQUksRUFDNUQsS0FBVztRQUVYLE9BQU8sSUFBSSxxQkFBcUIsQ0FDOUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ1YsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDOUMsT0FBTyxFQUNQLGFBQWEsRUFDYixLQUFLLENBQ04sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQWEsRUFBRSxFQUFXLEVBQUUsS0FBdUI7UUFDcEUsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLE1BQU0sQ0FBQztRQUVYLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztR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","import { ValueDispatcher } from '../events';\nexport var PlaybackState;\n(function (PlaybackState) {\n PlaybackState[PlaybackState[\"Playing\"] = 0] = \"Playing\";\n PlaybackState[PlaybackState[\"Rendering\"] = 1] = \"Rendering\";\n PlaybackState[PlaybackState[\"Paused\"] = 2] = \"Paused\";\n PlaybackState[PlaybackState[\"Presenting\"] = 3] = \"Presenting\";\n})(PlaybackState || (PlaybackState = {}));\n/**\n * A general class for managing a sequence of scenes.\n *\n * @remarks\n * This class provides primitive operations that can be executed on a scene\n * sequence, such as {@link progress} or {@link seek}.\n *\n * @internal\n */\nexport class PlaybackManager {\n constructor() {\n this.frame = 0;\n this.speed = 1;\n this.fps = 30;\n this.duration = 0;\n this.finished = false;\n this.slides = [];\n this.previousScene = null;\n this.state = PlaybackState.Paused;\n this.currentSceneReference = null;\n this.scenes = new ValueDispatcher([]);\n }\n /**\n * Triggered when the active scene changes.\n *\n * @eventProperty\n */\n get onSceneChanged() {\n if (this.currentSceneReference === null) {\n throw new Error('PlaybackManager has not been properly initialized');\n }\n return this.currentSceneReference.subscribable;\n }\n /**\n * Triggered when the scenes get recalculated.\n *\n * @remarks\n * This event indicates that the timing of at least one scene has changed.\n *\n * @eventProperty\n */\n get onScenesRecalculated() {\n return this.scenes.subscribable;\n }\n get currentScene() {\n if (this.currentSceneReference === null) {\n throw new Error('PlaybackManager has not been properly initialized');\n }\n return this.currentSceneReference.current;\n }\n set currentScene(scene) {\n if (!scene) {\n throw new Error('Invalid scene.');\n }\n this.currentSceneReference ?? (this.currentSceneReference = new ValueDispatcher(scene));\n this.currentSceneReference.current = scene;\n }\n setup(scenes) {\n this.scenes.current = scenes;\n this.currentScene = scenes[0];\n }\n async progress() {\n this.finished = await this.next();\n return this.finished;\n }\n async seek(frame) {\n if (frame <= this.frame ||\n (this.currentScene.isCached() && this.currentScene.lastFrame < frame)) {\n const scene = this.findBestScene(frame);\n if (scene !== this.currentScene) {\n this.currentScene.stopAllMedia();\n this.previousScene = null;\n this.currentScene = scene;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n }\n else if (this.frame >= frame) {\n this.previousScene = null;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n }\n }\n this.finished = false;\n while (this.frame < frame && !this.finished) {\n this.finished = await this.next();\n }\n return this.finished;\n }\n async reset() {\n this.previousScene = null;\n this.currentScene = this.scenes.current[0];\n this.frame = 0;\n await this.currentScene.reset();\n }\n reload(description) {\n this.scenes.current.forEach(scene => scene.reload(description));\n }\n async recalculate() {\n this.previousScene = null;\n this.slides = [];\n const speed = this.speed;\n this.frame = 0;\n this.speed = 1;\n const scenes = [];\n try {\n for (const scene of this.scenes.current) {\n await scene.recalculate(frame => {\n this.frame = frame;\n });\n this.slides.push(...scene.slides.onChanged.current);\n scenes.push(scene);\n }\n }\n finally {\n this.speed = speed;\n }\n this.scenes.current = scenes;\n this.duration = this.frame;\n }\n async next() {\n if (this.previousScene) {\n await this.previousScene.next();\n if (this.currentScene.isFinished()) {\n this.previousScene = null;\n }\n }\n this.frame += this.speed;\n if (this.currentScene.isFinished()) {\n return true;\n }\n await this.currentScene.next();\n if (this.previousScene && this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n if (this.currentScene.canTransitionOut()) {\n this.previousScene = this.currentScene;\n const nextScene = this.getNextScene(this.previousScene);\n if (nextScene) {\n this.previousScene.stopAllMedia();\n this.currentScene = nextScene;\n await this.currentScene.reset(this.previousScene);\n }\n if (!nextScene || this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n }\n return this.currentScene.isFinished();\n }\n findBestScene(frame) {\n let lastScene = this.scenes.current[0];\n for (const scene of this.scenes.current) {\n if (!scene.isCached() || scene.lastFrame > frame) {\n return scene;\n }\n lastScene = scene;\n }\n return lastScene;\n }\n getNextScene(scene) {\n const scenes = this.scenes.current;\n if (!scene) {\n return scenes[0];\n }\n const index = scenes.findIndex(s => s === scene);\n if (index < 0) {\n return null;\n }\n return scenes[index + 1] ?? null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWJhY2tNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9QbGF5YmFja01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUcxQyxNQUFNLENBQU4sSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCLHVEQUFPLENBQUE7SUFDUCwyREFBUyxDQUFBO0lBQ1QscURBQU0sQ0FBQTtJQUNOLDZEQUFVLENBQUE7QUFDWixDQUFDLEVBTFcsYUFBYSxLQUFiLGFBQWEsUUFLeEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBeUJTLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFFckIsa0JBQWEsR0FBaUIsSUFBSSxDQUFDO1FBQ25DLFVBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBaUI1QiwwQkFBcUIsR0FBa0MsSUFBSSxDQUFDO1FBQzVELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVSxFQUFFLENBQUMsQ0FBQztJQXVJcEQsQ0FBQztJQXpMQzs7OztPQUlHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxD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","/**\n * A read-only representation of the playback.\n */\nexport class PlaybackStatus {\n constructor(playback) {\n this.playback = playback;\n }\n /**\n * Convert seconds to frames using the current framerate.\n *\n * @param seconds - The seconds to convert.\n */\n secondsToFrames(seconds) {\n return Math.ceil(seconds * this.playback.fps);\n }\n /**\n * Convert frames to seconds using the current framerate.\n *\n * @param frames - The frames to convert.\n */\n framesToSeconds(frames) {\n return frames / this.playback.fps;\n }\n get time() {\n return this.framesToSeconds(this.playback.frame);\n }\n get frame() {\n return this.playback.frame;\n }\n get speed() {\n return this.playback.speed;\n }\n get fps() {\n return this.playback.fps;\n }\n get state() {\n return this.playback.state;\n }\n /**\n * The time passed since the last frame in seconds.\n */\n get deltaTime() {\n return this.framesToSeconds(1) * this.speed;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWJhY2tTdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwL1BsYXliYWNrU3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFBb0MsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBRWpFOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsT0FBZTtRQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsTUFBYztRQUNuQyxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzlDLENBQUM7Q0FDRiJ9","const SOURCE_URL_REGEX = /^\\/\\/# sourceURL=(.*)$/gm;\nconst INFO_LOG_REGEX = /ERROR: \\d+:(\\d+): (.*)/g;\nconst INFO_TOKEN_REGEX = /^'([^']+)'/;\nconst includeWithoutPreprocessor = `\nThe \\`#include\\` directive requires the use of a preprocessor.\n\nMake sure to import the shader from a file:\n\n\\`\\`\\`ts\nimport shader from './shader.glsl';\n\\`\\`\\`\n\nDo **NOT** use the raw loader:\n\n\\`\\`\\`ts\nimport shader from './shader.glsl?raw';\n\\`\\`\\`\n\nDo **NOT** use \\`#include\\` in an inline string:\n\n\\`\\`\\`ts\nconst shader = \\`\\\\\n#include \"example.glsl\"\n\\`;\n\\`\\`\\`\n\n[Learn more](https://motioncanvas.io/docs/shaders) about working with shaders.\n`;\nexport class SharedWebGLContext {\n constructor(logger) {\n this.logger = logger;\n this.gl = null;\n this.currentOwner = null;\n this.programLookup = new Map();\n }\n borrow(owner) {\n if (this.currentOwner === owner) {\n return this.gl;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = owner;\n this.currentOwner.setup(this.getGL());\n return this.gl;\n }\n /**\n * Dispose the WebGL context to free up resources.\n */\n dispose() {\n if (!this.gl) {\n return;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = null;\n this.gl.useProgram(null);\n for (const { program, fragment, vertex } of this.programLookup.values()) {\n this.gl.deleteProgram(program);\n this.gl.deleteShader(fragment);\n this.gl.deleteShader(vertex);\n }\n this.programLookup.clear();\n this.gl.getExtension('WEBGL_lose_context')?.loseContext();\n this.gl.canvas.remove();\n this.gl = null;\n }\n getProgram(fragment, vertex) {\n const key = `${fragment}#${vertex}`;\n if (this.programLookup.has(key)) {\n return this.programLookup.get(key).program;\n }\n const gl = this.getGL();\n const fragmentShader = this.getShader(gl.FRAGMENT_SHADER, fragment);\n const vertexShader = this.getShader(gl.VERTEX_SHADER, vertex);\n if (!fragmentShader || !vertexShader) {\n return null;\n }\n const program = gl.createProgram();\n gl.attachShader(program, fragmentShader);\n gl.attachShader(program, vertexShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n this.logger.error({\n message: 'Failed to initialize the shader program.',\n remarks: gl.getProgramInfoLog(program) ?? undefined,\n stack: new Error().stack,\n });\n gl.deleteProgram(program);\n return null;\n }\n this.programLookup.set(key, {\n program,\n fragment: fragmentShader,\n vertex: vertexShader,\n });\n return program;\n }\n getShader(type, source) {\n const gl = this.getGL();\n const shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(shader);\n logGlslError(this.logger, log, source);\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n }\n getGL() {\n if (this.gl) {\n return this.gl;\n }\n this.gl = document.createElement('canvas').getContext('webgl2', {\n depth: false,\n premultipliedAlpha: false,\n stencil: false,\n powerPreference: 'high-performance',\n });\n if (!this.gl) {\n throw new Error('Failed to initialize WebGL.');\n }\n /* NOTE: Temporary debugging code\n const canvas = this.gl.canvas as HTMLCanvasElement;\n document.body.append(canvas);\n canvas.style.position = 'absolute';\n canvas.style.top = '16px';\n canvas.style.right = '16px';\n canvas.style.width = '300px';\n canvas.style.borderRadius = '4px';\n canvas.style.border = '1px solid #ccc';\n canvas.style.backgroundColor = '#141414';\n canvas.style.zIndex = '1000';\n */\n return this.gl;\n }\n}\nfunction logGlslError(logger, log, source) {\n let sourceUrl = null;\n SOURCE_URL_REGEX.lastIndex = 0;\n const sourceMatch = SOURCE_URL_REGEX.exec(source);\n if (sourceMatch) {\n const url = new URL(sourceMatch[1], window.location.origin);\n url.searchParams.set('t', Date.now().toString());\n sourceUrl = url.toString();\n }\n if (!log) {\n logger.error({\n message: `Unknown shader compilation error.`,\n stack: fakeStackTrace(sourceUrl, 1, 0),\n });\n return null;\n }\n let logged = false;\n let result;\n while ((result = INFO_LOG_REGEX.exec(log))) {\n const [, line, message] = result;\n let column = 0;\n const match = message.match(INFO_TOKEN_REGEX);\n if (match) {\n const tokenLine = source.split('\\n')[parseInt(line) - 1];\n const index = tokenLine.indexOf(match[1]);\n if (index !== -1) {\n column = index;\n }\n if (match[1] === 'include') {\n const line = source\n .split('\\n')\n .find(line => line.startsWith('#include'));\n if (line) {\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n remarks: includeWithoutPreprocessor,\n });\n break;\n }\n }\n }\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n stack: fakeStackTrace(sourceUrl, line, column),\n });\n }\n if (!logged) {\n logger.error({\n message: `Shader compilation error: ${log}`,\n stack: fakeStackTrace(sourceUrl, 1, 0),\n });\n }\n}\nfunction fakeStackTrace(file, line, column) {\n if (!file) {\n return undefined;\n }\n return navigator.userAgent.toLowerCase().includes('chrome')\n ? ` at (${file}:${line}:${column})`\n : `@${file}:${line}:${column}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkV2ViR0xDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9TaGFyZWRXZWJHTENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxnQkFBZ0IsR0FBRywwQkFBMEIsQ0FBQztBQUNwRCxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztBQUNqRCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUV0QyxNQUFNLDBCQUEwQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3QmxDLENBQUM7QUFnQkYsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFvQyxNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUoxQyxPQUFFLEdBQWtDLElBQUksQ0FBQztRQUN6QyxpQkFBWSxHQUE2QixJQUFJLENBQUM7UUFDckMsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUVoQixDQUFDO0lBRS9DLE1BQU0sQ0FBQyxLQUF3QjtRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsRUFBRyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsRUFBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMs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","import { AsyncEventDispatcher, EventDispatcher, ValueDispatcher, } from '../events';\nimport { clamp } from '../tweening';\nimport { Vector2 } from '../types';\nimport { Semaphore } from '../utils';\nimport { PlaybackManager, PlaybackState } from './PlaybackManager';\nimport { PlaybackStatus } from './PlaybackStatus';\nimport { SharedWebGLContext } from './SharedWebGLContext';\n/**\n * The player logic used by the editor and embeddable player.\n *\n * @remarks\n * This class builds on top of the `PlaybackManager` to provide a simple\n * interface similar to other media players. It plays through the animation\n * using a real-time update loop.\n */\nexport class Player {\n /**\n * Triggered during each iteration of the update loop when the frame is ready\n * to be rendered.\n *\n * @remarks\n * Player does not perform any rendering on its own. For the animation to be\n * visible, another class must subscribe to this event and perform the\n * rendering itself. {@link Stage} can be used to display the animation.\n *\n * @eventProperty\n */\n get onRender() {\n return this.render.subscribable;\n }\n get onStateChanged() {\n return this.playerState.subscribable;\n }\n get onFrameChanged() {\n return this.frame.subscribable;\n }\n get onDurationChanged() {\n return this.duration.subscribable;\n }\n /**\n * Triggered right after recalculation finishes.\n *\n * @remarks\n * Can be used to provide visual feedback.\n *\n * @eventProperty\n */\n get onRecalculated() {\n return this.recalculated.subscribable;\n }\n get startFrame() {\n return Math.min(this.playback.duration, this.status.secondsToFrames(this.startTime));\n }\n get endFrame() {\n return Math.min(this.playback.duration, this.status.secondsToFrames(this.endTime));\n }\n get finished() {\n return this.playback.finished || this.playback.frame >= this.endFrame;\n }\n constructor(project, settings = {}, initialState = {}, initialFrame = -1) {\n this.project = project;\n this.settings = settings;\n this.initialState = initialState;\n this.initialFrame = initialFrame;\n this.render = new AsyncEventDispatcher();\n this.frame = new ValueDispatcher(0);\n this.duration = new ValueDispatcher(0);\n this.recalculated = new EventDispatcher();\n this.lock = new Semaphore();\n this.startTime = 0;\n this.endTime = Infinity;\n this.requestId = null;\n this.renderTime = 0;\n this.requestedSeek = -1;\n this.requestedRender = false;\n this.requestedRecalculation = true;\n this.active = false;\n this.playerState = new ValueDispatcher({\n loop: true,\n muted: true,\n volume: 1,\n speed: 1,\n ...initialState,\n paused: true,\n });\n this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);\n this.requestedSeek = initialFrame;\n this.logger = this.project.logger;\n this.playback = new PlaybackManager();\n this.status = new PlaybackStatus(this.playback);\n this.size = settings.size ?? new Vector2(1920, 1080);\n this.resolutionScale = settings.resolutionScale ?? 1;\n this.startTime = settings.range?.[0] ?? 0;\n this.endTime = settings.range?.[1] ?? Infinity;\n this.playback.fps = settings.fps ?? 60;\n const scenes = [];\n for (const description of project.scenes) {\n const scene = new description.klass({\n ...description,\n playback: this.status,\n logger: this.project.logger,\n size: this.size,\n resolutionScale: this.resolutionScale,\n sharedWebGLContext: this.sharedWebGLContext,\n experimentalFeatures: project.experimentalFeatures,\n });\n scene.onReloaded.subscribe(() => this.requestRecalculation());\n scene.variables.updateSignals(project.variables ?? {});\n scenes.push(scene);\n }\n this.playback.setup(scenes);\n this.activate();\n }\n async configure(settings) {\n await this.lock.acquire();\n let frame = this.playback.frame;\n let recalculate = false;\n this.startTime = settings.range[0];\n this.endTime = settings.range[1];\n const newFps = Math.max(1, settings.fps);\n if (this.playback.fps !== newFps) {\n const ratio = newFps / this.playback.fps;\n this.playback.fps = newFps;\n frame = Math.floor(frame * ratio);\n recalculate = true;\n }\n if (!settings.size.exactlyEquals(this.size) ||\n settings.resolutionScale !== this.resolutionScale) {\n this.size = settings.size;\n this.resolutionScale = settings.resolutionScale;\n this.playback.reload({\n size: this.size,\n resolutionScale: this.resolutionScale,\n });\n }\n this.lock.release();\n if (recalculate) {\n this.playback.reload();\n this.frame.current = frame;\n this.requestRecalculation();\n this.requestedSeek = frame;\n }\n }\n /**\n * Whether the given frame is inside the animation range.\n *\n * @param frame - The frame to check.\n */\n isInRange(frame) {\n return frame >= 0 && frame <= this.playback.duration;\n }\n /**\n * Whether the given frame is inside the user-defined range.\n *\n * @param frame - The frame to check.\n */\n isInUserRange(frame) {\n return frame >= this.startFrame && frame <= this.endFrame;\n }\n requestSeek(value) {\n this.requestedSeek = this.clampRange(value);\n }\n requestPreviousFrame() {\n this.requestedSeek = this.frame.current - this.playback.speed;\n }\n requestNextFrame() {\n this.requestedSeek = this.frame.current + this.playback.speed;\n }\n requestReset() {\n this.requestedSeek = 0;\n }\n requestRender() {\n this.requestedRender = true;\n }\n toggleLoop(value = !this.playerState.current.loop) {\n if (value !== this.playerState.current.loop) {\n this.playerState.current = {\n ...this.playerState.current,\n loop: value,\n };\n }\n }\n togglePlayback(value = this.playerState.current.paused) {\n if (value === this.playerState.current.paused) {\n this.playerState.current = {\n ...this.playerState.current,\n paused: !value,\n };\n // hitting play after the animation has finished should reset the\n // playback, even if looping is disabled.\n if (value &&\n !this.playerState.current.loop &&\n this.playback.frame === this.playback.duration) {\n this.requestReset();\n }\n }\n }\n toggleAudio(value = this.playerState.current.muted) {\n if (value === this.playerState.current.muted) {\n this.playerState.current = {\n ...this.playerState.current,\n muted: !value,\n };\n }\n }\n setAudioVolume(value) {\n const clampedValue = clamp(0, 1, value);\n if (clampedValue !== this.playerState.current.volume) {\n this.playerState.current = {\n ...this.playerState.current,\n volume: clampedValue,\n };\n }\n }\n addAudioVolume(value) {\n this.setAudioVolume(this.playerState.current.volume + value);\n }\n setSpeed(value) {\n if (value !== this.playerState.current.speed) {\n this.playback.speed = value;\n this.playback.reload();\n this.playerState.current = {\n ...this.playerState.current,\n speed: value,\n };\n this.requestRecalculation();\n }\n }\n setVariables(variables) {\n for (const scene of this.playback.onScenesRecalculated.current) {\n scene.variables.updateSignals(variables);\n }\n }\n /**\n * Activate the player.\n *\n * @remarks\n * A player needs to be active in order for the update loop to run. Each\n * player is active by default.\n */\n activate() {\n this.active = true;\n this.request();\n }\n /**\n * Deactivate the player.\n *\n * @remarks\n * Deactivating the player prevents its update loop from running. This should\n * be done before disposing the player, to prevent it from running in the\n * background.\n *\n * Just pausing the player does not stop the loop.\n */\n deactivate() {\n this.active = false;\n this.sharedWebGLContext.dispose();\n this.playback.currentScene.stopAllMedia();\n if (this.requestId !== null) {\n cancelAnimationFrame(this.requestId);\n this.requestId = null;\n }\n }\n requestRecalculation() {\n this.requestedRecalculation = true;\n this.request();\n }\n async prepare() {\n const state = {\n ...this.playerState.current,\n seek: this.requestedSeek,\n render: this.requestedRender,\n };\n this.requestedSeek = -1;\n this.requestedRender = false;\n // Recalculate the project if necessary\n if (this.requestedRecalculation) {\n if (state.seek < 0) {\n state.seek = this.playback.frame;\n }\n try {\n await this.playback.recalculate();\n this.duration.current = this.playback.frame;\n this.recalculated.dispatch();\n }\n catch (e) {\n this.requestSeek(state.seek);\n throw e;\n }\n finally {\n this.requestedRecalculation = false;\n }\n }\n // Pause if reached the end or the range is 0\n // Seek to the beginning for non-empty scenes\n if ((!state.loop && this.finished && !state.paused && state.seek < 0) ||\n this.endFrame === this.startFrame) {\n this.togglePlayback(false);\n state.paused = true;\n state.seek =\n this.endFrame === this.startFrame ? state.seek : this.startFrame;\n }\n // Seek to the beginning if looping is enabled\n if (state.loop &&\n (state.seek > this.endFrame || (this.finished && !state.paused)) &&\n this.startFrame !== this.endTime) {\n state.seek = this.startFrame;\n }\n return state;\n }\n async run() {\n const state = await this.prepare();\n const previousState = this.playback.state;\n this.playback.state = state.paused\n ? PlaybackState.Paused\n : PlaybackState.Playing;\n // Seek to the given frame\n if (state.seek >= 0 || !this.isInUserRange(this.status.frame)) {\n const seekFrame = state.seek < 0 ? this.status.frame : state.seek;\n const clampedFrame = this.clampRange(seekFrame);\n this.logger.profile('seek time');\n await this.playback.seek(clampedFrame);\n this.logger.profile('seek time');\n }\n // Do nothing if paused\n else if (state.paused) {\n if (state.render ||\n (state.paused && previousState !== PlaybackState.Paused)) {\n // Tells the stage to render the current frame\n await this.render.dispatch();\n }\n this.request();\n return;\n }\n // Simply move forward one frame\n else if (this.status.frame < this.endFrame) {\n await this.playback.progress();\n }\n // Pause if a new slide has just started.\n if (!state.paused && this.playback.currentScene.slides.isWaiting()) {\n this.togglePlayback(false);\n state.paused = true;\n }\n // Draw the project\n await this.render.dispatch();\n this.frame.current = this.playback.frame;\n this.request();\n }\n request() {\n if (!this.active)\n return;\n // TODO(konsti): make this loop not run when player is paused\n this.requestId ?? (this.requestId = requestAnimationFrame(async (time) => {\n this.requestId = null;\n if (time - this.renderTime >= 1000 / (this.status.fps + 5)) {\n this.renderTime = time;\n await this.lock.acquire();\n try {\n await this.run();\n }\n catch (e) {\n this.logger.error(e);\n }\n this.lock.release();\n }\n else {\n this.request();\n }\n }));\n }\n clampRange(frame) {\n return clamp(this.startFrame, this.endFrame, frame);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQWlCeEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBQ2pCOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBR0QsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUdELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFHRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQW9CRCxJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLElBQUks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","export function getFullPreviewSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.preview,\n };\n}\nexport function getFullRenderingSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.rendering,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvcHJvamVjdC1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE9BQWdCO0lBRWhCLE9BQU87UUFDTCxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUMxQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztLQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsT0FBZ0I7SUFFaEIsT0FBTztRQUNMLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQzFCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0tBQzlCLENBQUM7QUFDSixDQUFDIn0=","import { unwrap } from '../signals';\nimport { Vector2 } from '../types';\nimport { getContext } from '../utils';\n/**\n * Manages canvases on which an animation can be displayed.\n */\nexport class Stage {\n get canvasSize() {\n return this.size.scale(this.resolutionScale);\n }\n constructor() {\n // TODO Consider adding pooling for canvases.\n this.background = null;\n this.resolutionScale = 1;\n this.colorSpace = 'srgb';\n this.size = Vector2.zero;\n this.finalBuffer = document.createElement('canvas');\n this.currentBuffer = document.createElement('canvas');\n this.previousBuffer = document.createElement('canvas');\n const colorSpace = this.colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n configure({ colorSpace = this.colorSpace, size = this.size, resolutionScale = this.resolutionScale, background = this.background, }) {\n if (colorSpace !== this.colorSpace) {\n this.colorSpace = colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n if (!size.exactlyEquals(this.size) ||\n resolutionScale !== this.resolutionScale) {\n this.resolutionScale = resolutionScale;\n this.size = size;\n this.resizeCanvas(this.context);\n this.resizeCanvas(this.currentContext);\n this.resizeCanvas(this.previousContext);\n }\n this.background =\n typeof background === 'string'\n ? background\n : (background?.serialize() ?? null);\n }\n async render(currentScene, previousScene) {\n const previousOnTop = previousScene\n ? unwrap(currentScene.previousOnTop)\n : false;\n if (previousScene) {\n await previousScene.render(this.previousContext);\n }\n await currentScene.render(this.currentContext);\n const size = this.canvasSize;\n this.context.clearRect(0, 0, size.width, size.height);\n if (this.background) {\n this.context.save();\n this.context.fillStyle = this.background;\n this.context.fillRect(0, 0, size.width, size.height);\n this.context.restore();\n }\n if (previousScene && !previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n this.context.drawImage(this.currentBuffer, 0, 0);\n if (previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n }\n resizeCanvas(context) {\n const size = this.canvasSize;\n context.canvas.width = size.width;\n context.canvas.height = size.height;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwL1N0YWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBU3BDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFnQmhCLElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7UUFuQkEsNkNBQTZDO1FBRXJDLGVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBQ2pDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGVBQVUsR0FBcUIsTUFBTSxDQUFDO1FBQ3RDLFNBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBZTFCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FB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","import { Player, Stage, getFullPreviewSettings } from '@twick/core';\nimport { Vector2 } from '@twick/core';\nconst stylesNew = `\n.overlay {\n\tposition: absolute;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\topacity: 0;\n\ttransition: opacity 0.1s;\n\tz-index: 0;\n }\n .canvas {\n\twidth: 100%;\n\tdisplay: block;\n\topacity: 1;\n\ttransition: opacity 0.1s;\n }\n`;\nconst TEMPLATE = `<style>${stylesNew}</style><div class=\"overlay\"></div>`;\nconst ID = 'twick-player';\nvar State;\n(function (State) {\n State[\"Initial\"] = \"initial\";\n State[\"Loading\"] = \"loading\";\n State[\"Ready\"] = \"ready\";\n State[\"Error\"] = \"error\";\n})(State || (State = {}));\nclass TwickPlayer extends HTMLElement {\n static get observedAttributes() {\n return [\n 'playing',\n 'variables',\n 'looping',\n 'fps',\n 'quality',\n 'width',\n 'height',\n 'volume',\n ];\n }\n get fps() {\n const attr = this.getAttribute('fps');\n return attr ? parseFloat(attr) : (this.defaultSettings?.fps ?? 60);\n }\n get quality() {\n const attr = this.getAttribute('quality');\n return attr\n ? parseFloat(attr)\n : (this.defaultSettings?.resolutionScale ?? 1);\n }\n get width() {\n const attr = this.getAttribute('width');\n return attr ? parseFloat(attr) : (this.defaultSettings?.size.width ?? 0);\n }\n get height() {\n const attr = this.getAttribute('height');\n return attr ? parseFloat(attr) : (this.defaultSettings?.size.height ?? 0);\n }\n get variables() {\n try {\n const attr = this.getAttribute('variables');\n return attr ? JSON.parse(attr) : {};\n }\n catch {\n this.project?.logger.warn(`Project variables could not be parsed.`);\n return {};\n }\n }\n root;\n canvas;\n overlay;\n state = State.Initial;\n project = null;\n player = null;\n defaultSettings;\n abortController = null;\n playing = false;\n stage = new Stage();\n time = 0;\n duration = 0; // in frames\n looping = true;\n volume = 1;\n volumeChangeRequested = true;\n constructor() {\n super();\n this.root = this.attachShadow({ mode: 'open' });\n this.root.innerHTML = TEMPLATE;\n this.overlay = this.root.querySelector('.overlay');\n this.canvas = this.stage.finalBuffer;\n this.canvas.classList.add('canvas');\n this.root.prepend(this.canvas);\n this.setState(State.Initial);\n }\n setProject(project) {\n this.updateProject(project);\n }\n setState(state) {\n this.state = state;\n this.setPlaying(this.playing);\n }\n setPlaying(value) {\n if (this.state === State.Ready && value) {\n this.player?.togglePlayback(true);\n this.playing = true;\n }\n else {\n this.player?.togglePlayback(false);\n this.playing = false;\n }\n }\n async updateProject(project) {\n const playing = this.playing;\n this.setState(State.Initial);\n this.abortController?.abort();\n this.abortController = new AbortController();\n this.project = project;\n console.log(project);\n this.defaultSettings = getFullPreviewSettings(this.project);\n const player = new Player(this.project);\n player.setVariables(this.variables);\n player.toggleLoop(this.looping);\n this.player?.onRender.unsubscribe(this.render);\n this.player?.onFrameChanged.unsubscribe(this.handleFrameChanged);\n this.player?.togglePlayback(false);\n this.player?.deactivate();\n this.player = player;\n this.updateSettings();\n this.setState(State.Ready);\n this.dispatchEvent(new CustomEvent('playerready', { detail: this.player }));\n // Restore previous state\n this.setPlaying(playing);\n this.player.onRender.subscribe(this.render);\n this.player.onFrameChanged.subscribe(this.handleFrameChanged);\n }\n attributeChangedCallback(name, _, newValue) {\n switch (name) {\n case 'playing':\n this.setPlaying(newValue === 'true');\n break;\n case 'variables':\n this.player?.setVariables(this.variables);\n this.player?.requestSeek(this.player.playback.frame);\n this.player?.playback.reload();\n break;\n case 'looping':\n this.looping = newValue === 'true';\n this.player?.toggleLoop(newValue === 'true');\n break;\n case 'fps':\n case 'quality':\n case 'width':\n case 'height':\n this.updateSettings();\n break;\n case 'volume':\n this.volume = newValue;\n this.volumeChangeRequested = true;\n }\n }\n /**\n * Runs when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.player?.deactivate();\n this.player?.onRender.unsubscribe(this.render);\n this.removeEventListener('seekto', this.handleSeekTo);\n this.removeEventListener('volumechange', this.handleVolumeChange);\n }\n /**\n * Runs when the element is added to the DOM.\n */\n connectedCallback() {\n this.player?.activate();\n this.player?.onRender.subscribe(this.render);\n this.addEventListener('seekto', this.handleSeekTo);\n this.addEventListener('volumechange', this.handleVolumeChange);\n }\n /**\n * Triggered by the timeline.\n */\n handleSeekTo = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.time = e.detail;\n this.player?.requestSeek(e.detail * this.player.playback.fps);\n this.volumeChangeRequested = true;\n };\n handleVolumeChange = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.volume = e.detail;\n this.player?.playback.currentScene.adjustVolume(this.volume);\n };\n /**\n * Triggered by the player.\n */\n handleFrameChanged = (frame) => {\n if (!this.project || !this.player) {\n return;\n }\n this.time = frame / this.player.playback.fps;\n if (this.volumeChangeRequested || frame === 0) {\n this.player?.playback.currentScene.adjustVolume(this.volume);\n this.volumeChangeRequested = false;\n }\n };\n /**\n * Called on every frame.\n */\n render = async () => {\n if (this.player && this.project) {\n await this.stage.render(this.player.playback.currentScene, this.player.playback.previousScene);\n this.dispatchEvent(new CustomEvent('timeupdate', { detail: this.time }));\n const durationInFrames = this.player.playback.duration;\n if (durationInFrames === this.duration) {\n return;\n }\n this.duration = durationInFrames;\n const durationInSeconds = durationInFrames / this.player.playback.fps;\n this.dispatchEvent(new CustomEvent('duration', { detail: durationInSeconds }));\n }\n };\n updateSettings() {\n if (!this.defaultSettings) {\n return;\n }\n const settings = {\n ...this.defaultSettings,\n size: new Vector2(this.width, this.height),\n resolutionScale: this.quality,\n fps: this.fps,\n };\n this.stage.configure(settings);\n this.player?.configure(settings);\n }\n}\nif (!customElements.get(ID)) {\n customElements.define(ID, TwickPlayer);\n}\n//# sourceMappingURL=internal.js.map"],"names":["Direction","Center","Origin","PlaybackState","line","State"],"mappings":"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","x_google_ignoreList":[0,1,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]}
|
|
1
|
+
{"version":3,"file":"internal-pPYo5Irb.cjs","sources":["../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/events/EventDispatcherBase.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/events/AsyncEventDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/events/EventDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/events/FlagDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/events/ValueDispatcher.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/tweening/helpers.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/useScene.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/DetailedError.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/useThread.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/errorToLog.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/getContext.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/math.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/Semaphore.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/utils/usePlayback.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/tweening/interpolationFunctions.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/decorators/decorate.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/decorators/threadable.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/tweening/timingFunctions.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/tweening/tween.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/types/alignment-enums.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/flow/scheduling.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/flow/names.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/flow/run.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/signals/DependencyContext.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/signals/symbols.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/signals/utils.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/signals/SignalContext.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/signals/CompoundSignalContext.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/types/Type.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/types/Vector.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/app/PlaybackManager.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/app/PlaybackStatus.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/app/SharedWebGLContext.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/app/Player.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/app/project-settings.js","../../../node_modules/.pnpm/@twick+core@0.14.11/node_modules/@twick/core/lib/app/Stage.js","../../../node_modules/.pnpm/@twick+player-react@0.14.11/node_modules/@twick/player-react/dist/internal.js"],"sourcesContent":["/**\n * A base for dispatching {@link Subscribable}s.\n *\n * @typeParam TValue - The type of the argument passed to subscribers.\n * @typeParam THandler - The type of the callback function.\n */\nexport class EventDispatcherBase {\n constructor() {\n this.subscribable = new Subscribable(this);\n this.subscribers = new Set();\n }\n /**\n * {@inheritDoc Subscribable.subscribe}\n */\n subscribe(handler) {\n this.subscribers.add(handler);\n return () => this.unsubscribe(handler);\n }\n /**\n * {@inheritDoc Subscribable.unsubscribe}\n */\n unsubscribe(handler) {\n this.subscribers.delete(handler);\n }\n /**\n * Unsubscribe all subscribers from the event.\n */\n clear() {\n this.subscribers.clear();\n }\n notifySubscribers(value) {\n return [...this.subscribers].map(handler => handler(value));\n }\n}\n/**\n * Provides safe access to the public interface of {@link EventDispatcherBase}.\n *\n * @remarks\n * External classes can use it to subscribe to an event without being able to\n * dispatch it.\n *\n * @typeParam TValue - The type of the argument passed to subscribers.\n * @typeParam THandler - The type of the callback function.\n */\nexport class Subscribable {\n constructor(dispatcher) {\n this.dispatcher = dispatcher;\n }\n /**\n * Subscribe to the event.\n *\n * @param handler - The handler to invoke when the event occurs.\n *\n * @returns A callback function that cancels the subscription.\n */\n subscribe(handler) {\n return this.dispatcher.subscribe(handler);\n }\n /**\n * Unsubscribe from the event.\n *\n * @param handler - The handler to unsubscribe.\n */\n unsubscribe(handler) {\n this.dispatcher.unsubscribe(handler);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnREaXNwYXRjaGVyQmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldmVudHMvRXZlbnREaXNwYXRjaGVyQmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQTs7Ozs7R0FLRztBQUNILE1BQU0sT0FBZ0IsbUJBQW1CO0lBQXpDO1FBSWtCLGlCQUFZLEdBQzFCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxHQUFHLEVBQVksQ0FBQztJQTJCNUMsQ0FBQztJQXpCQzs7T0FFRztJQUNJLFNBQVMsQ0FBQyxPQUFpQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5QixPQUFPLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksV0FBVyxDQUFDLE9BQWlCO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNJLEtBQUs7UUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFhO1FBQ3ZDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQUl2QixZQUNZLFVBQWlEO1FBQWpELGVBQVUsR0FBVixVQUFVLENBQXVDO0lBQzFELENBQUM7SUFFSjs7Ozs7O09BTUc7SUFDSSxTQUFTLENBQUMsT0FBaUI7UUFDaEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFdBQVcsQ0FBQyxPQUFpQjtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0NBQ0YifQ==","import { EventDispatcherBase } from './EventDispatcherBase';\n/**\n * Dispatches an asynchronous {@link SubscribableEvent}.\n *\n * @remarks\n * The {@link dispatch} method returns a promise that resolves when all the\n * handlers resolve.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onValueChanged {\n * return this.value.subscribable;\n * }\n * // create a private dispatcher\n * private value = new AsyncEventDispatcher<number>();\n *\n * private async dispatchExample() {\n * // dispatching returns a Promise.\n * await this.value.dispatch(0);\n * }\n * }\n * ```\n *\n * @typeParam T - The type of the argument passed to subscribers.\n */\nexport class AsyncEventDispatcher extends EventDispatcherBase {\n async dispatch(value) {\n await Promise.all(this.notifySubscribers(value));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXN5bmNFdmVudERpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL0FzeW5jRXZlbnREaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBTTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxPQUFPLG9CQUF3QixTQUFRLG1CQUc1QztJQUNRLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBUTtRQUM1QixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQztDQUNGIn0=","import { EventDispatcherBase } from './EventDispatcherBase';\n/**\n * Dispatches a {@link SubscribableEvent}.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onValueChanged {\n * return this.value.subscribable;\n * }\n * // create a private dispatcher\n * private value = new EventDispatcher<number>();\n *\n * private dispatchExample() {\n * // dispatching will notify all subscribers.\n * this.value.dispatch(0);\n * }\n * }\n * ```\n *\n * @typeParam T - The type of the value argument to subscribers.\n */\nexport class EventDispatcher extends EventDispatcherBase {\n dispatch(value) {\n this.notifySubscribers(value);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnREaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9FdmVudERpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sT0FBTyxlQUFtQixTQUFRLG1CQUFzQjtJQUNyRCxRQUFRLENBQUMsS0FBUTtRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGIn0=","import { EventDispatcherBase } from './EventDispatcherBase';\n/**\n * Dispatches a {@link SubscribableFlagEvent}.\n *\n * @remarks\n * Subscribers are notified only when the flag is set.\n * Subsequent calls to {@link raise} don't trigger anything.\n * Any handlers added while the flag is raised are immediately invoked.\n *\n * Resetting the flag doesn't notify the subscribers, but raising it again does.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onChanged {\n * return this.flag.subscribable;\n * }\n * // create a private dispatcher\n * private flag = new FlagDispatcher();\n *\n * private dispatchExample() {\n * // setting the flag will notify all subscribers\n * this.flag.raise();\n * }\n * }\n * ```\n */\nexport class FlagDispatcher extends EventDispatcherBase {\n constructor() {\n super(...arguments);\n this.value = false;\n }\n /**\n * Notify all current and future subscribers.\n */\n raise() {\n if (!this.value) {\n this.value = true;\n this.notifySubscribers();\n }\n }\n /**\n * Stop notifying future subscribers.\n */\n reset() {\n this.value = false;\n }\n /**\n * Are subscribers being notified?\n */\n isRaised() {\n return this.value;\n }\n subscribe(handler) {\n const unsubscribe = super.subscribe(handler);\n if (this.value) {\n handler();\n }\n return unsubscribe;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmxhZ0Rpc3BhdGNoZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL0ZsYWdEaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sT0FBTyxjQUFlLFNBQVEsbUJBQXlCO0lBQTdEOztRQUNVLFVBQUssR0FBRyxLQUFLLENBQUM7SUFpQ3hCLENBQUM7SUEvQkM7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVNLFNBQVMsQ0FBQyxPQUEyQjtRQUMxQyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztDQUNGIn0=","import { EventDispatcherBase, Subscribable } from './EventDispatcherBase';\n/**\n * Dispatches a {@link SubscribableValueEvent}\n *\n * @remarks\n * Changing the value stored by a value dispatcher will immediately notify all\n * its subscribers.\n *\n * @example\n * ```ts\n * class Example {\n * // expose the event to external classes\n * public get onValueChanged {\n * return this.value.subscribable;\n * }\n * // create a private dispatcher\n * private value = new ValueDispatcher(0);\n *\n * private changingValueExample() {\n * // changing the value will notify all subscribers.\n * this.value.current = 7;\n * }\n * }\n * ```\n *\n * @typeParam T - The type of the value passed to subscribers.\n */\nexport class ValueDispatcher extends EventDispatcherBase {\n /**\n * {@inheritDoc SubscribableValueEvent.current}\n */\n get current() {\n return this.value;\n }\n /**\n * Set the current value of this dispatcher.\n *\n * @remarks\n * Setting the value will immediately notify all subscribers.\n *\n * @param value - The new value.\n */\n set current(value) {\n this.value = value;\n this.notifySubscribers(value);\n }\n /**\n * @param value - The initial value.\n */\n constructor(value) {\n super();\n this.value = value;\n this.subscribable = new SubscribableValueEvent(this);\n }\n /**\n * {@inheritDoc SubscribableValueEvent.subscribe}\n */\n subscribe(handler, dispatchImmediately = true) {\n const unsubscribe = super.subscribe(handler);\n if (dispatchImmediately) {\n handler(this.value);\n }\n return unsubscribe;\n }\n}\n/**\n * Provides safe access to the public interface of {@link ValueDispatcher}.\n *\n * @remarks\n * External classes can use it to subscribe to an event without being able to\n * dispatch it.\n *\n * @typeParam T - The type of the value passed to subscribers.\n */\nexport class SubscribableValueEvent extends Subscribable {\n /**\n * Get the most recent value of this dispatcher.\n */\n get current() {\n return this.dispatcher.current;\n }\n /**\n * Subscribe to the event.\n *\n * Subscribing will immediately invoke the handler with the most recent value.\n *\n * @param handler - The handler to invoke when the event occurs.\n * @param dispatchImmediately - Whether the handler should be immediately\n * invoked with the most recent value.\n *\n * @returns Callback function that cancels the subscription.\n */\n subscribe(handler, dispatchImmediately = true) {\n return this.dispatcher.subscribe(handler, dispatchImmediately);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmFsdWVEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9WYWx1ZURpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBRXhFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBTSxPQUFPLGVBQW1CLFNBQVEsbUJBQXNCO0lBSTVEOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsT0FBTyxDQUFDLEtBQVE7UUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQTJCLEtBQVE7UUFDakMsS0FBSyxFQUFFLENBQUM7UUFEaUIsVUFBSyxHQUFMLEtBQUssQ0FBRztRQTFCbkIsaUJBQVksR0FDMUIsSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQTJCbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUyxDQUFDLE9BQXdCLEVBQUUsbUJBQW1CLEdBQUcsSUFBSTtRQUNuRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUN4QixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxzQkFBMEIsU0FBUSxZQUc5QztJQUNDOztPQUVHO0lBQ0gsSUFBVyxPQUFPO1FBQ2hCLE9BQTRCLElBQUksQ0FBQyxVQUFXLENBQUMsT0FBTyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksU0FBUyxDQUNkLE9BQXdCLEVBQ3hCLG1CQUFtQixHQUFHLElBQUk7UUFFMUIsT0FBNEIsSUFBSSxDQUFDLFVBQVcsQ0FBQyxTQUFTLENBQ3BELE9BQU8sRUFDUCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9","export function map(from, to, value) {\n return from + (to - from) * value;\n}\nexport function remap(fromIn, toIn, fromOut, toOut, value) {\n return fromOut + ((value - fromIn) * (toOut - fromOut)) / (toIn - fromIn);\n}\nexport function clamp(min, max, value) {\n return value < min ? min : value > max ? max : value;\n}\nexport function clampRemap(fromIn, toIn, fromOut, toOut, value) {\n const remappedValue = remap(fromIn, toIn, fromOut, toOut, value);\n if (fromOut > toOut)\n [fromOut, toOut] = [toOut, fromOut];\n return clamp(fromOut, toOut, remappedValue);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90d2VlbmluZy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQVUsRUFBRSxLQUFhO0lBQ3pELE9BQU8sSUFBSSxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUNwQyxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FDbkIsTUFBYyxFQUNkLElBQVksRUFDWixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWE7SUFFYixPQUFPLE9BQU8sR0FBRyxDQUFDLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFDNUUsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxLQUFhO0lBQzNELE9BQU8sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUN2RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsTUFBYyxFQUNkLElBQVksRUFDWixPQUFlLEVBQ2YsS0FBYSxFQUNiLEtBQWE7SUFFYixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLElBQUksT0FBTyxHQUFHLEtBQUs7UUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztJQUV6RCxPQUFPLEtBQUssQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQzlDLENBQUMifQ==","const SceneStack = [];\n/**\n * Get a reference to the current scene.\n */\nexport function useScene() {\n const scene = SceneStack.at(-1);\n if (!scene) {\n throw new Error('The scene is not available in the current context.');\n }\n return scene;\n}\nexport function startScene(scene) {\n SceneStack.push(scene);\n}\nexport function endScene(scene) {\n if (SceneStack.pop() !== scene) {\n throw new Error('startScene/endScene were called out of order.');\n }\n}\nexport function useLogger() {\n return SceneStack.at(-1)?.logger ?? console;\n}\n/**\n * Mark the current scene as ready to transition out.\n *\n * @remarks\n * Usually used together with transitions. When a scene is marked as finished,\n * the transition will start but the scene generator will continue running.\n */\nexport function finishScene() {\n useScene().enterCanTransitionOut();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlU2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlU2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLEdBQVksRUFBRSxDQUFDO0FBRS9COztHQUVHO0FBQ0gsTUFBTSxVQUFVLFFBQVE7SUFDdEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2hDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFZO0lBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDekIsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBWTtJQUNuQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLEVBQUUsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUMvQixNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUztJQUN2QixPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLElBQUksT0FBTyxDQUFDO0FBQzlDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVztJQUN6QixRQUFRLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ3JDLENBQUMifQ==","export class DetailedError extends Error {\n constructor(props, remarks) {\n if (typeof props === 'string') {\n super(props);\n this.remarks = remarks;\n }\n else {\n super(props.message);\n this.remarks = props.remarks;\n this.object = props.object;\n this.durationMs = props.durationMs;\n this.inspect = props.inspect;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGV0YWlsZWRFcnJvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9EZXRhaWxlZEVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE1BQU0sT0FBTyxhQUFjLFNBQVEsS0FBSztJQW9CdEMsWUFBbUIsS0FBa0MsRUFBRSxPQUFnQjtRQUNyRSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzlCLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0IsQ0FBQztJQUNILENBQUM7Q0FDRiJ9","import { DetailedError } from './DetailedError';\nconst ThreadStack = [];\n/**\n * Get a reference to the current thread.\n */\nexport function useThread() {\n const thread = ThreadStack.at(-1);\n if (!thread) {\n throw new DetailedError('The thread is not available in the current context.', \n // language=markdown\n `\\`useThread()\\` can only be called from within generator functions.\r\n It's not available during rendering.`);\n }\n return thread;\n}\nexport function startThread(thread) {\n ThreadStack.push(thread);\n}\nexport function endThread(thread) {\n if (ThreadStack.pop() !== thread) {\n throw new Error('startThread/endThread was called out of order.');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlVGhyZWFkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3VzZVRocmVhZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO0FBRWpDOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVM7SUFDdkIsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNaLE1BQU0sSUFBSSxhQUFhLENBQ3JCLHFEQUFxRDtRQUNyRCxvQkFBb0I7UUFDcEI7MkNBQ3FDLENBQ3RDLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYztJQUN4QyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWM7SUFDdEMsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7QUFDSCxDQUFDIn0=","export function errorToLog(error) {\n return {\n message: error.message,\n stack: error.stack,\n remarks: error.remarks,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JUb0xvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9lcnJvclRvTG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBVTtJQUNuQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87S0FDdkIsQ0FBQztBQUNKLENBQUMifQ==","export function getContext(options, canvas = document.createElement('canvas')) {\n const context = canvas.getContext('2d', options);\n if (!context) {\n throw new Error('Could not create a 2D context.');\n }\n return context;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0Q29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9nZXRDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxVQUFVLENBQ3hCLE9BQTBDLEVBQzFDLFNBQTRCLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBRTVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyJ9","/**\n * A constant for converting radians to degrees\n *\n * @example\n * const degrees = 0.6 * RAD2DEG;\n */\nexport const RAD2DEG = 180 / Math.PI;\n/**\n * A constant for converting degrees to radians\n *\n * @example\n * const radians = 30 * DEG2RAD;\n */\nexport const DEG2RAD = Math.PI / 180;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBRXJDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDIn0=","/**\n * A simple semaphore implementation with a capacity of 1.\n *\n * @internal\n */\nexport class Semaphore {\n constructor() {\n this.resolveCurrent = null;\n this.current = null;\n }\n async acquire() {\n while (this.current) {\n await this.current;\n }\n this.current = new Promise(resolve => {\n this.resolveCurrent = resolve;\n });\n }\n release() {\n this.current = null;\n this.resolveCurrent?.();\n this.resolveCurrent = null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VtYXBob3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL1NlbWFwaG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUFDVSxtQkFBYyxHQUF3QixJQUFJLENBQUM7UUFDM0MsWUFBTyxHQUF5QixJQUFJLENBQUM7SUFnQi9DLENBQUM7SUFkUSxLQUFLLENBQUMsT0FBTztRQUNsQixPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO0lBQzdCLENBQUM7Q0FDRiJ9","const PlaybackStack = [];\n/**\n * Get a reference to the playback status.\n */\nexport function usePlayback() {\n const playback = PlaybackStack.at(-1);\n if (!playback) {\n throw new Error('The playback is not available in the current context.');\n }\n return playback;\n}\nexport function startPlayback(playback) {\n PlaybackStack.push(playback);\n}\nexport function endPlayback(playback) {\n if (PlaybackStack.pop() !== playback) {\n throw new Error('startPlayback/endPlayback were called out of order.');\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlUGxheWJhY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdXNlUGxheWJhY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxhQUFhLEdBQXFCLEVBQUUsQ0FBQztBQUUzQzs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUNELE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLFFBQXdCO0lBQ3BELGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBd0I7SUFDbEQsSUFBSSxhQUFhLENBQUMsR0FBRyxFQUFFLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7QUFDSCxDQUFDIn0=","import { useLogger } from '../utils';\nimport { clamp, map } from './helpers';\nexport function textLerp(from, to, value) {\n // left to right\n if (to.length >= from.length) {\n const current = Math.floor(to.length * value);\n const currentLength = Math.floor(map(from.length - 1, to.length, value));\n let text = '';\n for (let i = 0; i < to.length; i++) {\n if (i < current) {\n text += to[i];\n }\n else if (from[i] || i <= currentLength) {\n text += from[i] ?? to[i];\n }\n }\n return text;\n }\n // right to left\n else {\n const current = Math.round(from.length * (1 - value));\n const currentLength = Math.floor(map(from.length + 1, to.length, value));\n const text = [];\n for (let i = from.length - 1; i >= 0; i--) {\n if (i < current) {\n text.unshift(from[i]);\n }\n else if (to[i] || i < currentLength) {\n text.unshift(to[i] ?? from[i]);\n }\n }\n return text.join('');\n }\n}\nexport function deepLerp(from, to, value, suppressWarnings = false) {\n if (value === 0)\n return from;\n if (value === 1)\n return to;\n if (from == null || to == null) {\n if (!suppressWarnings) {\n useLogger().warn(`Attempting to lerp ${from} -> ${to} may result in unexpected behavior.`);\n }\n return undefined;\n }\n if (typeof from === 'number' && typeof to === 'number') {\n return map(from, to, value);\n }\n if (typeof from === 'string' && typeof to === 'string') {\n return textLerp(from, to, value);\n }\n if (typeof from === 'boolean' && typeof to === 'boolean') {\n return value < 0.5 ? from : to;\n }\n if ('lerp' in from) {\n return from.lerp(to, value);\n }\n if (from && to && typeof from === 'object' && typeof to === 'object') {\n if (Array.isArray(from) && Array.isArray(to)) {\n if (from.length === to.length) {\n return from.map((f, i) => deepLerp(f, to[i], value));\n }\n }\n else {\n let toObject = false;\n if (!(from instanceof Map) && !(to instanceof Map)) {\n toObject = true;\n from = new Map(Object.entries(from));\n to = new Map(Object.entries(to));\n }\n if (from instanceof Map && to instanceof Map) {\n const result = new Map();\n for (const key of new Set([...from.keys(), ...to.keys()])) {\n const inter = deepLerp(from.get(key), to.get(key), value, true);\n if (inter !== undefined)\n result.set(key, inter);\n }\n return toObject ? Object.fromEntries(result) : result;\n }\n }\n }\n // fallback with an immediate jump to the new value\n return to;\n}\nexport function boolLerp(from, to, value) {\n return value < 0.5 ? from : to;\n}\nexport function arcLerp(value, reverse, ratio) {\n let flip = reverse;\n if (ratio > 1) {\n ratio = 1 / ratio;\n }\n else {\n flip = !flip;\n }\n const normalized = flip\n ? Math.acos(clamp(-1, 1, 1 - value))\n : Math.asin(value);\n const radians = map(normalized, map(0, Math.PI / 2, value), ratio);\n let xValue = Math.sin(radians);\n let yValue = 1 - Math.cos(radians);\n if (reverse) {\n [xValue, yValue] = [yValue, xValue];\n }\n return { x: xValue, y: yValue };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJwb2xhdGlvbkZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90d2VlbmluZy9pbnRlcnBvbGF0aW9uRnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkMsT0FBTyxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFNckMsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFZLEVBQUUsRUFBVSxFQUFFLEtBQWE7SUFDOUQsZ0JBQWdCO0lBQ2hCLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzlDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN6RSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLENBQUM7aUJBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUN6QyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixDQUFDO1FB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","export function decorate(fn, ...decorators) {\n const target = { [fn.name]: fn };\n const descriptor = Object.getOwnPropertyDescriptor(target, fn.name);\n if (descriptor) {\n for (let i = decorators.length - 1; i >= 0; i--) {\n decorators[i](target, fn.name, descriptor);\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGVjb3JhdG9ycy9kZWNvcmF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsUUFBUSxDQUFDLEVBQVksRUFBRSxHQUFHLFVBQTZCO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLEVBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFDLENBQUM7SUFDL0IsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNmLEtBQUssSUFBSSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2hELFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3QyxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMifQ==","export function threadable(customName) {\n return function (_, propertyKey, descriptor) {\n descriptor.value.prototype.name = customName ?? propertyKey;\n descriptor.value.prototype.threadable = true;\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWFkYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZWNvcmF0b3JzL3RocmVhZGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLFVBQVUsQ0FBQyxVQUFtQjtJQUM1QyxPQUFPLFVBQ0wsQ0FBVSxFQUNWLFdBQTRCLEVBQzVCLFVBQThCO1FBRTlCLFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxVQUFVLElBQUksV0FBVyxDQUFDO1FBQzVELFVBQVUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7SUFDL0MsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9","import { map, remap } from './helpers';\n/*\n * All easing implementations taken from https://easings.net/\n */\n// Sine\nexport function sin(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.sin(value));\n}\nexport function easeInSine(value, from = 0, to = 1) {\n value = 1 - Math.cos((value * Math.PI) / 2);\n return map(from, to, value);\n}\nexport function easeOutSine(value, from = 0, to = 1) {\n value = Math.sin((value * Math.PI) / 2);\n return map(from, to, value);\n}\nexport function easeInOutSine(value, from = 0, to = 1) {\n value = -(Math.cos(Math.PI * value) - 1) / 2;\n return map(from, to, value);\n}\n// Quadratic\nexport function easeInQuad(value, from = 0, to = 1) {\n value = value * value;\n return map(from, to, value);\n}\nexport function easeOutQuad(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 2);\n return map(from, to, value);\n}\nexport function easeInOutQuad(value, from = 0, to = 1) {\n value = value < 0.5 ? 2 * value * value : 1 - Math.pow(-2 * value + 2, 2) / 2;\n return map(from, to, value);\n}\n// Cubic\nexport function easeInCubic(value, from = 0, to = 1) {\n value = value * value * value;\n return map(from, to, value);\n}\nexport function easeOutCubic(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 3);\n return map(from, to, value);\n}\nexport function easeInOutCubic(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? 4 * value * value * value\n : 1 - Math.pow(-2 * value + 2, 3) / 2;\n return map(from, to, value);\n}\n// Quartic\nexport function easeInQuart(value, from = 0, to = 1) {\n value = value * value * value * value;\n return map(from, to, value);\n}\nexport function easeOutQuart(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 4);\n return map(from, to, value);\n}\nexport function easeInOutQuart(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? 8 * value * value * value * value\n : 1 - Math.pow(-2 * value + 2, 4) / 2;\n return map(from, to, value);\n}\n// Quintic\nexport function easeInQuint(value, from = 0, to = 1) {\n value = value * value * value * value * value;\n return map(from, to, value);\n}\nexport function easeOutQuint(value, from = 0, to = 1) {\n value = 1 - Math.pow(1 - value, 5);\n return map(from, to, value);\n}\nexport function easeInOutQuint(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? 16 * value * value * value * value * value\n : 1 - Math.pow(-2 * value + 2, 5) / 2;\n return map(from, to, value);\n}\n// Exponential\nexport function easeInExpo(value, from = 0, to = 1) {\n value = value === 0 ? 0 : Math.pow(2, 10 * value - 10);\n return map(from, to, value);\n}\nexport function easeOutExpo(value, from = 0, to = 1) {\n value = value === 1 ? 1 : 1 - Math.pow(2, -10 * value);\n return map(from, to, value);\n}\nexport function easeInOutExpo(value, from = 0, to = 1) {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : value < 0.5\n ? Math.pow(2, 20 * value - 10) / 2\n : (2 - Math.pow(2, -20 * value + 10)) / 2;\n return map(from, to, value);\n}\n// Circular\nexport function easeInCirc(value, from = 0, to = 1) {\n value = 1 - Math.sqrt(1 - Math.pow(value, 2));\n return map(from, to, value);\n}\nexport function easeOutCirc(value, from = 0, to = 1) {\n value = Math.sqrt(1 - Math.pow(value - 1, 2));\n return map(from, to, value);\n}\nexport function easeInOutCirc(value, from = 0, to = 1) {\n value =\n value < 0.5\n ? (1 - Math.sqrt(1 - Math.pow(2 * value, 2))) / 2\n : (Math.sqrt(1 - Math.pow(-2 * value + 2, 2)) + 1) / 2;\n return map(from, to, value);\n}\n// Back\nexport function createEaseInBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = (s + 1) * value * value * value - s * value * value;\n return map(from, to, value);\n };\n}\nexport function createEaseOutBack(s = 1.70158) {\n return (value, from = 0, to = 1) => {\n value = 1 + (s + 1) * Math.pow(value - 1, 3) + s * Math.pow(value - 1, 2);\n return map(from, to, value);\n };\n}\nexport function createEaseInOutBack(s = 1.70158, v = 1.525) {\n return (value, from = 0, to = 1) => {\n value =\n value < 0.5\n ? (Math.pow(2 * value, 2) * ((s * v + 1) * 2 * value - s * v)) / 2\n : (Math.pow(2 * value - 2, 2) *\n ((s * v + 1) * (value * 2 - 2) + s * v) +\n 2) /\n 2;\n return map(from, to, value);\n };\n}\n// Elastic\nexport function createEaseInElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : -Math.pow(2, 10 * value - 10) * Math.sin((value * 10 - 10.75) * s);\n return map(from, to, value);\n };\n}\nexport function createEaseOutElastic(s = 2.094395) {\n return (value, from = 0, to = 1) => {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : Math.pow(2, -10 * value) * Math.sin((value * 10 - 0.75) * s) + 1;\n return map(from, to, value);\n };\n}\nexport function createEaseInOutElastic(s = 1.39626) {\n return (value, from = 0, to = 1) => {\n value =\n value === 0\n ? 0\n : value === 1\n ? 1\n : value < 0.5\n ? -(Math.pow(2, 20 * value - 10) *\n Math.sin((20 * value - 11.125) * s)) / 2\n : (Math.pow(2, -20 * value + 10) *\n Math.sin((20 * value - 11.125) * s)) /\n 2 +\n 1;\n return map(from, to, value);\n };\n}\n// Bounce\nexport function createEaseInBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return 1 - easeOutBounce(1 - value, from, to);\n };\n}\nexport function createEaseOutBounce(n = 7.5625, d = 2.75) {\n return (value, from = 0, to = 1) => {\n if (value < 1 / d) {\n value = n * value * value;\n }\n else if (value < 2 / d) {\n value = n * (value -= 1.505 / d) * value + 0.75;\n }\n else if (value < 2.5 / d) {\n value = n * (value -= 2.25 / d) * value + 0.9375;\n }\n else {\n value = n * (value -= 2.625 / d) * value + 0.984375;\n }\n return map(from, to, value);\n };\n}\nexport function createEaseInOutBounce(n = 7.5625, d = 2.75) {\n const easeOutBounce = createEaseOutBounce(n, d);\n return (value, from = 0, to = 1) => {\n return value < 0.5\n ? (1 - easeOutBounce(1 - 2 * value, from, to)) / 2\n : (1 + easeOutBounce(2 * value - 1, from, to)) / 2;\n };\n}\n// Linear\nexport function linear(value, from = 0, to = 1) {\n return map(from, to, value);\n}\n// Cosine\nexport function cos(value, from = 0, to = 1) {\n return remap(-1, 1, from, to, Math.cos(value));\n}\n// Sensible defaults for functions with parameters that can be user defined\nexport const easeInBack = createEaseInBack();\nexport const easeOutBack = createEaseOutBack();\nexport const easeInOutBack = createEaseInOutBack();\nexport const easeInBounce = createEaseInBounce();\nexport const easeOutBounce = createEaseOutBounce();\nexport const easeInOutBounce = createEaseInOutBounce();\nexport const easeInElastic = createEaseInElastic();\nexport const easeOutElastic = createEaseOutElastic();\nexport const easeInOutElastic = createEaseInOutElastic();\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltaW5nRnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R3ZWVuaW5nL3RpbWluZ0Z1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQU1yQzs7R0FFRztBQUVILE9BQU87QUFDUCxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ2pELE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUN4RCxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDekQsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBRXhDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDM0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFlBQVk7QUFDWixNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ3hELEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBRXRCLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDekQsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFbkMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMzRCxLQUFLLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTlFLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFFBQVE7QUFDUixNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ3pELEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUU5QixPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQzFELEtBQUssR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRW5DLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDNUQsS0FBSztRQUNILEtBQUssR0FBRyxHQUFHO1lBQ1QsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUs7WUFDM0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQztBQUVELFVBQVU7QUFDVixNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQ3pELEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFdEMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMxRCxLQUFLLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVuQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWEsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDO0lBQzVELEtBQUs7UUFDSCxLQUFLLEdBQUcsR0FBRztZQUNULENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSztZQUNuQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFMUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsVUFBVTtBQUNWLE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYSxFQUFFLElBQUksR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUM7SUFDekQsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFOUMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxLQUFhLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQztJQUMxRCxLQUFLLEdB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","import { decorate, threadable } from '../decorators';\nimport { useThread } from '../utils';\ndecorate(tween, threadable());\nexport function* tween(seconds, onProgress, onEnd) {\n const thread = useThread();\n const startTime = thread.time();\n const endTime = thread.time() + seconds;\n onProgress(0, 0);\n while (endTime > thread.fixed) {\n const time = thread.fixed - startTime;\n const value = time / seconds;\n if (time > 0) {\n onProgress(value, time);\n }\n yield;\n }\n thread.time(endTime);\n onProgress(1, seconds);\n onEnd?.(1, seconds);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdlZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHdlZW5pbmcvdHdlZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7QUFDOUIsTUFBTSxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQ3BCLE9BQWUsRUFDZixVQUFpRCxFQUNqRCxLQUE2QztJQUU3QyxNQUFNLE1BQU0sR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUUzQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUV4QyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pCLE9BQU8sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztRQUN0QyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQzdCLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2IsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQixDQUFDO1FBQ0QsS0FBSyxDQUFDO0lBQ1IsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckIsVUFBVSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdEIsQ0FBQyJ9","export var Direction;\n(function (Direction) {\n Direction[Direction[\"Top\"] = 4] = \"Top\";\n Direction[Direction[\"Bottom\"] = 8] = \"Bottom\";\n Direction[Direction[\"Left\"] = 16] = \"Left\";\n Direction[Direction[\"Right\"] = 32] = \"Right\";\n})(Direction || (Direction = {}));\nexport var Center;\n(function (Center) {\n Center[Center[\"Vertical\"] = 1] = \"Vertical\";\n Center[Center[\"Horizontal\"] = 2] = \"Horizontal\";\n})(Center || (Center = {}));\nexport var Origin;\n(function (Origin) {\n Origin[Origin[\"Middle\"] = 3] = \"Middle\";\n Origin[Origin[\"Top\"] = 5] = \"Top\";\n Origin[Origin[\"Bottom\"] = 9] = \"Bottom\";\n Origin[Origin[\"Left\"] = 18] = \"Left\";\n Origin[Origin[\"Right\"] = 34] = \"Right\";\n Origin[Origin[\"TopLeft\"] = 20] = \"TopLeft\";\n Origin[Origin[\"TopRight\"] = 36] = \"TopRight\";\n Origin[Origin[\"BottomLeft\"] = 24] = \"BottomLeft\";\n Origin[Origin[\"BottomRight\"] = 40] = \"BottomRight\";\n})(Origin || (Origin = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxpZ25tZW50LWVudW1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL2FsaWdubWVudC1lbnVtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25CLHVDQUFPLENBQUE7SUFDUCw2Q0FBVSxDQUFBO0lBQ1YsMENBQVMsQ0FBQTtJQUNULDRDQUFVLENBQUE7QUFDWixDQUFDLEVBTFcsU0FBUyxLQUFULFNBQVMsUUFLcEI7QUFFRCxNQUFNLENBQU4sSUFBWSxNQUdYO0FBSEQsV0FBWSxNQUFNO0lBQ2hCLDJDQUFZLENBQUE7SUFDWiwrQ0FBYyxDQUFBO0FBQ2hCLENBQUMsRUFIVyxNQUFNLEtBQU4sTUFBTSxRQUdqQjtBQUVELE1BQU0sQ0FBTixJQUFZLE1BVVg7QUFWRCxXQUFZLE1BQU07SUFDaEIsdUNBQVUsQ0FBQTtJQUNWLGlDQUFPLENBQUE7SUFDUCx1Q0FBVSxDQUFBO0lBQ1Ysb0NBQVMsQ0FBQTtJQUNULHNDQUFVLENBQUE7SUFDViwwQ0FBWSxDQUFBO0lBQ1osNENBQWEsQ0FBQTtJQUNiLGdEQUFlLENBQUE7SUFDZixrREFBZ0IsQ0FBQTtBQUNsQixDQUFDLEVBVlcsTUFBTSxLQUFOLE1BQU0sUUFVakIifQ==","import { decorate, threadable } from '../decorators';\nimport { usePlayback, useThread } from '../utils';\ndecorate(waitFor, threadable());\n/**\n * Wait for the given amount of time.\n *\n * @example\n * ```ts\n * // current time: 0s\n * yield waitFor(2);\n * // current time: 2s\n * yield waitFor(3);\n * // current time: 5s\n * ```\n *\n * @param seconds - The relative time in seconds.\n * @param after - An optional task to be run after the function completes.\n */\nexport function* waitFor(seconds = 0, after) {\n const thread = useThread();\n const step = usePlayback().framesToSeconds(1);\n const targetTime = thread.time() + seconds;\n // subtracting the step is not necessary, but it keeps the thread time ahead\n // of the project time.\n while (targetTime - step > thread.fixed) {\n yield;\n }\n thread.time(targetTime);\n if (after) {\n yield* after;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZWR1bGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mbG93L3NjaGVkdWxpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFFaEQsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQ3RCLE9BQU8sR0FBRyxDQUFDLEVBQ1gsS0FBdUI7SUFFdkIsTUFBTSxNQUFNLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDM0IsTUFBTSxJQUFJLEdBQUcsV0FBVyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDM0MsNEVBQTRFO0lBQzVFLHVCQUF1QjtJQUN2QixPQUFPLFVBQVUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3hDLEtBQUssQ0FBQztJQUNSLENBQUM7SUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRXhCLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQyJ9","export function setTaskName(task, source) {\n const prototype = Object.getPrototypeOf(task);\n if (!prototype.threadable) {\n prototype.threadable = true;\n prototype.name = typeof source === 'string' ? source : getTaskName(source);\n }\n}\nexport function getTaskName(task) {\n return Object.getPrototypeOf(task).name ?? null;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZmxvdy9uYW1lcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWUsRUFBRSxNQUEwQjtJQUNyRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDMUIsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDNUIsU0FBUyxDQUFDLElBQUksR0FBRyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdFLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxJQUFlO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO0FBQ2xELENBQUMifQ==","import { setTaskName } from './names';\nexport function run(firstArg, runner) {\n let task;\n if (typeof firstArg === 'string') {\n task = runner();\n setTaskName(task, firstArg);\n }\n else {\n task = firstArg();\n setTaskName(task, task);\n }\n return task;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Zsb3cvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFnRHBDLE1BQU0sVUFBVSxHQUFHLENBQ2pCLFFBQTBDLEVBQzFDLE1BQThCO0lBRTlCLElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEdBQUcsTUFBTyxFQUFFLENBQUM7UUFDakIsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksR0FBRyxRQUFRLEVBQUUsQ0FBQztRQUNsQixXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==","import { FlagDispatcher } from '../events';\nimport { DetailedError } from '../utils';\nexport class DependencyContext {\n static collectPromise(promise, initialValue = null) {\n const handle = {\n promise,\n value: initialValue,\n stack: new Error().stack,\n };\n const context = this.collectionStack.at(-1);\n if (context) {\n handle.owner = context.owner;\n }\n promise.then(value => {\n handle.value = value;\n context?.markDirty();\n });\n this.promises.push(handle);\n return handle;\n }\n static hasPromises() {\n return this.promises.length > 0;\n }\n static async consumePromises() {\n const promises = [...this.promises];\n await Promise.all(promises.map(handle => handle.promise));\n this.promises = this.promises.filter(v => !promises.includes(v));\n return promises;\n }\n constructor(owner) {\n this.owner = owner;\n this.dependencies = new Set();\n this.event = new FlagDispatcher();\n this.markDirty = () => this.event.raise();\n this.invokable = this.invoke.bind(this);\n Object.defineProperty(this.invokable, 'context', {\n value: this,\n });\n Object.defineProperty(this.invokable, 'toPromise', {\n value: this.toPromise.bind(this),\n });\n }\n invoke() {\n // do nothing\n }\n startCollecting() {\n if (DependencyContext.collectionSet.has(this)) {\n throw new DetailedError('A circular dependency occurred between signals.', `This can happen when signals reference each other in a loop.\r\n Try using the attached stack trace to locate said loop.`);\n }\n DependencyContext.collectionSet.add(this);\n DependencyContext.collectionStack.push(this);\n }\n finishCollecting() {\n DependencyContext.collectionSet.delete(this);\n if (DependencyContext.collectionStack.pop() !== this) {\n throw new Error('collectStart/collectEnd was called out of order.');\n }\n }\n clearDependencies() {\n this.dependencies.forEach(dep => dep.unsubscribe(this.markDirty));\n this.dependencies.clear();\n }\n collect() {\n const signal = DependencyContext.collectionStack.at(-1);\n if (signal) {\n signal.dependencies.add(this.event.subscribable);\n this.event.subscribe(signal.markDirty);\n }\n }\n dispose() {\n this.clearDependencies();\n this.event.clear();\n this.owner = null;\n }\n async toPromise() {\n do {\n await DependencyContext.consumePromises();\n this.invokable();\n } while (DependencyContext.hasPromises());\n return this.invokable;\n }\n}\nDependencyContext.collectionSet = new Set();\nDependencyContext.collectionStack = [];\nDependencyContext.promises = [];\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVwZW5kZW5jeUNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmFscy9EZXBlbmRlbmN5Q29udGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXpDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFTdkMsTUFBTSxPQUFPLGlCQUFpQjtJQVlyQixNQUFNLENBQUMsY0FBYyxDQUMxQixPQUFtQixFQUNuQixlQUF5QixJQUFJO1FBRTdCLE1BQU0sTUFBTSxHQUE0QjtZQUN0QyxPQUFPO1lBQ1AsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSztTQUN6QixDQUFDO1FBRUYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ1osTUFBTSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ25CLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxNQUFNLENBQUMsV0FBVztRQUN2QixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxlQUFlO1FBQ2pDLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxJ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","export const DEFAULT = Symbol.for('@twick/core/signals/default');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduYWxzL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsQ0FBQyJ9","export function isReactive(value) {\n return typeof value === 'function';\n}\nexport function modify(value, modification) {\n return isReactive(value) ? () => modification(value()) : modification(value);\n}\nexport function unwrap(value) {\n return isReactive(value) ? value() : value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2lnbmFscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLFVBQVUsVUFBVSxDQUFJLEtBQXFCO0lBQ2pELE9BQU8sT0FBTyxLQUFLLEtBQUssVUFBVSxDQUFDO0FBQ3JDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUNwQixLQUF5QixFQUN6QixZQUFtQztJQUVuQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsTUFBTSxVQUFVLE1BQU0sQ0FBSSxLQUFxQjtJQUM3QyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUM3QyxDQUFDIn0=","import { run, waitFor } from '../flow';\nimport { easeInOutCubic, tween } from '../tweening';\nimport { errorToLog, useLogger } from '../utils';\nimport { DependencyContext } from './DependencyContext';\nimport { DEFAULT } from './symbols';\nimport { isReactive, unwrap } from './utils';\nexport class SignalContext extends DependencyContext {\n constructor(initial, interpolation, owner = undefined, parser = value => value, extensions = {}) {\n super(owner);\n this.initial = initial;\n this.interpolation = interpolation;\n this.parser = parser;\n this.tweening = false;\n Object.defineProperty(this.invokable, 'reset', {\n value: this.reset.bind(this),\n });\n Object.defineProperty(this.invokable, 'save', {\n value: this.save.bind(this),\n });\n Object.defineProperty(this.invokable, 'isInitial', {\n value: this.isInitial.bind(this),\n });\n if (this.initial !== undefined) {\n this.current = this.initial;\n this.markDirty();\n if (!isReactive(this.initial)) {\n this.last = this.parse(this.initial);\n }\n }\n this.extensions = {\n getter: this.getter.bind(this),\n setter: this.setter.bind(this),\n tweener: this.tweener.bind(this),\n ...extensions,\n };\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n set(value) {\n this.extensions.setter(value);\n return this.owner;\n }\n setter(value) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n if (this.current === value) {\n return this.owner;\n }\n this.current = value;\n this.markDirty();\n this.clearDependencies();\n if (!isReactive(value)) {\n this.last = this.parse(value);\n }\n return this.owner;\n }\n get() {\n return this.extensions.getter();\n }\n getter() {\n if (this.event.isRaised() && isReactive(this.current)) {\n this.clearDependencies();\n this.startCollecting();\n try {\n this.last = this.parse(this.current());\n }\n catch (e) {\n useLogger().error({\n ...errorToLog(e),\n inspect: this.owner?.key,\n });\n }\n this.finishCollecting();\n }\n this.event.reset();\n this.collect();\n return this.last;\n }\n invoke(value, duration, timingFunction = easeInOutCubic, interpolationFunction = this.interpolation) {\n if (value === undefined) {\n return this.get();\n }\n if (duration === undefined) {\n return this.set(value);\n }\n const queue = this.createQueue(timingFunction, interpolationFunction);\n return queue.to(value, duration);\n }\n createQueue(defaultTimingFunction, defaultInterpolationFunction) {\n const initial = this.get();\n const queue = [];\n const task = run('animation chain', function* animate() {\n while (queue.length > 0) {\n yield* queue.shift();\n }\n });\n task.to = (value, duration, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(this.tween(value, duration, timingFunction, interpolationFunction));\n return task;\n };\n task.back = (time, timingFunction = defaultTimingFunction, interpolationFunction = defaultInterpolationFunction) => {\n defaultTimingFunction = timingFunction;\n defaultInterpolationFunction = interpolationFunction;\n queue.push(this.tween(initial, time, defaultTimingFunction, defaultInterpolationFunction));\n return task;\n };\n task.wait = (duration) => {\n queue.push(waitFor(duration));\n return task;\n };\n task.run = (generator) => {\n queue.push(generator);\n return task;\n };\n task.do = (callback) => {\n queue.push(run(function* () {\n callback();\n }));\n return task;\n };\n return task;\n }\n *tween(value, duration, timingFunction, interpolationFunction) {\n if (value === DEFAULT) {\n value = this.initial;\n }\n this.tweening = true;\n yield* this.extensions.tweener(value, duration, timingFunction, interpolationFunction);\n this.set(value);\n this.tweening = false;\n }\n *tweener(value, duration, timingFunction, interpolationFunction) {\n const from = this.get();\n yield* tween(duration, v => {\n this.set(interpolationFunction(from, this.parse(unwrap(value)), timingFunction(v)));\n });\n }\n dispose() {\n super.dispose();\n this.initial = undefined;\n this.current = undefined;\n this.last = undefined;\n }\n /**\n * Reset the signal to its initial value (if one has been set).\n *\n * @example\n * ```ts\n * const signal = createSignal(7);\n *\n * signal.reset();\n * // same as:\n * signal(7);\n * ```\n */\n reset() {\n if (this.initial !== undefined) {\n this.set(this.initial);\n }\n return this.owner;\n }\n /**\n * Compute the current value of the signal and immediately set it.\n *\n * @remarks\n * This method can be used to stop the signal from updating while keeping its\n * current value.\n *\n * @example\n * ```ts\n * signal.save();\n * // same as:\n * signal(signal());\n * ```\n */\n save() {\n return this.set(this.get());\n }\n /**\n * Check if the signal is currently using its initial value.\n *\n * @example\n * ```ts\n *\n * const signal = createSignal(0);\n * signal.isInitial(); // true\n *\n * signal(5);\n * signal.isInitial(); // false\n *\n * signal(DEFAULT);\n * signal.isInitial(); // true\n * ```\n */\n isInitial() {\n this.collect();\n return this.current === this.initial;\n }\n /**\n * Get the initial value of this signal.\n */\n getInitial() {\n return this.initial;\n }\n /**\n * Get the raw value of this signal.\n *\n * @remarks\n * If the signal was provided with a factory function, the function itself\n * will be returned, without invoking it.\n *\n * This method can be used to create copies of signals.\n *\n * @example\n * ```ts\n * const a = createSignal(2);\n * const b = createSignal(() => a);\n * // b() == 2\n *\n * const bClone = createSignal(b.raw());\n * // bClone() == 2\n *\n * a(4);\n * // b() == 4\n * // bClone() == 4\n * ```\n */\n raw() {\n return this.current;\n }\n /**\n * Is the signal undergoing a tween?\n */\n isTweening() {\n return this.tweening;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2lnbmFsQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zaWduYWxzL1NpZ25hbENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFHckMsT0FBTyxFQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDbEQsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQVNsQyxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQWtDM0MsTUFBTSxPQUFPLGFBSVgsU0FBUSxpQkFBeUI7SUFNakMsWUFDVSxPQUE4QyxFQUNyQyxhQUE0QyxFQUM3RCxRQUFrQyxTQUFVLEVBQ2xDLFNBQTBDLEtBQUssQ0FBQyxFQUFFLENBQVMsS0FBSyxFQUMxRSxhQUE4RCxFQUFFO1FBRWhFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQU5MLFlBQU8sR0FBUCxPQUFPLENBQXVDO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUErQjtRQUVuRCxXQUFNLEdBQU4sTUFBTSxDQUEwRDtRQU5sRSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBV3pCLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUU7WUFDN0MsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUM3QixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQzVDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFB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","import { map } from '../tweening/helpers';\nimport { SignalContext } from './SignalContext';\nimport { isReactive, modify } from './utils';\nexport class CompoundSignalContext extends SignalContext {\n constructor(entries, parser, initial, interpolation, owner = undefined, extensions = {}) {\n var _a;\n super(undefined, interpolation, owner, parser, extensions);\n this.entries = entries;\n this.signals = [];\n this.parser = parser;\n for (const entry of entries) {\n let key;\n let signal;\n if (Array.isArray(entry)) {\n [key, signal] = entry;\n (_a = signal.context).owner ?? (_a.owner = this);\n }\n else {\n key = entry;\n signal = new SignalContext(modify(initial, value => parser(value)[entry]), map, owner ?? this.invokable).toSignal();\n }\n this.signals.push([key, signal]);\n Object.defineProperty(this.invokable, key, { value: signal });\n }\n }\n toSignal() {\n return this.invokable;\n }\n parse(value) {\n return this.parser(value);\n }\n getter() {\n return this.parse((Object.fromEntries(this.signals.map(([key, property]) => [key, property()]))));\n }\n setter(value) {\n if (isReactive(value)) {\n for (const [key, property] of this.signals) {\n property(() => this.parser(value())[key]);\n }\n }\n else {\n const parsed = this.parse(value);\n for (const [key, property] of this.signals) {\n property(parsed[key]);\n }\n }\n return this.owner;\n }\n reset() {\n for (const [, signal] of this.signals) {\n signal.reset();\n }\n return this.owner;\n }\n save() {\n for (const [, signal] of this.signals) {\n signal.save();\n }\n return this.owner;\n }\n isInitial() {\n for (const [, signal] of this.signals) {\n if (!signal.isInitial()) {\n return false;\n }\n }\n return true;\n }\n raw() {\n return Object.fromEntries(this.signals.map(([key, property]) => [key, property.context.raw()]));\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG91bmRTaWduYWxDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpZ25hbHMvQ29tcG91bmRTaWduYWxDb250ZXh0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV4QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFOUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFrQjNDLE1BQU0sT0FBTyxxQkFLWCxTQUFRLGFBQTJDO0lBR25ELFlBQ21CLE9BR2QsRUFDSCxNQUF1QyxFQUN2QyxPQUFrQyxFQUNsQyxhQUE0QyxFQUM1QyxRQUFrQyxTQUFVLEVBQzVDLGFBQThELEVBQUU7O1FBRWhFLEtBQUssQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFWMUMsWUFBTyxHQUFQLE9BQU8sQ0FHckI7UUFOVyxZQUFPLEdBQStDLEVBQUUsQ0FBQztRQWN2RSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUVyQixLQUFLLE1BQU0sS0FBSyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksR0FBaUIsQ0FBQztZQUN0QixJQUFJLE1BQWdDLENBQUM7WUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztnQkFDdEIsTUFBQyxNQUFNLENBQUMsT0FBZSxFQUFDLEtBQUssUUFBTCxLQUFLLEdBQUssSUFBSSxFQUFDO1lBQ3pDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixHQUFHLEdBQUcsS0FBSyxDQUFDO2dCQUNaLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FDeEIsTUFBTSxDQUFDLE9BQU8s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","export const EPSILON = 0.000001;\nexport function isType(value) {\n return value && typeof value === 'object' && 'toSymbol' in value;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9UeXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUM7QUFVaEMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxLQUFVO0lBQy9CLE9BQU8sS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxVQUFVLElBQUksS0FBSyxDQUFDO0FBQ25FLENBQUMifQ==","import { CompoundSignalContext } from '../signals';\nimport { arcLerp, clamp, map } from '../tweening';\nimport { DEG2RAD, RAD2DEG } from '../utils';\nimport { Direction, Origin } from './alignment-enums';\nimport { EPSILON } from './Type';\n/**\n * Represents a two-dimensional vector.\n */\nexport class Vector2 {\n static createSignal(initial, interpolation = Vector2.lerp, owner) {\n return new CompoundSignalContext(['x', 'y'], (value) => new Vector2(value), initial, interpolation, owner).toSignal();\n }\n static lerp(from, to, value) {\n let valueX;\n let valueY;\n if (typeof value === 'number') {\n valueX = valueY = value;\n }\n else {\n valueX = value.x;\n valueY = value.y;\n }\n return new Vector2(map(from.x, to.x, valueX), map(from.y, to.y, valueY));\n }\n static arcLerp(from, to, value, reverse = false, ratio) {\n ratio ?? (ratio = from.sub(to).ctg);\n return Vector2.lerp(from, to, new Vector2(arcLerp(value, reverse, ratio)));\n }\n static createArcLerp(reverse, ratio) {\n return (from, to, value) => Vector2.arcLerp(from, to, value, reverse, ratio);\n }\n /**\n * Interpolates between two vectors on the polar plane by interpolating\n * the angles and magnitudes of the vectors individually.\n *\n * @param from - The starting vector.\n * @param to - The target vector.\n * @param value - The t-value of the interpolation.\n * @param counterclockwise - Whether the vector should get rotated\n * counterclockwise. Defaults to `false`.\n * @param origin - The center of rotation. Defaults to the origin.\n *\n * @remarks\n * This function is useful when used in conjunction with {@link rotate} to\n * animate an object's position on a circular arc (see examples).\n *\n * @example\n * Animating an object in a circle around the origin\n * ```tsx\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.polarLerp\n * );\n * ```\n * @example\n * Rotating an object around the point `[-200, 100]`\n * ```ts\n * circle().position(\n * circle().position().rotate(180, [-200, 100]),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(false, [-200, 100]),\n * );\n * ```\n * @example\n * Rotating an object counterclockwise around the origin\n * ```ts\n * circle().position(\n * circle().position().rotate(180),\n * 1,\n * easeInOutCubic,\n * Vector2.createPolarLerp(true),\n * );\n * ```\n */\n static polarLerp(from, to, value, counterclockwise = false, origin = Vector2.zero) {\n from = from.sub(origin);\n to = to.sub(origin);\n const fromAngle = from.degrees;\n let toAngle = to.degrees;\n const isCounterclockwise = fromAngle > toAngle;\n if (isCounterclockwise !== counterclockwise) {\n toAngle = toAngle + (counterclockwise ? -360 : 360);\n }\n const angle = map(fromAngle, toAngle, value) * DEG2RAD;\n const magnitude = map(from.magnitude, to.magnitude, value);\n return new Vector2(magnitude * Math.cos(angle) + origin.x, magnitude * Math.sin(angle) + origin.y);\n }\n /**\n * Helper function to create a {@link Vector2.polarLerp} interpolation\n * function with additional parameters.\n *\n * @param counterclockwise - Whether the point should get rotated\n * counterclockwise.\n * @param center - The center of rotation. Defaults to the origin.\n */\n static createPolarLerp(counterclockwise = false, center = Vector2.zero) {\n return (from, to, value) => Vector2.polarLerp(from, to, value, counterclockwise, new Vector2(center));\n }\n static fromOrigin(origin) {\n const position = new Vector2();\n if (origin === Origin.Middle) {\n return position;\n }\n if (origin & Direction.Left) {\n position.x = -1;\n }\n else if (origin & Direction.Right) {\n position.x = 1;\n }\n if (origin & Direction.Top) {\n position.y = -1;\n }\n else if (origin & Direction.Bottom) {\n position.y = 1;\n }\n return position;\n }\n static fromScalar(value) {\n return new Vector2(value, value);\n }\n static fromRadians(radians) {\n return new Vector2(Math.cos(radians), Math.sin(radians));\n }\n static fromDegrees(degrees) {\n return Vector2.fromRadians(degrees * DEG2RAD);\n }\n /**\n * Return the angle in radians between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n */\n static radians(x, y) {\n return Math.atan2(y, x);\n }\n /**\n * Return the angle in degrees between the vector described by x and y and the\n * positive x-axis.\n *\n * @param x - The x component of the vector.\n * @param y - The y component of the vector.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n static degrees(x, y) {\n return Vector2.radians(x, y) * RAD2DEG;\n }\n static magnitude(x, y) {\n return Math.sqrt(x * x + y * y);\n }\n static squaredMagnitude(x, y) {\n return x * x + y * y;\n }\n static angleBetween(u, v) {\n return (Math.acos(clamp(-1, 1, u.dot(v) / (u.magnitude * v.magnitude))) *\n (u.cross(v) >= 0 ? 1 : -1));\n }\n get width() {\n return this.x;\n }\n set width(value) {\n this.x = value;\n }\n get height() {\n return this.y;\n }\n set height(value) {\n this.y = value;\n }\n get magnitude() {\n return Vector2.magnitude(this.x, this.y);\n }\n get squaredMagnitude() {\n return Vector2.squaredMagnitude(this.x, this.y);\n }\n get normalized() {\n return this.scale(1 / Vector2.magnitude(this.x, this.y));\n }\n get safe() {\n return new Vector2(isNaN(this.x) ? 0 : this.x, isNaN(this.y) ? 0 : this.y);\n }\n get flipped() {\n return new Vector2(-this.x, -this.y);\n }\n get floored() {\n return new Vector2(Math.floor(this.x), Math.floor(this.y));\n }\n get perpendicular() {\n return new Vector2(this.y, -this.x);\n }\n /**\n * Return the angle in radians between the vector and the positive x-axis.\n */\n get radians() {\n return Vector2.radians(this.x, this.y);\n }\n /**\n * Return the angle in degrees between the vector and the positive x-axis.\n *\n * @remarks\n * The returned angle will be between -180 and 180 degrees.\n */\n get degrees() {\n return Vector2.degrees(this.x, this.y);\n }\n get ctg() {\n return this.x / this.y;\n }\n constructor(one, two) {\n this.x = 0;\n this.y = 0;\n if (one === undefined || one === null) {\n return;\n }\n if (typeof one !== 'object') {\n this.x = one;\n this.y = two ?? one;\n return;\n }\n if (Array.isArray(one)) {\n this.x = one[0];\n this.y = one[1];\n return;\n }\n if ('width' in one) {\n this.x = one.width;\n this.y = one.height;\n return;\n }\n this.x = one.x;\n this.y = one.y;\n }\n lerp(to, value) {\n return Vector2.lerp(this, to, value);\n }\n getOriginOffset(origin) {\n const offset = Vector2.fromOrigin(origin);\n offset.x *= this.x / 2;\n offset.y *= this.y / 2;\n return offset;\n }\n scale(value) {\n return new Vector2(this.x * value, this.y * value);\n }\n mul(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x * vector.x, this.y * vector.y);\n }\n div(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x / vector.x, this.y / vector.y);\n }\n add(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x + vector.x, this.y + vector.y);\n }\n sub(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x - vector.x, this.y - vector.y);\n }\n dot(possibleVector) {\n const vector = new Vector2(possibleVector);\n return this.x * vector.x + this.y * vector.y;\n }\n cross(possibleVector) {\n const vector = new Vector2(possibleVector);\n return this.x * vector.y - this.y * vector.x;\n }\n mod(possibleVector) {\n const vector = new Vector2(possibleVector);\n return new Vector2(this.x % vector.x, this.y % vector.y);\n }\n addX(value) {\n return new Vector2(this.x + value, this.y);\n }\n addY(value) {\n return new Vector2(this.x, this.y + value);\n }\n toSymbol() {\n return Vector2.symbol;\n }\n toString() {\n return `Vector2(${this.x}, ${this.y})`;\n }\n toUniform(gl, location) {\n gl.uniform2f(location, this.x, this.y);\n }\n serialize() {\n return { x: this.x, y: this.y };\n }\n /**\n * Check if two vectors are exactly equal to each other.\n *\n * @remarks\n * If you need to compensate for floating point inaccuracies, use the\n * {@link equals} method, instead.\n *\n * @param other - The vector to compare.\n */\n exactlyEquals(other) {\n return this.x === other.x && this.y === other.y;\n }\n /**\n * Check if two vectors are equal to each other.\n *\n * @remarks\n * This method allows passing an allowed error margin when comparing vectors\n * to compensate for floating point inaccuracies. To check if two vectors are\n * exactly equal, use the {@link exactlyEquals} method, instead.\n *\n * @param other - The vector to compare.\n * @param threshold - The allowed error threshold when comparing the vectors.\n */\n equals(other, threshold = EPSILON) {\n return (Math.abs(this.x - other.x) <= threshold + Number.EPSILON &&\n Math.abs(this.y - other.y) <= threshold + Number.EPSILON);\n }\n}\nVector2.symbol = Symbol.for('@twick/core/types/Vector2');\nVector2.zero = new Vector2();\nVector2.one = new Vector2(1, 1);\nVector2.right = new Vector2(1, 0);\nVector2.left = new Vector2(-1, 0);\nVector2.up = new Vector2(0, 1);\nVector2.down = new Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, -1)`\n */\nVector2.top = new Vector2(0, -1);\n/**\n * A constant equal to `Vector2(0, 1)`\n */\nVector2.bottom = new Vector2(0, 1);\n/**\n * A constant equal to `Vector2(-1, -1)`\n */\nVector2.topLeft = new Vector2(-1, -1);\n/**\n * A constant equal to `Vector2(1, -1)`\n */\nVector2.topRight = new Vector2(1, -1);\n/**\n * A constant equal to `Vector2(-1, 1)`\n */\nVector2.bottomLeft = new Vector2(-1, 1);\n/**\n * A constant equal to `Vector2(1, 1)`\n */\nVector2.bottomRight = new Vector2(1, 1);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGVzL1ZlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFakQsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFFBQVEsQ0FBQztBQXVCL0I7O0dBRUc7QUFDSCxNQUFNLE9BQU8sT0FBTztJQXNDWCxNQUFNLENBQUMsWUFBWSxDQUN4QixPQUFzQyxFQUN0QyxnQkFBZ0QsT0FBTyxDQUFDLElBQUksRUFDNUQsS0FBVztRQUVYLE9BQU8sSUFBSSxxQkFBcUIsQ0FDOUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQ1YsQ0FBQyxLQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFDOUMsT0FBTyxFQUNQLGFBQWEsRUFDYixLQUFLLENBQ04sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQWEsRUFBRSxFQUFXLEVBQUUsS0FBdUI7UUFDcEUsSUFBSSxNQUFNLENBQUM7UUFDWCxJQUFJLE1BQU0sQ0FBQztRQUVYLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDOUIsTUFBTSxHQUFHLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUNqQixNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztR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","import { ValueDispatcher } from '../events';\nexport var PlaybackState;\n(function (PlaybackState) {\n PlaybackState[PlaybackState[\"Playing\"] = 0] = \"Playing\";\n PlaybackState[PlaybackState[\"Rendering\"] = 1] = \"Rendering\";\n PlaybackState[PlaybackState[\"Paused\"] = 2] = \"Paused\";\n PlaybackState[PlaybackState[\"Presenting\"] = 3] = \"Presenting\";\n})(PlaybackState || (PlaybackState = {}));\n/**\n * A general class for managing a sequence of scenes.\n *\n * @remarks\n * This class provides primitive operations that can be executed on a scene\n * sequence, such as {@link progress} or {@link seek}.\n *\n * @internal\n */\nexport class PlaybackManager {\n constructor() {\n this.frame = 0;\n this.speed = 1;\n this.fps = 30;\n this.duration = 0;\n this.finished = false;\n this.slides = [];\n this.previousScene = null;\n this.state = PlaybackState.Paused;\n this.currentSceneReference = null;\n this.scenes = new ValueDispatcher([]);\n }\n /**\n * Triggered when the active scene changes.\n *\n * @eventProperty\n */\n get onSceneChanged() {\n if (this.currentSceneReference === null) {\n throw new Error('PlaybackManager has not been properly initialized');\n }\n return this.currentSceneReference.subscribable;\n }\n /**\n * Triggered when the scenes get recalculated.\n *\n * @remarks\n * This event indicates that the timing of at least one scene has changed.\n *\n * @eventProperty\n */\n get onScenesRecalculated() {\n return this.scenes.subscribable;\n }\n get currentScene() {\n if (this.currentSceneReference === null) {\n throw new Error('PlaybackManager has not been properly initialized');\n }\n return this.currentSceneReference.current;\n }\n set currentScene(scene) {\n if (!scene) {\n throw new Error('Invalid scene.');\n }\n this.currentSceneReference ?? (this.currentSceneReference = new ValueDispatcher(scene));\n this.currentSceneReference.current = scene;\n }\n setup(scenes) {\n this.scenes.current = scenes;\n this.currentScene = scenes[0];\n }\n async progress() {\n this.finished = await this.next();\n return this.finished;\n }\n async seek(frame) {\n if (frame <= this.frame ||\n (this.currentScene.isCached() && this.currentScene.lastFrame < frame)) {\n const scene = this.findBestScene(frame);\n if (scene !== this.currentScene) {\n this.currentScene.stopAllMedia();\n this.previousScene = null;\n this.currentScene = scene;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n }\n else if (this.frame >= frame) {\n this.previousScene = null;\n this.frame = this.currentScene.firstFrame;\n await this.currentScene.reset();\n }\n }\n this.finished = false;\n while (this.frame < frame && !this.finished) {\n this.finished = await this.next();\n }\n return this.finished;\n }\n async reset() {\n this.previousScene = null;\n this.currentScene = this.scenes.current[0];\n this.frame = 0;\n await this.currentScene.reset();\n }\n reload(description) {\n this.scenes.current.forEach(scene => scene.reload(description));\n }\n async recalculate() {\n this.previousScene = null;\n this.slides = [];\n const speed = this.speed;\n this.frame = 0;\n this.speed = 1;\n const scenes = [];\n try {\n for (const scene of this.scenes.current) {\n await scene.recalculate(frame => {\n this.frame = frame;\n });\n this.slides.push(...scene.slides.onChanged.current);\n scenes.push(scene);\n }\n }\n finally {\n this.speed = speed;\n }\n this.scenes.current = scenes;\n this.duration = this.frame;\n }\n async next() {\n if (this.previousScene) {\n await this.previousScene.next();\n if (this.currentScene.isFinished()) {\n this.previousScene = null;\n }\n }\n this.frame += this.speed;\n if (this.currentScene.isFinished()) {\n return true;\n }\n await this.currentScene.next();\n if (this.previousScene && this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n if (this.currentScene.canTransitionOut()) {\n this.previousScene = this.currentScene;\n const nextScene = this.getNextScene(this.previousScene);\n if (nextScene) {\n this.previousScene.stopAllMedia();\n this.currentScene = nextScene;\n await this.currentScene.reset(this.previousScene);\n }\n if (!nextScene || this.currentScene.isAfterTransitionIn()) {\n this.previousScene = null;\n }\n }\n return this.currentScene.isFinished();\n }\n findBestScene(frame) {\n let lastScene = this.scenes.current[0];\n for (const scene of this.scenes.current) {\n if (!scene.isCached() || scene.lastFrame > frame) {\n return scene;\n }\n lastScene = scene;\n }\n return lastScene;\n }\n getNextScene(scene) {\n const scenes = this.scenes.current;\n if (!scene) {\n return scenes[0];\n }\n const index = scenes.findIndex(s => s === scene);\n if (index < 0) {\n return null;\n }\n return scenes[index + 1] ?? null;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWJhY2tNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9QbGF5YmFja01hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUcxQyxNQUFNLENBQU4sSUFBWSxhQUtYO0FBTEQsV0FBWSxhQUFhO0lBQ3ZCLHVEQUFPLENBQUE7SUFDUCwyREFBUyxDQUFBO0lBQ1QscURBQU0sQ0FBQTtJQUNOLDZEQUFVLENBQUE7QUFDWixDQUFDLEVBTFcsYUFBYSxLQUFiLGFBQWEsUUFLeEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBQTVCO1FBeUJTLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsUUFBRyxHQUFHLEVBQUUsQ0FBQztRQUNULGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pCLFdBQU0sR0FBWSxFQUFFLENBQUM7UUFFckIsa0JBQWEsR0FBaUIsSUFBSSxDQUFDO1FBQ25DLFVBQUssR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDO1FBaUI1QiwwQkFBcUIsR0FBa0MsSUFBSSxDQUFDO1FBQzVELFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBVSxFQUFFLENBQUMsQ0FBQztJQXVJcEQsQ0FBQztJQXpMQzs7OztPQUlHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hDLE1BQU0sSUFBSSxLQUFLLENBQUMsbURBQW1ELENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDO0lBQ2pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxvQkFBb0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsTUFBTSxD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","/**\n * A read-only representation of the playback.\n */\nexport class PlaybackStatus {\n constructor(playback) {\n this.playback = playback;\n }\n /**\n * Convert seconds to frames using the current framerate.\n *\n * @param seconds - The seconds to convert.\n */\n secondsToFrames(seconds) {\n return Math.ceil(seconds * this.playback.fps);\n }\n /**\n * Convert frames to seconds using the current framerate.\n *\n * @param frames - The frames to convert.\n */\n framesToSeconds(frames) {\n return frames / this.playback.fps;\n }\n get time() {\n return this.framesToSeconds(this.playback.frame);\n }\n get frame() {\n return this.playback.frame;\n }\n get speed() {\n return this.playback.speed;\n }\n get fps() {\n return this.playback.fps;\n }\n get state() {\n return this.playback.state;\n }\n /**\n * The time passed since the last frame in seconds.\n */\n get deltaTime() {\n return this.framesToSeconds(1) * this.speed;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWJhY2tTdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwL1BsYXliYWNrU3RhdHVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFBb0MsUUFBeUI7UUFBekIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7SUFBRyxDQUFDO0lBRWpFOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsT0FBZTtRQUNwQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsTUFBYztRQUNuQyxPQUFPLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFDN0IsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQzlDLENBQUM7Q0FDRiJ9","const SOURCE_URL_REGEX = /^\\/\\/# sourceURL=(.*)$/gm;\nconst INFO_LOG_REGEX = /ERROR: \\d+:(\\d+): (.*)/g;\nconst INFO_TOKEN_REGEX = /^'([^']+)'/;\nconst includeWithoutPreprocessor = `\r\nThe \\`#include\\` directive requires the use of a preprocessor.\r\n\r\nMake sure to import the shader from a file:\r\n\r\n\\`\\`\\`ts\r\nimport shader from './shader.glsl';\r\n\\`\\`\\`\r\n\r\nDo **NOT** use the raw loader:\r\n\r\n\\`\\`\\`ts\r\nimport shader from './shader.glsl?raw';\r\n\\`\\`\\`\r\n\r\nDo **NOT** use \\`#include\\` in an inline string:\r\n\r\n\\`\\`\\`ts\r\nconst shader = \\`\\\\\r\n#include \"example.glsl\"\r\n\\`;\r\n\\`\\`\\`\r\n\r\n[Learn more](https://motioncanvas.io/docs/shaders) about working with shaders.\r\n`;\nexport class SharedWebGLContext {\n constructor(logger) {\n this.logger = logger;\n this.gl = null;\n this.currentOwner = null;\n this.programLookup = new Map();\n }\n borrow(owner) {\n if (this.currentOwner === owner) {\n return this.gl;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = owner;\n this.currentOwner.setup(this.getGL());\n return this.gl;\n }\n /**\n * Dispose the WebGL context to free up resources.\n */\n dispose() {\n if (!this.gl) {\n return;\n }\n this.currentOwner?.teardown(this.gl);\n this.currentOwner = null;\n this.gl.useProgram(null);\n for (const { program, fragment, vertex } of this.programLookup.values()) {\n this.gl.deleteProgram(program);\n this.gl.deleteShader(fragment);\n this.gl.deleteShader(vertex);\n }\n this.programLookup.clear();\n this.gl.getExtension('WEBGL_lose_context')?.loseContext();\n this.gl.canvas.remove();\n this.gl = null;\n }\n getProgram(fragment, vertex) {\n const key = `${fragment}#${vertex}`;\n if (this.programLookup.has(key)) {\n return this.programLookup.get(key).program;\n }\n const gl = this.getGL();\n const fragmentShader = this.getShader(gl.FRAGMENT_SHADER, fragment);\n const vertexShader = this.getShader(gl.VERTEX_SHADER, vertex);\n if (!fragmentShader || !vertexShader) {\n return null;\n }\n const program = gl.createProgram();\n gl.attachShader(program, fragmentShader);\n gl.attachShader(program, vertexShader);\n gl.linkProgram(program);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n this.logger.error({\n message: 'Failed to initialize the shader program.',\n remarks: gl.getProgramInfoLog(program) ?? undefined,\n stack: new Error().stack,\n });\n gl.deleteProgram(program);\n return null;\n }\n this.programLookup.set(key, {\n program,\n fragment: fragmentShader,\n vertex: vertexShader,\n });\n return program;\n }\n getShader(type, source) {\n const gl = this.getGL();\n const shader = gl.createShader(type);\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n const log = gl.getShaderInfoLog(shader);\n logGlslError(this.logger, log, source);\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n }\n getGL() {\n if (this.gl) {\n return this.gl;\n }\n this.gl = document.createElement('canvas').getContext('webgl2', {\n depth: false,\n premultipliedAlpha: false,\n stencil: false,\n powerPreference: 'high-performance',\n });\n if (!this.gl) {\n throw new Error('Failed to initialize WebGL.');\n }\n /* NOTE: Temporary debugging code\n const canvas = this.gl.canvas as HTMLCanvasElement;\n document.body.append(canvas);\n canvas.style.position = 'absolute';\n canvas.style.top = '16px';\n canvas.style.right = '16px';\n canvas.style.width = '300px';\n canvas.style.borderRadius = '4px';\n canvas.style.border = '1px solid #ccc';\n canvas.style.backgroundColor = '#141414';\n canvas.style.zIndex = '1000';\n */\n return this.gl;\n }\n}\nfunction logGlslError(logger, log, source) {\n let sourceUrl = null;\n SOURCE_URL_REGEX.lastIndex = 0;\n const sourceMatch = SOURCE_URL_REGEX.exec(source);\n if (sourceMatch) {\n const url = new URL(sourceMatch[1], window.location.origin);\n url.searchParams.set('t', Date.now().toString());\n sourceUrl = url.toString();\n }\n if (!log) {\n logger.error({\n message: `Unknown shader compilation error.`,\n stack: fakeStackTrace(sourceUrl, 1, 0),\n });\n return null;\n }\n let logged = false;\n let result;\n while ((result = INFO_LOG_REGEX.exec(log))) {\n const [, line, message] = result;\n let column = 0;\n const match = message.match(INFO_TOKEN_REGEX);\n if (match) {\n const tokenLine = source.split('\\n')[parseInt(line) - 1];\n const index = tokenLine.indexOf(match[1]);\n if (index !== -1) {\n column = index;\n }\n if (match[1] === 'include') {\n const line = source\n .split('\\n')\n .find(line => line.startsWith('#include'));\n if (line) {\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n remarks: includeWithoutPreprocessor,\n });\n break;\n }\n }\n }\n logged = true;\n logger.error({\n message: `Shader compilation error: ${message}`,\n stack: fakeStackTrace(sourceUrl, line, column),\n });\n }\n if (!logged) {\n logger.error({\n message: `Shader compilation error: ${log}`,\n stack: fakeStackTrace(sourceUrl, 1, 0),\n });\n }\n}\nfunction fakeStackTrace(file, line, column) {\n if (!file) {\n return undefined;\n }\n return navigator.userAgent.toLowerCase().includes('chrome')\n ? ` at (${file}:${line}:${column})`\n : `@${file}:${line}:${column}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hhcmVkV2ViR0xDb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9TaGFyZWRXZWJHTENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxnQkFBZ0IsR0FBRywwQkFBMEIsQ0FBQztBQUNwRCxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQztBQUNqRCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUV0QyxNQUFNLDBCQUEwQixHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F3QmxDLENBQUM7QUFnQkYsTUFBTSxPQUFPLGtCQUFrQjtJQUs3QixZQUFvQyxNQUFjO1FBQWQsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUoxQyxPQUFFLEdBQWtDLElBQUksQ0FBQztRQUN6QyxpQkFBWSxHQUE2QixJQUFJLENBQUM7UUFDckMsa0JBQWEsR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUVoQixDQUFDO0lBRS9DLE1BQU0sQ0FBQyxLQUF3QjtRQUNwQyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxJQUFJLENBQUMsRUFBRyxDQUFDO1FBQ2xCLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsRUFBRyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2IsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMs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","import { AsyncEventDispatcher, EventDispatcher, ValueDispatcher, } from '../events';\nimport { clamp } from '../tweening';\nimport { Vector2 } from '../types';\nimport { Semaphore } from '../utils';\nimport { PlaybackManager, PlaybackState } from './PlaybackManager';\nimport { PlaybackStatus } from './PlaybackStatus';\nimport { SharedWebGLContext } from './SharedWebGLContext';\n/**\n * The player logic used by the editor and embeddable player.\n *\n * @remarks\n * This class builds on top of the `PlaybackManager` to provide a simple\n * interface similar to other media players. It plays through the animation\n * using a real-time update loop.\n */\nexport class Player {\n /**\n * Triggered during each iteration of the update loop when the frame is ready\n * to be rendered.\n *\n * @remarks\n * Player does not perform any rendering on its own. For the animation to be\n * visible, another class must subscribe to this event and perform the\n * rendering itself. {@link Stage} can be used to display the animation.\n *\n * @eventProperty\n */\n get onRender() {\n return this.render.subscribable;\n }\n get onStateChanged() {\n return this.playerState.subscribable;\n }\n get onFrameChanged() {\n return this.frame.subscribable;\n }\n get onDurationChanged() {\n return this.duration.subscribable;\n }\n /**\n * Triggered right after recalculation finishes.\n *\n * @remarks\n * Can be used to provide visual feedback.\n *\n * @eventProperty\n */\n get onRecalculated() {\n return this.recalculated.subscribable;\n }\n get startFrame() {\n return Math.min(this.playback.duration, this.status.secondsToFrames(this.startTime));\n }\n get endFrame() {\n return Math.min(this.playback.duration, this.status.secondsToFrames(this.endTime));\n }\n get finished() {\n return this.playback.finished || this.playback.frame >= this.endFrame;\n }\n constructor(project, settings = {}, initialState = {}, initialFrame = -1) {\n this.project = project;\n this.settings = settings;\n this.initialState = initialState;\n this.initialFrame = initialFrame;\n this.render = new AsyncEventDispatcher();\n this.frame = new ValueDispatcher(0);\n this.duration = new ValueDispatcher(0);\n this.recalculated = new EventDispatcher();\n this.lock = new Semaphore();\n this.startTime = 0;\n this.endTime = Infinity;\n this.requestId = null;\n this.renderTime = 0;\n this.requestedSeek = -1;\n this.requestedRender = false;\n this.requestedRecalculation = true;\n this.active = false;\n this.playerState = new ValueDispatcher({\n loop: true,\n muted: true,\n volume: 1,\n speed: 1,\n ...initialState,\n paused: true,\n });\n this.sharedWebGLContext = new SharedWebGLContext(this.project.logger);\n this.requestedSeek = initialFrame;\n this.logger = this.project.logger;\n this.playback = new PlaybackManager();\n this.status = new PlaybackStatus(this.playback);\n this.size = settings.size ?? new Vector2(1920, 1080);\n this.resolutionScale = settings.resolutionScale ?? 1;\n this.startTime = settings.range?.[0] ?? 0;\n this.endTime = settings.range?.[1] ?? Infinity;\n this.playback.fps = settings.fps ?? 60;\n const scenes = [];\n for (const description of project.scenes) {\n const scene = new description.klass({\n ...description,\n playback: this.status,\n logger: this.project.logger,\n size: this.size,\n resolutionScale: this.resolutionScale,\n sharedWebGLContext: this.sharedWebGLContext,\n experimentalFeatures: project.experimentalFeatures,\n });\n scene.onReloaded.subscribe(() => this.requestRecalculation());\n scene.variables.updateSignals(project.variables ?? {});\n scenes.push(scene);\n }\n this.playback.setup(scenes);\n this.activate();\n }\n async configure(settings) {\n await this.lock.acquire();\n let frame = this.playback.frame;\n let recalculate = false;\n this.startTime = settings.range[0];\n this.endTime = settings.range[1];\n const newFps = Math.max(1, settings.fps);\n if (this.playback.fps !== newFps) {\n const ratio = newFps / this.playback.fps;\n this.playback.fps = newFps;\n frame = Math.floor(frame * ratio);\n recalculate = true;\n }\n if (!settings.size.exactlyEquals(this.size) ||\n settings.resolutionScale !== this.resolutionScale) {\n this.size = settings.size;\n this.resolutionScale = settings.resolutionScale;\n this.playback.reload({\n size: this.size,\n resolutionScale: this.resolutionScale,\n });\n }\n this.lock.release();\n if (recalculate) {\n this.playback.reload();\n this.frame.current = frame;\n this.requestRecalculation();\n this.requestedSeek = frame;\n }\n }\n /**\n * Whether the given frame is inside the animation range.\n *\n * @param frame - The frame to check.\n */\n isInRange(frame) {\n return frame >= 0 && frame <= this.playback.duration;\n }\n /**\n * Whether the given frame is inside the user-defined range.\n *\n * @param frame - The frame to check.\n */\n isInUserRange(frame) {\n return frame >= this.startFrame && frame <= this.endFrame;\n }\n requestSeek(value) {\n this.requestedSeek = this.clampRange(value);\n }\n requestPreviousFrame() {\n this.requestedSeek = this.frame.current - this.playback.speed;\n }\n requestNextFrame() {\n this.requestedSeek = this.frame.current + this.playback.speed;\n }\n requestReset() {\n this.requestedSeek = 0;\n }\n requestRender() {\n this.requestedRender = true;\n }\n toggleLoop(value = !this.playerState.current.loop) {\n if (value !== this.playerState.current.loop) {\n this.playerState.current = {\n ...this.playerState.current,\n loop: value,\n };\n }\n }\n togglePlayback(value = this.playerState.current.paused) {\n if (value === this.playerState.current.paused) {\n this.playerState.current = {\n ...this.playerState.current,\n paused: !value,\n };\n // hitting play after the animation has finished should reset the\n // playback, even if looping is disabled.\n if (value &&\n !this.playerState.current.loop &&\n this.playback.frame === this.playback.duration) {\n this.requestReset();\n }\n }\n }\n toggleAudio(value = this.playerState.current.muted) {\n if (value === this.playerState.current.muted) {\n this.playerState.current = {\n ...this.playerState.current,\n muted: !value,\n };\n }\n }\n setAudioVolume(value) {\n const clampedValue = clamp(0, 1, value);\n if (clampedValue !== this.playerState.current.volume) {\n this.playerState.current = {\n ...this.playerState.current,\n volume: clampedValue,\n };\n }\n }\n addAudioVolume(value) {\n this.setAudioVolume(this.playerState.current.volume + value);\n }\n setSpeed(value) {\n if (value !== this.playerState.current.speed) {\n this.playback.speed = value;\n this.playback.reload();\n this.playerState.current = {\n ...this.playerState.current,\n speed: value,\n };\n this.requestRecalculation();\n }\n }\n setVariables(variables) {\n for (const scene of this.playback.onScenesRecalculated.current) {\n scene.variables.updateSignals(variables);\n }\n }\n /**\n * Activate the player.\n *\n * @remarks\n * A player needs to be active in order for the update loop to run. Each\n * player is active by default.\n */\n activate() {\n this.active = true;\n this.request();\n }\n /**\n * Deactivate the player.\n *\n * @remarks\n * Deactivating the player prevents its update loop from running. This should\n * be done before disposing the player, to prevent it from running in the\n * background.\n *\n * Just pausing the player does not stop the loop.\n */\n deactivate() {\n this.active = false;\n this.sharedWebGLContext.dispose();\n this.playback.currentScene.stopAllMedia();\n if (this.requestId !== null) {\n cancelAnimationFrame(this.requestId);\n this.requestId = null;\n }\n }\n requestRecalculation() {\n this.requestedRecalculation = true;\n this.request();\n }\n async prepare() {\n const state = {\n ...this.playerState.current,\n seek: this.requestedSeek,\n render: this.requestedRender,\n };\n this.requestedSeek = -1;\n this.requestedRender = false;\n // Recalculate the project if necessary\n if (this.requestedRecalculation) {\n if (state.seek < 0) {\n state.seek = this.playback.frame;\n }\n try {\n await this.playback.recalculate();\n this.duration.current = this.playback.frame;\n this.recalculated.dispatch();\n }\n catch (e) {\n this.requestSeek(state.seek);\n throw e;\n }\n finally {\n this.requestedRecalculation = false;\n }\n }\n // Pause if reached the end or the range is 0\n // Seek to the beginning for non-empty scenes\n if ((!state.loop && this.finished && !state.paused && state.seek < 0) ||\n this.endFrame === this.startFrame) {\n this.togglePlayback(false);\n state.paused = true;\n state.seek =\n this.endFrame === this.startFrame ? state.seek : this.startFrame;\n }\n // Seek to the beginning if looping is enabled\n if (state.loop &&\n (state.seek > this.endFrame || (this.finished && !state.paused)) &&\n this.startFrame !== this.endTime) {\n state.seek = this.startFrame;\n }\n return state;\n }\n async run() {\n const state = await this.prepare();\n const previousState = this.playback.state;\n this.playback.state = state.paused\n ? PlaybackState.Paused\n : PlaybackState.Playing;\n // Seek to the given frame\n if (state.seek >= 0 || !this.isInUserRange(this.status.frame)) {\n const seekFrame = state.seek < 0 ? this.status.frame : state.seek;\n const clampedFrame = this.clampRange(seekFrame);\n this.logger.profile('seek time');\n await this.playback.seek(clampedFrame);\n this.logger.profile('seek time');\n }\n // Do nothing if paused\n else if (state.paused) {\n if (state.render ||\n (state.paused && previousState !== PlaybackState.Paused)) {\n // Tells the stage to render the current frame\n await this.render.dispatch();\n }\n this.request();\n return;\n }\n // Simply move forward one frame\n else if (this.status.frame < this.endFrame) {\n await this.playback.progress();\n }\n // Pause if a new slide has just started.\n if (!state.paused && this.playback.currentScene.slides.isWaiting()) {\n this.togglePlayback(false);\n state.paused = true;\n }\n // Draw the project\n await this.render.dispatch();\n this.frame.current = this.playback.frame;\n this.request();\n }\n request() {\n if (!this.active)\n return;\n // TODO(konsti): make this loop not run when player is paused\n this.requestId ?? (this.requestId = requestAnimationFrame(async (time) => {\n this.requestId = null;\n if (time - this.renderTime >= 1000 / (this.status.fps + 5)) {\n this.renderTime = time;\n await this.lock.acquire();\n try {\n await this.run();\n }\n catch (e) {\n this.logger.error(e);\n }\n this.lock.release();\n }\n else {\n this.request();\n }\n }));\n }\n clampRange(frame) {\n return clamp(this.startFrame, this.endFrame, frame);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGxheWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FwcC9QbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixlQUFlLEVBQ2YsZUFBZSxHQUNoQixNQUFNLFdBQVcsQ0FBQztBQUVuQixPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBQ2xDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVuQyxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQWlCeEQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sT0FBTyxNQUFNO0lBQ2pCOzs7Ozs7Ozs7O09BVUc7SUFDSCxJQUFXLFFBQVE7UUFDakIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBR0QsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFDdkMsQ0FBQztJQUdELElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO0lBQ2pDLENBQUM7SUFHRCxJQUFXLGlCQUFpQjtRQUMxQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFHRDs7Ozs7OztPQU9HO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQW9CRCxJQUFZLFVBQVU7UUFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUNiLElBQUks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","export function getFullPreviewSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.preview,\n };\n}\nexport function getFullRenderingSettings(project) {\n return {\n ...project.settings.shared,\n ...project.settings.rendering,\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1zZXR0aW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcHAvcHJvamVjdC1zZXR0aW5ncy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE9BQWdCO0lBRWhCLE9BQU87UUFDTCxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUMxQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTztLQUM1QixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FDdEMsT0FBZ0I7SUFFaEIsT0FBTztRQUNMLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQzFCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTO0tBQzlCLENBQUM7QUFDSixDQUFDIn0=","import { unwrap } from '../signals';\nimport { Vector2 } from '../types';\nimport { getContext } from '../utils';\n/**\n * Manages canvases on which an animation can be displayed.\n */\nexport class Stage {\n get canvasSize() {\n return this.size.scale(this.resolutionScale);\n }\n constructor() {\n // TODO Consider adding pooling for canvases.\n this.background = null;\n this.resolutionScale = 1;\n this.colorSpace = 'srgb';\n this.size = Vector2.zero;\n this.finalBuffer = document.createElement('canvas');\n this.currentBuffer = document.createElement('canvas');\n this.previousBuffer = document.createElement('canvas');\n const colorSpace = this.colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n configure({ colorSpace = this.colorSpace, size = this.size, resolutionScale = this.resolutionScale, background = this.background, }) {\n if (colorSpace !== this.colorSpace) {\n this.colorSpace = colorSpace;\n this.context = getContext({ colorSpace }, this.finalBuffer);\n this.currentContext = getContext({ colorSpace }, this.currentBuffer);\n this.previousContext = getContext({ colorSpace }, this.previousBuffer);\n }\n if (!size.exactlyEquals(this.size) ||\n resolutionScale !== this.resolutionScale) {\n this.resolutionScale = resolutionScale;\n this.size = size;\n this.resizeCanvas(this.context);\n this.resizeCanvas(this.currentContext);\n this.resizeCanvas(this.previousContext);\n }\n this.background =\n typeof background === 'string'\n ? background\n : (background?.serialize() ?? null);\n }\n async render(currentScene, previousScene) {\n const previousOnTop = previousScene\n ? unwrap(currentScene.previousOnTop)\n : false;\n if (previousScene) {\n await previousScene.render(this.previousContext);\n }\n await currentScene.render(this.currentContext);\n const size = this.canvasSize;\n this.context.clearRect(0, 0, size.width, size.height);\n if (this.background) {\n this.context.save();\n this.context.fillStyle = this.background;\n this.context.fillRect(0, 0, size.width, size.height);\n this.context.restore();\n }\n if (previousScene && !previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n this.context.drawImage(this.currentBuffer, 0, 0);\n if (previousOnTop) {\n this.context.drawImage(this.previousBuffer, 0, 0);\n }\n }\n resizeCanvas(context) {\n const size = this.canvasSize;\n context.canvas.width = size.width;\n context.canvas.height = size.height;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwL1N0YWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFbEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNqQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBU3BDOztHQUVHO0FBQ0gsTUFBTSxPQUFPLEtBQUs7SUFnQmhCLElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7UUFuQkEsNkNBQTZDO1FBRXJDLGVBQVUsR0FBa0IsSUFBSSxDQUFDO1FBQ2pDLG9CQUFlLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLGVBQVUsR0FBcUIsTUFBTSxDQUFDO1FBQ3RDLFNBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBZTFCLElBQUksQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXZELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQUMsRUFBQyxVQUFVLEVBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FB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","import { Player, Stage, getFullPreviewSettings } from '@twick/core';\nimport { Vector2 } from '@twick/core';\nconst stylesNew = `\r\n.overlay {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\tright: 0;\r\n\ttop: 0;\r\n\tbottom: 0;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\topacity: 0;\r\n\ttransition: opacity 0.1s;\r\n\tz-index: 0;\r\n }\r\n .canvas {\r\n\twidth: 100%;\r\n\tdisplay: block;\r\n\topacity: 1;\r\n\ttransition: opacity 0.1s;\r\n }\r\n`;\nconst TEMPLATE = `<style>${stylesNew}</style><div class=\"overlay\"></div>`;\nconst ID = 'twick-player';\nvar State;\n(function (State) {\n State[\"Initial\"] = \"initial\";\n State[\"Loading\"] = \"loading\";\n State[\"Ready\"] = \"ready\";\n State[\"Error\"] = \"error\";\n})(State || (State = {}));\nclass TwickPlayer extends HTMLElement {\n static get observedAttributes() {\n return [\n 'playing',\n 'variables',\n 'looping',\n 'fps',\n 'quality',\n 'width',\n 'height',\n 'volume',\n ];\n }\n get fps() {\n const attr = this.getAttribute('fps');\n return attr ? parseFloat(attr) : (this.defaultSettings?.fps ?? 60);\n }\n get quality() {\n const attr = this.getAttribute('quality');\n return attr\n ? parseFloat(attr)\n : (this.defaultSettings?.resolutionScale ?? 1);\n }\n get width() {\n const attr = this.getAttribute('width');\n return attr ? parseFloat(attr) : (this.defaultSettings?.size.width ?? 0);\n }\n get height() {\n const attr = this.getAttribute('height');\n return attr ? parseFloat(attr) : (this.defaultSettings?.size.height ?? 0);\n }\n get variables() {\n try {\n const attr = this.getAttribute('variables');\n return attr ? JSON.parse(attr) : {};\n }\n catch {\n this.project?.logger.warn(`Project variables could not be parsed.`);\n return {};\n }\n }\n root;\n canvas;\n overlay;\n state = State.Initial;\n project = null;\n player = null;\n defaultSettings;\n abortController = null;\n playing = false;\n stage = new Stage();\n time = 0;\n duration = 0; // in frames\n looping = true;\n volume = 1;\n volumeChangeRequested = true;\n constructor() {\n super();\n this.root = this.attachShadow({ mode: 'open' });\n this.root.innerHTML = TEMPLATE;\n this.overlay = this.root.querySelector('.overlay');\n this.canvas = this.stage.finalBuffer;\n this.canvas.classList.add('canvas');\n this.root.prepend(this.canvas);\n this.setState(State.Initial);\n }\n setProject(project) {\n this.updateProject(project);\n }\n setState(state) {\n this.state = state;\n this.setPlaying(this.playing);\n }\n setPlaying(value) {\n if (this.state === State.Ready && value) {\n this.player?.togglePlayback(true);\n this.playing = true;\n }\n else {\n this.player?.togglePlayback(false);\n this.playing = false;\n }\n }\n async updateProject(project) {\n const playing = this.playing;\n this.setState(State.Initial);\n this.abortController?.abort();\n this.abortController = new AbortController();\n this.project = project;\n console.log(project);\n this.defaultSettings = getFullPreviewSettings(this.project);\n const player = new Player(this.project);\n player.setVariables(this.variables);\n player.toggleLoop(this.looping);\n this.player?.onRender.unsubscribe(this.render);\n this.player?.onFrameChanged.unsubscribe(this.handleFrameChanged);\n this.player?.togglePlayback(false);\n this.player?.deactivate();\n this.player = player;\n this.updateSettings();\n this.setState(State.Ready);\n this.dispatchEvent(new CustomEvent('playerready', { detail: this.player }));\n // Restore previous state\n this.setPlaying(playing);\n this.player.onRender.subscribe(this.render);\n this.player.onFrameChanged.subscribe(this.handleFrameChanged);\n }\n attributeChangedCallback(name, _, newValue) {\n switch (name) {\n case 'playing':\n this.setPlaying(newValue === 'true');\n break;\n case 'variables':\n this.player?.setVariables(this.variables);\n this.player?.requestSeek(this.player.playback.frame);\n this.player?.playback.reload();\n break;\n case 'looping':\n this.looping = newValue === 'true';\n this.player?.toggleLoop(newValue === 'true');\n break;\n case 'fps':\n case 'quality':\n case 'width':\n case 'height':\n this.updateSettings();\n break;\n case 'volume':\n this.volume = newValue;\n this.volumeChangeRequested = true;\n }\n }\n /**\n * Runs when the element is removed from the DOM.\n */\n disconnectedCallback() {\n this.player?.deactivate();\n this.player?.onRender.unsubscribe(this.render);\n this.removeEventListener('seekto', this.handleSeekTo);\n this.removeEventListener('volumechange', this.handleVolumeChange);\n }\n /**\n * Runs when the element is added to the DOM.\n */\n connectedCallback() {\n this.player?.activate();\n this.player?.onRender.subscribe(this.render);\n this.addEventListener('seekto', this.handleSeekTo);\n this.addEventListener('volumechange', this.handleVolumeChange);\n }\n /**\n * Triggered by the timeline.\n */\n handleSeekTo = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.time = e.detail;\n this.player?.requestSeek(e.detail * this.player.playback.fps);\n this.volumeChangeRequested = true;\n };\n handleVolumeChange = (event) => {\n if (!this.project) {\n return;\n }\n const e = event;\n this.volume = e.detail;\n this.player?.playback.currentScene.adjustVolume(this.volume);\n };\n /**\n * Triggered by the player.\n */\n handleFrameChanged = (frame) => {\n if (!this.project || !this.player) {\n return;\n }\n this.time = frame / this.player.playback.fps;\n if (this.volumeChangeRequested || frame === 0) {\n this.player?.playback.currentScene.adjustVolume(this.volume);\n this.volumeChangeRequested = false;\n }\n };\n /**\n * Called on every frame.\n */\n render = async () => {\n if (this.player && this.project) {\n await this.stage.render(this.player.playback.currentScene, this.player.playback.previousScene);\n this.dispatchEvent(new CustomEvent('timeupdate', { detail: this.time }));\n const durationInFrames = this.player.playback.duration;\n if (durationInFrames === this.duration) {\n return;\n }\n this.duration = durationInFrames;\n const durationInSeconds = durationInFrames / this.player.playback.fps;\n this.dispatchEvent(new CustomEvent('duration', { detail: durationInSeconds }));\n }\n };\n updateSettings() {\n if (!this.defaultSettings) {\n return;\n }\n const settings = {\n ...this.defaultSettings,\n size: new Vector2(this.width, this.height),\n resolutionScale: this.quality,\n fps: this.fps,\n };\n this.stage.configure(settings);\n this.player?.configure(settings);\n }\n}\nif (!customElements.get(ID)) {\n customElements.define(ID, TwickPlayer);\n}\n//# sourceMappingURL=internal.js.map"],"names":["Direction","Center","Origin","PlaybackState","line","State"],"mappings":"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","x_google_ignoreList":[0,1,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]}
|