@mmstack/primitives 20.4.5 → 20.4.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"mmstack-primitives.mjs","sources":["../tmp-esm2022/lib/to-writable.js","../tmp-esm2022/lib/debounced.js","../tmp-esm2022/lib/mutable.js","../tmp-esm2022/lib/derived.js","../tmp-esm2022/lib/element-visibility.js","../tmp-esm2022/lib/map-array.js","../tmp-esm2022/lib/pipeable/operators.js","../tmp-esm2022/lib/pipeable/pipeble.js","../tmp-esm2022/lib/sensors/media-query.js","../tmp-esm2022/lib/throttled.js","../tmp-esm2022/lib/sensors/mouse-position.js","../tmp-esm2022/lib/sensors/network-status.js","../tmp-esm2022/lib/sensors/page-visibility.js","../tmp-esm2022/lib/sensors/scroll-position.js","../tmp-esm2022/lib/sensors/window-size.js","../tmp-esm2022/lib/sensors/sensor.js","../tmp-esm2022/lib/stored.js","../tmp-esm2022/lib/tabSync.js","../tmp-esm2022/lib/until.js","../tmp-esm2022/lib/get-signal-equality.js","../tmp-esm2022/lib/with-history.js","../tmp-esm2022/mmstack-primitives.js"],"sourcesContent":["import { untracked } from '@angular/core';\n/**\n * Converts a read-only `Signal` into a `WritableSignal` by providing custom `set` and, optionally, `update` functions.\n * This can be useful for creating controlled write access to a signal that is otherwise read-only.\n *\n * @typeParam T - The type of value held by the signal.\n *\n * @param signal - The read-only `Signal` to be made writable.\n * @param set - A function that will be used to set the signal's value. This function *must* handle\n * the actual update mechanism (e.g., updating a backing store, emitting an event, etc.).\n * @param update - (Optional) A function that will be used to update the signal's value based on its\n * previous value. If not provided, a default `update` implementation is used that\n * calls the provided `set` function with the result of the updater function. The\n * default implementation uses `untracked` to avoid creating unnecessary dependencies\n * within the updater function.\n *\n * @returns A `WritableSignal` that uses the provided `set` and `update` functions. The `asReadonly`\n * method of the returned signal will still return the original read-only signal.\n *\n * @example\n * // Basic usage: Making a read-only signal writable with a custom set function.\n * const originalValue = signal({a: 0});\n * const readOnlySignal = computed(() => originalValue().a);\n * const writableSignal = toWritable(readOnlySignal, (newValue) => {\n * originalValue.update((prev) => { ...prev, a: newValue });\n * });\n *\n * writableSignal.set(5); // sets value of originalValue.a to 5 & triggers all signals\n */\nexport function toWritable(signal, set, update) {\n const internal = signal;\n internal.asReadonly = () => signal;\n internal.set = set;\n internal.update = update ?? ((updater) => set(updater(untracked(internal))));\n return internal;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8td3JpdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvdG8td3JpdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLE1BQWlCLEVBQ2pCLEdBQXVCLEVBQ3ZCLE1BQTJDO0lBRTNDLE1BQU0sUUFBUSxHQUFHLE1BQTJCLENBQUM7SUFDN0MsUUFBUSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDbkMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgdW50cmFja2VkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgcmVhZC1vbmx5IGBTaWduYWxgIGludG8gYSBgV3JpdGFibGVTaWduYWxgIGJ5IHByb3ZpZGluZyBjdXN0b20gYHNldGAgYW5kLCBvcHRpb25hbGx5LCBgdXBkYXRlYCBmdW5jdGlvbnMuXHJcbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3JlYXRpbmcgY29udHJvbGxlZCB3cml0ZSBhY2Nlc3MgdG8gYSBzaWduYWwgdGhhdCBpcyBvdGhlcndpc2UgcmVhZC1vbmx5LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB2YWx1ZSBoZWxkIGJ5IHRoZSBzaWduYWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBzaWduYWwgLSBUaGUgcmVhZC1vbmx5IGBTaWduYWxgIHRvIGJlIG1hZGUgd3JpdGFibGUuXHJcbiAqIEBwYXJhbSBzZXQgLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUgc2lnbmFsJ3MgdmFsdWUuICBUaGlzIGZ1bmN0aW9uICptdXN0KiBoYW5kbGVcclxuICogICAgICAgICAgICAgIHRoZSBhY3R1YWwgdXBkYXRlIG1lY2hhbmlzbSAoZS5nLiwgdXBkYXRpbmcgYSBiYWNraW5nIHN0b3JlLCBlbWl0dGluZyBhbiBldmVudCwgZXRjLikuXHJcbiAqIEBwYXJhbSB1cGRhdGUgLSAoT3B0aW9uYWwpIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBzaWduYWwncyB2YWx1ZSBiYXNlZCBvbiBpdHNcclxuICogICAgICAgICAgICAgICAgIHByZXZpb3VzIHZhbHVlLiAgSWYgbm90IHByb3ZpZGVkLCBhIGRlZmF1bHQgYHVwZGF0ZWAgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0aGF0XHJcbiAqICAgICAgICAgICAgICAgICBjYWxscyB0aGUgcHJvdmlkZWQgYHNldGAgZnVuY3Rpb24gd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSB1cGRhdGVyIGZ1bmN0aW9uLiBUaGVcclxuICogICAgICAgICAgICAgICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBgdW50cmFja2VkYCB0byBhdm9pZCBjcmVhdGluZyB1bm5lY2Vzc2FyeSBkZXBlbmRlbmNpZXNcclxuICogICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgdXBkYXRlciBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBgV3JpdGFibGVTaWduYWxgIHRoYXQgdXNlcyB0aGUgcHJvdmlkZWQgYHNldGAgYW5kIGB1cGRhdGVgIGZ1bmN0aW9ucy4gIFRoZSBgYXNSZWFkb25seWBcclxuICogICAgICAgICAgbWV0aG9kIG9mIHRoZSByZXR1cm5lZCBzaWduYWwgd2lsbCBzdGlsbCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlYWQtb25seSBzaWduYWwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIEJhc2ljIHVzYWdlOiBNYWtpbmcgYSByZWFkLW9ubHkgc2lnbmFsIHdyaXRhYmxlIHdpdGggYSBjdXN0b20gc2V0IGZ1bmN0aW9uLlxyXG4gKiBjb25zdCBvcmlnaW5hbFZhbHVlID0gc2lnbmFsKHthOiAwfSk7XHJcbiAqIGNvbnN0IHJlYWRPbmx5U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gb3JpZ2luYWxWYWx1ZSgpLmEpO1xyXG4gKiBjb25zdCB3cml0YWJsZVNpZ25hbCA9IHRvV3JpdGFibGUocmVhZE9ubHlTaWduYWwsIChuZXdWYWx1ZSkgPT4ge1xyXG4gKiAgb3JpZ2luYWxWYWx1ZS51cGRhdGUoKHByZXYpID0+IHsgLi4ucHJldiwgYTogbmV3VmFsdWUgfSk7XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiB3cml0YWJsZVNpZ25hbC5zZXQoNSk7IC8vIHNldHMgdmFsdWUgb2Ygb3JpZ2luYWxWYWx1ZS5hIHRvIDUgJiB0cmlnZ2VycyBhbGwgc2lnbmFsc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvV3JpdGFibGU8VD4oXHJcbiAgc2lnbmFsOiBTaWduYWw8VD4sXHJcbiAgc2V0OiAodmFsdWU6IFQpID0+IHZvaWQsXHJcbiAgdXBkYXRlPzogKHVwZGF0ZXI6ICh2YWx1ZTogVCkgPT4gVCkgPT4gdm9pZCxcclxuKTogV3JpdGFibGVTaWduYWw8VD4ge1xyXG4gIGNvbnN0IGludGVybmFsID0gc2lnbmFsIGFzIFdyaXRhYmxlU2lnbmFsPFQ+O1xyXG4gIGludGVybmFsLmFzUmVhZG9ubHkgPSAoKSA9PiBzaWduYWw7XHJcbiAgaW50ZXJuYWwuc2V0ID0gc2V0O1xyXG4gIGludGVybmFsLnVwZGF0ZSA9IHVwZGF0ZSA/PyAoKHVwZGF0ZXIpID0+IHNldCh1cGRhdGVyKHVudHJhY2tlZChpbnRlcm5hbCkpKSk7XHJcblxyXG4gIHJldHVybiBpbnRlcm5hbDtcclxufVxyXG4iXX0=","import { computed, DestroyRef, inject, signal, untracked, } from '@angular/core';\nimport { toWritable } from './to-writable';\n/**\n * A convenience function that creates and debounces a new `WritableSignal` in one step.\n *\n * @see {debounce} for the core implementation details.\n *\n * @template T The type of value the signal holds.\n * @param initial The initial value of the signal.\n * @param opt Options for signal creation, including debounce time `ms`.\n * @returns A `DebouncedSignal<T>` instance.\n *\n * @example\n * // The existing example remains perfect here.\n * const query = debounced('', { ms: 500 });\n * effect(() => console.log('Debounced Query:', query()));\n * query.set('abc');\n * // ...500ms later...\n * // Output: Debounced Query: abc\n */\nexport function debounced(initial, opt) {\n return debounce(signal(initial, opt), opt);\n}\n/**\n * Wraps an existing `WritableSignal` to create a new one whose readable value is debounced.\n *\n * This implementation avoids using `effect` by pairing a trigger signal with an `untracked`\n * read of the source signal to control when the debounced value is re-evaluated.\n *\n * @template T The type of value the signal holds.\n * @param source The source `WritableSignal` to wrap. Writes are applied to this signal immediately.\n * @param opt Options for debouncing, including debounce time `ms` and an optional `DestroyRef`.\n * @returns A new `DebouncedSignal<T>` whose read value is debounced. The `.original` property\n * of the returned signal is a reference back to the provided `source` signal.\n *\n * @example\n * ```ts\n * import { signal, effect } from '@angular/core';\n *\n * // 1. Create a standard source signal.\n * const sourceQuery = signal('');\n *\n * // 2. Create a debounced version of it.\n * const debouncedQuery = debounce(sourceQuery, { ms: 500 });\n *\n * // This effect tracks the original signal and runs immediately.\n * effect(() => {\n * console.log('Original Query:', debouncedQuery.original());\n * });\n *\n * // This effect tracks the debounced signal and runs after the delay.\n * effect(() => {\n * console.log('Debounced Query:', debouncedQuery());\n * });\n *\n * console.log('Setting query to \"a\"');\n * debouncedQuery.set('a');\n * // Output: Original Query: a\n *\n * // ...500ms later...\n * // Output: Debounced Query: a\n * ```\n */\nexport function debounce(source, opt) {\n const ms = opt?.ms ?? 0;\n const trigger = signal(false, ...(ngDevMode ? [{ debugName: \"trigger\" }] : []));\n let timeout;\n try {\n const destroyRef = opt?.destroyRef ?? inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => {\n if (timeout)\n clearTimeout(timeout);\n timeout = undefined;\n });\n }\n catch {\n // not in injection context & no destroyRef provided opting out of cleanup\n }\n const triggerFn = (afterClean) => {\n if (timeout)\n clearTimeout(timeout);\n afterClean();\n timeout = setTimeout(() => {\n trigger.update((c) => !c);\n }, ms);\n };\n const set = (value) => {\n triggerFn(() => source.set(value));\n };\n const update = (fn) => {\n triggerFn(() => source.update(fn));\n };\n const writable = toWritable(computed(() => {\n trigger();\n return untracked(source);\n }, opt), set, update);\n writable.original = source;\n return writable;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL2RlYm91bmNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBd0MzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixPQUFVLEVBQ1YsR0FBK0I7SUFFL0IsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE1BQXlCLEVBQ3pCLEdBQStCO0lBRS9CLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXhCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLG1EQUFDLENBQUM7SUFFOUIsSUFBSSxPQUFrRCxDQUFDO0lBRXZELElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUNkLEdBQUcsRUFBRSxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pCLElBQUksT0FBTztnQkFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCwwRUFBMEU7SUFDNUUsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBc0IsRUFBRSxFQUFFO1FBQzNDLElBQUksT0FBTztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxVQUFVLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtRQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBa0IsRUFBRSxFQUFFO1FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osT0FBTyxFQUFFLENBQUM7UUFDVixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ1AsR0FBRyxFQUNILE1BQU0sQ0FDZSxDQUFDO0lBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBRTNCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIHR5cGUgQ3JlYXRlU2lnbmFsT3B0aW9ucyxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICB0eXBlIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICcuL3RvLXdyaXRhYmxlJztcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIGRlYm91bmNlZCB3cml0YWJsZSBzaWduYWwuXHJcbiAqIEV4dGVuZHMgQW5ndWxhcidzIGBDcmVhdGVTaWduYWxPcHRpb25zYCB3aXRoIGEgZGVib3VuY2UgdGltZSBzZXR0aW5nLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSBoZWxkIGJ5IHRoZSBzaWduYWwuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVEZWJvdW5jZWRPcHRpb25zPFQ+ID0gQ3JlYXRlU2lnbmFsT3B0aW9uczxUPiAmIHtcclxuICAvKipcclxuICAgKiBUaGUgZGVib3VuY2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBTcGVjaWZpZXMgaG93IGxvbmcgdG8gd2FpdCBhZnRlciB0aGVcclxuICAgKiBsYXN0IGBzZXRgIG9yIGB1cGRhdGVgIGNhbGwgYmVmb3JlIHRoZSBkZWJvdW5jZWQgc2lnbmFsIHJlZmxlY3RzIHRoZSBuZXcgdmFsdWUuXHJcbiAgICovXHJcbiAgbXM/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgYERlc3Ryb3lSZWZgIHRvIGNsZWFuIHVwIHRoZSBkZWJvdW5jZSB0aW1lciB3aGVuIHRoZSBzaWduYWwgaXMgZGVzdHJveWVkLlxyXG4gICAqIElmIHByb3ZpZGVkLCB0aGUgdGltZXIgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHNpZ25hbCBpcyBkZXN0cm95ZWQuXHJcbiAgICogSWYgdGhlIHNpZ25hbCBpcyBjYWxsZWQgd2l0aGluIGEgcmVhY3RpdmUgY29udGV4dCBhIERlc3Ryb3lSZWYgaXMgaW5qZWN0ZWQgYXV0b21hdGljYWxseS5cclxuICAgKiBJZiBpdCBpcyBub3QgcHJvdmlkZWQgb3IgaW5qZWN0ZWQsIHRoZSB0aW1lciB3aWxsIG5vdCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuLi53aGljaCBpcyB1c3VhbGx5IGZpbmUgOilcclxuICAgKi9cclxuICBkZXN0cm95UmVmPzogRGVzdHJveVJlZjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNwZWNpYWxpemVkIGBXcml0YWJsZVNpZ25hbGAgd2hvc2UgcHVibGljbHkgcmVhZGFibGUgdmFsdWUgdXBkYXRlcyBhcmUgZGVib3VuY2VkLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcsIG5vbi1kZWJvdW5jZWQgc2lnbmFsIHZpYSB0aGUgYG9yaWdpbmFsYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRGVib3VuY2VkU2lnbmFsPFQ+ID0gV3JpdGFibGVTaWduYWw8VD4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsLCBpbm5lciBgV3JpdGFibGVTaWduYWxgLlxyXG4gICAqIFRoaXMgc2lnbmFsJ3MgdmFsdWUgaXMgdXBkYXRlZCAqaW1tZWRpYXRlbHkqIHVwb24gY2FsbHMgdG8gYHNldGAgb3IgYHVwZGF0ZWBcclxuICAgKiBvbiB0aGUgcGFyZW50IGBEZWJvdW5jZWRTaWduYWxgLiBVc2VmdWwgZm9yIGFjY2Vzc2luZyB0aGUgbGF0ZXN0IHZhbHVlXHJcbiAgICogd2l0aG91dCB0aGUgZGVib3VuY2UgZGVsYXkuXHJcbiAgICovXHJcbiAgb3JpZ2luYWw6IFNpZ25hbDxUPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbmQgZGVib3VuY2VzIGEgbmV3IGBXcml0YWJsZVNpZ25hbGAgaW4gb25lIHN0ZXAuXHJcbiAqXHJcbiAqIEBzZWUge2RlYm91bmNlfSBmb3IgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgdGhlIHNpZ25hbCBob2xkcy5cclxuICogQHBhcmFtIGluaXRpYWwgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC5cclxuICogQHBhcmFtIG9wdCBPcHRpb25zIGZvciBzaWduYWwgY3JlYXRpb24sIGluY2x1ZGluZyBkZWJvdW5jZSB0aW1lIGBtc2AuXHJcbiAqIEByZXR1cm5zIEEgYERlYm91bmNlZFNpZ25hbDxUPmAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIFRoZSBleGlzdGluZyBleGFtcGxlIHJlbWFpbnMgcGVyZmVjdCBoZXJlLlxyXG4gKiBjb25zdCBxdWVyeSA9IGRlYm91bmNlZCgnJywgeyBtczogNTAwIH0pO1xyXG4gKiBlZmZlY3QoKCkgPT4gY29uc29sZS5sb2coJ0RlYm91bmNlZCBRdWVyeTonLCBxdWVyeSgpKSk7XHJcbiAqIHF1ZXJ5LnNldCgnYWJjJyk7XHJcbiAqIC8vIC4uLjUwMG1zIGxhdGVyLi4uXHJcbiAqIC8vIE91dHB1dDogRGVib3VuY2VkIFF1ZXJ5OiBhYmNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZWQ8VD4oXHJcbiAgaW5pdGlhbDogVCxcclxuICBvcHQ/OiBDcmVhdGVEZWJvdW5jZWRPcHRpb25zPFQ+LFxyXG4pOiBEZWJvdW5jZWRTaWduYWw8VD4ge1xyXG4gIHJldHVybiBkZWJvdW5jZShzaWduYWwoaW5pdGlhbCwgb3B0KSwgb3B0KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyYXBzIGFuIGV4aXN0aW5nIGBXcml0YWJsZVNpZ25hbGAgdG8gY3JlYXRlIGEgbmV3IG9uZSB3aG9zZSByZWFkYWJsZSB2YWx1ZSBpcyBkZWJvdW5jZWQuXHJcbiAqXHJcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIHVzaW5nIGBlZmZlY3RgIGJ5IHBhaXJpbmcgYSB0cmlnZ2VyIHNpZ25hbCB3aXRoIGFuIGB1bnRyYWNrZWRgXHJcbiAqIHJlYWQgb2YgdGhlIHNvdXJjZSBzaWduYWwgdG8gY29udHJvbCB3aGVuIHRoZSBkZWJvdW5jZWQgdmFsdWUgaXMgcmUtZXZhbHVhdGVkLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSB0aGUgc2lnbmFsIGhvbGRzLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYFdyaXRhYmxlU2lnbmFsYCB0byB3cmFwLiBXcml0ZXMgYXJlIGFwcGxpZWQgdG8gdGhpcyBzaWduYWwgaW1tZWRpYXRlbHkuXHJcbiAqIEBwYXJhbSBvcHQgT3B0aW9ucyBmb3IgZGVib3VuY2luZywgaW5jbHVkaW5nIGRlYm91bmNlIHRpbWUgYG1zYCBhbmQgYW4gb3B0aW9uYWwgYERlc3Ryb3lSZWZgLlxyXG4gKiBAcmV0dXJucyBBIG5ldyBgRGVib3VuY2VkU2lnbmFsPFQ+YCB3aG9zZSByZWFkIHZhbHVlIGlzIGRlYm91bmNlZC4gVGhlIGAub3JpZ2luYWxgIHByb3BlcnR5XHJcbiAqIG9mIHRoZSByZXR1cm5lZCBzaWduYWwgaXMgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgcHJvdmlkZWQgYHNvdXJjZWAgc2lnbmFsLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBzaWduYWwsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKlxyXG4gKiAvLyAxLiBDcmVhdGUgYSBzdGFuZGFyZCBzb3VyY2Ugc2lnbmFsLlxyXG4gKiBjb25zdCBzb3VyY2VRdWVyeSA9IHNpZ25hbCgnJyk7XHJcbiAqXHJcbiAqIC8vIDIuIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGl0LlxyXG4gKiBjb25zdCBkZWJvdW5jZWRRdWVyeSA9IGRlYm91bmNlKHNvdXJjZVF1ZXJ5LCB7IG1zOiA1MDAgfSk7XHJcbiAqXHJcbiAqIC8vIFRoaXMgZWZmZWN0IHRyYWNrcyB0aGUgb3JpZ2luYWwgc2lnbmFsIGFuZCBydW5zIGltbWVkaWF0ZWx5LlxyXG4gKiBlZmZlY3QoKCkgPT4ge1xyXG4gKiBjb25zb2xlLmxvZygnT3JpZ2luYWwgUXVlcnk6JywgZGVib3VuY2VkUXVlcnkub3JpZ2luYWwoKSk7XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBUaGlzIGVmZmVjdCB0cmFja3MgdGhlIGRlYm91bmNlZCBzaWduYWwgYW5kIHJ1bnMgYWZ0ZXIgdGhlIGRlbGF5LlxyXG4gKiBlZmZlY3QoKCkgPT4ge1xyXG4gKiBjb25zb2xlLmxvZygnRGVib3VuY2VkIFF1ZXJ5OicsIGRlYm91bmNlZFF1ZXJ5KCkpO1xyXG4gKiB9KTtcclxuICpcclxuICogY29uc29sZS5sb2coJ1NldHRpbmcgcXVlcnkgdG8gXCJhXCInKTtcclxuICogZGVib3VuY2VkUXVlcnkuc2V0KCdhJyk7XHJcbiAqIC8vIE91dHB1dDogT3JpZ2luYWwgUXVlcnk6IGFcclxuICpcclxuICogLy8gLi4uNTAwbXMgbGF0ZXIuLi5cclxuICogLy8gT3V0cHV0OiBEZWJvdW5jZWQgUXVlcnk6IGFcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VD4oXHJcbiAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBvcHQ/OiBDcmVhdGVEZWJvdW5jZWRPcHRpb25zPFQ+LFxyXG4pOiBEZWJvdW5jZWRTaWduYWw8VD4ge1xyXG4gIGNvbnN0IG1zID0gb3B0Py5tcyA/PyAwO1xyXG5cclxuICBjb25zdCB0cmlnZ2VyID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgbGV0IHRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgZGVzdHJveVJlZiA9XHJcbiAgICAgIG9wdD8uZGVzdHJveVJlZiA/PyBpbmplY3QoRGVzdHJveVJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuXHJcbiAgICBkZXN0cm95UmVmPy5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICAvLyBub3QgaW4gaW5qZWN0aW9uIGNvbnRleHQgJiBubyBkZXN0cm95UmVmIHByb3ZpZGVkIG9wdGluZyBvdXQgb2YgY2xlYW51cFxyXG4gIH1cclxuXHJcbiAgY29uc3QgdHJpZ2dlckZuID0gKGFmdGVyQ2xlYW46ICgpID0+IHZvaWQpID0+IHtcclxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICBhZnRlckNsZWFuKCk7XHJcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRyaWdnZXIudXBkYXRlKChjKSA9PiAhYyk7XHJcbiAgICB9LCBtcyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2V0ID0gKHZhbHVlOiBUKSA9PiB7XHJcbiAgICB0cmlnZ2VyRm4oKCkgPT4gc291cmNlLnNldCh2YWx1ZSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHVwZGF0ZSA9IChmbjogKHByZXY6IFQpID0+IFQpID0+IHtcclxuICAgIHRyaWdnZXJGbigoKSA9PiBzb3VyY2UudXBkYXRlKGZuKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgd3JpdGFibGUgPSB0b1dyaXRhYmxlKFxyXG4gICAgY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICB0cmlnZ2VyKCk7XHJcbiAgICAgIHJldHVybiB1bnRyYWNrZWQoc291cmNlKTtcclxuICAgIH0sIG9wdCksXHJcbiAgICBzZXQsXHJcbiAgICB1cGRhdGUsXHJcbiAgKSBhcyBEZWJvdW5jZWRTaWduYWw8VD47XHJcbiAgd3JpdGFibGUub3JpZ2luYWwgPSBzb3VyY2U7XHJcblxyXG4gIHJldHVybiB3cml0YWJsZTtcclxufVxyXG4iXX0=","import { signal, } from '@angular/core';\nconst { is } = Object;\nexport function mutable(initial, opt) {\n const baseEqual = opt?.equal ?? is;\n let trigger = false;\n const equal = (a, b) => {\n if (trigger)\n return false;\n return baseEqual(a, b);\n };\n const sig = signal(initial, {\n ...opt,\n equal,\n });\n const internalUpdate = sig.update;\n sig.mutate = (updater) => {\n trigger = true;\n internalUpdate(updater);\n trigger = false;\n };\n sig.inline = (updater) => {\n sig.mutate((prev) => {\n updater(prev);\n return prev;\n });\n };\n return sig;\n}\n/**\n * Type guard function to check if a given `WritableSignal` is a `MutableSignal`. This is useful\n * for situations where you need to conditionally use the `mutate` or `inline` methods.\n *\n * @typeParam T - The type of the signal's value (optional, defaults to `any`).\n * @param value - The `WritableSignal` to check.\n * @returns `true` if the signal is a `MutableSignal`, `false` otherwise.\n *\n * @example\n * const mySignal = signal(0);\n * const myMutableSignal = mutable(0);\n *\n * if (isMutable(mySignal)) {\n * mySignal.mutate(x => x + 1); // This would cause a type error, as mySignal is not a MutableSignal.\n * }\n *\n * if (isMutable(myMutableSignal)) {\n * myMutableSignal.mutate(x => x + 1); // This is safe.\n * }\n */\nexport function isMutable(value) {\n return 'mutate' in value && typeof value.mutate === 'function';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9tdXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQWlGdEIsTUFBTSxVQUFVLE9BQU8sQ0FDckIsT0FBVyxFQUNYLEdBQTRCO0lBRTVCLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ25DLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVwQixNQUFNLEtBQUssR0FBbUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckQsSUFBSSxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBZ0IsT0FBTyxFQUFFO1FBQ3pDLEdBQUcsR0FBRztRQUNOLEtBQUs7S0FDTixDQUFxQixDQUFDO0lBRXZCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFbEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDZixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDdkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEtBQXdCO0lBRXhCLE9BQU8sUUFBUSxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIHNpZ25hbCxcclxuICB0eXBlIENyZWF0ZVNpZ25hbE9wdGlvbnMsXHJcbiAgdHlwZSBWYWx1ZUVxdWFsaXR5Rm4sXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmNvbnN0IHsgaXMgfSA9IE9iamVjdDtcclxuXHJcbi8qKlxyXG4gKiBBIGBNdXRhYmxlU2lnbmFsYCBpcyBhIHNwZWNpYWwgdHlwZSBvZiBgV3JpdGFibGVTaWduYWxgIHRoYXQgYWxsb3dzIGZvciBpbi1wbGFjZSBtdXRhdGlvbiBvZiBpdHMgdmFsdWUuXHJcbiAqIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBgc2V0YCBhbmQgYHVwZGF0ZWAgbWV0aG9kcywgaXQgcHJvdmlkZXMgYSBgbXV0YXRlYCBtZXRob2QuICBUaGlzIGlzIHVzZWZ1bFxyXG4gKiBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGNvbXBsZXggb2JqZWN0cyBvciBhcnJheXMsIGFzIGl0IGF2b2lkcyB1bm5lY2Vzc2FyeVxyXG4gKiBvYmplY3QgY29weWluZy5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTXV0YWJsZVNpZ25hbDxUPiA9IFdyaXRhYmxlU2lnbmFsPFQ+ICYge1xyXG4gIC8qKlxyXG4gICAqIE11dGF0ZXMgdGhlIHNpZ25hbCdzIHZhbHVlIGluLXBsYWNlLiAgVGhpcyBpcyBzaW1pbGFyIHRvIGB1cGRhdGVgLCBidXQgaXQncyBvcHRpbWl6ZWQgZm9yXHJcbiAgICogc2NlbmFyaW9zIHdoZXJlIHlvdSB3YW50IHRvIG1vZGlmeSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGRpcmVjdGx5IHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IG9uZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB1cGRhdGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjdXJyZW50IHZhbHVlIGFzIGlucHV0IGFuZCBtb2RpZmllcyBpdCBkaXJlY3RseS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogY29uc3QgbXlBcnJheSA9IG11dGFibGUoWzEsIDIsIDNdKTtcclxuICAgKiBteUFycmF5Lm11dGF0ZSgoYXJyKSA9PiB7XHJcbiAgICogIGFyci5wdXNoKDQpO1xyXG4gICAqICByZXR1cm4gYXJyO1xyXG4gICAqIH0pOyAvLyBteUFycmF5KCkgbm93IHJldHVybnMgWzEsIDIsIDMsIDRdXHJcbiAgICovXHJcbiAgbXV0YXRlOiBXcml0YWJsZVNpZ25hbDxUPlsndXBkYXRlJ107XHJcblxyXG4gIC8qKlxyXG4gICAqIE11dGF0ZXMgdGhlIHNpZ25hbCdzIHZhbHVlIGluLXBsYWNlLCBzaW1pbGFyIHRvIGBtdXRhdGVgLCBidXQgd2l0aCBhIHZvaWQtcmV0dXJuaW5nIHZhbHVlIGluIHVwZGF0ZXJcclxuICAgKiBmdW5jdGlvbi4gVGhpcyBmdXJ0aGVyIGVtcGhhc2l6ZXMgdGhhdCB0aGUgbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlubGluZSwgaW1wcm92aW5nIHJlYWRhYmlsaXR5XHJcbiAgICogaW4gc29tZSBjYXNlcy5cclxuICAgKiBAcGFyYW0gdXBkYXRlciAtIEZ1bmN0aW9uIHRvIGNoYW5nZSB0byB0aGUgY3VycmVudCB2YWx1ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogY29uc3QgbXlPYmplY3QgPSBtdXRhYmxlKHsgYTogMSwgYjogMiB9KTtcclxuICAgKiBteU9iamVjdC5pbmxpbmUoKG9iaikgPT4gKG9iai5hID0gMykpOyAvLyBteU9iamVjdCgpIG5vdyByZXR1cm5zIHsgYTogMywgYjogMiB9XHJcbiAgICovXHJcbiAgaW5saW5lOiAodXBkYXRlcjogKHZhbHVlOiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgTXV0YWJsZVNpZ25hbGAuIFRoaXMgZnVuY3Rpb24gb3ZlcmxvYWRzIHRoZSBzdGFuZGFyZCBgc2lnbmFsYCBmdW5jdGlvbiB0byBwcm92aWRlXHJcbiAqIHRoZSBhZGRpdGlvbmFsIGBtdXRhdGVgIGFuZCBgaW5saW5lYCBtZXRob2RzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzaWduYWwgb3B0aW9ucywgaW5jbHVkaW5nIGEgY3VzdG9tIGBlcXVhbGAgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIEEgYE11dGFibGVTaWduYWxgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiAjIyMgSW1wb3J0YW50IE5vdGUgb24gYGNvbXB1dGVkYCBTaWduYWxzXHJcbiAqXHJcbiAqIFdoZW4gY3JlYXRpbmcgYSBgY29tcHV0ZWRgIHNpZ25hbCB0aGF0IGRlcml2ZXMgYSBub24tcHJpbWl0aXZlIHZhbHVlIChlLmcuLCBhbiBvYmplY3Qgb3IgYXJyYXkpXHJcbiAqIGZyb20gYSBgbXV0YWJsZWAgc2lnbmFsLCB5b3UgKiptdXN0KiogcHJvdmlkZSB0aGUgYHsgZXF1YWw6IGZhbHNlIH1gIG9wdGlvbiB0byB0aGUgYGNvbXB1dGVkYFxyXG4gKiBmdW5jdGlvbi5cclxuICpcclxuICogVGhpcyBpcyBiZWNhdXNlIGEgYC5tdXRhdGUoKWAgY2FsbCBub3RpZmllcyBpdHMgZGVwZW5kZW50cyB0aGF0IGl0IGhhcyBjaGFuZ2VkLCBidXQgaWYgdGhlXHJcbiAqIHJlZmVyZW5jZSB0byBhIGRlcml2ZWQgb2JqZWN0IGhhc24ndCBjaGFuZ2VkLCB0aGUgYGNvbXB1dGVkYCBzaWduYWwgd2lsbCBub3QgdHJpZ2dlciBpdHNcclxuICogb3duIGRlcGVuZGVudHMgYnkgZGVmYXVsdC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3Qgc3RhdGUgPSBtdXRhYmxlKHsgdXNlcjogeyBuYW1lOiAnSm9obicgfSwgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkgfSk7XHJcbiAqXHJcbiAqIC8vIOKchSBDT1JSRUNUOiBEZXJpdmluZyBhIHByaW1pdGl2ZSB2YWx1ZSB3b3JrcyBhcyBleHBlY3RlZC5cclxuICogY29uc3QgbmFtZSA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkudXNlci5uYW1lKTtcclxuICpcclxuICogLy8g4p2MIElOQ09SUkVDVDogVGhpcyB3aWxsIG5vdCB1cGRhdGUgcmVsaWFibHkgYWZ0ZXIgdGhlIGZpcnN0IGNoYW5nZS5cclxuICogY29uc3QgdXNlck9iamVjdCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkudXNlcik7XHJcbiAqXHJcbiAqIC8vIOKchSBDT1JSRUNUOiBGb3Igb2JqZWN0IGRlcml2YXRpb25zLCBgZXF1YWw6IGZhbHNlYCBpcyByZXF1aXJlZC5cclxuICogY29uc3QgdXNlck9iamVjdEZpeGVkID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS51c2VyLCB7IGVxdWFsOiBmYWxzZSB9KTtcclxuICpcclxuICogLy8gVGhpcyBtdXRhdGlvbiB3aWxsIG5vdyBjb3JyZWN0bHkgdHJpZ2dlciBlZmZlY3RzIGRlcGVuZGluZyBvbiBgdXNlck9iamVjdEZpeGVkYC5cclxuICogc3RhdGUubXV0YXRlKHMgPT4gcy5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtdXRhYmxlPFQ+KCk6IE11dGFibGVTaWduYWw8VCB8IHVuZGVmaW5lZD47XHJcbmV4cG9ydCBmdW5jdGlvbiBtdXRhYmxlPFQ+KGluaXRpYWw6IFQpOiBNdXRhYmxlU2lnbmFsPFQ+O1xyXG5leHBvcnQgZnVuY3Rpb24gbXV0YWJsZTxUPihcclxuICBpbml0aWFsOiBULFxyXG4gIG9wdD86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4sXHJcbik6IE11dGFibGVTaWduYWw8VD47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbXV0YWJsZTxUPihcclxuICBpbml0aWFsPzogVCxcclxuICBvcHQ/OiBDcmVhdGVTaWduYWxPcHRpb25zPFQ+LFxyXG4pOiBNdXRhYmxlU2lnbmFsPFQ+IHtcclxuICBjb25zdCBiYXNlRXF1YWwgPSBvcHQ/LmVxdWFsID8/IGlzO1xyXG4gIGxldCB0cmlnZ2VyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGVxdWFsOiBWYWx1ZUVxdWFsaXR5Rm48VCB8IHVuZGVmaW5lZD4gPSAoYSwgYikgPT4ge1xyXG4gICAgaWYgKHRyaWdnZXIpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBiYXNlRXF1YWwoYSwgYik7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2lnID0gc2lnbmFsPFQgfCB1bmRlZmluZWQ+KGluaXRpYWwsIHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsLFxyXG4gIH0pIGFzIE11dGFibGVTaWduYWw8VD47XHJcblxyXG4gIGNvbnN0IGludGVybmFsVXBkYXRlID0gc2lnLnVwZGF0ZTtcclxuXHJcbiAgc2lnLm11dGF0ZSA9ICh1cGRhdGVyKSA9PiB7XHJcbiAgICB0cmlnZ2VyID0gdHJ1ZTtcclxuICAgIGludGVybmFsVXBkYXRlKHVwZGF0ZXIpO1xyXG4gICAgdHJpZ2dlciA9IGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIHNpZy5pbmxpbmUgPSAodXBkYXRlcikgPT4ge1xyXG4gICAgc2lnLm11dGF0ZSgocHJldikgPT4ge1xyXG4gICAgICB1cGRhdGVyKHByZXYpO1xyXG4gICAgICByZXR1cm4gcHJldjtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBzaWc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUeXBlIGd1YXJkIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgZ2l2ZW4gYFdyaXRhYmxlU2lnbmFsYCBpcyBhIGBNdXRhYmxlU2lnbmFsYC4gIFRoaXMgaXMgdXNlZnVsXHJcbiAqIGZvciBzaXR1YXRpb25zIHdoZXJlIHlvdSBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgdXNlIHRoZSBgbXV0YXRlYCBvciBgaW5saW5lYCBtZXRob2RzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgc2lnbmFsJ3MgdmFsdWUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBgYW55YCkuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBgV3JpdGFibGVTaWduYWxgIHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNpZ25hbCBpcyBhIGBNdXRhYmxlU2lnbmFsYCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IG15U2lnbmFsID0gc2lnbmFsKDApO1xyXG4gKiBjb25zdCBteU11dGFibGVTaWduYWwgPSBtdXRhYmxlKDApO1xyXG4gKlxyXG4gKiBpZiAoaXNNdXRhYmxlKG15U2lnbmFsKSkge1xyXG4gKiAgIG15U2lnbmFsLm11dGF0ZSh4ID0+IHggKyAxKTsgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIHR5cGUgZXJyb3IsIGFzIG15U2lnbmFsIGlzIG5vdCBhIE11dGFibGVTaWduYWwuXHJcbiAqIH1cclxuICpcclxuICogaWYgKGlzTXV0YWJsZShteU11dGFibGVTaWduYWwpKSB7XHJcbiAqICAgbXlNdXRhYmxlU2lnbmFsLm11dGF0ZSh4ID0+IHggKyAxKTsgLy8gVGhpcyBpcyBzYWZlLlxyXG4gKiB9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNNdXRhYmxlPFQgPSBhbnk+KFxyXG4gIHZhbHVlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuKTogdmFsdWUgaXMgTXV0YWJsZVNpZ25hbDxUPiB7XHJcbiAgcmV0dXJuICdtdXRhdGUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5tdXRhdGUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuIl19","import { computed, signal, untracked, } from '@angular/core';\nimport { isMutable } from './mutable';\nimport { toWritable } from './to-writable';\nexport function derived(source, optOrKey, opt) {\n const isArray = Array.isArray(untracked(source)) && typeof optOrKey === 'number';\n const from = typeof optOrKey === 'object' ? optOrKey.from : (v) => v[optOrKey];\n const onChange = typeof optOrKey === 'object'\n ? optOrKey.onChange\n : isArray\n ? isMutable(source)\n ? (next) => {\n source.mutate((cur) => {\n cur[optOrKey] = next;\n return cur;\n });\n }\n : (next) => {\n source.update((cur) => {\n const newArray = [...cur];\n newArray[optOrKey] = next;\n return newArray;\n });\n }\n : isMutable(source)\n ? (next) => {\n source.mutate((cur) => {\n cur[optOrKey] = next;\n return cur;\n });\n }\n : (next) => {\n source.update((cur) => ({ ...cur, [optOrKey]: next }));\n };\n const rest = typeof optOrKey === 'object' ? optOrKey : opt;\n const baseEqual = rest?.equal ?? Object.is;\n let trigger = false;\n const equal = isMutable(source)\n ? (a, b) => {\n if (trigger)\n return false;\n return baseEqual(a, b);\n }\n : baseEqual;\n const sig = toWritable(computed(() => from(source()), { ...rest, equal }), (newVal) => onChange(newVal));\n sig.from = from;\n if (isMutable(source)) {\n sig.mutate = (updater) => {\n trigger = true;\n sig.update(updater);\n trigger = false;\n };\n sig.inline = (updater) => {\n sig.mutate((prev) => {\n updater(prev);\n return prev;\n });\n };\n }\n return sig;\n}\n/**\n * Creates a \"fake\" `DerivedSignal` from a simple value. This is useful for creating\n * `FormControlSignal` instances that are not directly derived from another signal.\n * The returned signal's `from` function will always return the initial value.\n *\n * @typeParam T - This type parameter is not used in the implementation but is kept for type compatibility with `DerivedSignal`.\n * @typeParam U - The type of the signal's value.\n * @param initial - The initial value of the signal.\n * @returns A `DerivedSignal` instance.\n * @internal\n */\nexport function toFakeDerivation(initial) {\n const sig = signal(initial);\n sig.from = () => initial;\n return sig;\n}\n/**\n * Creates a \"fake\" `DerivedSignal` from an existing `WritableSignal`. This is useful\n * for treating a regular `WritableSignal` as a `DerivedSignal` without changing its behavior.\n * The returned signal's `from` function returns the current value of signal, using `untracked`.\n *\n * @typeParam T - This type parameter is not used in the implementation but is kept for type compatibility with `DerivedSignal`.\n * @typeParam U - The type of the signal's value.\n * @param initial - The existing `WritableSignal`.\n * @returns A `DerivedSignal` instance.\n * @internal\n */\nexport function toFakeSignalDerivation(initial) {\n const sig = initial;\n sig.from = () => untracked(initial);\n return sig;\n}\n/**\n * Type guard function to check if a given `WritableSignal` is a `DerivedSignal`.\n *\n * @typeParam T - The type of the source signal's value (optional, defaults to `any`).\n * @typeParam U - The type of the derived signal's value (optional, defaults to `any`).\n * @param sig - The `WritableSignal` to check.\n * @returns `true` if the signal is a `DerivedSignal`, `false` otherwise.\n */\nexport function isDerivation(sig) {\n return 'from' in sig;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9kZXJpdmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBRVIsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBdUozQyxNQUFNLFVBQVUsT0FBTyxDQUNyQixNQUE0QyxFQUM1QyxRQUE4QyxFQUM5QyxHQUE0QjtJQUU1QixNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQztJQUVuRSxNQUFNLElBQUksR0FDUixPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFNLENBQUM7SUFFNUUsTUFBTSxRQUFRLEdBQ1osT0FBTyxRQUFRLEtBQUssUUFBUTtRQUMxQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7UUFDbkIsQ0FBQyxDQUFDLE9BQU87WUFDUCxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUMsSUFBTyxFQUFFLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNuQixHQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUNoQyxPQUFPLEdBQVEsQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FB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Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE9BQTBCO0lBRTFCLE1BQU0sR0FBRyxHQUFHLE9BQThCLENBQUM7SUFDM0MsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLEdBQXNCO0lBRXRCLE9BQU8sTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzTXV0YWJsZSwgTXV0YWJsZVNpZ25hbCB9IGZyb20gJy4vbXV0YWJsZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICcuL3RvLXdyaXRhYmxlJztcclxuXHJcbnR5cGUgVW5rbm93bk9iamVjdCA9IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj47XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBkZXJpdmVkIHNpZ25hbCB1c2luZyB0aGUgZnVsbCBgZGVyaXZlZGAgZnVuY3Rpb24gc2lnbmF0dXJlLlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlIChwYXJlbnQpLlxyXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiB0aGUgZGVyaXZlZCBzaWduYWwncyB2YWx1ZSAoY2hpbGQpLlxyXG4gKi9cclxudHlwZSBDcmVhdGVEZXJpdmVkT3B0aW9uczxULCBVPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VT4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHRoZSBkZXJpdmVkIHZhbHVlIChgVWApIGZyb20gdGhlIHNvdXJjZSBzaWduYWwncyB2YWx1ZSAoYFRgKS5cclxuICAgKi9cclxuICBmcm9tOiAodjogVCkgPT4gVTtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlIChgVGApIHdoZW4gdGhlIGRlcml2ZWQgc2lnbmFsJ3MgdmFsdWUgKGBVYCkgY2hhbmdlcy5cclxuICAgKiBUaGlzIGVzdGFibGlzaGVzIHRoZSB0d28td2F5IGJpbmRpbmcuXHJcbiAgICovXHJcbiAgb25DaGFuZ2U6IChuZXdWYWx1ZTogVSkgPT4gdm9pZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGBXcml0YWJsZVNpZ25hbGAgdGhhdCBkZXJpdmVzIGl0cyB2YWx1ZSBmcm9tIGFub3RoZXIgYFdyaXRhYmxlU2lnbmFsYCAodGhlIFwic291cmNlXCIgc2lnbmFsKS5cclxuICogSXQgcHJvdmlkZXMgdHdvLXdheSBiaW5kaW5nOiBjaGFuZ2VzIHRvIHRoZSBzb3VyY2Ugc2lnbmFsIHVwZGF0ZSB0aGUgZGVyaXZlZCBzaWduYWwsIGFuZFxyXG4gKiBjaGFuZ2VzIHRvIHRoZSBkZXJpdmVkIHNpZ25hbCB1cGRhdGUgdGhlIHNvdXJjZSBzaWduYWwuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKHBhcmVudCkuXHJcbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIHRoZSBkZXJpdmVkIHNpZ25hbCdzIHZhbHVlIChjaGlsZCkuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBEZXJpdmVkU2lnbmFsPFQsIFU+ID0gV3JpdGFibGVTaWduYWw8VT4gJiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVyaXZlIHRoZSBkZXJpdmVkIHNpZ25hbCdzIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBzaWduYWwncyB2YWx1ZS5cclxuICAgKiBUaGlzIGlzIHByaW1hcmlseSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBpbnRyb3NwZWN0aW9uLlxyXG4gICAqL1xyXG4gIGZyb206ICh2OiBUKSA9PiBVO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgRGVyaXZlZFNpZ25hbGAgdGhhdCBkZXJpdmVzIGl0cyB2YWx1ZSBmcm9tIGFub3RoZXIgYFdyaXRhYmxlU2lnbmFsYC5cclxuICogVGhpcyBvdmVybG9hZCBwcm92aWRlcyB0aGUgbW9zdCBmbGV4aWJpbGl0eSwgYWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGBmcm9tYCBhbmQgYG9uQ2hhbmdlYCBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFUgVGhlIHR5cGUgb2YgdGhlIGRlcml2ZWQgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgV3JpdGFibGVTaWduYWxgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgYGZyb21gIGFuZCBgb25DaGFuZ2VgIGZ1bmN0aW9ucywgYW5kIG9wdGlvbmFsIHNpZ25hbCBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyBBIGBEZXJpdmVkU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9KTtcclxuICogY29uc3QgbmFtZSA9IGRlcml2ZWQodXNlciwge1xyXG4gKiBmcm9tOiAodSkgPT4gdS5uYW1lLFxyXG4gKiBvbkNoYW5nZTogKG5ld05hbWUpID0+IHVzZXIudXBkYXRlKCh1KSA9PiAoeyAuLi51LCBuYW1lOiBuZXdOYW1lIH0pKSxcclxuICogfSk7XHJcbiAqXHJcbiAqIG5hbWUuc2V0KCdKYW5lJyk7IC8vIFVwZGF0ZXMgdGhlIG9yaWdpbmFsIHNpZ25hbFxyXG4gKiBjb25zb2xlLmxvZyh1c2VyKCkubmFtZSk7IC8vIE91dHB1dHM6IEphbmVcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlZDxULCBVPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIG9wdDogQ3JlYXRlRGVyaXZlZE9wdGlvbnM8VCwgVT4sXHJcbik6IERlcml2ZWRTaWduYWw8VCwgVT47XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBEZXJpdmVkU2lnbmFsYCB0aGF0IGRlcml2ZXMgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdCBoZWxkIGJ5IHRoZSBzb3VyY2Ugc2lnbmFsLlxyXG4gKiBUaGlzIG92ZXJsb2FkIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGFjY2Vzc2luZyBvYmplY3QgcHJvcGVydGllcy5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKG11c3QgYmUgYW4gb2JqZWN0KS5cclxuICogQHR5cGVQYXJhbSBUS2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGRlcml2ZS5cclxuICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGBXcml0YWJsZVNpZ25hbGAgKGhvbGRpbmcgYW4gb2JqZWN0KS5cclxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBkZXJpdmUuXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNpZ25hbCBvcHRpb25zIGZvciB0aGUgZGVyaXZlZCBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgYERlcml2ZWRTaWduYWxgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH0pO1xyXG4gKiBjb25zdCBuYW1lID0gZGVyaXZlZCh1c2VyLCAnbmFtZScpO1xyXG4gKlxyXG4gKiBjb25zb2xlLmxvZyhuYW1lKCkpOyAvLyBPdXRwdXRzOiBKb2huXHJcbiAqXHJcbiAqIC8vIFVwZGF0ZSB0aGUgZGVyaXZlZCBzaWduYWwsIHdoaWNoIGFsc28gdXBkYXRlcyB0aGUgc291cmNlXHJcbiAqIG5hbWUuc2V0KCdKYW5lJyk7XHJcbiAqXHJcbiAqIGNvbnNvbGUubG9nKHVzZXIoKS5uYW1lKTsgLy8gT3V0cHV0czogSmFuZVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVkPFQgZXh0ZW5kcyBVbmtub3duT2JqZWN0LCBUS2V5IGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBrZXk6IFRLZXksXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxUW1RLZXldPixcclxuKTogRGVyaXZlZFNpZ25hbDxULCBUW1RLZXldPjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgYERlcml2ZWRTaWduYWxgIGZyb20gYW4gYXJyYXksIGRlcml2aW5nIGFuIGVsZW1lbnQgYnkgaXRzIGluZGV4LlxyXG4gKiBUaGlzIG92ZXJsb2FkIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGFjY2Vzc2luZyBhcnJheSBlbGVtZW50cy5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKG11c3QgYmUgYW4gYXJyYXkpLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYFdyaXRhYmxlU2lnbmFsYCAoaG9sZGluZyBhbiBhcnJheSkuXHJcbiAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gZGVyaXZlLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzaWduYWwgb3B0aW9ucyBmb3IgdGhlIGRlcml2ZWQgc2lnbmFsLlxyXG4gKiBAcmV0dXJucyBBIGBEZXJpdmVkU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgbnVtYmVycyA9IHNpZ25hbChbMSwgMiwgM10pO1xyXG4gKiBjb25zdCBzZWNvbmROdW1iZXIgPSBkZXJpdmVkKG51bWJlcnMsIDEpO1xyXG4gKlxyXG4gKiBjb25zb2xlLmxvZyhzZWNvbmROdW1iZXIoKSk7IC8vIE91dHB1dHM6IDJcclxuICpcclxuICogLy8gVXBkYXRlIHRoZSBkZXJpdmVkIHNpZ25hbCwgd2hpY2ggYWxzbyB1cGRhdGVzIHRoZSBzb3VyY2VcclxuICogc2Vjb25kTnVtYmVyLnNldCg1KTtcclxuICpcclxuICogY29uc29sZS5sb2cobnVtYmVycygpKTsgLy8gT3V0cHV0czogWzEsIDUsIDNdXHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZWQ8VCBleHRlbmRzIGFueVtdPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIGluZGV4OiBudW1iZXIsXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxUW251bWJlcl0+LFxyXG4pOiBEZXJpdmVkU2lnbmFsPFQsIFRbbnVtYmVyXT47XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBEZXJpdmVkU2lnbmFsYCB0aGF0IGRlcml2ZXMgaXRzIHZhbHVlIGZyb20gYW5vdGhlciBgTXV0YWJsZVNpZ25hbGAuXHJcbiAqIFVzZSBtdXR1YWJsZSBzaWduYWxzIHdpdGggY2F1dGlvbiwgYnV0IHZlcnkgdXNlZnVsIGZvciBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZXMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFUgVGhlIHR5cGUgb2YgdGhlIGRlcml2ZWQgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgV3JpdGFibGVTaWduYWxgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgYGZyb21gIGFuZCBgb25DaGFuZ2VgIGZ1bmN0aW9ucywgYW5kIG9wdGlvbmFsIHNpZ25hbCBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyBBIGBEZXJpdmVkU2lnbmFsICYgTXV0YWJsZVNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzXHJcbiAqIGNvbnN0IHVzZXIgPSBzaWduYWwoeyBuYW1lOiAnSm9obicsIGFnZTogMzAgfSk7XHJcbiAqIGNvbnN0IG5hbWUgPSBkZXJpdmVkKHVzZXIsIHtcclxuICogZnJvbTogKHUpID0+IHUubmFtZSxcclxuICogb25DaGFuZ2U6IChuZXdOYW1lKSA9PiB1c2VyLnVwZGF0ZSgodSkgPT4gKHsgLi4udSwgbmFtZTogbmV3TmFtZSB9KSksXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBuYW1lLnNldCgnSmFuZScpOyAvLyBVcGRhdGVzIHRoZSBvcmlnaW5hbCBzaWduYWxcclxuICogY29uc29sZS5sb2codXNlcigpLm5hbWUpOyAvLyBPdXRwdXRzOiBKYW5lXHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZWQ8VCwgVT4oXHJcbiAgc291cmNlOiBNdXRhYmxlU2lnbmFsPFQ+LFxyXG4gIG9wdE9yS2V5OiBDcmVhdGVEZXJpdmVkT3B0aW9uczxULCBVPiB8IGtleW9mIFQsXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxVPixcclxuKTogRGVyaXZlZFNpZ25hbDxULCBVPiAmIE11dGFibGVTaWduYWw8VT47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlZDxULCBVPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgTXV0YWJsZVNpZ25hbDxUPixcclxuICBvcHRPcktleTogQ3JlYXRlRGVyaXZlZE9wdGlvbnM8VCwgVT4gfCBrZXlvZiBULFxyXG4gIG9wdD86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VT4sXHJcbik6IERlcml2ZWRTaWduYWw8VCwgVT4gfCAoRGVyaXZlZFNpZ25hbDxULCBVPiAmIE11dGFibGVTaWduYWw8VT4pIHtcclxuICBjb25zdCBpc0FycmF5ID1cclxuICAgIEFycmF5LmlzQXJyYXkodW50cmFja2VkKHNvdXJjZSkpICYmIHR5cGVvZiBvcHRPcktleSA9PT0gJ251bWJlcic7XHJcblxyXG4gIGNvbnN0IGZyb20gPVxyXG4gICAgdHlwZW9mIG9wdE9yS2V5ID09PSAnb2JqZWN0JyA/IG9wdE9yS2V5LmZyb20gOiAodjogVCkgPT4gdltvcHRPcktleV0gYXMgVTtcclxuXHJcbiAgY29uc3Qgb25DaGFuZ2UgPVxyXG4gICAgdHlwZW9mIG9wdE9yS2V5ID09PSAnb2JqZWN0J1xyXG4gICAgICA/IG9wdE9yS2V5Lm9uQ2hhbmdlXHJcbiAgICAgIDogaXNBcnJheVxyXG4gICAgICAgID8gaXNNdXRhYmxlKHNvdXJjZSlcclxuICAgICAgICAgID8gKG5leHQ6IFUpID0+IHtcclxuICAgICAgICAgICAgICBzb3VyY2UubXV0YXRlKChjdXIpID0+IHtcclxuICAgICAgICAgICAgICAgIChjdXIgYXMgYW55W10pW29wdE9yS2V5XSA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyIGFzIFQ7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDogKG5leHQ6IFUpID0+IHtcclxuICAgICAgICAgICAgICBzb3VyY2UudXBkYXRlKChjdXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gWy4uLihjdXIgYXMgdW5rbm93biBhcyBhbnlbXSldO1xyXG4gICAgICAgICAgICAgICAgbmV3QXJyYXlbb3B0T3JLZXldID0gbmV4dDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdBcnJheSBhcyBUO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgOiBpc011dGFibGUoc291cmNlKVxyXG4gICAgICAgICAgPyAobmV4dDogVSkgPT4ge1xyXG4gICAgICAgICAgICAgIHNvdXJjZS5tdXRhdGUoKGN1cikgPT4ge1xyXG4gICAgICAgICAgICAgICAgKGN1ciBhcyBVbmtub3duT2JqZWN0KVtvcHRPcktleV0gPSBuZXh0IGFzIFRba2V5b2YgVF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IChuZXh0OiBVKSA9PiB7XHJcbiAgICAgICAgICAgICAgc291cmNlLnVwZGF0ZSgoY3VyKSA9PiAoeyAuLi5jdXIsIFtvcHRPcktleV06IG5leHQgfSkpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICBjb25zdCByZXN0ID0gdHlwZW9mIG9wdE9yS2V5ID09PSAnb2JqZWN0JyA/IG9wdE9yS2V5IDogb3B0O1xyXG5cclxuICBjb25zdCBiYXNlRXF1YWwgPSByZXN0Py5lcXVhbCA/PyBPYmplY3QuaXM7XHJcbiAgbGV0IHRyaWdnZXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3QgZXF1YWw6IFZhbHVlRXF1YWxpdHlGbjxVPiA9IGlzTXV0YWJsZShzb3VyY2UpXHJcbiAgICA/IChhOiBVLCBiOiBVKSA9PiB7XHJcbiAgICAgICAgaWYgKHRyaWdnZXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gYmFzZUVxdWFsKGEsIGIpO1xyXG4gICAgICB9XHJcbiAgICA6IGJhc2VFcXVhbDtcclxuXHJcbiAgY29uc3Qgc2lnID0gdG9Xcml0YWJsZTxVPihcclxuICAgIGNvbXB1dGVkKCgpID0+IGZyb20oc291cmNlKCkpLCB7IC4uLnJlc3QsIGVxdWFsIH0pLFxyXG4gICAgKG5ld1ZhbCkgPT4gb25DaGFuZ2UobmV3VmFsKSxcclxuICApIGFzIERlcml2ZWRTaWduYWw8VCwgVT4gJiBNdXRhYmxlU2lnbmFsPFU+O1xyXG5cclxuICBzaWcuZnJvbSA9IGZyb207XHJcblxyXG4gIGlmIChpc011dGFibGUoc291cmNlKSkge1xyXG4gICAgc2lnLm11dGF0ZSA9ICh1cGRhdGVyKSA9PiB7XHJcbiAgICAgIHRyaWdnZXIgPSB0cnVlO1xyXG4gICAgICBzaWcudXBkYXRlKHVwZGF0ZXIpO1xyXG4gICAgICB0cmlnZ2VyID0gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIHNpZy5pbmxpbmUgPSAodXBkYXRlcikgPT4ge1xyXG4gICAgICBzaWcubXV0YXRlKChwcmV2KSA9PiB7XHJcbiAgICAgICAgdXBkYXRlcihwcmV2KTtcclxuICAgICAgICByZXR1cm4gcHJldjtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBcImZha2VcIiBgRGVyaXZlZFNpZ25hbGAgZnJvbSBhIHNpbXBsZSB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nXHJcbiAqIGBGb3JtQ29udHJvbFNpZ25hbGAgaW5zdGFuY2VzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBkZXJpdmVkIGZyb20gYW5vdGhlciBzaWduYWwuXHJcbiAqIFRoZSByZXR1cm5lZCBzaWduYWwncyBgZnJvbWAgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSAgVGhpcyB0eXBlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gYnV0IGlzIGtlcHQgZm9yIHR5cGUgY29tcGF0aWJpbGl0eSB3aXRoIGBEZXJpdmVkU2lnbmFsYC5cclxuICogQHR5cGVQYXJhbSBVIC0gVGhlIHR5cGUgb2YgdGhlIHNpZ25hbCdzIHZhbHVlLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgYERlcml2ZWRTaWduYWxgIGluc3RhbmNlLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0b0Zha2VEZXJpdmF0aW9uPFQsIFU+KGluaXRpYWw6IFUpOiBEZXJpdmVkU2lnbmFsPFQsIFU+IHtcclxuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbCkgYXMgRGVyaXZlZFNpZ25hbDxULCBVPjtcclxuICBzaWcuZnJvbSA9ICgpID0+IGluaXRpYWw7XHJcblxyXG4gIHJldHVybiBzaWc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgXCJmYWtlXCIgYERlcml2ZWRTaWduYWxgIGZyb20gYW4gZXhpc3RpbmcgYFdyaXRhYmxlU2lnbmFsYC4gVGhpcyBpcyB1c2VmdWxcclxuICogZm9yIHRyZWF0aW5nIGEgcmVndWxhciBgV3JpdGFibGVTaWduYWxgIGFzIGEgYERlcml2ZWRTaWduYWxgIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGJlaGF2aW9yLlxyXG4gKiAgVGhlIHJldHVybmVkIHNpZ25hbCdzIGBmcm9tYCBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHNpZ25hbCwgdXNpbmcgYHVudHJhY2tlZGAuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoaXMgdHlwZSBwYXJhbWV0ZXIgaXMgbm90IHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIGJ1dCBpcyBrZXB0IGZvciB0eXBlIGNvbXBhdGliaWxpdHkgd2l0aCBgRGVyaXZlZFNpZ25hbGAuXHJcbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIHRoZSBzaWduYWwncyB2YWx1ZS5cclxuICogQHBhcmFtIGluaXRpYWwgLSBUaGUgZXhpc3RpbmcgYFdyaXRhYmxlU2lnbmFsYC5cclxuICogQHJldHVybnMgQSBgRGVyaXZlZFNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRmFrZVNpZ25hbERlcml2YXRpb248VCwgVT4oXHJcbiAgaW5pdGlhbDogV3JpdGFibGVTaWduYWw8VT4sXHJcbik6IERlcml2ZWRTaWduYWw8VCwgVT4ge1xyXG4gIGNvbnN0IHNpZyA9IGluaXRpYWwgYXMgRGVyaXZlZFNpZ25hbDxULCBVPjtcclxuICBzaWcuZnJvbSA9ICgpID0+IHVudHJhY2tlZChpbml0aWFsKTtcclxuICByZXR1cm4gc2lnO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBndWFyZCBmdW5jdGlvbiB0byBjaGVjayBpZiBhIGdpdmVuIGBXcml0YWJsZVNpZ25hbGAgaXMgYSBgRGVyaXZlZFNpZ25hbGAuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBgYW55YCkuXHJcbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIHRoZSBkZXJpdmVkIHNpZ25hbCdzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gYGFueWApLlxyXG4gKiBAcGFyYW0gc2lnIC0gVGhlIGBXcml0YWJsZVNpZ25hbGAgdG8gY2hlY2suXHJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2lnbmFsIGlzIGEgYERlcml2ZWRTaWduYWxgLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YXRpb248VCwgVT4oXHJcbiAgc2lnOiBXcml0YWJsZVNpZ25hbDxVPixcclxuKTogc2lnIGlzIERlcml2ZWRTaWduYWw8VCwgVT4ge1xyXG4gIHJldHVybiAnZnJvbScgaW4gc2lnO1xyXG59XHJcbiJdfQ==","import { isPlatformServer } from '@angular/common';\nimport { computed, effect, ElementRef, inject, isSignal, PLATFORM_ID, signal, } from '@angular/core';\nfunction observerSupported() {\n return typeof IntersectionObserver !== 'undefined';\n}\n/**\n * Creates a read-only signal that tracks the intersection status of a target DOM element\n * with the viewport or a specified root element, using the `IntersectionObserver` API.\n *\n * It can observe a static `ElementRef`/`Element` or a `Signal` that resolves to one,\n * allowing for dynamic targets.\n *\n * @param target The DOM element (or `ElementRef`, or a `Signal` resolving to one) to observe.\n * If the signal resolves to `null`, observation stops.\n * @param options Optional `IntersectionObserverInit` options (e.g., `root`, `rootMargin`, `threshold`)\n * and an optional `debugName`.\n * @returns A `Signal<IntersectionObserverEntry | undefined>`. It emits `undefined` initially,\n * on the server, or if the target is `null`. Otherwise, it emits the latest\n * `IntersectionObserverEntry`. Consumers can derive a boolean `isVisible` from\n * this entry's `isIntersecting` property.\n *\n * @example\n * ```ts\n * import { Component, effect, ElementRef, viewChild } from '@angular/core';\n * import { elementVisibility } from '@mmstack/primitives';\n * import { computed } from '@angular/core'; // For derived boolean\n *\n * @Component({\n * selector: 'app-lazy-image',\n * template: `\n * <div #imageContainer style=\"height: 200px; border: 1px dashed grey;\">\n * @if (isVisible()) {\n * <img src=\"your-image-url.jpg\" alt=\"Lazy loaded image\" />\n * <p>Image is VISIBLE!</p>\n * } @else {\n * <p>Scroll down to see the image...</p>\n * }\n * </div>\n * `\n * })\n * export class LazyImageComponent {\n * readonly imageContainer = viewChild.required<ElementRef<HTMLDivElement>>('imageContainer');\n *\n * // Observe the element, get the full IntersectionObserverEntry\n * readonly intersectionEntry = elementVisibility(this.imageContainer);\n *\n * // Derive a simple boolean for visibility\n * readonly isVisible = computed(() => this.intersectionEntry()?.isIntersecting ?? false);\n *\n * constructor() {\n * effect(() => {\n * console.log('Intersection Entry:', this.intersectionEntry());\n * console.log('Is Visible:', this.isVisible());\n * });\n * }\n * }\n * ```\n */\nexport function elementVisibility(target = inject(ElementRef), opt) {\n if (isPlatformServer(inject(PLATFORM_ID)) || !observerSupported()) {\n const base = computed(() => undefined, {\n debugName: opt?.debugName,\n });\n base.visible = computed(() => false, ...(ngDevMode ? [{ debugName: \"visible\" }] : []));\n return base;\n }\n const state = signal(undefined, {\n debugName: opt?.debugName,\n equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return (a.target === b.target &&\n a.isIntersecting === b.isIntersecting &&\n a.intersectionRatio === b.intersectionRatio &&\n a.boundingClientRect.top === b.boundingClientRect.top &&\n a.boundingClientRect.left === b.boundingClientRect.left &&\n a.boundingClientRect.width === b.boundingClientRect.width &&\n a.boundingClientRect.height === b.boundingClientRect.height);\n },\n });\n const targetSignal = isSignal(target) ? target : computed(() => target);\n effect((cleanup) => {\n const el = targetSignal();\n if (!el)\n return state.set(undefined);\n let observer = null;\n observer = new IntersectionObserver(([entry]) => state.set(entry), opt);\n observer.observe(el instanceof ElementRef ? el.nativeElement : el);\n cleanup(() => {\n observer?.disconnect();\n });\n });\n const base = state.asReadonly();\n base.visible = computed(() => {\n const s = state();\n if (!s)\n return false;\n return s.isIntersecting;\n }, ...(ngDevMode ? [{ debugName: \"visible\" }] : []));\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC12aXNpYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL2VsZW1lbnQtdmlzaWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBV3ZCLFNBQVMsaUJBQWlCO0lBQ3hCLE9BQU8sT0FBTyxvQkFBb0IsS0FBSyxXQUFXLENBQUM7QUFDckQsQ0FBQztBQWNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixTQUdtRCxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQ3JFLEdBQThCO0lBRTlCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVM7U0FDMUIsQ0FBb0MsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLG1EQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUF3QyxTQUFTLEVBQUU7UUFDckUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTO1FBQ3pCLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzNCLE9BQU8sQ0FDTCxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNO2dCQUNyQixDQUFDLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxjQUFjO2dCQUNyQyxDQUFDLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQjtnQkFDM0MsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRztnQkFDckQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSTtnQkFDdkQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSztnQkFDekQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUM1RCxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDakIsTUFBTSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckMsSUFBSSxRQUFRLEdBQWdDLElBQUksQ0FBQztRQUNqRCxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFxQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUMxQixDQUFDLG1EQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBpbmplY3QsXHJcbiAgaXNTaWduYWwsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgYGVsZW1lbnRWaXNpYmlsaXR5YCBzZW5zb3IsIGV4dGVuZGluZ1xyXG4gKiBzdGFuZGFyZCBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0YCBvcHRpb25zLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRWxlbWVudFZpc2liaWxpdHlPcHRpb25zID0gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ICYge1xyXG4gIC8qKiBPcHRpb25hbCBkZWJ1ZyBuYW1lIGZvciB0aGUgaW50ZXJuYWwgc2lnbmFsLiAqL1xyXG4gIGRlYnVnTmFtZT86IHN0cmluZztcclxufTtcclxuXHJcbmZ1bmN0aW9uIG9ic2VydmVyU3VwcG9ydGVkKCkge1xyXG4gIHJldHVybiB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG50eXBlIEludGVybmFsRWxlbWVudFZpc2liaWxpdHlTaWduYWwgPSBTaWduYWw8XHJcbiAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZFxyXG4+ICYge1xyXG4gIHZpc2libGU6IFNpZ25hbDxib29sZWFuPjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEVsZW1lbnRWaXNpYmlsaXR5U2lnbmFsID0gU2lnbmFsPFxyXG4gIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgfCB1bmRlZmluZWRcclxuPiAmIHtcclxuICByZWFkb25seSB2aXNpYmxlOiBTaWduYWw8Ym9vbGVhbj47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWQtb25seSBzaWduYWwgdGhhdCB0cmFja3MgdGhlIGludGVyc2VjdGlvbiBzdGF0dXMgb2YgYSB0YXJnZXQgRE9NIGVsZW1lbnRcclxuICogd2l0aCB0aGUgdmlld3BvcnQgb3IgYSBzcGVjaWZpZWQgcm9vdCBlbGVtZW50LCB1c2luZyB0aGUgYEludGVyc2VjdGlvbk9ic2VydmVyYCBBUEkuXHJcbiAqXHJcbiAqIEl0IGNhbiBvYnNlcnZlIGEgc3RhdGljIGBFbGVtZW50UmVmYC9gRWxlbWVudGAgb3IgYSBgU2lnbmFsYCB0aGF0IHJlc29sdmVzIHRvIG9uZSxcclxuICogYWxsb3dpbmcgZm9yIGR5bmFtaWMgdGFyZ2V0cy5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgRE9NIGVsZW1lbnQgKG9yIGBFbGVtZW50UmVmYCwgb3IgYSBgU2lnbmFsYCByZXNvbHZpbmcgdG8gb25lKSB0byBvYnNlcnZlLlxyXG4gKiBJZiB0aGUgc2lnbmFsIHJlc29sdmVzIHRvIGBudWxsYCwgb2JzZXJ2YXRpb24gc3RvcHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXRgIG9wdGlvbnMgKGUuZy4sIGByb290YCwgYHJvb3RNYXJnaW5gLCBgdGhyZXNob2xkYClcclxuICogYW5kIGFuIG9wdGlvbmFsIGBkZWJ1Z05hbWVgLlxyXG4gKiBAcmV0dXJucyBBIGBTaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZD5gLiBJdCBlbWl0cyBgdW5kZWZpbmVkYCBpbml0aWFsbHksXHJcbiAqIG9uIHRoZSBzZXJ2ZXIsIG9yIGlmIHRoZSB0YXJnZXQgaXMgYG51bGxgLiBPdGhlcndpc2UsIGl0IGVtaXRzIHRoZSBsYXRlc3RcclxuICogYEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlgLiBDb25zdW1lcnMgY2FuIGRlcml2ZSBhIGJvb2xlYW4gYGlzVmlzaWJsZWAgZnJvbVxyXG4gKiB0aGlzIGVudHJ5J3MgYGlzSW50ZXJzZWN0aW5nYCBwcm9wZXJ0eS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyBlbGVtZW50VmlzaWJpbGl0eSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKiBpbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyAvLyBGb3IgZGVyaXZlZCBib29sZWFuXHJcbiAqXHJcbiAqIEBDb21wb25lbnQoe1xyXG4gKiBzZWxlY3RvcjogJ2FwcC1sYXp5LWltYWdlJyxcclxuICogdGVtcGxhdGU6IGBcclxuICogPGRpdiAjaW1hZ2VDb250YWluZXIgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4OyBib3JkZXI6IDFweCBkYXNoZWQgZ3JleTtcIj5cclxuICogQGlmIChpc1Zpc2libGUoKSkge1xyXG4gKiA8aW1nIHNyYz1cInlvdXItaW1hZ2UtdXJsLmpwZ1wiIGFsdD1cIkxhenkgbG9hZGVkIGltYWdlXCIgLz5cclxuICogPHA+SW1hZ2UgaXMgVklTSUJMRSE8L3A+XHJcbiAqIH0gQGVsc2Uge1xyXG4gKiA8cD5TY3JvbGwgZG93biB0byBzZWUgdGhlIGltYWdlLi4uPC9wPlxyXG4gKiB9XHJcbiAqIDwvZGl2PlxyXG4gKiBgXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBMYXp5SW1hZ2VDb21wb25lbnQge1xyXG4gKiByZWFkb25seSBpbWFnZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2ltYWdlQ29udGFpbmVyJyk7XHJcbiAqXHJcbiAqIC8vIE9ic2VydmUgdGhlIGVsZW1lbnQsIGdldCB0aGUgZnVsbCBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5XHJcbiAqIHJlYWRvbmx5IGludGVyc2VjdGlvbkVudHJ5ID0gZWxlbWVudFZpc2liaWxpdHkodGhpcy5pbWFnZUNvbnRhaW5lcik7XHJcbiAqXHJcbiAqIC8vIERlcml2ZSBhIHNpbXBsZSBib29sZWFuIGZvciB2aXNpYmlsaXR5XHJcbiAqIHJlYWRvbmx5IGlzVmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW50ZXJzZWN0aW9uRW50cnkoKT8uaXNJbnRlcnNlY3RpbmcgPz8gZmFsc2UpO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ0ludGVyc2VjdGlvbiBFbnRyeTonLCB0aGlzLmludGVyc2VjdGlvbkVudHJ5KCkpO1xyXG4gKiBjb25zb2xlLmxvZygnSXMgVmlzaWJsZTonLCB0aGlzLmlzVmlzaWJsZSgpKTtcclxuICogfSk7XHJcbiAqIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50VmlzaWJpbGl0eShcclxuICB0YXJnZXQ6XHJcbiAgICB8IEVsZW1lbnRSZWY8RWxlbWVudD5cclxuICAgIHwgRWxlbWVudFxyXG4gICAgfCBTaWduYWw8RWxlbWVudFJlZjxFbGVtZW50PiB8IEVsZW1lbnQgfCBudWxsPiA9IGluamVjdChFbGVtZW50UmVmKSxcclxuICBvcHQ/OiBFbGVtZW50VmlzaWJpbGl0eU9wdGlvbnMsXHJcbik6IEVsZW1lbnRWaXNpYmlsaXR5U2lnbmFsIHtcclxuICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSB8fCAhb2JzZXJ2ZXJTdXBwb3J0ZWQoKSkge1xyXG4gICAgY29uc3QgYmFzZSA9IGNvbXB1dGVkKCgpID0+IHVuZGVmaW5lZCwge1xyXG4gICAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lLFxyXG4gICAgfSkgYXMgSW50ZXJuYWxFbGVtZW50VmlzaWJpbGl0eVNpZ25hbDtcclxuICAgIGJhc2UudmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IGZhbHNlKTtcclxuICAgIHJldHVybiBiYXNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhdGUgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XHJcbiAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lLFxyXG4gICAgZXF1YWw6IChhLCBiKSA9PiB7XHJcbiAgICAgIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGEudGFyZ2V0ID09PSBiLnRhcmdldCAmJlxyXG4gICAgICAgIGEuaXNJbnRlcnNlY3RpbmcgPT09IGIuaXNJbnRlcnNlY3RpbmcgJiZcclxuICAgICAgICBhLmludGVyc2VjdGlvblJhdGlvID09PSBiLmludGVyc2VjdGlvblJhdGlvICYmXHJcbiAgICAgICAgYS5ib3VuZGluZ0NsaWVudFJlY3QudG9wID09PSBiLmJvdW5kaW5nQ2xpZW50UmVjdC50b3AgJiZcclxuICAgICAgICBhLmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ID09PSBiLmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICYmXHJcbiAgICAgICAgYS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggPT09IGIuYm91bmRpbmdDbGllbnRSZWN0LndpZHRoICYmXHJcbiAgICAgICAgYS5ib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0ID09PSBiLmJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHRcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHRhcmdldFNpZ25hbCA9IGlzU2lnbmFsKHRhcmdldCkgPyB0YXJnZXQgOiBjb21wdXRlZCgoKSA9PiB0YXJnZXQpO1xyXG5cclxuICBlZmZlY3QoKGNsZWFudXApID0+IHtcclxuICAgIGNvbnN0IGVsID0gdGFyZ2V0U2lnbmFsKCk7XHJcblxyXG4gICAgaWYgKCFlbCkgcmV0dXJuIHN0YXRlLnNldCh1bmRlZmluZWQpO1xyXG5cclxuICAgIGxldCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuICAgIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbZW50cnldKSA9PiBzdGF0ZS5zZXQoZW50cnkpLCBvcHQpO1xyXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyBlbC5uYXRpdmVFbGVtZW50IDogZWwpO1xyXG5cclxuICAgIGNsZWFudXAoKCkgPT4ge1xyXG4gICAgICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBzdGF0ZS5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxFbGVtZW50VmlzaWJpbGl0eVNpZ25hbDtcclxuICBiYXNlLnZpc2libGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBzID0gc3RhdGUoKTtcclxuICAgIGlmICghcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHMuaXNJbnRlcnNlY3Rpbmc7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { computed, isSignal, linkedSignal, } from '@angular/core';\nimport { derived } from './derived';\nimport { isMutable } from './mutable';\nimport { toWritable } from './to-writable';\n/**\n * @internal\n * Checks if a signal is a WritableSignal.\n * @param sig The signal to check.\n */\nfunction isWritable(sig) {\n // We just need to check for the presence of a 'set' method.\n return 'set' in sig;\n}\n/**\n * @internal\n * Creates a setter function for a source signal of type `Signal<T[]>` or a function returning `T[]`.\n * @param source The source signal of type `Signal<T[]>` or a function returning `T[]`.\n * @returns\n */\nfunction createSetter(source) {\n if (!isWritable(source))\n return () => {\n // noop;\n };\n if (isMutable(source))\n return (value, index) => {\n source.inline((arr) => {\n arr[index] = value;\n });\n };\n return (value, index) => {\n source.update((arr) => arr.map((v, i) => (i === index ? value : v)));\n };\n}\nexport function mapArray(source, map, options) {\n const data = isSignal(source) ? source : computed(source);\n const len = computed(() => data().length, ...(ngDevMode ? [{ debugName: \"len\" }] : []));\n const setter = createSetter(data);\n const opt = { ...options };\n const writableData = isWritable(data)\n ? data\n : toWritable(data, () => {\n // noop\n });\n if (isWritable(data) && isMutable(data) && !opt.equal) {\n opt.equal = (a, b) => {\n if (a !== b)\n return false; // actually check primitives and references\n return false; // opt out for same refs\n };\n }\n return linkedSignal({\n source: () => len(),\n computation: (len, prev) => {\n if (!prev)\n return Array.from({ length: len }, (_, i) => {\n const derivation = derived(writableData, // typcase to largest type\n {\n from: (src) => src[i],\n onChange: (value) => setter(value, i),\n }, opt);\n return map(derivation, i);\n });\n if (len === prev.value.length)\n return prev.value;\n if (len < prev.value.length) {\n const slice = prev.value.slice(0, len);\n if (opt.onDestroy) {\n for (let i = len; i < prev.value.length; i++) {\n opt.onDestroy?.(prev.value[i]);\n }\n }\n return slice;\n }\n else {\n const next = [...prev.value];\n for (let i = prev.value.length; i < len; i++) {\n const derivation = derived(writableData, // typcase to largest type\n {\n from: (src) => src[i],\n onChange: (value) => setter(value, i),\n }, opt);\n next[i] = map(derivation, i);\n }\n return next;\n }\n },\n equal: (a, b) => a.length === b.length,\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL21hcC1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFFBQVEsRUFDUixZQUFZLEdBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxTQUFTLFVBQVUsQ0FBSSxHQUFjO0lBQ25DLDREQUE0RDtJQUM1RCxPQUFPLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxZQUFZLENBQ25CLE1BQW1CO0lBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sR0FBRyxFQUFFO1lBQ1YsUUFBUTtRQUNWLENBQUMsQ0FBQztJQUVKLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUVKLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFL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QUFDO2dCQUNOLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQ3hCLFlBQWtDLEVBQUUsMEJBQTBCO29CQUM5RDt3QkFDRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7cUJBQ3RDLEVBQ0QsR0FBRyxDQUNKLENBQUM7b0JBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07S0FDdkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIGlzU2lnbmFsLFxyXG4gIGxpbmtlZFNpZ25hbCxcclxuICB0eXBlIFNpZ25hbCxcclxuICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBkZXJpdmVkIH0gZnJvbSAnLi9kZXJpdmVkJztcclxuaW1wb3J0IHsgaXNNdXRhYmxlLCBNdXRhYmxlU2lnbmFsIH0gZnJvbSAnLi9tdXRhYmxlJztcclxuaW1wb3J0IHsgdG9Xcml0YWJsZSB9IGZyb20gJy4vdG8td3JpdGFibGUnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBDaGVja3MgaWYgYSBzaWduYWwgaXMgYSBXcml0YWJsZVNpZ25hbC5cclxuICogQHBhcmFtIHNpZyBUaGUgc2lnbmFsIHRvIGNoZWNrLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNXcml0YWJsZTxUPihzaWc6IFNpZ25hbDxUPik6IHNpZyBpcyBXcml0YWJsZVNpZ25hbDxUPiB7XHJcbiAgLy8gV2UganVzdCBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSAnc2V0JyBtZXRob2QuXHJcbiAgcmV0dXJuICdzZXQnIGluIHNpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBDcmVhdGVzIGEgc2V0dGVyIGZ1bmN0aW9uIGZvciBhIHNvdXJjZSBzaWduYWwgb2YgdHlwZSBgU2lnbmFsPFRbXT5gIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGBUW11gLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugc2lnbmFsIG9mIHR5cGUgYFNpZ25hbDxUW10+YCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBgVFtdYC5cclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVNldHRlcjxUPihcclxuICBzb3VyY2U6IFNpZ25hbDxUW10+LFxyXG4pOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IHZvaWQge1xyXG4gIGlmICghaXNXcml0YWJsZShzb3VyY2UpKVxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgLy8gbm9vcDtcclxuICAgIH07XHJcblxyXG4gIGlmIChpc011dGFibGUoc291cmNlKSlcclxuICAgIHJldHVybiAodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgIHNvdXJjZS5pbmxpbmUoKGFycikgPT4ge1xyXG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICByZXR1cm4gKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgc291cmNlLnVwZGF0ZSgoYXJyKSA9PiBhcnIubWFwKCh2LCBpKSA9PiAoaSA9PT0gaW5kZXggPyB2YWx1ZSA6IHYpKSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlYWN0aXZlbHkgbWFwcyBpdGVtcyBmcm9tIGEgc291cmNlIGFycmF5IHRvIGEgbmV3IGFycmF5LCBjcmVhdGluZyBzdGFibGUgc2lnbmFscyBmb3IgZWFjaCBpdGVtLlxyXG4gKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGhpZ2hseSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLCBzaW1pbGFyIHRvIFNvbGlkSlMncyBgbWFwQXJyYXlgLlxyXG4gKiBGb3IgZWFjaCBpdGVtIGluIHRoZSBzb3VyY2UgYXJyYXksIGl0IGNyZWF0ZXMgYSBzdGFibGUgc2lnbmFsIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBtYXBwaW5nIGZ1bmN0aW9uLlxyXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBkb3duc3RyZWFtIGNvbnN1bWVycyBvbmx5IHJlLWV2YWx1YXRlIGZvciBpdGVtcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZCxcclxuICogb3Igd2hlbiBpdGVtcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LlxyXG4gKlxyXG4gKiBUaGUgdHlwZSBvZiBzaWduYWwgcGFzc2VkIHRvIHRoZSBgbWFwYCBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBzb3VyY2U6XHJcbiAqIC0gKipSZWFkb25seSBgU2lnbmFsYCoqOiBgbWFwYCByZWNlaXZlcyBhIHJlYWRvbmx5IGBTaWduYWw8VD5gLlxyXG4gKiAtICoqYFdyaXRhYmxlU2lnbmFsYCoqOiBgbWFwYCByZWNlaXZlcyBhIGBXcml0YWJsZVNpZ25hbDxUPmAsIGFsbG93aW5nIHR3by13YXkgYmluZGluZy5cclxuICogLSAqKmBNdXRhYmxlU2lnbmFsYCoqOiBgbWFwYCByZWNlaXZlcyBhIGBNdXRhYmxlU2lnbmFsPFQ+YCwgYWxsb3dpbmcgaW4tcGxhY2UgbXV0YXRpb24gZm9yIHBlcmZvcm1hbmNlLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiBpdGVtcyBpbiB0aGUgc291cmNlIGFycmF5LlxyXG4gKiBAdGVtcGxhdGUgVSBUaGUgdHlwZSBvZiBpdGVtcyBpbiB0aGUgcmVzdWx0aW5nIG1hcHBlZCBhcnJheS5cclxuICpcclxuICogQHBhcmFtIHNvdXJjZSBBIGBTaWduYWw8VFtdPmAgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYFRbXWAuXHJcbiAqIEBwYXJhbSBtYXAgVGhlIG1hcHBpbmcgZnVuY3Rpb24uIEl0IHJlY2VpdmVzIGEgc3RhYmxlIHNpZ25hbCBmb3IgdGhlIGl0ZW0gYW5kIGl0cyBpbmRleC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGBDcmVhdGVTaWduYWxPcHRpb25zYCBmb3IgdGhlIGl0ZW0gc2lnbmFsc1xyXG4gKiAoZS5nLiwgYSBjdXN0b20gYGVxdWFsYCBmdW5jdGlvbikgYW5kIGFuIGBvbkRlc3Ryb3lgIGNhbGxiYWNrIGZvciBjbGVhbnVwLlxyXG4gKiBAcmV0dXJucyBBIGBTaWduYWw8VVtdPmAgY29udGFpbmluZyB0aGUgbWFwcGVkIGFycmF5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBXcml0YWJsZSBleGFtcGxlXHJcbiAqIGNvbnN0IHNvdXJjZUl0ZW1zID0gc2lnbmFsKFtcclxuICogeyBpZDogMSwgbmFtZTogJ0FwcGxlJyB9LFxyXG4gKiB7IGlkOiAyLCBuYW1lOiAnQmFuYW5hJyB9XHJcbiAqIF0pO1xyXG4gKlxyXG4gKiAvLyBUaGUgYGl0ZW1TaWduYWxgIGlzIHdyaXRhYmxlIGJlY2F1c2UgYHNvdXJjZUl0ZW1zYCBpcyBhIFdyaXRhYmxlU2lnbmFsLlxyXG4gKiBjb25zdCBtYXBwZWRJdGVtcyA9IG1hcEFycmF5KHNvdXJjZUl0ZW1zLCAoaXRlbVNpZ25hbCwgaW5kZXgpID0+ICh7XHJcbiAqIGxhYmVsOiBjb21wdXRlZCgoKSA9PiBgJHtpbmRleH06ICR7aXRlbVNpZ25hbCgpLm5hbWUudG9VcHBlckNhc2UoKX1gKSxcclxuICogc2V0TmFtZTogKG5ld05hbWU6IHN0cmluZykgPT4gaXRlbVNpZ25hbC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBuYW1lOiBuZXdOYW1lIH0pKVxyXG4gKiB9KSk7XHJcbiAqXHJcbiAqIC8vIFRoaXMgd2lsbCB1cGRhdGUgdGhlIG9yaWdpbmFsIHNvdXJjZSBzaWduYWwuXHJcbiAqIG1hcHBlZEl0ZW1zKClbMF0uc2V0TmFtZSgnQXZvY2FkbycpO1xyXG4gKiAvLyBzb3VyY2VJdGVtcygpIGlzIG5vdzogW3sgaWQ6IDEsIG5hbWU6ICdBdm9jYWRvJyB9LCB7IGlkOiAyLCBuYW1lOiAnQmFuYW5hJyB9XVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEFycmF5PFQsIFU+KFxyXG4gIHNvdXJjZTogTXV0YWJsZVNpZ25hbDxUW10+LFxyXG4gIG1hcDogKHZhbHVlOiBNdXRhYmxlU2lnbmFsPFQ+LCBpbmRleDogbnVtYmVyKSA9PiBVLFxyXG4gIG9wdGlvbnM/OiBDcmVhdGVTaWduYWxPcHRpb25zPFQ+ICYge1xyXG4gICAgb25EZXN0cm95PzogKHZhbHVlOiBVKSA9PiB2b2lkO1xyXG4gIH0sXHJcbik6IFNpZ25hbDxVW10+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEFycmF5PFQsIFU+KFxyXG4gIHNvdXJjZTogV3JpdGFibGVTaWduYWw8VFtdPixcclxuICBtYXA6ICh2YWx1ZTogV3JpdGFibGVTaWduYWw8VD4sIGluZGV4OiBudW1iZXIpID0+IFUsXHJcbiAgb3B0aW9ucz86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgICBvbkRlc3Ryb3k/OiAodmFsdWU6IFUpID0+IHZvaWQ7XHJcbiAgfSxcclxuKTogU2lnbmFsPFVbXT47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFwQXJyYXk8VCwgVT4oXHJcbiAgc291cmNlOiBTaWduYWw8VFtdPiB8ICgoKSA9PiBUW10pLFxyXG4gIG1hcDogKHZhbHVlOiBTaWduYWw8VD4sIGluZGV4OiBudW1iZXIpID0+IFUsXHJcbiAgb3B0aW9ucz86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgICBvbkRlc3Ryb3k/OiAodmFsdWU6IFUpID0+IHZvaWQ7XHJcbiAgfSxcclxuKTogU2lnbmFsPFVbXT47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFwQXJyYXk8VCwgVT4oXHJcbiAgc291cmNlOiBTaWduYWw8VFtdPiB8ICgoKSA9PiBUW10pLFxyXG4gIG1hcDpcclxuICAgIHwgKCh2YWx1ZTogU2lnbmFsPFQ+LCBpbmRleDogbnVtYmVyKSA9PiBVKVxyXG4gICAgfCAoKHZhbHVlOiBXcml0YWJsZVNpZ25hbDxUPiwgaW5kZXg6IG51bWJlcikgPT4gVSlcclxuICAgIHwgKCh2YWx1ZTogTXV0YWJsZVNpZ25hbDxUPiwgaW5kZXg6IG51bWJlcikgPT4gVSksXHJcbiAgb3B0aW9ucz86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgICBvbkRlc3Ryb3k/OiAodmFsdWU6IFUpID0+IHZvaWQ7XHJcbiAgfSxcclxuKTogU2lnbmFsPFVbXT4ge1xyXG4gIGNvbnN0IGRhdGEgPSBpc1NpZ25hbChzb3VyY2UpID8gc291cmNlIDogY29tcHV0ZWQoc291cmNlKTtcclxuICBjb25zdCBsZW4gPSBjb21wdXRlZCgoKSA9PiBkYXRhKCkubGVuZ3RoKTtcclxuXHJcbiAgY29uc3Qgc2V0dGVyID0gY3JlYXRlU2V0dGVyKGRhdGEpO1xyXG5cclxuICBjb25zdCBvcHQgPSB7IC4uLm9wdGlvbnMgfTtcclxuXHJcbiAgY29uc3Qgd3JpdGFibGVEYXRhID0gaXNXcml0YWJsZShkYXRhKVxyXG4gICAgPyBkYXRhXHJcbiAgICA6IHRvV3JpdGFibGUoZGF0YSwgKCkgPT4ge1xyXG4gICAgICAgIC8vIG5vb3BcclxuICAgICAgfSk7XHJcblxyXG4gIGlmIChpc1dyaXRhYmxlKGRhdGEpICYmIGlzTXV0YWJsZShkYXRhKSAmJiAhb3B0LmVxdWFsKSB7XHJcbiAgICBvcHQuZXF1YWwgPSAoYTogVCwgYjogVCkgPT4ge1xyXG4gICAgICBpZiAoYSAhPT0gYikgcmV0dXJuIGZhbHNlOyAvLyBhY3R1YWxseSBjaGVjayBwcmltaXRpdmVzIGFuZCByZWZlcmVuY2VzXHJcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gb3B0IG91dCBmb3Igc2FtZSByZWZzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGxpbmtlZFNpZ25hbDxudW1iZXIsIFVbXT4oe1xyXG4gICAgc291cmNlOiAoKSA9PiBsZW4oKSxcclxuICAgIGNvbXB1dGF0aW9uOiAobGVuLCBwcmV2KSA9PiB7XHJcbiAgICAgIGlmICghcHJldilcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbGVuIH0sIChfLCBpKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkZXJpdmF0aW9uID0gZGVyaXZlZChcclxuICAgICAgICAgICAgd3JpdGFibGVEYXRhIGFzIE11dGFibGVTaWduYWw8VFtdPiwgLy8gdHlwY2FzZSB0byBsYXJnZXN0IHR5cGVcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZyb206IChzcmMpID0+IHNyY1tpXSxcclxuICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlKSA9PiBzZXR0ZXIodmFsdWUsIGkpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvcHQsXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHJldHVybiBtYXAoZGVyaXZhdGlvbiwgaSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAobGVuID09PSBwcmV2LnZhbHVlLmxlbmd0aCkgcmV0dXJuIHByZXYudmFsdWU7XHJcblxyXG4gICAgICBpZiAobGVuIDwgcHJldi52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBzbGljZSA9IHByZXYudmFsdWUuc2xpY2UoMCwgbGVuKTtcclxuXHJcbiAgICAgICAgaWYgKG9wdC5vbkRlc3Ryb3kpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSBsZW47IGkgPCBwcmV2LnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9wdC5vbkRlc3Ryb3k/LihwcmV2LnZhbHVlW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzbGljZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gWy4uLnByZXYudmFsdWVdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBwcmV2LnZhbHVlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBkZXJpdmF0aW9uID0gZGVyaXZlZChcclxuICAgICAgICAgICAgd3JpdGFibGVEYXRhIGFzIE11dGFibGVTaWduYWw8VFtdPiwgLy8gdHlwY2FzZSB0byBsYXJnZXN0IHR5cGVcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZyb206IChzcmMpID0+IHNyY1tpXSxcclxuICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlKSA9PiBzZXR0ZXIodmFsdWUsIGkpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvcHQsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbmV4dFtpXSA9IG1hcChkZXJpdmF0aW9uLCBpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcXVhbDogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCxcclxuICB9KTtcclxufVxyXG4iXX0=","import { computed, effect, linkedSignal, } from '@angular/core';\n/** Project with optional equality. Pure & sync. */\nexport const select = (projector, opt) => (src) => computed(() => projector(src()), opt);\n/** Combine with another signal using a projector. */\nexport const combineWith = (other, project, opt) => (src) => computed(() => project(src(), other()), opt);\n/** Only re-emit when equal(prev, next) is false. */\nexport const distinct = (equal = Object.is) => (src) => computed(() => src(), { equal });\n/** map to new value */\nexport const map = (fn) => (src) => computed(() => fn(src()));\n/** filter values, keeping the last value if it was ever available, if first value is filtered will return undefined */\nexport const filter = (predicate) => (src) => linkedSignal({\n source: src,\n computation: (next, prev) => {\n if (predicate(next))\n return next;\n return prev?.source;\n },\n});\n/** tap into the value */\nexport const tap = (fn) => (src) => {\n effect(() => fn(src()));\n return src;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3BpcGVhYmxlL29wZXJhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLE1BQU0sRUFDTixZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFHdkIsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FDakIsQ0FDRSxTQUFzQixFQUN0QixHQUE0QixFQUNaLEVBQUUsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUUxQyxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUN0QixDQUNFLEtBQWdCLEVBQ2hCLE9BQTBCLEVBQzFCLEdBQTRCLEVBQ1osRUFBRSxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWpELG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQ25CLENBQUksUUFBaUMsTUFBTSxDQUFDLEVBQUUsRUFBa0IsRUFBRSxDQUNsRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUVyQyx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUNkLENBQU8sRUFBZSxFQUFrQixFQUFFLENBQzFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU5Qix1SEFBdUg7QUFDdkgsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUNqQixDQUFJLFNBQTRCLEVBQThCLEVBQUUsQ0FDaEUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFlBQVksQ0FBQztJQUNYLE1BQU0sRUFBRSxHQUFHO0lBQ1gsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzFCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRVAseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FDZCxDQUFJLEVBQWtCLEVBQWtCLEVBQUUsQ0FDMUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUNOLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXhCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIENyZWF0ZVNpZ25hbE9wdGlvbnMsXG4gIGVmZmVjdCxcbiAgbGlua2VkU2lnbmFsLFxuICBTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIFByb2plY3Qgd2l0aCBvcHRpb25hbCBlcXVhbGl0eS4gUHVyZSAmIHN5bmMuICovXG5leHBvcnQgY29uc3Qgc2VsZWN0ID1cbiAgPEksIE8+KFxuICAgIHByb2plY3RvcjogKHY6IEkpID0+IE8sXG4gICAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxPPixcbiAgKTogT3BlcmF0b3I8SSwgTz4gPT5cbiAgKHNyYykgPT5cbiAgICBjb21wdXRlZCgoKSA9PiBwcm9qZWN0b3Ioc3JjKCkpLCBvcHQpO1xuXG4vKiogQ29tYmluZSB3aXRoIGFub3RoZXIgc2lnbmFsIHVzaW5nIGEgcHJvamVjdG9yLiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVXaXRoID1cbiAgPEEsIEIsIFI+KFxuICAgIG90aGVyOiBTaWduYWw8Qj4sXG4gICAgcHJvamVjdDogKGE6IEEsIGI6IEIpID0+IFIsXG4gICAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxSPixcbiAgKTogT3BlcmF0b3I8QSwgUj4gPT5cbiAgKHNyYykgPT5cbiAgICBjb21wdXRlZCgoKSA9PiBwcm9qZWN0KHNyYygpLCBvdGhlcigpKSwgb3B0KTtcblxuLyoqIE9ubHkgcmUtZW1pdCB3aGVuIGVxdWFsKHByZXYsIG5leHQpIGlzIGZhbHNlLiAqL1xuZXhwb3J0IGNvbnN0IGRpc3RpbmN0ID1cbiAgPFQ+KGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiA9IE9iamVjdC5pcyk6IE9wZXJhdG9yPFQsIFQ+ID0+XG4gIChzcmMpID0+XG4gICAgY29tcHV0ZWQoKCkgPT4gc3JjKCksIHsgZXF1YWwgfSk7XG5cbi8qKiBtYXAgdG8gbmV3IHZhbHVlICovXG5leHBvcnQgY29uc3QgbWFwID1cbiAgPEksIE8+KGZuOiAodjogSSkgPT4gTyk6IE9wZXJhdG9yPEksIE8+ID0+XG4gIChzcmMpID0+XG4gICAgY29tcHV0ZWQoKCkgPT4gZm4oc3JjKCkpKTtcblxuLyoqIGZpbHRlciB2YWx1ZXMsIGtlZXBpbmcgdGhlIGxhc3QgdmFsdWUgaWYgaXQgd2FzIGV2ZXIgYXZhaWxhYmxlLCBpZiBmaXJzdCB2YWx1ZSBpcyBmaWx0ZXJlZCB3aWxsIHJldHVybiB1bmRlZmluZWQgKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPVxuICA8VD4ocHJlZGljYXRlOiAodjogVCkgPT4gYm9vbGVhbik6IE9wZXJhdG9yPFQsIFQgfCB1bmRlZmluZWQ+ID0+XG4gIChzcmMpID0+XG4gICAgbGlua2VkU2lnbmFsKHtcbiAgICAgIHNvdXJjZTogc3JjLFxuICAgICAgY29tcHV0YXRpb246IChuZXh0LCBwcmV2KSA9PiB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUobmV4dCkpIHJldHVybiBuZXh0O1xuICAgICAgICByZXR1cm4gcHJldj8uc291cmNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuLyoqIHRhcCBpbnRvIHRoZSB2YWx1ZSAqL1xuZXhwb3J0IGNvbnN0IHRhcCA9XG4gIDxUPihmbjogKHY6IFQpID0+IHZvaWQpOiBPcGVyYXRvcjxULCBUPiA9PlxuICAoc3JjKSA9PiB7XG4gICAgZWZmZWN0KCgpID0+IGZuKHNyYygpKSk7XG5cbiAgICByZXR1cm4gc3JjO1xuICB9O1xuIl19","import { computed, signal, } from '@angular/core';\n/**\n * Decorate any `Signal<T>` with a chainable `.pipe(...)` method.\n *\n * @example\n * const s = pipeable(signal(1)); // WritableSignal<number> (+ pipe)\n * const label = s.pipe(n => n * 2, n => `#${n}`); // Signal<string> (+ pipe)\n * label(); // \"#2\"\n */\nexport function pipeable(signal) {\n const internal = signal;\n const mapImpl = (...fns) => {\n const last = fns.at(-1);\n let opt;\n if (last && typeof last !== 'function') {\n fns = fns.slice(0, -1);\n opt = last;\n }\n if (fns.length === 0)\n return internal;\n if (fns.length === 1) {\n const fn = fns[0];\n return pipeable(computed(() => fn(internal()), opt));\n }\n const transformer = (input) => fns.reduce((acc, fn) => fn(acc), input);\n return pipeable(computed(() => transformer(internal()), opt));\n };\n const pipeImpl = (...ops) => {\n if (ops.length === 0)\n return internal;\n return ops.reduce((src, op) => pipeable(op(src)), internal);\n };\n Object.defineProperties(internal, {\n map: {\n value: mapImpl,\n configurable: true,\n enumerable: false,\n writable: false,\n },\n pipe: {\n value: pipeImpl,\n configurable: true,\n enumerable: false,\n writable: false,\n },\n });\n return internal;\n}\n/**\n * Create a new **writable** signal and return it as a `PipableSignal`.\n *\n * The returned value is a `WritableSignal<T>` with `.set`, `.update`, `.asReadonly`\n * still available (via intersection type), plus a chainable `.pipe(...)`.\n *\n * @example\n * const count = piped(1); // WritableSignal<number> (+ pipe)\n * const even = count.pipe(n => n % 2 === 0); // Signal<boolean> (+ pipe)\n * count.update(n => n + 1);\n */\nexport function piped(initial, opt) {\n return pipeable(signal(initial, opt));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9waXBlYWJsZS9waXBlYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxHQUlQLE1BQU0sZUFBZSxDQUFDO0FBUXZCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsTUFBaUQsQ0FBQztJQUVuRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBOEIsRUFBRSxFQUFFO1FBQ3BELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEdBQXlDLENBQUM7UUFDOUMsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXRDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTVFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxHQUF5QixFQUFFLEVBQUU7UUFDaEQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUN0QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQ2YsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzlCLFFBQStCLENBQ2hDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO1FBQ2hDLEdBQUcsRUFBRTtZQUNILEtBQUssRUFBRSxPQUFPO1lBQ2QsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFFRCxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsUUFBUTtZQUNmLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNuQixPQUFVLEVBQ1YsR0FBNEI7SUFFNUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIHNpZ25hbCxcclxuICB0eXBlIENyZWF0ZVNpZ25hbE9wdGlvbnMsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIE9wZXJhdG9yLFxyXG4gIFBpcGVhYmxlU2lnbmFsLFxyXG4gIFNpZ25hbFZhbHVlLFxyXG4gIFVuYXJ5RnVuY3Rpb24sXHJcbn0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogRGVjb3JhdGUgYW55IGBTaWduYWw8VD5gIHdpdGggYSBjaGFpbmFibGUgYC5waXBlKC4uLilgIG1ldGhvZC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgcyA9IHBpcGVhYmxlKHNpZ25hbCgxKSk7IC8vIFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gKCsgcGlwZSlcclxuICogY29uc3QgbGFiZWwgPSBzLnBpcGUobiA9PiBuICogMiwgbiA9PiBgIyR7bn1gKTsgLy8gU2lnbmFsPHN0cmluZz4gKCsgcGlwZSlcclxuICogbGFiZWwoKTsgLy8gXCIjMlwiXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGlwZWFibGU8VFNpZyBleHRlbmRzIFNpZ25hbDxhbnk+PihcclxuICBzaWduYWw6IFRTaWcsXHJcbik6IFBpcGVhYmxlU2lnbmFsPFNpZ25hbFZhbHVlPFRTaWc+LCBUU2lnPiB7XHJcbiAgY29uc3QgaW50ZXJuYWwgPSBzaWduYWwgYXMgUGlwZWFibGVTaWduYWw8U2lnbmFsVmFsdWU8VFNpZz4sIFRTaWc+O1xyXG5cclxuICBjb25zdCBtYXBJbXBsID0gKC4uLmZuczogVW5hcnlGdW5jdGlvbjxhbnksIGFueT5bXSkgPT4ge1xyXG4gICAgY29uc3QgbGFzdCA9IGZucy5hdCgtMSk7XHJcbiAgICBsZXQgb3B0OiBDcmVhdGVTaWduYWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAobGFzdCAmJiB0eXBlb2YgbGFzdCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBmbnMgPSBmbnMuc2xpY2UoMCwgLTEpO1xyXG4gICAgICBvcHQgPSBsYXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSByZXR1cm4gaW50ZXJuYWw7XHJcblxyXG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgZm4gPSBmbnNbMF07XHJcbiAgICAgIHJldHVybiBwaXBlYWJsZShjb21wdXRlZCgoKSA9PiBmbihpbnRlcm5hbCgpKSwgb3B0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoaW5wdXQ6IGFueSkgPT4gZm5zLnJlZHVjZSgoYWNjLCBmbikgPT4gZm4oYWNjKSwgaW5wdXQpO1xyXG5cclxuICAgIHJldHVybiBwaXBlYWJsZShjb21wdXRlZCgoKSA9PiB0cmFuc2Zvcm1lcihpbnRlcm5hbCgpKSwgb3B0KSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcGlwZUltcGwgPSAoLi4ub3BzOiBPcGVyYXRvcjxhbnksIGFueT5bXSkgPT4ge1xyXG4gICAgaWYgKG9wcy5sZW5ndGggPT09IDApIHJldHVybiBpbnRlcm5hbDtcclxuICAgIHJldHVybiBvcHMucmVkdWNlPFBpcGVhYmxlU2lnbmFsPGFueT4+KFxyXG4gICAgICAoc3JjLCBvcCkgPT4gcGlwZWFibGUob3Aoc3JjKSksXHJcbiAgICAgIGludGVybmFsIGFzIFBpcGVhYmxlU2lnbmFsPGFueT4sXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGludGVybmFsLCB7XHJcbiAgICBtYXA6IHtcclxuICAgICAgdmFsdWU6IG1hcEltcGwsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgIH0sXHJcblxyXG4gICAgcGlwZToge1xyXG4gICAgICB2YWx1ZTogcGlwZUltcGwsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBpbnRlcm5hbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyAqKndyaXRhYmxlKiogc2lnbmFsIGFuZCByZXR1cm4gaXQgYXMgYSBgUGlwYWJsZVNpZ25hbGAuXHJcbiAqXHJcbiAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIGBXcml0YWJsZVNpZ25hbDxUPmAgd2l0aCBgLnNldGAsIGAudXBkYXRlYCwgYC5hc1JlYWRvbmx5YFxyXG4gKiBzdGlsbCBhdmFpbGFibGUgKHZpYSBpbnRlcnNlY3Rpb24gdHlwZSksIHBsdXMgYSBjaGFpbmFibGUgYC5waXBlKC4uLilgLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zdCBjb3VudCA9IHBpcGVkKDEpOyAvLyBXcml0YWJsZVNpZ25hbDxudW1iZXI+ICgrIHBpcGUpXHJcbiAqIGNvbnN0IGV2ZW4gPSBjb3VudC5waXBlKG4gPT4gbiAlIDIgPT09IDApOyAvLyBTaWduYWw8Ym9vbGVhbj4gKCsgcGlwZSlcclxuICogY291bnQudXBkYXRlKG4gPT4gbiArIDEpO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBpcGVkPFQ+KFxyXG4gIGluaXRpYWw6IFQsXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxUPixcclxuKTogUGlwZWFibGVTaWduYWw8VCwgV3JpdGFibGVTaWduYWw8VD4+IHtcclxuICByZXR1cm4gcGlwZWFibGUoc2lnbmFsKGluaXRpYWwsIG9wdCkpO1xyXG59XHJcbiJdfQ==","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, signal, } from '@angular/core';\n/**\n * Creates a read-only signal that reactively tracks whether a CSS media query\n * string currently matches.\n *\n * It uses `window.matchMedia` to evaluate the query and listen for changes.\n * The primitive is SSR-safe (defaults to `false` on the server) and automatically\n * cleans up its event listeners when the creating context is destroyed.\n *\n * @param query The CSS media query string to evaluate (e.g., `'(min-width: 768px)'`, `'(prefers-color-scheme: dark)'`).\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<boolean>` which is `true` if the media query\n * currently matches, and `false` otherwise.\n *\n * @remarks\n * - On the server, this signal will always return `false` by default.\n * - It automatically updates if the match status of the media query changes in the browser.\n * - Event listeners are cleaned up automatically via `DestroyRef` if created in an injection context.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { mediaQuery } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-responsive-layout',\n * template: `\n * @if (isDesktop()) {\n * <p>Showing desktop layout.</p>\n * } @else {\n * <p>Showing mobile layout.</p>\n * }\n * `\n * })\n * export class ResponsiveLayoutComponent {\n * readonly isDesktop = mediaQuery('(min-width: 1024px)');\n *\n * constructor() {\n * effect(() => {\n * console.log('Is desktop view:', this.isDesktop());\n * });\n * }\n * }\n * ```\n */\nexport function mediaQuery(query, debugName = 'mediaQuery') {\n if (isPlatformServer(inject(PLATFORM_ID)))\n return computed(() => false, { debugName });\n const mediaQueryList = window.matchMedia(query);\n const state = signal(mediaQueryList.matches, { debugName: debugName });\n const handleChange = (event) => {\n state.set(event.matches);\n };\n mediaQueryList.addEventListener('change', handleChange);\n inject(DestroyRef).onDestroy(() => {\n mediaQueryList.removeEventListener('change', handleChange);\n });\n return state.asReadonly();\n}\n/**\n * Creates a read-only signal that tracks the user's OS/browser preference\n * for a dark color scheme using the `(prefers-color-scheme: dark)` media query.\n *\n * This is a convenience wrapper around the generic `mediaQuery` primitive.\n * It's SSR-safe (defaults to `false` on the server) and automatically\n * cleans up its event listeners.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<boolean>` which is `true` if a dark theme\n * is preferred, and `false` otherwise.\n * @see {mediaQuery} for the underlying implementation.\n *\n * @example\n * ```ts\n * const isDarkMode = prefersDarkMode();\n * effect(() => {\n * document.body.classList.toggle('dark-theme', isDarkMode());\n * });\n * ```\n */\nexport function prefersDarkMode(debugName) {\n return mediaQuery('(prefers-color-scheme: dark)', debugName);\n}\n/**\n * Creates a read-only signal that tracks the user's OS/browser preference\n * for reduced motion using the `(prefers-reduced-motion: reduce)` media query.\n *\n * This is a convenience wrapper around the generic `mediaQuery` primitive.\n * It's SSR-safe (defaults to `false` on the server) and automatically\n * cleans up its event listeners.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<boolean>` which is `true` if reduced motion\n * is preferred, and `false` otherwise.\n * @see {mediaQuery} for the underlying implementation.\n *\n * @example\n * ```ts\n * const reduceMotion = prefersReducedMotion();\n * effect(() => {\n * if (reduceMotion()) {\n * // Apply simplified animations or disable them\n * } else {\n * // Apply full animations\n * }\n * });\n * ```\n */\nexport function prefersReducedMotion(debugName) {\n return mediaQuery('(prefers-reduced-motion: reduce)', debugName);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy9tZWRpYS1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLEtBQWEsRUFDYixTQUFTLEdBQUcsWUFBWTtJQUV4QixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUV2RSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQTBCLEVBQUUsRUFBRTtRQUNsRCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFFRixjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXhELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2hDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUFrQjtJQUNoRCxPQUFPLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxTQUFrQjtJQUNyRCxPQUFPLFVBQVUsQ0FBQyxrQ0FBa0MsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHJlYWN0aXZlbHkgdHJhY2tzIHdoZXRoZXIgYSBDU1MgbWVkaWEgcXVlcnlcclxuICogc3RyaW5nIGN1cnJlbnRseSBtYXRjaGVzLlxyXG4gKlxyXG4gKiBJdCB1c2VzIGB3aW5kb3cubWF0Y2hNZWRpYWAgdG8gZXZhbHVhdGUgdGhlIHF1ZXJ5IGFuZCBsaXN0ZW4gZm9yIGNoYW5nZXMuXHJcbiAqIFRoZSBwcmltaXRpdmUgaXMgU1NSLXNhZmUgKGRlZmF1bHRzIHRvIGBmYWxzZWAgb24gdGhlIHNlcnZlcikgYW5kIGF1dG9tYXRpY2FsbHlcclxuICogY2xlYW5zIHVwIGl0cyBldmVudCBsaXN0ZW5lcnMgd2hlbiB0aGUgY3JlYXRpbmcgY29udGV4dCBpcyBkZXN0cm95ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBxdWVyeSBUaGUgQ1NTIG1lZGlhIHF1ZXJ5IHN0cmluZyB0byBldmFsdWF0ZSAoZS5nLiwgYCcobWluLXdpZHRoOiA3NjhweCknYCwgYCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJ2ApLlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGBTaWduYWw8Ym9vbGVhbj5gIHdoaWNoIGlzIGB0cnVlYCBpZiB0aGUgbWVkaWEgcXVlcnlcclxuICogY3VycmVudGx5IG1hdGNoZXMsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICpcclxuICogQHJlbWFya3NcclxuICogLSBPbiB0aGUgc2VydmVyLCB0aGlzIHNpZ25hbCB3aWxsIGFsd2F5cyByZXR1cm4gYGZhbHNlYCBieSBkZWZhdWx0LlxyXG4gKiAtIEl0IGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBpZiB0aGUgbWF0Y2ggc3RhdHVzIG9mIHRoZSBtZWRpYSBxdWVyeSBjaGFuZ2VzIGluIHRoZSBicm93c2VyLlxyXG4gKiAtIEV2ZW50IGxpc3RlbmVycyBhcmUgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHZpYSBgRGVzdHJveVJlZmAgaWYgY3JlYXRlZCBpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgbWVkaWFRdWVyeSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtcmVzcG9uc2l2ZS1sYXlvdXQnLFxyXG4gKiB0ZW1wbGF0ZTogYFxyXG4gKiBAaWYgKGlzRGVza3RvcCgpKSB7XHJcbiAqIDxwPlNob3dpbmcgZGVza3RvcCBsYXlvdXQuPC9wPlxyXG4gKiB9IEBlbHNlIHtcclxuICogPHA+U2hvd2luZyBtb2JpbGUgbGF5b3V0LjwvcD5cclxuICogfVxyXG4gKiBgXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBSZXNwb25zaXZlTGF5b3V0Q29tcG9uZW50IHtcclxuICogcmVhZG9ubHkgaXNEZXNrdG9wID0gbWVkaWFRdWVyeSgnKG1pbi13aWR0aDogMTAyNHB4KScpO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ0lzIGRlc2t0b3AgdmlldzonLCB0aGlzLmlzRGVza3RvcCgpKTtcclxuICogfSk7XHJcbiAqIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtZWRpYVF1ZXJ5KFxyXG4gIHF1ZXJ5OiBzdHJpbmcsXHJcbiAgZGVidWdOYW1lID0gJ21lZGlhUXVlcnknLFxyXG4pOiBTaWduYWw8Ym9vbGVhbj4ge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKVxyXG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IGZhbHNlLCB7IGRlYnVnTmFtZSB9KTtcclxuXHJcbiAgY29uc3QgbWVkaWFRdWVyeUxpc3QgPSB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSk7XHJcblxyXG4gIGNvbnN0IHN0YXRlID0gc2lnbmFsKG1lZGlhUXVlcnlMaXN0Lm1hdGNoZXMsIHsgZGVidWdOYW1lOiBkZWJ1Z05hbWUgfSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudDogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4ge1xyXG4gICAgc3RhdGUuc2V0KGV2ZW50Lm1hdGNoZXMpO1xyXG4gIH07XHJcblxyXG4gIG1lZGlhUXVlcnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSk7XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgbWVkaWFRdWVyeUxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlQ2hhbmdlKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHN0YXRlLmFzUmVhZG9ubHkoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSB1c2VyJ3MgT1MvYnJvd3NlciBwcmVmZXJlbmNlXHJcbiAqIGZvciBhIGRhcmsgY29sb3Igc2NoZW1lIHVzaW5nIHRoZSBgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKWAgbWVkaWEgcXVlcnkuXHJcbiAqXHJcbiAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2VuZXJpYyBgbWVkaWFRdWVyeWAgcHJpbWl0aXZlLlxyXG4gKiBJdCdzIFNTUi1zYWZlIChkZWZhdWx0cyB0byBgZmFsc2VgIG9uIHRoZSBzZXJ2ZXIpIGFuZCBhdXRvbWF0aWNhbGx5XHJcbiAqIGNsZWFucyB1cCBpdHMgZXZlbnQgbGlzdGVuZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGBTaWduYWw8Ym9vbGVhbj5gIHdoaWNoIGlzIGB0cnVlYCBpZiBhIGRhcmsgdGhlbWVcclxuICogaXMgcHJlZmVycmVkLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqIEBzZWUge21lZGlhUXVlcnl9IGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgaXNEYXJrTW9kZSA9IHByZWZlcnNEYXJrTW9kZSgpO1xyXG4gKiBlZmZlY3QoKCkgPT4ge1xyXG4gKiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2RhcmstdGhlbWUnLCBpc0RhcmtNb2RlKCkpO1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJlZmVyc0RhcmtNb2RlKGRlYnVnTmFtZT86IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XHJcbiAgcmV0dXJuIG1lZGlhUXVlcnkoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknLCBkZWJ1Z05hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWQtb25seSBzaWduYWwgdGhhdCB0cmFja3MgdGhlIHVzZXIncyBPUy9icm93c2VyIHByZWZlcmVuY2VcclxuICogZm9yIHJlZHVjZWQgbW90aW9uIHVzaW5nIHRoZSBgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSlgIG1lZGlhIHF1ZXJ5LlxyXG4gKlxyXG4gKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGhlIGdlbmVyaWMgYG1lZGlhUXVlcnlgIHByaW1pdGl2ZS5cclxuICogSXQncyBTU1Itc2FmZSAoZGVmYXVsdHMgdG8gYGZhbHNlYCBvbiB0aGUgc2VydmVyKSBhbmQgYXV0b21hdGljYWxseVxyXG4gKiBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIGRlYnVnTmFtZSBPcHRpb25hbCBkZWJ1ZyBuYW1lIGZvciB0aGUgc2lnbmFsLlxyXG4gKiBAcmV0dXJucyBBIHJlYWQtb25seSBgU2lnbmFsPGJvb2xlYW4+YCB3aGljaCBpcyBgdHJ1ZWAgaWYgcmVkdWNlZCBtb3Rpb25cclxuICogaXMgcHJlZmVycmVkLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqIEBzZWUge21lZGlhUXVlcnl9IGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgcmVkdWNlTW90aW9uID0gcHJlZmVyc1JlZHVjZWRNb3Rpb24oKTtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogaWYgKHJlZHVjZU1vdGlvbigpKSB7XHJcbiAqIC8vIEFwcGx5IHNpbXBsaWZpZWQgYW5pbWF0aW9ucyBvciBkaXNhYmxlIHRoZW1cclxuICogfSBlbHNlIHtcclxuICogLy8gQXBwbHkgZnVsbCBhbmltYXRpb25zXHJcbiAqIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByZWZlcnNSZWR1Y2VkTW90aW9uKGRlYnVnTmFtZT86IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XHJcbiAgcmV0dXJuIG1lZGlhUXVlcnkoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJywgZGVidWdOYW1lKTtcclxufVxyXG4iXX0=","import { computed, DestroyRef, inject, signal, untracked, } from '@angular/core';\nimport { toWritable } from './to-writable';\n/**\n * A convenience function that creates and throttles a new `WritableSignal` in one step.\n *\n * @see {throttle} for the core implementation details.\n *\n * @template T The type of value the signal holds.\n * @param initial The initial value of the signal.\n * @param opt Options for signal creation, including throttle time `ms`.\n * @returns A `ThrottledSignal<T>` instance.\n *\n * @example\n * const query = throttled('', { ms: 500 });\n * effect(() => console.log('Throttled Query:', query()));\n *\n * query.set('a');\n * query.set('b');\n * query.set('c');\n * // With a trailing-edge throttle, the final value 'c' would be set\n * // after the 500ms cooldown.\n */\nexport function throttled(initial, opt) {\n return throttle(signal(initial, opt), opt);\n}\n/**\n * Wraps an existing `WritableSignal` to create a new one whose readable value is throttled.\n *\n * This implementation avoids using `effect` by pairing a trigger signal with an `untracked`\n * read of the source signal to control when the throttled value is re-evaluated.\n *\n * @template T The type of value the signal holds.\n * @param source The source `WritableSignal` to wrap. Writes are applied to this signal immediately.\n * @param opt Options for throttling, including throttle time `ms` and an optional `DestroyRef`.\n * @returns A new `ThrottledSignal<T>` whose read value is throttled. The `.original` property\n * of the returned signal is a reference back to the provided `source` signal.\n *\n * @example\n * const query = throttled('', { ms: 500 });\n * effect(() => console.log('Throttled Query:', query()));\n *\n * query.set('a');\n * query.set('b');\n * query.set('c');\n * // With a trailing-edge throttle, the final value 'c' would be set\n * // after the 500ms cooldown.\n */\nexport function throttle(source, opt) {\n const ms = opt?.ms ?? 0;\n const trigger = signal(false, ...(ngDevMode ? [{ debugName: \"trigger\" }] : []));\n let timeout;\n try {\n const destroyRef = opt?.destroyRef ?? inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => {\n if (timeout)\n clearTimeout(timeout);\n timeout = undefined;\n });\n }\n catch {\n // not in injection context & no destroyRef provided opting out of cleanup\n }\n const triggerFn = (updateSourceAction) => {\n updateSourceAction();\n if (timeout)\n return;\n timeout = setTimeout(() => {\n trigger.update((c) => !c);\n timeout = undefined;\n }, ms);\n };\n const set = (value) => {\n triggerFn(() => source.set(value));\n };\n const update = (fn) => {\n triggerFn(() => source.update(fn));\n };\n const writable = toWritable(computed(() => {\n trigger();\n return untracked(source);\n }, opt), set, update);\n writable.original = source;\n return writable;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3Rocm90dGxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBaUMzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLE9BQVUsRUFDVixHQUErQjtJQUUvQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBeUIsRUFDekIsR0FBK0I7SUFFL0IsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFeEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssbURBQUMsQ0FBQztJQUU5QixJQUFJLE9BQWtELENBQUM7SUFFdkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQ2QsR0FBRyxFQUFFLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFNUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxPQUFPO2dCQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLDBFQUEwRTtJQUM1RSxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxrQkFBOEIsRUFBRSxFQUFFO1FBQ25ELGtCQUFrQixFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPO1lBQUUsT0FBTztRQUVwQixPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtRQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBa0IsRUFBRSxFQUFFO1FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osT0FBTyxFQUFFLENBQUM7UUFDVixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ1AsR0FBRyxFQUNILE1BQU0sQ0FDZSxDQUFDO0lBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBRTNCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIHR5cGUgQ3JlYXRlU2lnbmFsT3B0aW9ucyxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERlYm91bmNlZFNpZ25hbCB9IGZyb20gJy4vZGVib3VuY2VkJztcclxuaW1wb3J0IHsgdG9Xcml0YWJsZSB9IGZyb20gJy4vdG8td3JpdGFibGUnO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgdGhyb3R0bGVkIHdyaXRhYmxlIHNpZ25hbC5cclxuICogRXh0ZW5kcyBBbmd1bGFyJ3MgYENyZWF0ZVNpZ25hbE9wdGlvbnNgIHdpdGggYSB0aHJvdHRsZSB0aW1lIHNldHRpbmcuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHZhbHVlIGhlbGQgYnkgdGhlIHNpZ25hbC5cclxuICovXHJcbmV4cG9ydCB0eXBlIENyZWF0ZVRocm90dGxlZE9wdGlvbnM8VD4gPSBDcmVhdGVTaWduYWxPcHRpb25zPFQ+ICYge1xyXG4gIC8qKlxyXG4gICAqIFRoZSB0aHJvdHRsZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuIFRoZSBtaW5pbXVtIHRpbWVcclxuICAgKiBpbiBtaWxsaXNlY29uZHMgdGhhdCBtdXN0IHBhc3MgYmV0d2VlbiB1cGRhdGVzIHRvIHRoZSB0aHJvdHRsZWQgc2lnbmFsJ3MgdmFsdWUuXHJcbiAgICovXHJcbiAgbXM/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgYERlc3Ryb3lSZWZgIHRvIGNsZWFuIHVwIHRoZSB0aHJvdHRsZSB0aW1lciB3aGVuIHRoZSBzaWduYWwgaXMgZGVzdHJveWVkLlxyXG4gICAqIElmIHByb3ZpZGVkLCB0aGUgdGltZXIgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHNpZ25hbCBpcyBkZXN0cm95ZWQuXHJcbiAgICogSWYgdGhlIHNpZ25hbCBpcyBjYWxsZWQgd2l0aGluIGEgcmVhY3RpdmUgY29udGV4dCBhIERlc3Ryb3lSZWYgaXMgaW5qZWN0ZWQgYXV0b21hdGljYWxseS5cclxuICAgKiBJZiBpdCBpcyBub3QgcHJvdmlkZWQgb3IgaW5qZWN0ZWQsIHRoZSB0aW1lciB3aWxsIG5vdCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuLi53aGljaCBpcyB1c3VhbGx5IGZpbmUgOilcclxuICAgKi9cclxuICBkZXN0cm95UmVmPzogRGVzdHJveVJlZjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNwZWNpYWxpemVkIGBXcml0YWJsZVNpZ25hbGAgd2hvc2UgcHVibGljbHkgcmVhZGFibGUgdmFsdWUgdXBkYXRlcyBhcmUgdGhyb3R0bGVkLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcsIG5vbi10aHJvdHRsZWQgc2lnbmFsIHZpYSB0aGUgYG9yaWdpbmFsYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKiBAc2VlIHtEZWJvdW5jZWRTaWduYWx9IGFzIHRoZSBvdXRwdXQgdHlwZSBoYXMgdGhlIHNhbWUgc3RydWN0dXJlLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVGhyb3R0bGVkU2lnbmFsPFQ+ID0gRGVib3VuY2VkU2lnbmFsPFQ+O1xyXG5cclxuLyoqXHJcbiAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFuZCB0aHJvdHRsZXMgYSBuZXcgYFdyaXRhYmxlU2lnbmFsYCBpbiBvbmUgc3RlcC5cclxuICpcclxuICogQHNlZSB7dGhyb3R0bGV9IGZvciB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSB0aGUgc2lnbmFsIGhvbGRzLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gb3B0IE9wdGlvbnMgZm9yIHNpZ25hbCBjcmVhdGlvbiwgaW5jbHVkaW5nIHRocm90dGxlIHRpbWUgYG1zYC5cclxuICogQHJldHVybnMgQSBgVGhyb3R0bGVkU2lnbmFsPFQ+YCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgcXVlcnkgPSB0aHJvdHRsZWQoJycsIHsgbXM6IDUwMCB9KTtcclxuICogZWZmZWN0KCgpID0+IGNvbnNvbGUubG9nKCdUaHJvdHRsZWQgUXVlcnk6JywgcXVlcnkoKSkpO1xyXG4gKlxyXG4gKiBxdWVyeS5zZXQoJ2EnKTtcclxuICogcXVlcnkuc2V0KCdiJyk7XHJcbiAqIHF1ZXJ5LnNldCgnYycpO1xyXG4gKiAvLyBXaXRoIGEgdHJhaWxpbmctZWRnZSB0aHJvdHRsZSwgdGhlIGZpbmFsIHZhbHVlICdjJyB3b3VsZCBiZSBzZXRcclxuICogLy8gYWZ0ZXIgdGhlIDUwMG1zIGNvb2xkb3duLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlZDxUPihcclxuICBpbml0aWFsOiBULFxyXG4gIG9wdD86IENyZWF0ZVRocm90dGxlZE9wdGlvbnM8VD4sXHJcbik6IERlYm91bmNlZFNpZ25hbDxUPiB7XHJcbiAgcmV0dXJuIHRocm90dGxlKHNpZ25hbChpbml0aWFsLCBvcHQpLCBvcHQpO1xyXG59XHJcblxyXG4vKipcclxuICogV3JhcHMgYW4gZXhpc3RpbmcgYFdyaXRhYmxlU2lnbmFsYCB0byBjcmVhdGUgYSBuZXcgb25lIHdob3NlIHJlYWRhYmxlIHZhbHVlIGlzIHRocm90dGxlZC5cclxuICpcclxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdm9pZHMgdXNpbmcgYGVmZmVjdGAgYnkgcGFpcmluZyBhIHRyaWdnZXIgc2lnbmFsIHdpdGggYW4gYHVudHJhY2tlZGBcclxuICogcmVhZCBvZiB0aGUgc291cmNlIHNpZ25hbCB0byBjb250cm9sIHdoZW4gdGhlIHRocm90dGxlZCB2YWx1ZSBpcyByZS1ldmFsdWF0ZWQuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHZhbHVlIHRoZSBzaWduYWwgaG9sZHMuXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgV3JpdGFibGVTaWduYWxgIHRvIHdyYXAuIFdyaXRlcyBhcmUgYXBwbGllZCB0byB0aGlzIHNpZ25hbCBpbW1lZGlhdGVseS5cclxuICogQHBhcmFtIG9wdCBPcHRpb25zIGZvciB0aHJvdHRsaW5nLCBpbmNsdWRpbmcgdGhyb3R0bGUgdGltZSBgbXNgIGFuZCBhbiBvcHRpb25hbCBgRGVzdHJveVJlZmAuXHJcbiAqIEByZXR1cm5zIEEgbmV3IGBUaHJvdHRsZWRTaWduYWw8VD5gIHdob3NlIHJlYWQgdmFsdWUgaXMgdGhyb3R0bGVkLiBUaGUgYC5vcmlnaW5hbGAgcHJvcGVydHlcclxuICogb2YgdGhlIHJldHVybmVkIHNpZ25hbCBpcyBhIHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBwcm92aWRlZCBgc291cmNlYCBzaWduYWwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IHF1ZXJ5ID0gdGhyb3R0bGVkKCcnLCB7IG1zOiA1MDAgfSk7XHJcbiAqIGVmZmVjdCgoKSA9PiBjb25zb2xlLmxvZygnVGhyb3R0bGVkIFF1ZXJ5OicsIHF1ZXJ5KCkpKTtcclxuICpcclxuICogcXVlcnkuc2V0KCdhJyk7XHJcbiAqIHF1ZXJ5LnNldCgnYicpO1xyXG4gKiBxdWVyeS5zZXQoJ2MnKTtcclxuICogLy8gV2l0aCBhIHRyYWlsaW5nLWVkZ2UgdGhyb3R0bGUsIHRoZSBmaW5hbCB2YWx1ZSAnYycgd291bGQgYmUgc2V0XHJcbiAqIC8vIGFmdGVyIHRoZSA1MDBtcyBjb29sZG93bi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0aHJvdHRsZTxUPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIG9wdD86IENyZWF0ZVRocm90dGxlZE9wdGlvbnM8VD4sXHJcbik6IFRocm90dGxlZFNpZ25hbDxUPiB7XHJcbiAgY29uc3QgbXMgPSBvcHQ/Lm1zID8/IDA7XHJcblxyXG4gIGNvbnN0IHRyaWdnZXIgPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBkZXN0cm95UmVmID1cclxuICAgICAgb3B0Py5kZXN0cm95UmVmID8/IGluamVjdChEZXN0cm95UmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICAgIGRlc3Ryb3lSZWY/Lm9uRGVzdHJveSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XHJcbiAgICB9KTtcclxuICB9IGNhdGNoIHtcclxuICAgIC8vIG5vdCBpbiBpbmplY3Rpb24gY29udGV4dCAmIG5vIGRlc3Ryb3lSZWYgcHJvdmlkZWQgb3B0aW5nIG91dCBvZiBjbGVhbnVwXHJcbiAgfVxyXG5cclxuICBjb25zdCB0cmlnZ2VyRm4gPSAodXBkYXRlU291cmNlQWN0aW9uOiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB1cGRhdGVTb3VyY2VBY3Rpb24oKTtcclxuICAgIGlmICh0aW1lb3V0KSByZXR1cm47XHJcblxyXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0cmlnZ2VyLnVwZGF0ZSgoYykgPT4gIWMpO1xyXG4gICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSwgbXMpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNldCA9ICh2YWx1ZTogVCkgPT4ge1xyXG4gICAgdHJpZ2dlckZuKCgpID0+IHNvdXJjZS5zZXQodmFsdWUpKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGUgPSAoZm46IChwcmV2OiBUKSA9PiBUKSA9PiB7XHJcbiAgICB0cmlnZ2VyRm4oKCkgPT4gc291cmNlLnVwZGF0ZShmbikpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHdyaXRhYmxlID0gdG9Xcml0YWJsZShcclxuICAgIGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgdHJpZ2dlcigpO1xyXG4gICAgICByZXR1cm4gdW50cmFja2VkKHNvdXJjZSk7XHJcbiAgICB9LCBvcHQpLFxyXG4gICAgc2V0LFxyXG4gICAgdXBkYXRlLFxyXG4gICkgYXMgVGhyb3R0bGVkU2lnbmFsPFQ+O1xyXG4gIHdyaXRhYmxlLm9yaWdpbmFsID0gc291cmNlO1xyXG5cclxuICByZXR1cm4gd3JpdGFibGU7XHJcbn1cclxuIl19","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, ElementRef, inject, isDevMode, PLATFORM_ID, } from '@angular/core';\nimport { throttled } from '../throttled';\n/**\n * Creates a read-only signal that tracks the mouse cursor's position.\n *\n * It can track mouse movements on a specific target (window, document, or element)\n * and optionally include touch movements. The coordinate space ('client' or 'page')\n * can also be configured.\n * The primitive is SSR-safe and automatically cleans up its event listeners.\n *\n * @param options Optional configuration for the sensor.\n * @returns A read-only `Signal<MousePosition>`. On the server, it returns a static\n * signal with `{ x: 0, y: 0 }`.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { mousePosition } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-mouse-tracker',\n * template: `<p>Mouse Position: X: {{ pos().x }}, Y: {{ pos().y }}</p>`\n * })\n * export class MouseTrackerComponent {\n * readonly pos = mousePosition({ coordinateSpace: 'page' });\n *\n * constructor() {\n * effect(() => {\n * console.log('Mouse moved to:', this.pos());\n * });\n * }\n * }\n * ```\n */\nexport function mousePosition(opt) {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const base = computed(() => ({\n x: 0,\n y: 0,\n }), {\n debugName: opt?.debugName ?? 'mousePosition',\n });\n base.unthrottled = base;\n return base;\n }\n const { target = window, coordinateSpace = 'client', touch = false, debugName = 'mousePosition', throttle = 100, } = opt ?? {};\n const eventTarget = target instanceof ElementRef ? target.nativeElement : target;\n if (!eventTarget) {\n if (isDevMode())\n console.warn('mousePosition: Target element not found.');\n const base = computed(() => ({\n x: 0,\n y: 0,\n }), {\n debugName,\n });\n base.unthrottled = base;\n return base;\n }\n const pos = throttled({ x: 0, y: 0 }, {\n ms: throttle,\n equal: (a, b) => a.x === b.x && a.y === b.y,\n debugName,\n });\n const updatePosition = (event) => {\n let x, y;\n if (event instanceof MouseEvent) {\n x = coordinateSpace === 'page' ? event.pageX : event.clientX;\n y = coordinateSpace === 'page' ? event.pageY : event.clientY;\n }\n else if (event.touches.length > 0) {\n const firstTouch = event.touches[0];\n x = coordinateSpace === 'page' ? firstTouch.pageX : firstTouch.clientX;\n y = coordinateSpace === 'page' ? firstTouch.pageY : firstTouch.clientY;\n }\n else {\n return;\n }\n pos.set({ x, y });\n };\n eventTarget.addEventListener('mousemove', updatePosition);\n if (touch) {\n eventTarget.addEventListener('touchmove', updatePosition);\n }\n inject(DestroyRef).onDestroy(() => {\n eventTarget.removeEventListener('mousemove', updatePosition);\n if (touch) {\n eventTarget.removeEventListener('touchmove', updatePosition);\n }\n });\n const base = pos.asReadonly();\n base.unthrottled = pos.original;\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2UtcG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy9tb3VzZS1wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEdBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXlEekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQTBCO0lBQ3RELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQ25CLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1NBQ0wsQ0FBQyxFQUNGO1lBQ0UsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLElBQUksZUFBZTtTQUM3QyxDQUM2QixDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLGVBQWUsR0FBRyxRQUFRLEVBQzFCLEtBQUssR0FBRyxLQUFLLEVBQ2IsU0FBUyxHQUFHLGVBQWUsRUFDM0IsUUFBUSxHQUFHLEdBQUcsR0FDZixHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFFZCxNQUFNLFdBQVcsR0FDZixNQUFNLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFL0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2pCLElBQUksU0FBUyxFQUFFO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBRTFFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FDbkIsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNMLENBQUMsRUFBRSxDQUFDO1lBQ0osQ0FBQyxFQUFFLENBQUM7U0FDTCxDQUFDLEVBQ0Y7WUFDRSxTQUFTO1NBQ1YsQ0FDNkIsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQ25CLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQ2Q7UUFDRSxFQUFFLEVBQUUsUUFBUTtRQUNaLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzNDLFNBQVM7S0FDVixDQUNGLENBQUM7SUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEtBQThCLEVBQUUsRUFBRTtRQUN4RCxJQUFJLENBQVMsRUFBRSxDQUFTLENBQUM7UUFFekIsSUFBSSxLQUFLLFlBQVksVUFBVSxFQUFFLENBQUM7WUFDaEMsQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDN0QsQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDL0QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQyxDQUFDLEdBQUcsZUFBZSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztZQUN2RSxDQUFDLEdBQUcsZUFBZSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUN6RSxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU87UUFDVCxDQUFDO1FBQ0QsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLENBQUMsQ0FBQztJQUVGLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsY0FBK0IsQ0FBQyxDQUFDO0lBQzNFLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixXQUFXLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGNBQStCLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsV0FBVyxDQUFDLG1CQUFtQixDQUM3QixXQUFXLEVBQ1gsY0FBK0IsQ0FDaEMsQ0FBQztRQUNGLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixXQUFXLENBQUMsbUJBQW1CLENBQzdCLFdBQVcsRUFDWCxjQUErQixDQUNoQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBaUMsQ0FBQztJQUM3RCxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUM7SUFDaEMsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBpc0Rldk1vZGUsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0aHJvdHRsZWQgfSBmcm9tICcuLi90aHJvdHRsZWQnO1xyXG5cclxudHlwZSBNb3VzZVBvc2l0aW9uID0ge1xyXG4gIHg6IG51bWJlcjtcclxuICB5OiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGBtb3VzZVBvc2l0aW9uYCBzZW5zb3IuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNb3VzZVBvc2l0aW9uT3B0aW9ucyA9IHtcclxuICAvKipcclxuICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgdG8gbGlzdGVuIGZvciBtb3VzZSBtb3ZlbWVudHMgb24uXHJcbiAgICogQ2FuIGJlIGB3aW5kb3dgLCBgZG9jdW1lbnRgLCBhbiBgSFRNTEVsZW1lbnRgLCBvciBhbiBgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5gLlxyXG4gICAqIEBkZWZhdWx0IHdpbmRvd1xyXG4gICAqL1xyXG4gIHRhcmdldD86IFdpbmRvdyB8IERvY3VtZW50IHwgSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhlIHJlcG9ydGVkIHBvc2l0aW9uLlxyXG4gICAqIC0gYCdjbGllbnQnYDogQ29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IChgY2xpZW50WGAsIGBjbGllbnRZYCkuXHJcbiAgICogLSBgJ3BhZ2UnYDogQ29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGVudGlyZSBkb2N1bWVudCAoYHBhZ2VYYCwgYHBhZ2VZYCkuXHJcbiAgICogQGRlZmF1bHQgJ2NsaWVudCdcclxuICAgKi9cclxuICBjb29yZGluYXRlU3BhY2U/OiAnY2xpZW50JyB8ICdwYWdlJztcclxuICAvKipcclxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZW5zb3Igd2lsbCBhbHNvIGxpc3RlbiB0byBgdG91Y2htb3ZlYCBldmVudHMgYW5kIHJlcG9ydFxyXG4gICAqIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZmlyc3QgdG91Y2ggcG9pbnQuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICB0b3VjaD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVidWcgbmFtZSBmb3IgdGhlIGludGVybmFsIHNpZ25hbC5cclxuICAgKi9cclxuICBkZWJ1Z05hbWU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIHRoZSB1cGRhdGVzLlxyXG4gICAqIEBkZWZhdWx0IDEwMFxyXG4gICAqL1xyXG4gIHRocm90dGxlPzogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB1c2VkIGZvciBzZXR0aW5nIHRoZSBzaW5jZSBzaWduYWxcclxuICovXHJcbnR5cGUgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsID0gU2lnbmFsPE1vdXNlUG9zaXRpb24+ICYge1xyXG4gIHVudGhyb3R0bGVkOiBTaWduYWw8TW91c2VQb3NpdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogQSBzcGVjaWFsaXplZCBTaWduYWwgdGhhdCB0cmFja3MgbW91c2UgcG9zaXRpb24gd2l0aGluIGFuIGVsZW1lbnQuXHJcbiAqIEl0J3MgYSB0aHJvdHRsZWQgc2lnbmFsIG9mIHRoZSBtb3VzZSBjb29yZGluYXRlcyB3aXRoIGFuIGF0dGFjaGVkIGB1bnRocm90dGxlZGAgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTW91c2VQb3NpdGlvblNpZ25hbCA9IFNpZ25hbDxNb3VzZVBvc2l0aW9uPiAmIHtcclxuICAvKiogQSBzaWduYWwgcHJvdmlkaW5nIHRoZSByYXcsIHVudGhyb3R0bGVkIG1vdXNlIHBvc2l0aW9uLiAqL1xyXG4gIHJlYWRvbmx5IHVudGhyb3R0bGVkOiBTaWduYWw8TW91c2VQb3NpdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWQtb25seSBzaWduYWwgdGhhdCB0cmFja3MgdGhlIG1vdXNlIGN1cnNvcidzIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBJdCBjYW4gdHJhY2sgbW91c2UgbW92ZW1lbnRzIG9uIGEgc3BlY2lmaWMgdGFyZ2V0ICh3aW5kb3csIGRvY3VtZW50LCBvciBlbGVtZW50KVxyXG4gKiBhbmQgb3B0aW9uYWxseSBpbmNsdWRlIHRvdWNoIG1vdmVtZW50cy4gVGhlIGNvb3JkaW5hdGUgc3BhY2UgKCdjbGllbnQnIG9yICdwYWdlJylcclxuICogY2FuIGFsc28gYmUgY29uZmlndXJlZC5cclxuICogVGhlIHByaW1pdGl2ZSBpcyBTU1Itc2FmZSBhbmQgYXV0b21hdGljYWxseSBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvci5cclxuICogQHJldHVybnMgQSByZWFkLW9ubHkgYFNpZ25hbDxNb3VzZVBvc2l0aW9uPmAuIE9uIHRoZSBzZXJ2ZXIsIGl0IHJldHVybnMgYSBzdGF0aWNcclxuICogc2lnbmFsIHdpdGggYHsgeDogMCwgeTogMCB9YC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgbW91c2VQb3NpdGlvbiB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtbW91c2UtdHJhY2tlcicsXHJcbiAqIHRlbXBsYXRlOiBgPHA+TW91c2UgUG9zaXRpb246IFg6IHt7IHBvcygpLnggfX0sIFk6IHt7IHBvcygpLnkgfX08L3A+YFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgTW91c2VUcmFja2VyQ29tcG9uZW50IHtcclxuICogcmVhZG9ubHkgcG9zID0gbW91c2VQb3NpdGlvbih7IGNvb3JkaW5hdGVTcGFjZTogJ3BhZ2UnIH0pO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ01vdXNlIG1vdmVkIHRvOicsIHRoaXMucG9zKCkpO1xyXG4gKiB9KTtcclxuICogfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1vdXNlUG9zaXRpb24ob3B0PzogTW91c2VQb3NpdGlvbk9wdGlvbnMpOiBNb3VzZVBvc2l0aW9uU2lnbmFsIHtcclxuICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSkge1xyXG4gICAgY29uc3QgYmFzZSA9IGNvbXB1dGVkKFxyXG4gICAgICAoKSA9PiAoe1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgfSksXHJcbiAgICAgIHtcclxuICAgICAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lID8/ICdtb3VzZVBvc2l0aW9uJyxcclxuICAgICAgfSxcclxuICAgICkgYXMgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG4gICAgYmFzZS51bnRocm90dGxlZCA9IGJhc2U7XHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHRhcmdldCA9IHdpbmRvdyxcclxuICAgIGNvb3JkaW5hdGVTcGFjZSA9ICdjbGllbnQnLFxyXG4gICAgdG91Y2ggPSBmYWxzZSxcclxuICAgIGRlYnVnTmFtZSA9ICdtb3VzZVBvc2l0aW9uJyxcclxuICAgIHRocm90dGxlID0gMTAwLFxyXG4gIH0gPSBvcHQgPz8ge307XHJcblxyXG4gIGNvbnN0IGV2ZW50VGFyZ2V0ID1cclxuICAgIHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyB0YXJnZXQubmF0aXZlRWxlbWVudCA6IHRhcmdldDtcclxuXHJcbiAgaWYgKCFldmVudFRhcmdldCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ21vdXNlUG9zaXRpb246IFRhcmdldCBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICB9KSxcclxuICAgICAge1xyXG4gICAgICAgIGRlYnVnTmFtZSxcclxuICAgICAgfSxcclxuICAgICkgYXMgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG4gICAgYmFzZS51bnRocm90dGxlZCA9IGJhc2U7XHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHBvcyA9IHRocm90dGxlZChcclxuICAgIHsgeDogMCwgeTogMCB9LFxyXG4gICAge1xyXG4gICAgICBtczogdGhyb3R0bGUsXHJcbiAgICAgIGVxdWFsOiAoYSwgYikgPT4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnksXHJcbiAgICAgIGRlYnVnTmFtZSxcclxuICAgIH0sXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgdXBkYXRlUG9zaXRpb24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XHJcbiAgICBsZXQgeDogbnVtYmVyLCB5OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xyXG4gICAgICB4ID0gY29vcmRpbmF0ZVNwYWNlID09PSAncGFnZScgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgIHkgPSBjb29yZGluYXRlU3BhY2UgPT09ICdwYWdlJyA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0VG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgICB4ID0gY29vcmRpbmF0ZVNwYWNlID09PSAncGFnZScgPyBmaXJzdFRvdWNoLnBhZ2VYIDogZmlyc3RUb3VjaC5jbGllbnRYO1xyXG4gICAgICB5ID0gY29vcmRpbmF0ZVNwYWNlID09PSAncGFnZScgPyBmaXJzdFRvdWNoLnBhZ2VZIDogZmlyc3RUb3VjaC5jbGllbnRZO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcG9zLnNldCh7IHgsIHkgfSk7XHJcbiAgfTtcclxuXHJcbiAgZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdXBkYXRlUG9zaXRpb24gYXMgRXZlbnRMaXN0ZW5lcik7XHJcbiAgaWYgKHRvdWNoKSB7XHJcbiAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB1cGRhdGVQb3NpdGlvbiBhcyBFdmVudExpc3RlbmVyKTtcclxuICB9XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ21vdXNlbW92ZScsXHJcbiAgICAgIHVwZGF0ZVBvc2l0aW9uIGFzIEV2ZW50TGlzdGVuZXIsXHJcbiAgICApO1xyXG4gICAgaWYgKHRvdWNoKSB7XHJcbiAgICAgIGV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ3RvdWNobW92ZScsXHJcbiAgICAgICAgdXBkYXRlUG9zaXRpb24gYXMgRXZlbnRMaXN0ZW5lcixcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgY29uc3QgYmFzZSA9IHBvcy5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG4gIGJhc2UudW50aHJvdHRsZWQgPSBwb3Mub3JpZ2luYWw7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, signal, } from '@angular/core';\nconst serverDate = new Date();\n/**\n * Creates a read-only signal that tracks the browser's online status.\n *\n * The main signal returns a boolean (`true` for online, `false` for offline).\n * An additional `since` signal is attached, tracking when the status last changed.\n * It's SSR-safe and automatically cleans up its event listeners.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A `NetworkStatusSignal` instance.\n */\nexport function networkStatus(debugName = 'networkStatus') {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const sig = computed(() => true, {\n debugName,\n });\n sig.since = computed(() => serverDate, ...(ngDevMode ? [{ debugName: \"since\" }] : []));\n return sig;\n }\n const state = signal(navigator.onLine, ...(ngDevMode ? [{ debugName: \"state\", debugName }] : [{\n debugName,\n }]));\n const since = signal(new Date(), ...(ngDevMode ? [{ debugName: \"since\" }] : []));\n const goOnline = () => {\n state.set(true);\n since.set(new Date());\n };\n const goOffline = () => {\n state.set(false);\n since.set(new Date());\n };\n window.addEventListener('online', goOnline);\n window.addEventListener('offline', goOffline);\n inject(DestroyRef).onDestroy(() => {\n window.removeEventListener('online', goOnline);\n window.removeEventListener('offline', goOffline);\n });\n const sig = state.asReadonly();\n sig.since = since.asReadonly();\n return sig;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1zdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy9uZXR3b3JrLXN0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUVYLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQWtCdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUU5Qjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixTQUFTLEdBQUcsZUFBZTtJQUUzQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtZQUMvQixTQUFTO1NBQ1YsQ0FBZ0MsQ0FBQztRQUNsQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLGlEQUFDLENBQUM7UUFDdkMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLHlDQUNuQyxTQUFTLE9BRDRCO1lBQ3JDLFNBQVM7U0FDVixHQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsaURBQUMsQ0FBQztJQUVqQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7UUFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBaUMsQ0FBQztJQUM5RCxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUUvQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICBQTEFURk9STV9JRCxcclxuICBTaWduYWwsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB1c2VkIGZvciBzZXR0aW5nIHRoZSBzaW5jZSBzaWduYWxcclxuICovXHJcbnR5cGUgSW50ZXJuYWxOZXR3b3JrU3RhdHVzU2lnbmFsID0gU2lnbmFsPGJvb2xlYW4+ICYge1xyXG4gIHNpbmNlOiBTaWduYWw8RGF0ZT47XHJcbn07XHJcblxyXG4vKipcclxuICogQSBzcGVjaWFsaXplZCBTaWduYWwgdGhhdCB0cmFja3MgbmV0d29yayBzdGF0dXMuXHJcbiAqIEl0J3MgYSBib29sZWFuIHNpZ25hbCB3aXRoIGFuIGF0dGFjaGVkIGBzaW5jZWAgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTmV0d29ya1N0YXR1c1NpZ25hbCA9IFNpZ25hbDxib29sZWFuPiAmIHtcclxuICAvKiogQSBzaWduYWwgdHJhY2tpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBzdGF0dXMgY2hhbmdlLiAqL1xyXG4gIHJlYWRvbmx5IHNpbmNlOiBTaWduYWw8RGF0ZT47XHJcbn07XHJcblxyXG5jb25zdCBzZXJ2ZXJEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgYnJvd3NlcidzIG9ubGluZSBzdGF0dXMuXHJcbiAqXHJcbiAqIFRoZSBtYWluIHNpZ25hbCByZXR1cm5zIGEgYm9vbGVhbiAoYHRydWVgIGZvciBvbmxpbmUsIGBmYWxzZWAgZm9yIG9mZmxpbmUpLlxyXG4gKiBBbiBhZGRpdGlvbmFsIGBzaW5jZWAgc2lnbmFsIGlzIGF0dGFjaGVkLCB0cmFja2luZyB3aGVuIHRoZSBzdGF0dXMgbGFzdCBjaGFuZ2VkLlxyXG4gKiBJdCdzIFNTUi1zYWZlIGFuZCBhdXRvbWF0aWNhbGx5IGNsZWFucyB1cCBpdHMgZXZlbnQgbGlzdGVuZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgYE5ldHdvcmtTdGF0dXNTaWduYWxgIGluc3RhbmNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtTdGF0dXMoXHJcbiAgZGVidWdOYW1lID0gJ25ldHdvcmtTdGF0dXMnLFxyXG4pOiBOZXR3b3JrU3RhdHVzU2lnbmFsIHtcclxuICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSkge1xyXG4gICAgY29uc3Qgc2lnID0gY29tcHV0ZWQoKCkgPT4gdHJ1ZSwge1xyXG4gICAgICBkZWJ1Z05hbWUsXHJcbiAgICB9KSBhcyBJbnRlcm5hbE5ldHdvcmtTdGF0dXNTaWduYWw7XHJcbiAgICBzaWcuc2luY2UgPSBjb21wdXRlZCgoKSA9PiBzZXJ2ZXJEYXRlKTtcclxuICAgIHJldHVybiBzaWc7XHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZSA9IHNpZ25hbChuYXZpZ2F0b3Iub25MaW5lLCB7XHJcbiAgICBkZWJ1Z05hbWUsXHJcbiAgfSk7XHJcbiAgY29uc3Qgc2luY2UgPSBzaWduYWwobmV3IERhdGUoKSk7XHJcblxyXG4gIGNvbnN0IGdvT25saW5lID0gKCkgPT4ge1xyXG4gICAgc3RhdGUuc2V0KHRydWUpO1xyXG4gICAgc2luY2Uuc2V0KG5ldyBEYXRlKCkpO1xyXG4gIH07XHJcbiAgY29uc3QgZ29PZmZsaW5lID0gKCkgPT4ge1xyXG4gICAgc3RhdGUuc2V0KGZhbHNlKTtcclxuICAgIHNpbmNlLnNldChuZXcgRGF0ZSgpKTtcclxuICB9O1xyXG5cclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgZ29PbmxpbmUpO1xyXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgZ29PZmZsaW5lKTtcclxuXHJcbiAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgZ29PbmxpbmUpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBnb09mZmxpbmUpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBzaWcgPSBzdGF0ZS5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxOZXR3b3JrU3RhdHVzU2lnbmFsO1xyXG4gIHNpZy5zaW5jZSA9IHNpbmNlLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcmV0dXJuIHNpZztcclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, signal, } from '@angular/core';\n/**\n * Creates a read-only signal that tracks the page's visibility state.\n *\n * It uses the browser's Page Visibility API to reactively report if the\n * current document is `'visible'`, `'hidden'`, or in another state.\n * The primitive is SSR-safe and automatically cleans up its event listeners\n * when the creating context is destroyed.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<DocumentVisibilityState>`. On the server,\n * it returns a static signal with a value of `'visible'`.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { pageVisibility } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-visibility-tracker',\n * template: `<p>Page is currently: {{ visibilityState() }}</p>`\n * })\n * export class VisibilityTrackerComponent {\n * readonly visibilityState = pageVisibility();\n *\n * constructor() {\n * effect(() => {\n * if (this.visibilityState() === 'hidden') {\n * console.log('Page is hidden, pausing expensive animations...');\n * } else {\n * console.log('Page is visible, resuming activity.');\n * }\n * });\n * }\n * }\n * ```\n */\nexport function pageVisibility(debugName = 'pageVisibility') {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n return computed(() => 'visible', { debugName });\n }\n const visibility = signal(document.visibilityState, ...(ngDevMode ? [{ debugName: \"visibility\", debugName }] : [{ debugName }]));\n const onVisibilityChange = () => visibility.set(document.visibilityState);\n document.addEventListener('visibilitychange', onVisibilityChange);\n inject(DestroyRef).onDestroy(() => document.removeEventListener('visibilitychange', onVisibilityChange));\n return visibility.asReadonly();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS12aXNpYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3NlbnNvcnMvcGFnZS12aXNpYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLEVBRVgsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFNBQVMsR0FBRyxnQkFBZ0I7SUFFNUIsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSw4Q0FBSSxTQUFTLE9BQVgsRUFBRSxTQUFTLEVBQUUsR0FBQyxDQUFDO0lBRW5FLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFMUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFFbEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQ3JFLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgcGFnZSdzIHZpc2liaWxpdHkgc3RhdGUuXHJcbiAqXHJcbiAqIEl0IHVzZXMgdGhlIGJyb3dzZXIncyBQYWdlIFZpc2liaWxpdHkgQVBJIHRvIHJlYWN0aXZlbHkgcmVwb3J0IGlmIHRoZVxyXG4gKiBjdXJyZW50IGRvY3VtZW50IGlzIGAndmlzaWJsZSdgLCBgJ2hpZGRlbidgLCBvciBpbiBhbm90aGVyIHN0YXRlLlxyXG4gKiBUaGUgcHJpbWl0aXZlIGlzIFNTUi1zYWZlIGFuZCBhdXRvbWF0aWNhbGx5IGNsZWFucyB1cCBpdHMgZXZlbnQgbGlzdGVuZXJzXHJcbiAqIHdoZW4gdGhlIGNyZWF0aW5nIGNvbnRleHQgaXMgZGVzdHJveWVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGBTaWduYWw8RG9jdW1lbnRWaXNpYmlsaXR5U3RhdGU+YC4gT24gdGhlIHNlcnZlcixcclxuICogaXQgcmV0dXJucyBhIHN0YXRpYyBzaWduYWwgd2l0aCBhIHZhbHVlIG9mIGAndmlzaWJsZSdgLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyBwYWdlVmlzaWJpbGl0eSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtdmlzaWJpbGl0eS10cmFja2VyJyxcclxuICogdGVtcGxhdGU6IGA8cD5QYWdlIGlzIGN1cnJlbnRseToge3sgdmlzaWJpbGl0eVN0YXRlKCkgfX08L3A+YFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgVmlzaWJpbGl0eVRyYWNrZXJDb21wb25lbnQge1xyXG4gKiByZWFkb25seSB2aXNpYmlsaXR5U3RhdGUgPSBwYWdlVmlzaWJpbGl0eSgpO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogaWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlKCkgPT09ICdoaWRkZW4nKSB7XHJcbiAqIGNvbnNvbGUubG9nKCdQYWdlIGlzIGhpZGRlbiwgcGF1c2luZyBleHBlbnNpdmUgYW5pbWF0aW9ucy4uLicpO1xyXG4gKiB9IGVsc2Uge1xyXG4gKiBjb25zb2xlLmxvZygnUGFnZSBpcyB2aXNpYmxlLCByZXN1bWluZyBhY3Rpdml0eS4nKTtcclxuICogfVxyXG4gKiB9KTtcclxuICogfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2VWaXNpYmlsaXR5KFxyXG4gIGRlYnVnTmFtZSA9ICdwYWdlVmlzaWJpbGl0eScsXHJcbik6IFNpZ25hbDxEb2N1bWVudFZpc2liaWxpdHlTdGF0ZT4ge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKSB7XHJcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gJ3Zpc2libGUnLCB7IGRlYnVnTmFtZSB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBzaWduYWwoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLCB7IGRlYnVnTmFtZSB9KTtcclxuXHJcbiAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4gdmlzaWJpbGl0eS5zZXQoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcclxuXHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT5cclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UpLFxyXG4gICk7XHJcblxyXG4gIHJldHVybiB2aXNpYmlsaXR5LmFzUmVhZG9ubHkoKTtcclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common'; // Corrected import\nimport { computed, DestroyRef, ElementRef, inject, PLATFORM_ID, // Used for SSR fallback\n } from '@angular/core';\nimport { throttled } from '../throttled';\n/**\n * Creates a read-only signal that tracks the scroll position (x, y) of the window\n * or a specified HTML element.\n *\n * Updates are throttled by default to optimize performance. An `unthrottled`\n * property is available on the returned signal for direct access to raw updates.\n * The primitive is SSR-safe and automatically cleans up its event listeners.\n *\n * @param options Optional configuration for the scroll sensor.\n * @returns A `ScrollPositionSignal`. On the server, it returns a static\n * signal with `{ x: 0, y: 0 }`.\n *\n * @example\n * ```ts\n * import { Component, effect, ElementRef, viewChild } from '@angular/core';\n * import { scrollPosition } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-scroll-tracker',\n * template: `\n * <p>Window Scroll: X: {{ windowScroll().x }}, Y: {{ windowScroll().y }}</p>\n * <div #scrollableDiv style=\"height: 200px; width: 200px; overflow: auto; border: 1px solid black;\">\n * <div style=\"height: 400px; width: 400px;\">Scroll me!</div>\n * </div>\n * @if (divScroll()) {\n * <p>Div Scroll: X: {{ divScroll().x }}, Y: {{ divScroll().y }}</p>\n * }\n * `\n * })\n * export class ScrollTrackerComponent {\n * readonly windowScroll = scrollPosition(); // Defaults to window\n * readonly scrollableDiv = viewChild<ElementRef<HTMLDivElement>>('scrollableDiv');\n * readonly divScroll = scrollPosition({ target: this.scrollableDiv() }); // Example with element target\n *\n * constructor() {\n * effect(() => {\n * console.log('Window scrolled to:', this.windowScroll());\n * if (this.divScroll()) {\n * console.log('Div scrolled to:', this.divScroll());\n * }\n * });\n * }\n * }\n * ```\n */\nexport function scrollPosition(opt) {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const base = computed(() => ({\n x: 0,\n y: 0,\n }), {\n debugName: opt?.debugName ?? 'scrollPosition',\n });\n base.unthrottled = base;\n return base;\n }\n const { target = window, throttle = 100, debugName = 'scrollPosition', } = opt || {};\n let element;\n let getScrollPosition;\n if (target instanceof Window) {\n element = target;\n getScrollPosition = () => {\n return { x: target.scrollX, y: target.scrollY };\n };\n }\n else if (target instanceof ElementRef) {\n element = target.nativeElement;\n getScrollPosition = () => {\n return {\n x: target.nativeElement.scrollLeft,\n y: target.nativeElement.scrollTop,\n };\n };\n }\n else {\n element = target;\n getScrollPosition = () => {\n return {\n x: target.scrollLeft,\n y: target.scrollTop,\n };\n };\n }\n const state = throttled(getScrollPosition(), {\n debugName,\n equal: (a, b) => a.x === b.x && a.y === b.y,\n ms: throttle,\n });\n const onScroll = () => state.set(getScrollPosition());\n element.addEventListener('scroll', onScroll, { passive: true });\n inject(DestroyRef).onDestroy(() => element.removeEventListener('scroll', onScroll));\n const base = state.asReadonly();\n base.unthrottled = state.original;\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3NlbnNvcnMvc2Nyb2xsLXBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDLENBQUMsbUJBQW1CO0FBQ3ZFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUFFLHdCQUF3QjtFQUV0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBZ0R6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUEyQjtJQUUzQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUNuQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNMLENBQUMsRUFDRjtZQUNFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLGdCQUFnQjtTQUM5QyxDQUM4QixDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLFFBQVEsR0FBRyxHQUFHLEVBQ2QsU0FBUyxHQUFHLGdCQUFnQixHQUM3QixHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFFZCxJQUFJLE9BQTZCLENBQUM7SUFFbEMsSUFBSSxpQkFBdUMsQ0FBQztJQUU1QyxJQUFJLE1BQU0sWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRWpCLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxNQUFNLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDeEMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDL0IsaUJBQWlCLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLE9BQU87Z0JBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVTtnQkFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUzthQUNsQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtZQUN2QixPQUFPO2dCQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDcEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2FBQ3BCLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFpQixpQkFBaUIsRUFBRSxFQUFFO1FBQzNELFNBQVM7UUFDVCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxFQUFFLEVBQUUsUUFBUTtLQUNiLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFaEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FDaEQsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQWtDLENBQUM7SUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nOyAvLyBDb3JyZWN0ZWQgaW1wb3J0XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBQTEFURk9STV9JRCwgLy8gVXNlZCBmb3IgU1NSIGZhbGxiYWNrXHJcbiAgdHlwZSBTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRocm90dGxlZCB9IGZyb20gJy4uL3Rocm90dGxlZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgc2Nyb2xsIHBvc2l0aW9uLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2Nyb2xsUG9zaXRpb24gPSB7XHJcbiAgLyoqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiAocGl4ZWxzIGZyb20gdGhlIGxlZnQpLiAqL1xyXG4gIHJlYWRvbmx5IHg6IG51bWJlcjtcclxuICAvKiogVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiAocGl4ZWxzIGZyb20gdGhlIHRvcCkuICovXHJcbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBgc2Nyb2xsUG9zaXRpb25gIHNlbnNvci5cclxuICovXHJcbmV4cG9ydCB0eXBlIFNjcm9sbFBvc2l0aW9uT3B0aW9ucyA9IHtcclxuICAvKipcclxuICAgKiBUaGUgdGFyZ2V0IHRvIGxpc3RlbiBmb3Igc2Nyb2xsIGV2ZW50cyBvbi5cclxuICAgKiBDYW4gYmUgYHdpbmRvd2AgKGZvciBwYWdlIHNjcm9sbCkgb3IgYW4gYEhUTUxFbGVtZW50YC9gRWxlbWVudFJlZjxIVE1MRWxlbWVudD5gLlxyXG4gICAqIEBkZWZhdWx0IHdpbmRvd1xyXG4gICAqL1xyXG4gIHRhcmdldD86IFdpbmRvdyB8IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIHRoZSB1cGRhdGVzLlxyXG4gICAqIFNjcm9sbCBldmVudHMgY2FuIGZpcmUgdmVyeSByYXBpZGx5LlxyXG4gICAqIEBkZWZhdWx0IDEwMCAvLyBBIGNvbW1vbiBkZWZhdWx0IGZvciBzY3JvbGwgdGhyb3R0bGluZ1xyXG4gICAqL1xyXG4gIHRocm90dGxlPzogbnVtYmVyO1xyXG4gIC8qKiBPcHRpb25hbCBkZWJ1ZyBuYW1lIGZvciB0aGUgaW50ZXJuYWwgc2lnbmFsLiAqL1xyXG4gIGRlYnVnTmFtZT86IHN0cmluZztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgdXNlZCBmb3Igc2V0dGluZyB0aGUgdW50aHJvdHRsZWQgc2lnbmFsXHJcbiAqL1xyXG50eXBlIEludGVybmFsU2Nyb2xsUG9zaXRpb25TaWduYWwgPSBTaWduYWw8U2Nyb2xsUG9zaXRpb24+ICYge1xyXG4gIHVudGhyb3R0bGVkOiBTaWduYWw8U2Nyb2xsUG9zaXRpb24+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEEgc3BlY2lhbGl6ZWQgU2lnbmFsIHRoYXQgdHJhY2tzIHNjcm9sbCBwb3NpdGlvbi5cclxuICogSXQncyBhIHRocm90dGxlZCBzaWduYWwgb2YgdGhlIHNjcm9sbCBjb29yZGluYXRlcyB3aXRoIGFuIGF0dGFjaGVkIGB1bnRocm90dGxlZGAgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2Nyb2xsUG9zaXRpb25TaWduYWwgPSBTaWduYWw8U2Nyb2xsUG9zaXRpb24+ICYge1xyXG4gIC8qKiBBIHNpZ25hbCBwcm92aWRpbmcgdGhlIHJhdywgdW50aHJvdHRsZWQgc2Nyb2xsIHBvc2l0aW9uLiAqL1xyXG4gIHJlYWRvbmx5IHVudGhyb3R0bGVkOiBTaWduYWw8U2Nyb2xsUG9zaXRpb24+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBzY3JvbGwgcG9zaXRpb24gKHgsIHkpIG9mIHRoZSB3aW5kb3dcclxuICogb3IgYSBzcGVjaWZpZWQgSFRNTCBlbGVtZW50LlxyXG4gKlxyXG4gKiBVcGRhdGVzIGFyZSB0aHJvdHRsZWQgYnkgZGVmYXVsdCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZS4gQW4gYHVudGhyb3R0bGVkYFxyXG4gKiBwcm9wZXJ0eSBpcyBhdmFpbGFibGUgb24gdGhlIHJldHVybmVkIHNpZ25hbCBmb3IgZGlyZWN0IGFjY2VzcyB0byByYXcgdXBkYXRlcy5cclxuICogVGhlIHByaW1pdGl2ZSBpcyBTU1Itc2FmZSBhbmQgYXV0b21hdGljYWxseSBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNjcm9sbCBzZW5zb3IuXHJcbiAqIEByZXR1cm5zIEEgYFNjcm9sbFBvc2l0aW9uU2lnbmFsYC4gT24gdGhlIHNlcnZlciwgaXQgcmV0dXJucyBhIHN0YXRpY1xyXG4gKiBzaWduYWwgd2l0aCBgeyB4OiAwLCB5OiAwIH1gLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbiAqIGltcG9ydCB7IHNjcm9sbFBvc2l0aW9uIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbiAqXHJcbiAqIEBDb21wb25lbnQoe1xyXG4gKiBzZWxlY3RvcjogJ2FwcC1zY3JvbGwtdHJhY2tlcicsXHJcbiAqIHRlbXBsYXRlOiBgXHJcbiAqIDxwPldpbmRvdyBTY3JvbGw6IFg6IHt7IHdpbmRvd1Njcm9sbCgpLnggfX0sIFk6IHt7IHdpbmRvd1Njcm9sbCgpLnkgfX08L3A+XHJcbiAqIDxkaXYgI3Njcm9sbGFibGVEaXYgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4OyB3aWR0aDogMjAwcHg7IG92ZXJmbG93OiBhdXRvOyBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcIj5cclxuICogPGRpdiBzdHlsZT1cImhlaWdodDogNDAwcHg7IHdpZHRoOiA0MDBweDtcIj5TY3JvbGwgbWUhPC9kaXY+XHJcbiAqIDwvZGl2PlxyXG4gKiBAaWYgKGRpdlNjcm9sbCgpKSB7XHJcbiAqIDxwPkRpdiBTY3JvbGw6IFg6IHt7IGRpdlNjcm9sbCgpLnggfX0sIFk6IHt7IGRpdlNjcm9sbCgpLnkgfX08L3A+XHJcbiAqIH1cclxuICogYFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgU2Nyb2xsVHJhY2tlckNvbXBvbmVudCB7XHJcbiAqIHJlYWRvbmx5IHdpbmRvd1Njcm9sbCA9IHNjcm9sbFBvc2l0aW9uKCk7IC8vIERlZmF1bHRzIHRvIHdpbmRvd1xyXG4gKiByZWFkb25seSBzY3JvbGxhYmxlRGl2ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+Pignc2Nyb2xsYWJsZURpdicpO1xyXG4gKiByZWFkb25seSBkaXZTY3JvbGwgPSBzY3JvbGxQb3NpdGlvbih7IHRhcmdldDogdGhpcy5zY3JvbGxhYmxlRGl2KCkgfSk7IC8vIEV4YW1wbGUgd2l0aCBlbGVtZW50IHRhcmdldFxyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ1dpbmRvdyBzY3JvbGxlZCB0bzonLCB0aGlzLndpbmRvd1Njcm9sbCgpKTtcclxuICogaWYgKHRoaXMuZGl2U2Nyb2xsKCkpIHtcclxuICogY29uc29sZS5sb2coJ0RpdiBzY3JvbGxlZCB0bzonLCB0aGlzLmRpdlNjcm9sbCgpKTtcclxuICogfVxyXG4gKiB9KTtcclxuICogfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFBvc2l0aW9uKFxyXG4gIG9wdD86IFNjcm9sbFBvc2l0aW9uT3B0aW9ucyxcclxuKTogU2Nyb2xsUG9zaXRpb25TaWduYWwge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKSB7XHJcbiAgICBjb25zdCBiYXNlID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICB9KSxcclxuICAgICAge1xyXG4gICAgICAgIGRlYnVnTmFtZTogb3B0Py5kZWJ1Z05hbWUgPz8gJ3Njcm9sbFBvc2l0aW9uJyxcclxuICAgICAgfSxcclxuICAgICkgYXMgSW50ZXJuYWxTY3JvbGxQb3NpdGlvblNpZ25hbDtcclxuICAgIGJhc2UudW50aHJvdHRsZWQgPSBiYXNlO1xyXG4gICAgcmV0dXJuIGJhc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdCB7XHJcbiAgICB0YXJnZXQgPSB3aW5kb3csXHJcbiAgICB0aHJvdHRsZSA9IDEwMCxcclxuICAgIGRlYnVnTmFtZSA9ICdzY3JvbGxQb3NpdGlvbicsXHJcbiAgfSA9IG9wdCB8fCB7fTtcclxuXHJcbiAgbGV0IGVsZW1lbnQ6IFdpbmRvdyB8IEhUTUxFbGVtZW50O1xyXG5cclxuICBsZXQgZ2V0U2Nyb2xsUG9zaXRpb246ICgpID0+IFNjcm9sbFBvc2l0aW9uO1xyXG5cclxuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgV2luZG93KSB7XHJcbiAgICBlbGVtZW50ID0gdGFyZ2V0O1xyXG5cclxuICAgIGdldFNjcm9sbFBvc2l0aW9uID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4geyB4OiB0YXJnZXQuc2Nyb2xsWCwgeTogdGFyZ2V0LnNjcm9sbFkgfTtcclxuICAgIH07XHJcbiAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XHJcbiAgICBlbGVtZW50ID0gdGFyZ2V0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBnZXRTY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiB0YXJnZXQubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0LFxyXG4gICAgICAgIHk6IHRhcmdldC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGVsZW1lbnQgPSB0YXJnZXQ7XHJcbiAgICBnZXRTY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiB0YXJnZXQuc2Nyb2xsTGVmdCxcclxuICAgICAgICB5OiB0YXJnZXQuc2Nyb2xsVG9wLFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHN0YXRlID0gdGhyb3R0bGVkPFNjcm9sbFBvc2l0aW9uPihnZXRTY3JvbGxQb3NpdGlvbigpLCB7XHJcbiAgICBkZWJ1Z05hbWUsXHJcbiAgICBlcXVhbDogKGEsIGIpID0+IGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55LFxyXG4gICAgbXM6IHRocm90dGxlLFxyXG4gIH0pO1xyXG5cclxuICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHN0YXRlLnNldChnZXRTY3JvbGxQb3NpdGlvbigpKTtcclxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT5cclxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpLFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBzdGF0ZS5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxTY3JvbGxQb3NpdGlvblNpZ25hbDtcclxuICBiYXNlLnVudGhyb3R0bGVkID0gc3RhdGUub3JpZ2luYWw7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, } from '@angular/core';\nimport { throttled } from '../throttled';\n/**\n * Creates a read-only signal that tracks the browser window's inner dimensions (width and height).\n *\n * Updates are throttled by default (100ms) to optimize performance during resize events.\n * An `unthrottled` property is available on the returned signal for direct access to raw updates.\n * The primitive is SSR-safe (returns a default size on the server) and automatically\n * cleans up its event listeners.\n *\n * @param opt Optional configuration, including `throttle` (ms) and `debugName`.\n * @returns A `WindowSizeSignal` (a `Signal<WindowSize>` with an `unthrottled` property).\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { windowSize } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-responsive-header',\n * template: `\n * <header>\n * Current Window Size: {{ size().width }}px x {{ size().height }}px\n * @if (isMobile()) {\n * <p>Mobile Menu</p>\n * } @else {\n * <p>Desktop Menu</p>\n * }\n * </header>\n * `\n * })\n * export class ResponsiveHeaderComponent {\n * readonly size = windowSize();\n * readonly isMobile = computed(() => this.size().width < 768);\n *\n * constructor() {\n * effect(() => {\n * console.log('Window resized to:', this.size());\n * });\n * }\n * }\n * ```\n */\nexport function windowSize(opt) {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const base = computed(() => ({\n width: 1024,\n height: 768,\n }), { debugName: opt?.debugName ?? 'windowSize' });\n base.unthrottled = base;\n return base;\n }\n const sizeSignal = throttled({ width: window.innerWidth, height: window.innerHeight }, {\n debugName: opt?.debugName ?? 'windowSize',\n equal: (a, b) => a.width === b.width && a.height === b.height,\n ms: opt?.throttle ?? 100,\n });\n const onResize = () => {\n sizeSignal.set({ width: window.innerWidth, height: window.innerHeight });\n };\n window.addEventListener('resize', onResize);\n inject(DestroyRef).onDestroy(() => {\n window.removeEventListener('resize', onResize);\n });\n const base = sizeSignal.asReadonly();\n base.unthrottled = sizeSignal.original;\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy93aW5kb3ctc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0Q3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUF1QjtJQUNoRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUNuQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ0wsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsR0FBRztTQUNaLENBQUMsRUFDRixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLFlBQVksRUFBRSxDQUNsQixDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FDMUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUN4RDtRQUNFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLFlBQVk7UUFDekMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFDN0QsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBRztLQUN6QixDQUNGLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxFQUE4QixDQUFDO0lBQ2pFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICBQTEFURk9STV9JRCxcclxuICBTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRocm90dGxlZCB9IGZyb20gJy4uL3Rocm90dGxlZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgd2luZG93LlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgV2luZG93U2l6ZSA9IHtcclxuICAvKiogVGhlIGN1cnJlbnQgaW5uZXIgd2lkdGggb2YgdGhlIHdpbmRvdyBpbiBwaXhlbHMuICovXHJcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcclxuICAvKiogVGhlIGN1cnJlbnQgaW5uZXIgaGVpZ2h0IG9mIHRoZSB3aW5kb3cgaW4gcGl4ZWxzLiAqL1xyXG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBgbW91c2VQb3NpdGlvbmAgc2Vuc29yLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgV2luZG93U2l6ZU9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVidWcgbmFtZSBmb3IgdGhlIGludGVybmFsIHNpZ25hbC5cclxuICAgKi9cclxuICBkZWJ1Z05hbWU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIHRoZSB1cGRhdGVzLlxyXG4gICAqIEBkZWZhdWx0IDEwMFxyXG4gICAqL1xyXG4gIHRocm90dGxlPzogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB1c2VkIGZvciBzZXR0aW5nIHRoZSBzaW5jZSBzaWduYWxcclxuICovXHJcbnR5cGUgSW50ZXJuYWxXaW5kb3dTaXplU2lnbmFsID0gU2lnbmFsPFdpbmRvd1NpemU+ICYge1xyXG4gIHVudGhyb3R0bGVkOiBTaWduYWw8V2luZG93U2l6ZT47XHJcbn07XHJcblxyXG4vKipcclxuICogQSBzcGVjaWFsaXplZCBTaWduYWwgdGhhdCB0cmFja3Mgd2luZG93IHNpemUuXHJcbiAqIEl0J3MgYSB0aHJvdHRsZWQgc2lnbmFsIG9mIHRoZSB3aW5kb3cuaW5uZXJIZWlnaHQvaW5uZXJXaWR0aCBwcm9wZXJ0aWVzXHJcbiAqIHdpdGggYW4gYXR0YWNoZWQgYHVudGhyb3R0bGVkYCBzaWduYWwuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBXaW5kb3dTaXplU2lnbmFsID0gU2lnbmFsPFdpbmRvd1NpemU+ICYge1xyXG4gIC8qKiBBIHNpZ25hbCBwcm92aWRpbmcgdGhlIHJhdywgdW50aHJvdHRsZWQgd2luZG93IHNpemUuICovXHJcbiAgcmVhZG9ubHkgdW50aHJvdHRsZWQ6IFNpZ25hbDxXaW5kb3dTaXplPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgYnJvd3NlciB3aW5kb3cncyBpbm5lciBkaW1lbnNpb25zICh3aWR0aCBhbmQgaGVpZ2h0KS5cclxuICpcclxuICogVXBkYXRlcyBhcmUgdGhyb3R0bGVkIGJ5IGRlZmF1bHQgKDEwMG1zKSB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBkdXJpbmcgcmVzaXplIGV2ZW50cy5cclxuICogQW4gYHVudGhyb3R0bGVkYCBwcm9wZXJ0eSBpcyBhdmFpbGFibGUgb24gdGhlIHJldHVybmVkIHNpZ25hbCBmb3IgZGlyZWN0IGFjY2VzcyB0byByYXcgdXBkYXRlcy5cclxuICogVGhlIHByaW1pdGl2ZSBpcyBTU1Itc2FmZSAocmV0dXJucyBhIGRlZmF1bHQgc2l6ZSBvbiB0aGUgc2VydmVyKSBhbmQgYXV0b21hdGljYWxseVxyXG4gKiBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIG9wdCBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcgYHRocm90dGxlYCAobXMpIGFuZCBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgV2luZG93U2l6ZVNpZ25hbGAgKGEgYFNpZ25hbDxXaW5kb3dTaXplPmAgd2l0aCBhbiBgdW50aHJvdHRsZWRgIHByb3BlcnR5KS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgd2luZG93U2l6ZSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtcmVzcG9uc2l2ZS1oZWFkZXInLFxyXG4gKiB0ZW1wbGF0ZTogYFxyXG4gKiA8aGVhZGVyPlxyXG4gKiBDdXJyZW50IFdpbmRvdyBTaXplOiB7eyBzaXplKCkud2lkdGggfX1weCB4IHt7IHNpemUoKS5oZWlnaHQgfX1weFxyXG4gKiBAaWYgKGlzTW9iaWxlKCkpIHtcclxuICogPHA+TW9iaWxlIE1lbnU8L3A+XHJcbiAqIH0gQGVsc2Uge1xyXG4gKiA8cD5EZXNrdG9wIE1lbnU8L3A+XHJcbiAqIH1cclxuICogPC9oZWFkZXI+XHJcbiAqIGBcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFJlc3BvbnNpdmVIZWFkZXJDb21wb25lbnQge1xyXG4gKiByZWFkb25seSBzaXplID0gd2luZG93U2l6ZSgpO1xyXG4gKiByZWFkb25seSBpc01vYmlsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2l6ZSgpLndpZHRoIDwgNzY4KTtcclxuICpcclxuICogY29uc3RydWN0b3IoKSB7XHJcbiAqIGVmZmVjdCgoKSA9PiB7XHJcbiAqIGNvbnNvbGUubG9nKCdXaW5kb3cgcmVzaXplZCB0bzonLCB0aGlzLnNpemUoKSk7XHJcbiAqIH0pO1xyXG4gKiB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd2luZG93U2l6ZShvcHQ/OiBXaW5kb3dTaXplT3B0aW9ucyk6IFdpbmRvd1NpemVTaWduYWwge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKSB7XHJcbiAgICBjb25zdCBiYXNlID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgd2lkdGg6IDEwMjQsXHJcbiAgICAgICAgaGVpZ2h0OiA3NjgsXHJcbiAgICAgIH0pLFxyXG4gICAgICB7IGRlYnVnTmFtZTogb3B0Py5kZWJ1Z05hbWUgPz8gJ3dpbmRvd1NpemUnIH0sXHJcbiAgICApIGFzIEludGVybmFsV2luZG93U2l6ZVNpZ25hbDtcclxuXHJcbiAgICBiYXNlLnVudGhyb3R0bGVkID0gYmFzZTtcclxuICAgIHJldHVybiBiYXNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgc2l6ZVNpZ25hbCA9IHRocm90dGxlZDxXaW5kb3dTaXplPihcclxuICAgIHsgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLCBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCB9LFxyXG4gICAge1xyXG4gICAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lID8/ICd3aW5kb3dTaXplJyxcclxuICAgICAgZXF1YWw6IChhLCBiKSA9PiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodCxcclxuICAgICAgbXM6IG9wdD8udGhyb3R0bGUgPz8gMTAwLFxyXG4gICAgfSxcclxuICApO1xyXG5cclxuICBjb25zdCBvblJlc2l6ZSA9ICgpID0+IHtcclxuICAgIHNpemVTaWduYWwuc2V0KHsgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLCBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCB9KTtcclxuICB9O1xyXG5cclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpO1xyXG5cclxuICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvblJlc2l6ZSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBzaXplU2lnbmFsLmFzUmVhZG9ubHkoKSBhcyBJbnRlcm5hbFdpbmRvd1NpemVTaWduYWw7XHJcbiAgYmFzZS51bnRocm90dGxlZCA9IHNpemVTaWduYWwub3JpZ2luYWw7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { prefersDarkMode, prefersReducedMotion } from './media-query';\nimport { mousePosition, } from './mouse-position';\nimport { networkStatus } from './network-status';\nimport { pageVisibility } from './page-visibility';\nimport { scrollPosition, } from './scroll-position';\nimport { windowSize } from './window-size';\n/**\n * Implementation for sensor overloads.\n * Users should refer to the specific overloads for detailed documentation.\n * @internal\n */\nexport function sensor(type, options) {\n switch (type) {\n case 'mousePosition':\n return mousePosition(options);\n case 'networkStatus':\n return networkStatus(options?.debugName);\n case 'pageVisibility':\n return pageVisibility(options?.debugName);\n case 'dark-mode':\n return prefersDarkMode(options?.debugName);\n case 'reduced-motion':\n return prefersReducedMotion(options?.debugName);\n case 'windowSize':\n return windowSize(options);\n case 'scrollPosition':\n return scrollPosition(options);\n default:\n throw new Error(`Unknown sensor type: ${type}`);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3NlbnNvcnMvc2Vuc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBdUIsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFHTCxjQUFjLEdBQ2YsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTZGaEY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLElBT29CLEVBQ3BCLE9BTXlCO0lBU3pCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLGVBQWU7WUFDbEIsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sYUFBYSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUMsS0FBSyxXQUFXO1lBQ2QsT0FBTyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssWUFBWTtZQUNmLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sY0FBYyxDQUFDLE9BQWdDLENBQUMsQ0FBQztRQUMxRDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcHJlZmVyc0RhcmtNb2RlLCBwcmVmZXJzUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4vbWVkaWEtcXVlcnknO1xyXG5pbXBvcnQge1xyXG4gIE1vdXNlUG9zaXRpb25PcHRpb25zLFxyXG4gIE1vdXNlUG9zaXRpb25TaWduYWwsXHJcbiAgbW91c2VQb3NpdGlvbixcclxufSBmcm9tICcuL21vdXNlLXBvc2l0aW9uJztcclxuaW1wb3J0IHsgTmV0d29ya1N0YXR1c1NpZ25hbCwgbmV0d29ya1N0YXR1cyB9IGZyb20gJy4vbmV0d29yay1zdGF0dXMnO1xyXG5pbXBvcnQgeyBwYWdlVmlzaWJpbGl0eSB9IGZyb20gJy4vcGFnZS12aXNpYmlsaXR5JztcclxuaW1wb3J0IHtcclxuICBTY3JvbGxQb3NpdGlvbk9wdGlvbnMsXHJcbiAgU2Nyb2xsUG9zaXRpb25TaWduYWwsXHJcbiAgc2Nyb2xsUG9zaXRpb24sXHJcbn0gZnJvbSAnLi9zY3JvbGwtcG9zaXRpb24nO1xyXG5pbXBvcnQgeyBXaW5kb3dTaXplT3B0aW9ucywgV2luZG93U2l6ZVNpZ25hbCwgd2luZG93U2l6ZSB9IGZyb20gJy4vd2luZG93LXNpemUnO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBtb3VzZSBjdXJzb3IncyBwb3NpdGlvbi5cclxuICogQHBhcmFtIHR5cGUgTXVzdCBiZSBgJ21vdXNlUG9zaXRpb24nYC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIG1vdXNlIHBvc2l0aW9uIHNlbnNvci5cclxuICogQHJldHVybnMgQSBgTW91c2VQb3NpdGlvblNpZ25hbGAgdGhhdCB0cmFja3MgbW91c2UgY29vcmRpbmF0ZXMgYW5kIHByb3ZpZGVzIGFuIHVudGhyb3R0bGVkIHZlcnNpb24uXHJcbiAqIEBzZWUge21vdXNlUG9zaXRpb259IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy5cclxuICogQGV4YW1wbGUgY29uc3QgcG9zID0gc2Vuc29yKCdtb3VzZVBvc2l0aW9uJywgeyBjb29yZGluYXRlU3BhY2U6ICdwYWdlJywgdGhyb3R0bGU6IDUwIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbnNvcihcclxuICB0eXBlOiAnbW91c2VQb3NpdGlvbicsXHJcbiAgb3B0aW9ucz86IE1vdXNlUG9zaXRpb25PcHRpb25zLFxyXG4pOiBNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBicm93c2VyJ3Mgb25saW5lL29mZmxpbmUgc3RhdHVzLlxyXG4gKiBAcGFyYW0gdHlwZSBNdXN0IGJlIGAnbmV0d29ya1N0YXR1cydgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBjdXJyZW50bHkgb25seSBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgTmV0d29ya1N0YXR1c1NpZ25hbGAgd2hpY2ggaXMgYSBib29sZWFuIGluZGljYXRpbmcgb25saW5lIHN0YXR1cywgd2l0aCBhbiBhdHRhY2hlZCBgc2luY2VgIHNpZ25hbC5cclxuICogQHNlZSB7bmV0d29ya1N0YXR1c30gZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLlxyXG4gKiBAZXhhbXBsZSBjb25zdCBvbmxpbmVTdGF0dXMgPSBzZW5zb3IoJ25ldHdvcmtTdGF0dXMnKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ25ldHdvcmtTdGF0dXMnLFxyXG4gIG9wdGlvbnM/OiB7IGRlYnVnTmFtZT86IHN0cmluZyB9LFxyXG4pOiBOZXR3b3JrU3RhdHVzU2lnbmFsO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBzdGF0ZSAoZS5nLiwgJ3Zpc2libGUnLCAnaGlkZGVuJykuXHJcbiAqIEBwYXJhbSB0eXBlIE11c3QgYmUgYCdwYWdlVmlzaWJpbGl0eSdgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBjdXJyZW50bHkgb25seSBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgU2lnbmFsPERvY3VtZW50VmlzaWJpbGl0eVN0YXRlPmAgaW5kaWNhdGluZyB0aGUgcGFnZSdzIGN1cnJlbnQgdmlzaWJpbGl0eS5cclxuICogQHNlZSB7cGFnZVZpc2liaWxpdHl9IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy5cclxuICogQGV4YW1wbGUgY29uc3QgdmlzaWJpbGl0eSA9IHNlbnNvcigncGFnZVZpc2liaWxpdHknKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ3BhZ2VWaXNpYmlsaXR5JyxcclxuICBvcHRpb25zPzogeyBkZWJ1Z05hbWU/OiBzdHJpbmcgfSxcclxuKTogU2lnbmFsPERvY3VtZW50VmlzaWJpbGl0eVN0YXRlPjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgc2Vuc29yIHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgdXNlcidzIE9TL2Jyb3dzZXIgcHJlZmVyZW5jZSBmb3IgYSBkYXJrIGNvbG9yIHNjaGVtZS5cclxuICogQHBhcmFtIHR5cGUgTXVzdCBiZSBgJ2RhcmstbW9kZSdgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBjdXJyZW50bHkgb25seSBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgU2lnbmFsPGJvb2xlYW4+YCB3aGljaCBpcyBgdHJ1ZWAgaWYgYSBkYXJrIHRoZW1lIGlzIHByZWZlcnJlZC5cclxuICogQHNlZSB7cHJlZmVyc0RhcmtNb2RlfSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXHJcbiAqIEBleGFtcGxlIGNvbnN0IGlzRGFya01vZGUgPSBzZW5zb3IoJ2RhcmstbW9kZScpO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbnNvcihcclxuICB0eXBlOiAnZGFyay1tb2RlJyxcclxuICBvcHRpb25zPzogeyBkZWJ1Z05hbWU/OiBzdHJpbmcgfSxcclxuKTogU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSB1c2VyJ3MgT1MvYnJvd3NlciBwcmVmZXJlbmNlIGZvciByZWR1Y2VkIG1vdGlvbi5cclxuICogQHBhcmFtIHR5cGUgTXVzdCBiZSBgJ3JlZHVjZWQtbW90aW9uJ2AuXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24sIGN1cnJlbnRseSBvbmx5IGBkZWJ1Z05hbWVgLlxyXG4gKiBAcmV0dXJucyBBIGBTaWduYWw8Ym9vbGVhbj5gIHdoaWNoIGlzIGB0cnVlYCBpZiByZWR1Y2VkIG1vdGlvbiBpcyBwcmVmZXJyZWQuXHJcbiAqIEBzZWUge3ByZWZlcnNSZWR1Y2VkTW90aW9ufSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXHJcbiAqIEBleGFtcGxlIGNvbnN0IHdhbnRzUmVkdWNlZE1vdGlvbiA9IHNlbnNvcigncmVkdWNlZC1tb3Rpb24nKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ3JlZHVjZWQtbW90aW9uJyxcclxuICBvcHRpb25zPzogeyBkZWJ1Z05hbWU/OiBzdHJpbmcgfSxcclxuKTogU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBicm93c2VyIHdpbmRvdydzIGlubmVyIGRpbWVuc2lvbnMgKHdpZHRoIGFuZCBoZWlnaHQpLlxyXG4gKiBAcGFyYW0gdHlwZSBNdXN0IGJlIGAnd2luZG93U2l6ZSdgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgd2luZG93IHNpemUgc2Vuc29yLCBpbmNsdWRpbmcgYHRocm90dGxlYCBhbmQgYGRlYnVnTmFtZWAuXHJcbiAqIEByZXR1cm5zIEEgYFdpbmRvd1NpemVTaWduYWxgIHRoYXQgdHJhY2tzIHdpbmRvdyBkaW1lbnNpb25zIGFuZCBwcm92aWRlcyBhbiB1bnRocm90dGxlZCB2ZXJzaW9uLlxyXG4gKiBAc2VlIHt3aW5kb3dTaXplfSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXHJcbiAqIEBleGFtcGxlIGNvbnN0IHNpemUgPSBzZW5zb3IoJ3dpbmRvd1NpemUnLCB7IHRocm90dGxlOiAyMDAgfSk7XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2Vuc29yKFxyXG4gIHR5cGU6ICd3aW5kb3dTaXplJyxcclxuICBvcHRpb25zPzogV2luZG93U2l6ZU9wdGlvbnMsXHJcbik6IFdpbmRvd1NpemVTaWduYWw7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHNlbnNvciBzaWduYWwgdGhhdCB0cmFja3MgdGhlIHNjcm9sbCBwb3NpdGlvbiAoeCwgeSkgb2YgdGhlIHdpbmRvdyBvciBhIHNwZWNpZmllZCBlbGVtZW50LlxyXG4gKiBAcGFyYW0gdHlwZSBNdXN0IGJlIGAnc2Nyb2xsUG9zaXRpb24nYC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNjcm9sbCBwb3NpdGlvbiBzZW5zb3IsIGluY2x1ZGluZyBgdGFyZ2V0YCwgYHRocm90dGxlYCwgYW5kIGBkZWJ1Z05hbWVgLlxyXG4gKiBAcmV0dXJucyBBIGBTY3JvbGxQb3NpdGlvblNpZ25hbGAgdGhhdCB0cmFja3Mgc2Nyb2xsIGNvb3JkaW5hdGVzIGFuZCBwcm92aWRlcyBhbiB1bnRocm90dGxlZCB2ZXJzaW9uLlxyXG4gKiBAc2VlIHtzY3JvbGxQb3NpdGlvbn0gZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLlxyXG4gKiBAZXhhbXBsZSBjb25zdCBwYWdlU2Nyb2xsID0gc2Vuc29yKCdzY3JvbGxQb3NpdGlvbicsIHsgdGhyb3R0bGU6IDE1MCB9KTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ3Njcm9sbFBvc2l0aW9uJyxcclxuICBvcHRpb25zPzogU2Nyb2xsUG9zaXRpb25PcHRpb25zLFxyXG4pOiBTY3JvbGxQb3NpdGlvblNpZ25hbDtcclxuXHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBmb3Igc2Vuc29yIG92ZXJsb2Fkcy5cclxuICogVXNlcnMgc2hvdWxkIHJlZmVyIHRvIHRoZSBzcGVjaWZpYyBvdmVybG9hZHMgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbnNvcihcclxuICB0eXBlOlxyXG4gICAgfCAnbW91c2VQb3NpdGlvbidcclxuICAgIHwgJ25ldHdvcmtTdGF0dXMnXHJcbiAgICB8ICdwYWdlVmlzaWJpbGl0eSdcclxuICAgIHwgJ2RhcmstbW9kZSdcclxuICAgIHwgJ3JlZHVjZWQtbW90aW9uJ1xyXG4gICAgfCAnd2luZG93U2l6ZSdcclxuICAgIHwgJ3Njcm9sbFBvc2l0aW9uJyxcclxuICBvcHRpb25zPzpcclxuICAgIHwge1xyXG4gICAgICAgIGRlYnVnTmFtZT86IHN0cmluZztcclxuICAgICAgfVxyXG4gICAgfCBNb3VzZVBvc2l0aW9uT3B0aW9uc1xyXG4gICAgfCBXaW5kb3dTaXplT3B0aW9uc1xyXG4gICAgfCBTY3JvbGxQb3NpdGlvbk9wdGlvbnMsXHJcbik6XHJcbiAgfCBNb3VzZVBvc2l0aW9uU2lnbmFsXHJcbiAgfCBOZXR3b3JrU3RhdHVzU2lnbmFsXHJcbiAgfCBTaWduYWw8RG9jdW1lbnRWaXNpYmlsaXR5U3RhdGU+XHJcbiAgfCBTaWduYWw8Ym9vbGVhbj5cclxuICB8IFdpbmRvd1NpemVTaWduYWxcclxuICB8IFNjcm9sbFBvc2l0aW9uU2lnbmFsXHJcbiAgfCBTaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZD4ge1xyXG4gIHN3aXRjaCAodHlwZSkge1xyXG4gICAgY2FzZSAnbW91c2VQb3NpdGlvbic6XHJcbiAgICAgIHJldHVybiBtb3VzZVBvc2l0aW9uKG9wdGlvbnMpO1xyXG4gICAgY2FzZSAnbmV0d29ya1N0YXR1cyc6XHJcbiAgICAgIHJldHVybiBuZXR3b3JrU3RhdHVzKG9wdGlvbnM/LmRlYnVnTmFtZSk7XHJcbiAgICBjYXNlICdwYWdlVmlzaWJpbGl0eSc6XHJcbiAgICAgIHJldHVybiBwYWdlVmlzaWJpbGl0eShvcHRpb25zPy5kZWJ1Z05hbWUpO1xyXG4gICAgY2FzZSAnZGFyay1tb2RlJzpcclxuICAgICAgcmV0dXJuIHByZWZlcnNEYXJrTW9kZShvcHRpb25zPy5kZWJ1Z05hbWUpO1xyXG4gICAgY2FzZSAncmVkdWNlZC1tb3Rpb24nOlxyXG4gICAgICByZXR1cm4gcHJlZmVyc1JlZHVjZWRNb3Rpb24ob3B0aW9ucz8uZGVidWdOYW1lKTtcclxuICAgIGNhc2UgJ3dpbmRvd1NpemUnOlxyXG4gICAgICByZXR1cm4gd2luZG93U2l6ZShvcHRpb25zKTtcclxuICAgIGNhc2UgJ3Njcm9sbFBvc2l0aW9uJzpcclxuICAgICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKG9wdGlvbnMgYXMgU2Nyb2xsUG9zaXRpb25PcHRpb25zKTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzZW5zb3IgdHlwZTogJHt0eXBlfWApO1xyXG4gIH1cclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, effect, inject, isDevMode, isSignal, PLATFORM_ID, signal, untracked, } from '@angular/core';\nimport { toWritable } from './to-writable';\n// Internal dummy store for server-side rendering\nconst noopStore = {\n getItem: () => null,\n setItem: () => {\n /* noop */\n },\n removeItem: () => {\n /* noop */\n },\n};\n/**\n * Creates a `WritableSignal` whose state is automatically synchronized with persistent storage\n * (like `localStorage` or `sessionStorage`).\n *\n * It handles Server-Side Rendering (SSR) gracefully, allows dynamic storage keys,\n * custom serialization/deserialization, custom storage providers, and optional\n * synchronization across browser tabs.\n *\n * @template T The type of value held by the signal and stored (after serialization).\n * @param fallback The default value of type `T` to use when no value is found in storage\n * or when deserialization fails. The signal's value will never be `null` or `undefined`\n * publicly, it will always revert to this fallback.\n * @param options Configuration options (`CreateStoredOptions<T>`). Requires at least the `key`.\n * @returns A `StoredSignal<T>` instance. This signal behaves like a standard `WritableSignal<T>`,\n * but its value is persisted. It includes a `.clear()` method to remove the item from storage\n * and a `.key` signal providing the current storage key.\n *\n * @remarks\n * - **Persistence:** The signal automatically saves its value to storage whenever the signal's\n * value or its configured `key` changes. This is managed internally using `effect`.\n * - **SSR Safety:** Detects server environments and uses a no-op storage, preventing errors.\n * - **Error Handling:** Catches and logs errors during serialization/deserialization in dev mode.\n * - **Tab Sync:** If `syncTabs` is true, listens to `storage` events to keep the signal value\n * consistent across browser tabs using the same key. Cleanup is handled automatically\n * using `DestroyRef`.\n * - **Removal:** Use the `.clear()` method on the returned signal to remove the item from storage.\n * Setting the signal to the fallback value will store the fallback value, not remove the item.\n *\n * @example\n * ```ts\n * import { Component, effect, signal } from '@angular/core';\n * import { stored } from '@mmstack/primitives'; // Adjust import path\n *\n * @Component({\n * selector: 'app-settings',\n * standalone: true,\n * template: `\n * Theme:\n * <select [ngModel]=\"theme()\" (ngModelChange)=\"theme.set($event)\">\n * <option value=\"light\">Light</option>\n * <option value=\"dark\">Dark</option>\n * </select>\n * <button (click)=\"theme.clear()\">Clear Theme Setting</button>\n * <p>Storage Key Used: {{ theme.key() }}</p>\n * ` // Requires FormsModule for ngModel\n * })\n * export class SettingsComponent {\n * theme = stored<'light' | 'dark'>('light', { key: 'app-theme', syncTabs: true });\n * }\n * ```\n */\nexport function stored(fallback, { key, store: providedStore, serialize = JSON.stringify, deserialize = JSON.parse, syncTabs = false, equal = Object.is, onKeyChange = 'load', cleanupOldKey = false, ...rest }) {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n const fallbackStore = isServer ? noopStore : localStorage;\n const store = providedStore ?? fallbackStore;\n const keySig = typeof key === 'string'\n ? computed(() => key)\n : isSignal(key)\n ? key\n : computed(key);\n const getValue = (key) => {\n const found = store.getItem(key);\n if (found === null)\n return null;\n try {\n return deserialize(found);\n }\n catch (err) {\n if (isDevMode())\n console.error(`Failed to parse stored value for key \"${key}\":`, err);\n return null;\n }\n };\n const storeValue = (key, value) => {\n try {\n if (value === null)\n return store.removeItem(key);\n const serialized = serialize(value);\n store.setItem(key, serialized);\n }\n catch (err) {\n if (isDevMode())\n console.error(`Failed to store value for key \"${key}\":`, err);\n }\n };\n const opt = {\n ...rest,\n equal,\n };\n const initialKey = untracked(keySig);\n const internal = signal(getValue(initialKey), ...(ngDevMode ? [{ debugName: \"internal\", ...opt,\n equal: (a, b) => {\n if (a === null && b === null)\n return true;\n if (a === null || b === null)\n return false;\n return equal(a, b);\n } }] : [{\n ...opt,\n equal: (a, b) => {\n if (a === null && b === null)\n return true;\n if (a === null || b === null)\n return false;\n return equal(a, b);\n },\n }]));\n let prevKey = initialKey;\n if (onKeyChange === 'store') {\n effect(() => {\n const k = keySig();\n storeValue(k, internal());\n if (prevKey !== k) {\n if (cleanupOldKey)\n store.removeItem(prevKey);\n prevKey = k;\n }\n });\n }\n else {\n effect(() => {\n const k = keySig();\n const internalValue = internal();\n if (k === prevKey) {\n return storeValue(k, internalValue); // normal operation\n }\n else {\n if (cleanupOldKey)\n store.removeItem(prevKey);\n const value = getValue(k);\n prevKey = k;\n internal.set(value); // load new value\n }\n });\n }\n if (syncTabs && !isServer) {\n const destroyRef = inject(DestroyRef);\n const sync = (e) => {\n if (e.key !== untracked(keySig))\n return;\n if (e.newValue === null)\n internal.set(null);\n else\n internal.set(getValue(e.key));\n };\n window.addEventListener('storage', sync);\n destroyRef.onDestroy(() => window.removeEventListener('storage', sync));\n }\n const writable = toWritable(computed(() => internal() ?? fallback, opt), internal.set);\n writable.clear = () => {\n internal.set(null);\n };\n writable.key = keySig;\n return writable;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3N0b3JlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1IsV0FBVyxFQUVYLE1BQU0sRUFDTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWUzQyxpREFBaUQ7QUFDakQsTUFBTSxTQUFTLEdBQVU7SUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7SUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLFVBQVU7SUFDWixDQUFDO0lBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUNmLFVBQVU7SUFDWixDQUFDO0NBQ0YsQ0FBQztBQTBFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUNwQixRQUFXLEVBQ1gsRUFDRSxHQUFHLEVBQ0gsS0FBSyxFQUFFLGFBQWEsRUFDcEIsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQzFCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUN4QixRQUFRLEdBQUcsS0FBSyxFQUNoQixLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFDakIsV0FBVyxHQUFHLE1BQU0sRUFDcEIsYUFBYSxHQUFHLEtBQUssRUFDckIsR0FBRyxJQUFJLEVBQ2dCO0lBRXpCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRXZELE1BQU0sYUFBYSxH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QUFLLElBQUk7Z0JBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQ3ZDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFekMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FDekIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDM0MsUUFBUSxDQUFDLEdBQUcsQ0FDTSxDQUFDO0lBRXJCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDdEIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgZWZmZWN0LFxyXG4gIGluamVjdCxcclxuICBpc0Rldk1vZGUsXHJcbiAgaXNTaWduYWwsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICcuL3RvLXdyaXRhYmxlJztcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIHN0b3JhZ2UgbWVjaGFuaXNtcyBjb21wYXRpYmxlIHdpdGggdGhlIGBzdG9yZWRgIHNpZ25hbC5cclxuICogTWF0Y2hlcyB0aGUgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSBgU3RvcmFnZWAgaW50ZXJmYWNlIChgbG9jYWxTdG9yYWdlYCwgYHNlc3Npb25TdG9yYWdlYCkuXHJcbiAqL1xyXG50eXBlIFN0b3JlID0ge1xyXG4gIC8qKiBSZXRyaWV2ZXMgYW4gaXRlbSBmcm9tIHN0b3JhZ2UgZm9yIGEgZ2l2ZW4ga2V5LiAqL1xyXG4gIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcclxuICAvKiogU2V0cyBhbiBpdGVtIGluIHN0b3JhZ2UgZm9yIGEgZ2l2ZW4ga2V5LiAqL1xyXG4gIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcclxuICAvKiogUmVtb3ZlcyBhbiBpdGVtIGZyb20gc3RvcmFnZSBmb3IgYSBnaXZlbiBrZXkuICovXHJcbiAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuLy8gSW50ZXJuYWwgZHVtbXkgc3RvcmUgZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xyXG5jb25zdCBub29wU3RvcmU6IFN0b3JlID0ge1xyXG4gIGdldEl0ZW06ICgpID0+IG51bGwsXHJcbiAgc2V0SXRlbTogKCkgPT4ge1xyXG4gICAgLyogbm9vcCAqL1xyXG4gIH0sXHJcbiAgcmVtb3ZlSXRlbTogKCkgPT4ge1xyXG4gICAgLyogbm9vcCAqL1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBzaWduYWwgc3luY2hyb25pemVkIHdpdGggcGVyc2lzdGVudCBzdG9yYWdlIHVzaW5nIGBzdG9yZWQoKWAuXHJcbiAqIEV4dGVuZHMgQW5ndWxhcidzIGBDcmVhdGVTaWduYWxPcHRpb25zYC5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ3JlYXRlU3RvcmVkT3B0aW9uczxUPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBpdGVtIGluIHN0b3JhZ2UuXHJcbiAgICogQ2FuIGJlIGEgc3RhdGljIHN0cmluZyBvciBhIGZ1bmN0aW9uL3NpZ25hbCByZXR1cm5pbmcgYSBzdHJpbmcgZm9yIGR5bmFtaWMga2V5c1xyXG4gICAqIChlLmcuLCBiYXNlZCBvbiB1c2VyIElEIG9yIG90aGVyIGFwcGxpY2F0aW9uIHN0YXRlKS5cclxuICAgKi9cclxuICBrZXk6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBzdG9yYWdlIGltcGxlbWVudGF0aW9uIChlLmcuLCBgc2Vzc2lvblN0b3JhZ2VgIG9yIGEgY3VzdG9tIGFkYXB0ZXIpLlxyXG4gICAqIE11c3QgY29uZm9ybSB0byB0aGUgYFN0b3JlYCBpbnRlcmZhY2UgKGBnZXRJdGVtYCwgYHNldEl0ZW1gLCBgcmVtb3ZlSXRlbWApLlxyXG4gICAqIERlZmF1bHRzIHRvIGBsb2NhbFN0b3JhZ2VgIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIGFuZCBhIG5vLW9wIHN0b3JlIG9uIHRoZSBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgc3RvcmU/OiBTdG9yZTtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmdW5jdGlvbiB0byBzZXJpYWxpemUgdGhlIHZhbHVlICh0eXBlIGBUYCkgaW50byBhIHN0cmluZyBiZWZvcmUgc3RvcmluZy5cclxuICAgKiBEZWZhdWx0cyB0byBgSlNPTi5zdHJpbmdpZnlgLlxyXG4gICAqIEBwYXJhbSB7VH0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlcmlhbGl6ZS5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXHJcbiAgICovXHJcbiAgc2VyaWFsaXplPzogKHZhbHVlOiBUKSA9PiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gdG8gZGVzZXJpYWxpemUgdGhlIHN0cmluZyByZXRyaWV2ZWQgZnJvbSBzdG9yYWdlIGJhY2sgaW50byB0aGUgdmFsdWUgKHR5cGUgYFRgKS5cclxuICAgKiBEZWZhdWx0cyB0byBgSlNPTi5wYXJzZWAuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSBzdHJpbmcgcmV0cmlldmVkIGZyb20gc3RvcmFnZS5cclxuICAgKiBAcmV0dXJucyB7VH0gVGhlIGRlc2VyaWFsaXplZCB2YWx1ZS5cclxuICAgKi9cclxuICBkZXNlcmlhbGl6ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiBUO1xyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHNpZ25hbCB3aWxsIGF0dGVtcHQgdG8gc3luY2hyb25pemUgaXRzIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBicm93c2VyIHRhYnNcclxuICAgKiB1c2luZyB0aGUgYHN0b3JhZ2VgIGV2ZW50LiBDaGFuZ2VzIG1hZGUgaW4gb25lIHRhYiAoc2V0LCB1cGRhdGUsIGNsZWFyKSB3aWxsIGJlXHJcbiAgICogcmVmbGVjdGVkIGluIG90aGVyIHRhYnMgdXNpbmcgdGhlIHNhbWUgc3RvcmFnZSBrZXkuXHJcbiAgICogUmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBEZWZhdWx0cyB0byBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIHN5bmNUYWJzPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBob3cga2V5IGNoYW5nZXMgc2hvdWxkIGJlIGhhbmRsZWQsIGxvYWQgaXMgdGhlIGRlZmF1bHQuXHJcbiAgICogLSBgbG9hZGA6IFRoZSBzaWduYWwgd2lsbCBsb2FkIHRoZSB2YWx1ZSBmcm9tIHN0b3JhZ2Ugd2hlbiB0aGUga2V5IGNoYW5nZXMgJiByZXBsYWNlIHRoZSBzaWduYWwncyB2YWx1ZS5cclxuICAgKiAtIGBzdG9yZWA6IFRoZSBzaWduYWwgd2lsbCBzdG9yZSB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgbmV3IGtleSB3aGVuIHRoZSBrZXkgY2hhbmdlcy5cclxuICAgKi9cclxuICBvbktleUNoYW5nZT86ICdsb2FkJyB8ICdzdG9yZSc7XHJcbiAgLyoqXHJcbiAgICogSWYgJ3RydWUnLCB0aGUgc2lnbmFsIHdpbGwgcmVtb3ZlIHRoZSBvbGQga2V5IGZyb20gc3RvcmFnZSB3aGVuIHRoZSBrZXkgY2hhbmdlcywgZGVmYXVsdHMgdG8gYGZhbHNlYC5cclxuICAgKi9cclxuICBjbGVhbnVwT2xkS2V5PzogYm9vbGVhbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNwZWNpYWxpemVkIGBXcml0YWJsZVNpZ25hbGAgcmV0dXJuZWQgYnkgdGhlIGBzdG9yZWQoKWAgZnVuY3Rpb24uXHJcbiAqIEl0IHN5bmNocm9uaXplcyBpdHMgdmFsdWUgd2l0aCBwZXJzaXN0ZW50IHN0b3JhZ2UgYW5kIHByb3ZpZGVzIGFkZGl0aW9uYWwgbWV0aG9kcy5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsIChtYXRjaGVzIHRoZSBmYWxsYmFjayB0eXBlKS5cclxuICovXHJcbmV4cG9ydCB0eXBlIFN0b3JlZFNpZ25hbDxUPiA9IFdyaXRhYmxlU2lnbmFsPFQ+ICYge1xyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdGhlIGl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBzaWduYWwncyBrZXkgZnJvbSB0aGUgY29uZmlndXJlZCBzdG9yYWdlLlxyXG4gICAqIEFmdGVyIGNsZWFyaW5nLCByZWFkaW5nIHRoZSBzaWduYWwgd2lsbCByZXR1cm4gdGhlIGZhbGxiYWNrIHZhbHVlIHVudGlsIGl0J3Mgc2V0IGFnYWluLlxyXG4gICAqL1xyXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgYFNpZ25hbDxzdHJpbmc+YCBjb250YWluaW5nIHRoZSBjdXJyZW50IHN0b3JhZ2Uga2V5IGJlaW5nIHVzZWQgYnkgdGhpcyBzdG9yZWQgc2lnbmFsLlxyXG4gICAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB0aGUga2V5IHdhcyBjb25maWd1cmVkIGR5bmFtaWNhbGx5LiBZb3UgY2FuIHJlYWQgb3IgcmVhY3RcclxuICAgKiB0byB0aGlzIHNpZ25hbCB0byBrbm93IHRoZSBhY3RpdmUga2V5LlxyXG4gICAqL1xyXG4gIGtleTogU2lnbmFsPHN0cmluZz47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBXcml0YWJsZVNpZ25hbGAgd2hvc2Ugc3RhdGUgaXMgYXV0b21hdGljYWxseSBzeW5jaHJvbml6ZWQgd2l0aCBwZXJzaXN0ZW50IHN0b3JhZ2VcclxuICogKGxpa2UgYGxvY2FsU3RvcmFnZWAgb3IgYHNlc3Npb25TdG9yYWdlYCkuXHJcbiAqXHJcbiAqIEl0IGhhbmRsZXMgU2VydmVyLVNpZGUgUmVuZGVyaW5nIChTU1IpIGdyYWNlZnVsbHksIGFsbG93cyBkeW5hbWljIHN0b3JhZ2Uga2V5cyxcclxuICogY3VzdG9tIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uLCBjdXN0b20gc3RvcmFnZSBwcm92aWRlcnMsIGFuZCBvcHRpb25hbFxyXG4gKiBzeW5jaHJvbml6YXRpb24gYWNyb3NzIGJyb3dzZXIgdGFicy5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsIGFuZCBzdG9yZWQgKGFmdGVyIHNlcmlhbGl6YXRpb24pLlxyXG4gKiBAcGFyYW0gZmFsbGJhY2sgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdHlwZSBgVGAgdG8gdXNlIHdoZW4gbm8gdmFsdWUgaXMgZm91bmQgaW4gc3RvcmFnZVxyXG4gKiBvciB3aGVuIGRlc2VyaWFsaXphdGlvbiBmYWlscy4gVGhlIHNpZ25hbCdzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYG51bGxgIG9yIGB1bmRlZmluZWRgXHJcbiAqIHB1YmxpY2x5LCBpdCB3aWxsIGFsd2F5cyByZXZlcnQgdG8gdGhpcyBmYWxsYmFjay5cclxuICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIChgQ3JlYXRlU3RvcmVkT3B0aW9uczxUPmApLiBSZXF1aXJlcyBhdCBsZWFzdCB0aGUgYGtleWAuXHJcbiAqIEByZXR1cm5zIEEgYFN0b3JlZFNpZ25hbDxUPmAgaW5zdGFuY2UuIFRoaXMgc2lnbmFsIGJlaGF2ZXMgbGlrZSBhIHN0YW5kYXJkIGBXcml0YWJsZVNpZ25hbDxUPmAsXHJcbiAqIGJ1dCBpdHMgdmFsdWUgaXMgcGVyc2lzdGVkLiBJdCBpbmNsdWRlcyBhIGAuY2xlYXIoKWAgbWV0aG9kIHRvIHJlbW92ZSB0aGUgaXRlbSBmcm9tIHN0b3JhZ2VcclxuICogYW5kIGEgYC5rZXlgIHNpZ25hbCBwcm92aWRpbmcgdGhlIGN1cnJlbnQgc3RvcmFnZSBrZXkuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIC0gKipQZXJzaXN0ZW5jZToqKiBUaGUgc2lnbmFsIGF1dG9tYXRpY2FsbHkgc2F2ZXMgaXRzIHZhbHVlIHRvIHN0b3JhZ2Ugd2hlbmV2ZXIgdGhlIHNpZ25hbCdzXHJcbiAqIHZhbHVlIG9yIGl0cyBjb25maWd1cmVkIGBrZXlgIGNoYW5nZXMuIFRoaXMgaXMgbWFuYWdlZCBpbnRlcm5hbGx5IHVzaW5nIGBlZmZlY3RgLlxyXG4gKiAtICoqU1NSIFNhZmV0eToqKiBEZXRlY3RzIHNlcnZlciBlbnZpcm9ubWVudHMgYW5kIHVzZXMgYSBuby1vcCBzdG9yYWdlLCBwcmV2ZW50aW5nIGVycm9ycy5cclxuICogLSAqKkVycm9yIEhhbmRsaW5nOioqIENhdGNoZXMgYW5kIGxvZ3MgZXJyb3JzIGR1cmluZyBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBpbiBkZXYgbW9kZS5cclxuICogLSAqKlRhYiBTeW5jOioqIElmIGBzeW5jVGFic2AgaXMgdHJ1ZSwgbGlzdGVucyB0byBgc3RvcmFnZWAgZXZlbnRzIHRvIGtlZXAgdGhlIHNpZ25hbCB2YWx1ZVxyXG4gKiBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VyIHRhYnMgdXNpbmcgdGhlIHNhbWUga2V5LiBDbGVhbnVwIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseVxyXG4gKiB1c2luZyBgRGVzdHJveVJlZmAuXHJcbiAqIC0gKipSZW1vdmFsOioqIFVzZSB0aGUgYC5jbGVhcigpYCBtZXRob2Qgb24gdGhlIHJldHVybmVkIHNpZ25hbCB0byByZW1vdmUgdGhlIGl0ZW0gZnJvbSBzdG9yYWdlLlxyXG4gKiBTZXR0aW5nIHRoZSBzaWduYWwgdG8gdGhlIGZhbGxiYWNrIHZhbHVlIHdpbGwgc3RvcmUgdGhlIGZhbGxiYWNrIHZhbHVlLCBub3QgcmVtb3ZlIHRoZSBpdGVtLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbiAqIGltcG9ydCB7IHN0b3JlZCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnOyAvLyBBZGp1c3QgaW1wb3J0IHBhdGhcclxuICpcclxuICogQENvbXBvbmVudCh7XHJcbiAqIHNlbGVjdG9yOiAnYXBwLXNldHRpbmdzJyxcclxuICogc3RhbmRhbG9uZTogdHJ1ZSxcclxuICogdGVtcGxhdGU6IGBcclxuICogVGhlbWU6XHJcbiAqIDxzZWxlY3QgW25nTW9kZWxdPVwidGhlbWUoKVwiIChuZ01vZGVsQ2hhbmdlKT1cInRoZW1lLnNldCgkZXZlbnQpXCI+XHJcbiAqIDxvcHRpb24gdmFsdWU9XCJsaWdodFwiPkxpZ2h0PC9vcHRpb24+XHJcbiAqIDxvcHRpb24gdmFsdWU9XCJkYXJrXCI+RGFyazwvb3B0aW9uPlxyXG4gKiA8L3NlbGVjdD5cclxuICogPGJ1dHRvbiAoY2xpY2spPVwidGhlbWUuY2xlYXIoKVwiPkNsZWFyIFRoZW1lIFNldHRpbmc8L2J1dHRvbj5cclxuICogPHA+U3RvcmFnZSBLZXkgVXNlZDoge3sgdGhlbWUua2V5KCkgfX08L3A+XHJcbiAqIGAgLy8gUmVxdWlyZXMgRm9ybXNNb2R1bGUgZm9yIG5nTW9kZWxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IHtcclxuICogIHRoZW1lID0gc3RvcmVkPCdsaWdodCcgfCAnZGFyayc+KCdsaWdodCcsIHsga2V5OiAnYXBwLXRoZW1lJywgc3luY1RhYnM6IHRydWUgfSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVkPFQ+KFxyXG4gIGZhbGxiYWNrOiBULFxyXG4gIHtcclxuICAgIGtleSxcclxuICAgIHN0b3JlOiBwcm92aWRlZFN0b3JlLFxyXG4gICAgc2VyaWFsaXplID0gSlNPTi5zdHJpbmdpZnksXHJcbiAgICBkZXNlcmlhbGl6ZSA9IEpTT04ucGFyc2UsXHJcbiAgICBzeW5jVGFicyA9IGZhbHNlLFxyXG4gICAgZXF1YWwgPSBPYmplY3QuaXMsXHJcbiAgICBvbktleUNoYW5nZSA9ICdsb2FkJyxcclxuICAgIGNsZWFudXBPbGRLZXkgPSBmYWxzZSxcclxuICAgIC4uLnJlc3RcclxuICB9OiBDcmVhdGVTdG9yZWRPcHRpb25zPFQ+LFxyXG4pOiBTdG9yZWRTaWduYWw8VD4ge1xyXG4gIGNvbnN0IGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcclxuXHJcbiAgY29uc3QgZmFsbGJhY2tTdG9yZSA9IGlzU2VydmVyID8gbm9vcFN0b3JlIDogbG9jYWxTdG9yYWdlO1xyXG4gIGNvbnN0IHN0b3JlID0gcHJvdmlkZWRTdG9yZSA/PyBmYWxsYmFja1N0b3JlO1xyXG5cclxuICBjb25zdCBrZXlTaWcgPVxyXG4gICAgdHlwZW9mIGtleSA9PT0gJ3N0cmluZydcclxuICAgICAgPyBjb21wdXRlZCgoKSA9PiBrZXkpXHJcbiAgICAgIDogaXNTaWduYWwoa2V5KVxyXG4gICAgICAgID8ga2V5XHJcbiAgICAgICAgOiBjb21wdXRlZChrZXkpO1xyXG5cclxuICBjb25zdCBnZXRWYWx1ZSA9IChrZXk6IHN0cmluZyk6IFQgfCBudWxsID0+IHtcclxuICAgIGNvbnN0IGZvdW5kID0gc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG4gICAgaWYgKGZvdW5kID09PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZShmb3VuZCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBzdG9yZWQgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiOmAsIGVycik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHN0b3JlVmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBUIHwgbnVsbCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplKHZhbHVlKTtcclxuICAgICAgc3RvcmUuc2V0SXRlbShrZXksIHNlcmlhbGl6ZWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSlcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc3RvcmUgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiOmAsIGVycik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgb3B0ID0ge1xyXG4gICAgLi4ucmVzdCxcclxuICAgIGVxdWFsLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGluaXRpYWxLZXkgPSB1bnRyYWNrZWQoa2V5U2lnKTtcclxuICBjb25zdCBpbnRlcm5hbCA9IHNpZ25hbChnZXRWYWx1ZShpbml0aWFsS2V5KSwge1xyXG4gICAgLi4ub3B0LFxyXG4gICAgZXF1YWw6IChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhID09PSBudWxsICYmIGIgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIHJldHVybiBlcXVhbChhLCBiKTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGxldCBwcmV2S2V5ID0gaW5pdGlhbEtleTtcclxuXHJcbiAgaWYgKG9uS2V5Q2hhbmdlID09PSAnc3RvcmUnKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBrID0ga2V5U2lnKCk7XHJcbiAgICAgIHN0b3JlVmFsdWUoaywgaW50ZXJuYWwoKSk7XHJcbiAgICAgIGlmIChwcmV2S2V5ICE9PSBrKSB7XHJcbiAgICAgICAgaWYgKGNsZWFudXBPbGRLZXkpIHN0b3JlLnJlbW92ZUl0ZW0ocHJldktleSk7XHJcbiAgICAgICAgcHJldktleSA9IGs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBrID0ga2V5U2lnKCk7XHJcbiAgICAgIGNvbnN0IGludGVybmFsVmFsdWUgPSBpbnRlcm5hbCgpO1xyXG4gICAgICBpZiAoayA9PT0gcHJldktleSkge1xyXG4gICAgICAgIHJldHVybiBzdG9yZVZhbHVlKGssIGludGVybmFsVmFsdWUpOyAvLyBub3JtYWwgb3BlcmF0aW9uXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNsZWFudXBPbGRLZXkpIHN0b3JlLnJlbW92ZUl0ZW0ocHJldktleSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShrKTtcclxuXHJcbiAgICAgICAgcHJldktleSA9IGs7XHJcbiAgICAgICAgaW50ZXJuYWwuc2V0KHZhbHVlKTsgLy8gbG9hZCBuZXcgdmFsdWVcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoc3luY1RhYnMgJiYgIWlzU2VydmVyKSB7XHJcbiAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gICAgY29uc3Qgc3luYyA9IChlOiBTdG9yYWdlRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGUua2V5ICE9PSB1bnRyYWNrZWQoa2V5U2lnKSkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKGUubmV3VmFsdWUgPT09IG51bGwpIGludGVybmFsLnNldChudWxsKTtcclxuICAgICAgZWxzZSBpbnRlcm5hbC5zZXQoZ2V0VmFsdWUoZS5rZXkpKTtcclxuICAgIH07XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBzeW5jKTtcclxuXHJcbiAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIHN5bmMpKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHdyaXRhYmxlID0gdG9Xcml0YWJsZTxUPihcclxuICAgIGNvbXB1dGVkKCgpID0+IGludGVybmFsKCkgPz8gZmFsbGJhY2ssIG9wdCksXHJcbiAgICBpbnRlcm5hbC5zZXQsXHJcbiAgKSBhcyBTdG9yZWRTaWduYWw8VD47XHJcblxyXG4gIHdyaXRhYmxlLmNsZWFyID0gKCkgPT4ge1xyXG4gICAgaW50ZXJuYWwuc2V0KG51bGwpO1xyXG4gIH07XHJcbiAgd3JpdGFibGUua2V5ID0ga2V5U2lnO1xyXG4gIHJldHVybiB3cml0YWJsZTtcclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { DestroyRef, effect, inject, Injectable, PLATFORM_ID, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class MessageBus {\n channel = new BroadcastChannel('mmstack-tab-sync-bus');\n listeners = new Map();\n subscribe(id, listener) {\n this.unsubscribe(id); // Ensure no duplicate listeners\n const wrapped = (ev) => {\n try {\n if (ev.data?.id === id)\n listener(ev.data?.value);\n }\n catch {\n // noop\n }\n };\n this.channel.addEventListener('message', wrapped);\n this.listeners.set(id, wrapped);\n return {\n unsub: (() => this.unsubscribe(id)).bind(this),\n post: ((value) => this.channel.postMessage({ id, value })).bind(this),\n };\n }\n unsubscribe(id) {\n const listener = this.listeners.get(id);\n if (!listener)\n return;\n this.channel.removeEventListener('message', listener);\n this.listeners.delete(id);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: MessageBus, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: MessageBus, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: MessageBus, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\nexport function generateDeterministicID() {\n const stack = new Error().stack;\n if (stack) {\n // Look for the actual caller (first non-internal frame)\n const lines = stack.split('\\n');\n for (let i = 2; i < lines.length; i++) {\n const line = lines[i];\n if (line && !line.includes('tabSync') && !line.includes('MessageBus')) {\n let hash = 0;\n for (let j = 0; j < line.length; j++) {\n const char = line.charCodeAt(j);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return `auto-${Math.abs(hash)}`;\n }\n }\n }\n throw new Error('Could not generate deterministic ID, please provide one manually.');\n}\n/**\n * Synchronizes a WritableSignal across browser tabs using BroadcastChannel API.\n *\n * Creates a shared signal that automatically syncs its value between all tabs\n * of the same application. When the signal is updated in one tab, all other\n * tabs will receive the new value automatically.\n *\n * @template T - The type of the WritableSignal\n * @param sig - The WritableSignal to synchronize across tabs\n * @param opt - Optional configuration object\n * @param opt.id - Explicit channel ID for synchronization. If not provided,\n * a deterministic ID is generated based on the call site.\n * Use explicit IDs in production for reliability.\n *\n * @returns The same WritableSignal instance, now synchronized across tabs\n *\n * @throws {Error} When deterministic ID generation fails and no explicit ID is provided\n *\n * @example\n * ```typescript\n * // Basic usage - auto-generates channel ID from call site\n * const theme = tabSync(signal('dark'));\n *\n * // With explicit ID (recommended for production)\n * const userPrefs = tabSync(signal({ lang: 'en' }), { id: 'user-preferences' });\n *\n * // Changes in one tab will sync to all other tabs\n * theme.set('light'); // All tabs will update to 'light'\n * ```\n *\n * @remarks\n * - Only works in browser environments (returns original signal on server)\n * - Uses a single BroadcastChannel for all synchronized signals\n * - Automatically cleans up listeners when the injection context is destroyed\n * - Initial signal value after sync setup is not broadcasted to prevent loops\n *\n */\nexport function tabSync(sig, opt) {\n if (isPlatformServer(inject(PLATFORM_ID)))\n return sig;\n const id = opt?.id || generateDeterministicID();\n const bus = inject(MessageBus);\n const { unsub, post } = bus.subscribe(id, (next) => sig.set(next));\n let first = false;\n const effectRef = effect(() => {\n const val = sig();\n if (!first) {\n first = true;\n return;\n }\n post(val);\n }, ...(ngDevMode ? [{ debugName: \"effectRef\" }] : []));\n inject(DestroyRef).onDestroy(() => {\n effectRef.destroy();\n unsub();\n });\n return sig;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiU3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi90YWJTeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sVUFBVTtJQUNKLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdkQsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO0lBRTNFLFNBQVMsQ0FBSSxFQUFVLEVBQUUsUUFBMkI7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFO29CQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEMsT0FBTztZQUNMLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxD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UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNiLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxxREFBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBQTEFURk9STV9JRCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJ1cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdtbXN0YWNrLXRhYi1zeW5jLWJ1cycpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVycyA9IG5ldyBNYXA8c3RyaW5nLCAoZXY6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZD4oKTtcblxuICBzdWJzY3JpYmU8VD4oaWQ6IHN0cmluZywgbGlzdGVuZXI6IChkYXRhOiBUKSA9PiB2b2lkKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZShpZCk7IC8vIEVuc3VyZSBubyBkdXBsaWNhdGUgbGlzdGVuZXJzXG4gICAgY29uc3Qgd3JhcHBlZCA9IChldjogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXYuZGF0YT8uaWQgPT09IGlkKSBsaXN0ZW5lcihldi5kYXRhPy52YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gbm9vcFxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB3cmFwcGVkKTtcbiAgICB0aGlzLmxpc3RlbmVycy5zZXQoaWQsIHdyYXBwZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVuc3ViOiAoKCkgPT4gdGhpcy51bnN1YnNjcmliZShpZCkpLmJpbmQodGhpcyksXG4gICAgICBwb3N0OiAoKHZhbHVlOiBUKSA9PiB0aGlzLmNoYW5uZWwucG9zdE1lc3NhZ2UoeyBpZCwgdmFsdWUgfSkpLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKTtcbiAgICBpZiAoIWxpc3RlbmVyKSByZXR1cm47XG4gICAgdGhpcy5jaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lcik7XG4gICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGlkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEZXRlcm1pbmlzdGljSUQoKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgaWYgKHN0YWNrKSB7XG4gICAgLy8gTG9vayBmb3IgdGhlIGFjdHVhbCBjYWxsZXIgKGZpcnN0IG5vbi1pbnRlcm5hbCBmcmFtZSlcbiAgICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgICBpZiAobGluZSAmJiAhbGluZS5pbmNsdWRlcygndGFiU3luYycpICYmICFsaW5lLmluY2x1ZGVzKCdNZXNzYWdlQnVzJykpIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyID0gbGluZS5jaGFyQ29kZUF0KGopO1xuICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgICAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGF1dG8tJHtNYXRoLmFicyhoYXNoKX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ0NvdWxkIG5vdCBnZW5lcmF0ZSBkZXRlcm1pbmlzdGljIElELCBwbGVhc2UgcHJvdmlkZSBvbmUgbWFudWFsbHkuJyxcbiAgKTtcbn1cblxudHlwZSBTeW5jU2lnbmFsT3B0aW9ucyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFN5bmNocm9uaXplcyBhIFdyaXRhYmxlU2lnbmFsIGFjcm9zcyBicm93c2VyIHRhYnMgdXNpbmcgQnJvYWRjYXN0Q2hhbm5lbCBBUEkuXG4gKlxuICogQ3JlYXRlcyBhIHNoYXJlZCBzaWduYWwgdGhhdCBhdXRvbWF0aWNhbGx5IHN5bmNzIGl0cyB2YWx1ZSBiZXR3ZWVuIGFsbCB0YWJzXG4gKiBvZiB0aGUgc2FtZSBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgc2lnbmFsIGlzIHVwZGF0ZWQgaW4gb25lIHRhYiwgYWxsIG90aGVyXG4gKiB0YWJzIHdpbGwgcmVjZWl2ZSB0aGUgbmV3IHZhbHVlIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgV3JpdGFibGVTaWduYWxcbiAqIEBwYXJhbSBzaWcgLSBUaGUgV3JpdGFibGVTaWduYWwgdG8gc3luY2hyb25pemUgYWNyb3NzIHRhYnNcbiAqIEBwYXJhbSBvcHQgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHBhcmFtIG9wdC5pZCAtIEV4cGxpY2l0IGNoYW5uZWwgSUQgZm9yIHN5bmNocm9uaXphdGlvbi4gSWYgbm90IHByb3ZpZGVkLFxuICogICAgICAgICAgICAgICAgIGEgZGV0ZXJtaW5pc3RpYyBJRCBpcyBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGNhbGwgc2l0ZS5cbiAqICAgICAgICAgICAgICAgICBVc2UgZXhwbGljaXQgSURzIGluIHByb2R1Y3Rpb24gZm9yIHJlbGlhYmlsaXR5LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzYW1lIFdyaXRhYmxlU2lnbmFsIGluc3RhbmNlLCBub3cgc3luY2hyb25pemVkIGFjcm9zcyB0YWJzXG4gKlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gZGV0ZXJtaW5pc3RpYyBJRCBnZW5lcmF0aW9uIGZhaWxzIGFuZCBubyBleHBsaWNpdCBJRCBpcyBwcm92aWRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBCYXNpYyB1c2FnZSAtIGF1dG8tZ2VuZXJhdGVzIGNoYW5uZWwgSUQgZnJvbSBjYWxsIHNpdGVcbiAqIGNvbnN0IHRoZW1lID0gdGFiU3luYyhzaWduYWwoJ2RhcmsnKSk7XG4gKlxuICogLy8gV2l0aCBleHBsaWNpdCBJRCAocmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24pXG4gKiBjb25zdCB1c2VyUHJlZnMgPSB0YWJTeW5jKHNpZ25hbCh7IGxhbmc6ICdlbicgfSksIHsgaWQ6ICd1c2VyLXByZWZlcmVuY2VzJyB9KTtcbiAqXG4gKiAvLyBDaGFuZ2VzIGluIG9uZSB0YWIgd2lsbCBzeW5jIHRvIGFsbCBvdGhlciB0YWJzXG4gKiB0aGVtZS5zZXQoJ2xpZ2h0Jyk7IC8vIEFsbCB0YWJzIHdpbGwgdXBkYXRlIHRvICdsaWdodCdcbiAqIGBgYFxuICpcbiAqIEByZW1hcmtzXG4gKiAtIE9ubHkgd29ya3MgaW4gYnJvd3NlciBlbnZpcm9ubWVudHMgKHJldHVybnMgb3JpZ2luYWwgc2lnbmFsIG9uIHNlcnZlcilcbiAqIC0gVXNlcyBhIHNpbmdsZSBCcm9hZGNhc3RDaGFubmVsIGZvciBhbGwgc3luY2hyb25pemVkIHNpZ25hbHNcbiAqIC0gQXV0b21hdGljYWxseSBjbGVhbnMgdXAgbGlzdGVuZXJzIHdoZW4gdGhlIGluamVjdGlvbiBjb250ZXh0IGlzIGRlc3Ryb3llZFxuICogLSBJbml0aWFsIHNpZ25hbCB2YWx1ZSBhZnRlciBzeW5jIHNldHVwIGlzIG5vdCBicm9hZGNhc3RlZCB0byBwcmV2ZW50IGxvb3BzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFiU3luYzxUIGV4dGVuZHMgV3JpdGFibGVTaWduYWw8YW55Pj4oXG4gIHNpZzogVCxcbiAgb3B0PzogU3luY1NpZ25hbE9wdGlvbnMsXG4pOiBUIHtcbiAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSkpIHJldHVybiBzaWc7XG5cbiAgY29uc3QgaWQgPSBvcHQ/LmlkIHx8IGdlbmVyYXRlRGV0ZXJtaW5pc3RpY0lEKCk7XG5cbiAgY29uc3QgYnVzID0gaW5qZWN0KE1lc3NhZ2VCdXMpO1xuXG4gIGNvbnN0IHsgdW5zdWIsIHBvc3QgfSA9IGJ1cy5zdWJzY3JpYmUoaWQsIChuZXh0KSA9PiBzaWcuc2V0KG5leHQpKTtcblxuICBsZXQgZmlyc3QgPSBmYWxzZTtcblxuICBjb25zdCBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IHNpZygpO1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcG9zdCh2YWwpO1xuICB9KTtcblxuICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcbiAgICBlZmZlY3RSZWYuZGVzdHJveSgpO1xuICAgIHVuc3ViKCk7XG4gIH0pO1xuXG4gIHJldHVybiBzaWc7XG59XG4iXX0=","import { DestroyRef, effect, inject, Injector, runInInjectionContext, untracked, } from '@angular/core';\nexport function until(sourceSignal, predicate, options = {}) {\n const injector = options.injector ?? inject(Injector);\n return new Promise((resolve, reject) => {\n let effectRef;\n let timeoutId;\n let settled = false;\n const cleanupAndReject = (reason) => {\n if (!settled) {\n settled = true;\n if (timeoutId)\n clearTimeout(timeoutId);\n effectRef?.destroy();\n reject(new Error(reason));\n }\n };\n const cleanupAndResolve = (value) => {\n if (!settled) {\n settled = true;\n if (timeoutId)\n clearTimeout(timeoutId);\n effectRef?.destroy();\n resolve(value);\n }\n };\n try {\n const destroyRef = options.destroyRef ?? inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => {\n cleanupAndReject('until: Operation cancelled due to context destruction.');\n });\n }\n catch {\n // noop\n }\n const initialValue = untracked(sourceSignal);\n if (predicate(initialValue)) {\n cleanupAndResolve(initialValue);\n return;\n }\n if (options?.timeout !== undefined) {\n timeoutId = setTimeout(() => cleanupAndReject(`until: Timeout after ${options.timeout}ms.`), options.timeout);\n }\n runInInjectionContext(injector, () => {\n effectRef = effect(() => {\n if (settled) {\n return effectRef?.destroy();\n }\n const currentValue = sourceSignal();\n if (predicate(currentValue)) {\n cleanupAndResolve(currentValue);\n }\n });\n });\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW50aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvdW50aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBbUV2QixNQUFNLFVBQVUsS0FBSyxDQUNuQixZQUF1QixFQUN2QixTQUFnQyxFQUNoQyxVQUF3QixFQUFFO0lBRTFCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sSUFBSSxPQUFPLENBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxTQUFnQyxDQUFDO1FBQ3JDLElBQUksU0FBb0QsQ0FBQztRQUN6RCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFcEIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNmLElBQUksU0FBUztvQkFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDZixJQUFJLFNBQVM7b0JBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQ2QsT0FBTyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFL0QsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLGdCQUFnQixDQUNkLHdEQUF3RCxDQUN6RCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1QixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxTQUFTLEdBQUcsVUFBVSxDQUNwQixHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQ3BFLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7UUFDSixDQUFDO1FBRUQscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNuQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixPQUFPLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQztnQkFFRCxNQUFNLFlBQVksR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEZXN0cm95UmVmLFxyXG4gIGVmZmVjdCxcclxuICBFZmZlY3RSZWYsXHJcbiAgaW5qZWN0LFxyXG4gIEluamVjdG9yLFxyXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcclxuICBTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IHR5cGUgVW50aWxPcHRpb25zID0ge1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBJZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXRcclxuICAgKiB3aXRoaW4gdGhpcyBwZXJpb2QsIHRoZSBwcm9taXNlIHdpbGwgcmVqZWN0LlxyXG4gICAqL1xyXG4gIHRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgRGVzdHJveVJlZi4gSWYgcHJvdmlkZWQgYW5kIHRoZSBjb21wb25lbnQvY29udGV4dCBpcyBkZXN0cm95ZWRcclxuICAgKiBiZWZvcmUgdGhlIGNvbmRpdGlvbiBpcyBtZXQgb3IgdGltZW91dCBvY2N1cnMsIHRoZSBwcm9taXNlIHdpbGwgcmVqZWN0LlxyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGluamVjdCBvbmUgaWYgY2FsbGVkIGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxyXG4gICAqL1xyXG4gIGRlc3Ryb3lSZWY/OiBEZXN0cm95UmVmO1xyXG4gIGluamVjdG9yPzogSW5qZWN0b3I7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGEgc2lnbmFsJ3MgdmFsdWUgc2F0aXNmaWVzIGEgdHlwZSBwcmVkaWNhdGUuXHJcbiAqXHJcbiAqIFRoaXMgb3ZlcmxvYWQgaXMgdXNlZCB3aGVuIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gaXMgYSB0eXBlIGd1YXJkIChlLmcuLCBgKHYpOiB2IGlzIE15VHlwZWApLlxyXG4gKiBUaGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIHJlc29sdmUgd2l0aCB0aGUgbmFycm93ZWQgdHlwZS5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIGJhc2UgdHlwZSBvZiB0aGUgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEB0ZW1wbGF0ZSBVIFRoZSBuYXJyb3dlZCB0eXBlIGFzc2VydGVkIGJ5IHRoZSBwcmVkaWNhdGUuXHJcbiAqIEBwYXJhbSBzb3VyY2VTaWduYWwgVGhlIHNpZ25hbCB0byBvYnNlcnZlLlxyXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgdHlwZSBndWFyZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIGBVYC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGltZW91dCBhbmQgZXhwbGljaXQgZGVzdHJ1Y3Rpb24uXHJcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ25hbCdzIHZhbHVlLCBuYXJyb3dlZCB0byB0eXBlIGBVYC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgZXZlbnQgPSBzaWduYWw8RXZlbnQgfCBudWxsPihudWxsKTtcclxuICpcclxuICogLy8gVGhlIHJldHVybmVkIHByb21pc2UgaXMgYFByb21pc2U8TW91c2VFdmVudD5gXHJcbiAqIGNvbnN0IG1vdXNlRXZlbnRQcm9taXNlID0gdW50aWwoZXZlbnQsIChlKTogZSBpcyBNb3VzZUV2ZW50ID0+IGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KTtcclxuICpcclxuICogYXN5bmMgZnVuY3Rpb24gbG9nTW91c2VFdmVudCgpIHtcclxuICogY29uc3QgbWUgPSBhd2FpdCBtb3VzZUV2ZW50UHJvbWlzZTtcclxuICogY29uc29sZS5sb2cobWUuY2xpZW50WCk7IC8vIGBtZWAgaXMgY29ycmVjdGx5IHR5cGVkIGFzIE1vdXNlRXZlbnRcclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bnRpbDxULCBVIGV4dGVuZHMgVD4oXHJcbiAgc291cmNlU2lnbmFsOiBTaWduYWw8VD4sXHJcbiAgcHJlZGljYXRlOiAodmFsdWU6IFQpID0+IHZhbHVlIGlzIFUsXHJcbiAgb3B0aW9ucz86IFVudGlsT3B0aW9ucyxcclxuKTogUHJvbWlzZTxVPjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYSBzaWduYWwncyB2YWx1ZSBzYXRpc2ZpZXMgYSBnaXZlbiBwcmVkaWNhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBlcmF0aXZlbHkgd2FpdGluZyBmb3IgYSByZWFjdGl2ZSBzdGF0ZSB0byBjaGFuZ2UsXHJcbiAqIGZvciBleGFtcGxlLCBpbiB0ZXN0cyBvciB0byBvcmNoZXN0cmF0ZSBjb21wbGV4IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEBwYXJhbSBzb3VyY2VTaWduYWwgVGhlIHNpZ25hbCB0byBvYnNlcnZlLlxyXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgc2lnbmFsJ3MgdmFsdWUgYW5kIHJldHVybnMgYHRydWVgIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aW1lb3V0IGFuZCBleHBsaWNpdCBkZXN0cnVjdGlvbi5cclxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbmFsJ3MgdmFsdWUgd2hlbiB0aGUgcHJlZGljYXRlIGlzIHRydWUsXHJcbiAqIG9yIHJlamVjdHMgb24gdGltZW91dCBvciBjb250ZXh0IGRlc3RydWN0aW9uLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVudGlsPFQ+KFxyXG4gIHNvdXJjZVNpZ25hbDogU2lnbmFsPFQ+LFxyXG4gIHByZWRpY2F0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gIG9wdGlvbnM/OiBVbnRpbE9wdGlvbnMsXHJcbik6IFByb21pc2U8VD47XHJcbmV4cG9ydCBmdW5jdGlvbiB1bnRpbDxUPihcclxuICBzb3VyY2VTaWduYWw6IFNpZ25hbDxUPixcclxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcclxuICBvcHRpb25zOiBVbnRpbE9wdGlvbnMgPSB7fSxcclxuKTogUHJvbWlzZTxUPiB7XHJcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zLmluamVjdG9yID8/IGluamVjdChJbmplY3Rvcik7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGxldCBlZmZlY3RSZWY6IEVmZmVjdFJlZiB8IHVuZGVmaW5lZDtcclxuICAgIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjbGVhbnVwQW5kUmVqZWN0ID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghc2V0dGxlZCkge1xyXG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xyXG4gICAgICAgIGVmZmVjdFJlZj8uZGVzdHJveSgpO1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVhc29uKSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY2xlYW51cEFuZFJlc29sdmUgPSAodmFsdWU6IFQpID0+IHtcclxuICAgICAgaWYgKCFzZXR0bGVkKSB7XHJcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgICAgZWZmZWN0UmVmPy5kZXN0cm95KCk7XHJcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGVzdHJveVJlZiA9XHJcbiAgICAgICAgb3B0aW9ucy5kZXN0cm95UmVmID8/IGluamVjdChEZXN0cm95UmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICAgICAgZGVzdHJveVJlZj8ub25EZXN0cm95KCgpID0+IHtcclxuICAgICAgICBjbGVhbnVwQW5kUmVqZWN0KFxyXG4gICAgICAgICAgJ3VudGlsOiBPcGVyYXRpb24gY2FuY2VsbGVkIGR1ZSB0byBjb250ZXh0IGRlc3RydWN0aW9uLicsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHVudHJhY2tlZChzb3VyY2VTaWduYWwpO1xyXG4gICAgaWYgKHByZWRpY2F0ZShpbml0aWFsVmFsdWUpKSB7XHJcbiAgICAgIGNsZWFudXBBbmRSZXNvbHZlKGluaXRpYWxWYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXHJcbiAgICAgICAgKCkgPT4gY2xlYW51cEFuZFJlamVjdChgdW50aWw6IFRpbWVvdXQgYWZ0ZXIgJHtvcHRpb25zLnRpbWVvdXR9bXMuYCksXHJcbiAgICAgICAgb3B0aW9ucy50aW1lb3V0LFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xyXG4gICAgICBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChzZXR0bGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWZmZWN0UmVmPy5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBzb3VyY2VTaWduYWwoKTtcclxuICAgICAgICBpZiAocHJlZGljYXRlKGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgIGNsZWFudXBBbmRSZXNvbHZlKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcbiJdfQ==","import { SIGNAL } from '@angular/core/primitives/signals';\n/**\n * @interal\n */\nexport function getSignalEquality(sig) {\n const internal = sig[SIGNAL];\n if (internal && typeof internal.equal === 'function') {\n return internal.equal;\n }\n return Object.is; // Default equality check\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXNpZ25hbC1lcXVhbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9nZXQtc2lnbmFsLWVxdWFsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxHQUFjO0lBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBRTFCLENBQUM7SUFDRixJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDckQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgVmFsdWVFcXVhbGl0eUZuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNJR05BTCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcHJpbWl0aXZlcy9zaWduYWxzJztcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hbEVxdWFsaXR5PFQ+KHNpZzogU2lnbmFsPFQ+KTogVmFsdWVFcXVhbGl0eUZuPFQ+IHtcclxuICBjb25zdCBpbnRlcm5hbCA9IHNpZ1tTSUdOQUxdIGFzIHtcclxuICAgIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+O1xyXG4gIH07XHJcbiAgaWYgKGludGVybmFsICYmIHR5cGVvZiBpbnRlcm5hbC5lcXVhbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIGludGVybmFsLmVxdWFsO1xyXG4gIH1cclxuICByZXR1cm4gT2JqZWN0LmlzOyAvLyBEZWZhdWx0IGVxdWFsaXR5IGNoZWNrXHJcbn1cclxuIl19","import { computed, untracked, } from '@angular/core';\nimport { getSignalEquality } from './get-signal-equality';\nimport { mutable } from './mutable';\nimport { toWritable } from './to-writable';\n/**\n * Enhances an existing `WritableSignal` by adding a complete undo/redo history\n * stack and an API to control it.\n *\n * @template T The type of value held by the signal.\n * @param source The source `WritableSignal` to add history tracking to.\n * @param options Optional configuration for the history behavior.\n * @returns A `SignalWithHistory<T>` instance, augmenting the source signal with history APIs.\n *\n * @remarks\n * - Any new `.set()` or `.update()` call on the signal will clear the entire redo stack.\n * - The primitive attempts to automatically use the source signal's own `equal` function,\n * but this relies on an internal Angular API. For maximum stability across Angular\n * versions, it is recommended to provide an explicit `equal` function in the options.\n *\n * @example\n * ```ts\n * import { signal } from '@angular/core';\n * import { withHistory } from '@mmstack/primitives';\n *\n * const name = withHistory(signal('John'), { maxSize: 5 });\n *\n * console.log('Initial value:', name()); // \"John\"\n *\n * name.set('John Doe');\n * name.set('Jane Doe');\n *\n * console.log('Current value:', name()); // \"Jane Doe\"\n * console.log('History:', name.history()); // [\"John\", \"John Doe\"]\n * console.log('Can undo:', name.canUndo()); // true\n * console.log('Can redo:', name.canRedo()); // false\n *\n * name.undo();\n * console.log('After undo:', name()); // \"John Doe\"\n * console.log('Can redo:', name.canRedo()); // true\n *\n * name.redo();\n * console.log('After redo:', name()); // \"Jane Doe\"\n *\n * // A new change will clear the redo history\n * name.set('Janine Doe');\n * console.log('Can redo:', name.canRedo()); // false\n *\n * name.clear();\n * console.log('Can undo:', name.canUndo()); // false\n * ```\n */\nexport function withHistory(source, opt) {\n const equal = opt?.equal ?? getSignalEquality(source);\n const maxSize = opt?.maxSize ?? Infinity;\n const history = mutable([], {\n ...opt,\n equal: undefined,\n });\n const redoArray = mutable([]);\n const originalSet = source.set;\n const set = (value) => {\n const current = untracked(source);\n if (equal(value, current))\n return;\n source.set(value);\n history.mutate((c) => {\n if (c.length >= maxSize) {\n if (opt?.cleanupStrategy === 'shift') {\n c.shift();\n }\n else {\n c = c.slice(Math.floor(maxSize / 2));\n }\n }\n c.push(current);\n return c;\n });\n redoArray.set([]);\n };\n const update = (updater) => {\n set(updater(untracked(source)));\n };\n const internal = toWritable(computed(() => source(), {\n equal,\n debugName: opt?.debugName,\n }), set, update);\n internal.history = history;\n internal.undo = () => {\n const historyStack = untracked(history);\n if (historyStack.length === 0)\n return;\n const valueForRedo = untracked(source);\n const valueToRestore = historyStack.at(-1);\n if (valueToRestore === undefined)\n return;\n originalSet.call(source, valueToRestore);\n history.inline((h) => h.pop());\n redoArray.inline((r) => r.push(valueForRedo));\n };\n internal.redo = () => {\n const redoStack = untracked(redoArray);\n if (redoStack.length === 0)\n return;\n const valueForUndo = untracked(source);\n const valueToRestore = redoStack.at(-1);\n if (valueToRestore === undefined)\n return;\n originalSet.call(source, valueToRestore);\n redoArray.inline((r) => r.pop());\n history.mutate((h) => {\n if (h.length >= maxSize) {\n if (opt?.cleanupStrategy === 'shift') {\n h.shift();\n }\n else {\n h = h.slice(Math.floor(maxSize / 2));\n }\n }\n h.push(valueForUndo);\n return h;\n });\n };\n internal.clear = () => {\n history.set([]);\n redoArray.set([]);\n };\n internal.canUndo = computed(() => history().length > 0, ...(ngDevMode ? [{ debugName: \"canUndo\" }] : []));\n internal.canRedo = computed(() => redoArray().length > 0, ...(ngDevMode ? [{ debugName: \"canRedo\" }] : []));\n internal.canClear = computed(() => internal.canUndo() || internal.canRedo(), ...(ngDevMode ? [{ debugName: \"canClear\" }] : []));\n return internal;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1oaXN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3dpdGgtaGlzdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUdSLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFvRDNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBeUIsRUFDekIsR0FBNkI7SUFFN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxJQUFJLFFBQVEsQ0FBQztJQUV6QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQU0sRUFBRSxFQUFFO1FBQy9CLEdBQUcsR0FBRztRQUNOLEtBQUssRUFBRSxTQUFTO0tBQ2pCLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBTSxFQUFFLENBQUMsQ0FBQztJQUVuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBRS9CLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBUSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7WUFBRSxPQUFPO1FBRWxDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFD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QUM7b0JBQ3JDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWixDQUFDO3FCQUFNLENBQUM7b0JBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztZQUNILENBQUM7WUFDRCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsbURBQUMsQ0FBQztJQUN4RCxRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxtREFBQyxDQUFDO0lBQzFELFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLG9EQUFDLENBQUM7SUFFN0UsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxuICB0eXBlIFZhbHVlRXF1YWxpdHlGbixcclxuICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXRTaWduYWxFcXVhbGl0eSB9IGZyb20gJy4vZ2V0LXNpZ25hbC1lcXVhbGl0eSc7XHJcbmltcG9ydCB7IG11dGFibGUgfSBmcm9tICcuL211dGFibGUnO1xyXG5pbXBvcnQgeyB0b1dyaXRhYmxlIH0gZnJvbSAnLi90by13cml0YWJsZSc7XHJcblxyXG4vKipcclxuICogQSBXcml0YWJsZVNpZ25hbCBlbmhhbmNlZCB3aXRoIHVuZG8vcmVkbyBjYXBhYmlsaXRpZXMgYW5kIGhpc3RvcnkgdHJhY2tpbmcuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHZhbHVlIGhlbGQgYnkgdGhlIHNpZ25hbC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFNpZ25hbFdpdGhIaXN0b3J5PFQ+ID0gV3JpdGFibGVTaWduYWw8VD4gJiB7XHJcbiAgLyoqIEEgcmVhZC1vbmx5IHNpZ25hbCBvZiB0aGUgdW5kbyBoaXN0b3J5IHN0YWNrLiBUaGUgb2xkZXN0IGNoYW5nZXMgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgYXJyYXkuICovXHJcbiAgaGlzdG9yeTogU2lnbmFsPFRbXT47XHJcbiAgLyoqIFJldmVydHMgdGhlIHNpZ25hbCB0byBpdHMgbW9zdCByZWNlbnQgcHJldmlvdXMgc3RhdGUgaW4gdGhlIGhpc3RvcnkuICovXHJcbiAgdW5kbzogKCkgPT4gdm9pZDtcclxuICAvKiogUmUtYXBwbGllcyB0aGUgbGFzdCBzdGF0ZSB0aGF0IHdhcyB1bmRvbmUuICovXHJcbiAgcmVkbzogKCkgPT4gdm9pZDtcclxuICAvKiogQSBzaWduYWwgdGhhdCBpcyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIHN0YXRlcyBpbiB0aGUgcmVkbyBzdGFjay4gKi9cclxuICBjYW5SZWRvOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIEEgc2lnbmFsIHRoYXQgaXMgYHRydWVgIGlmIHRoZXJlIGFyZSBzdGF0ZXMgaW4gdGhlIHVuZG8gaGlzdG9yeS4gKi9cclxuICBjYW5VbmRvOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIENsZWFycyBib3RoIHRoZSB1bmRvIGFuZCByZWRvIGhpc3Rvcnkgc3RhY2tzLiAqL1xyXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBBIHNpZ25hbCB0aGF0IGlzIGB0cnVlYCBpZiB0aGVyZSBpcyBhbnkgaGlzdG9yeSB0aGF0IGNhbiBiZSBjbGVhcmVkLiAqL1xyXG4gIGNhbkNsZWFyOiBTaWduYWw8Ym9vbGVhbj47XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBzaWduYWwgd2l0aCBoaXN0b3J5IHRyYWNraW5nLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSBoZWxkIGJ5IHRoZSBzaWduYWwuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVIaXN0b3J5T3B0aW9uczxUPiA9IE9taXQ8XHJcbiAgQ3JlYXRlU2lnbmFsT3B0aW9uczxUW10+LFxyXG4gICdlcXVhbCdcclxuPiAmIHtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBjdXN0b20gZXF1YWxpdHkgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgdmFsdWUgaGFzIGNoYW5nZWQgYmVmb3JlXHJcbiAgICogYWRkaW5nIGl0IHRvIGhpc3RvcnkuIERlZmF1bHRzIHRvIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgZXF1YWxpdHkgZnVuY3Rpb24gb3IgYE9iamVjdC5pc2AuXHJcbiAgICovXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD47XHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHVuZG8gc3RhdGVzIHRvIGtlZXAgaW4gdGhlIGhpc3RvcnkuXHJcbiAgICogQGRlZmF1bHQgSW5maW5pdHlcclxuICAgKi9cclxuICBtYXhTaXplPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzdHJhdGVneSBmb3IgdHJpbW1pbmcgdGhlIGhpc3Rvcnkgd2hlbiBgbWF4U2l6ZWAgaXMgcmVhY2hlZC5cclxuICAgKiAtIGBzaGlmdGA6IFJlbW92ZXMgdGhlIHNpbmdsZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgaGlzdG9yeS5cclxuICAgKiAtIGBoYWx2ZWA6IFJlbW92ZXMgdGhlIG9sZGVzdCBoYWxmIG9mIHRoZSBoaXN0b3J5IHN0YWNrLlxyXG4gICAqIEBkZWZhdWx0ICdoYWx2ZSdcclxuICAgKi9cclxuICBjbGVhbnVwU3RyYXRlZ3k/OiAnc2hpZnQnIHwgJ2hhbHZlJztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbmhhbmNlcyBhbiBleGlzdGluZyBgV3JpdGFibGVTaWduYWxgIGJ5IGFkZGluZyBhIGNvbXBsZXRlIHVuZG8vcmVkbyBoaXN0b3J5XHJcbiAqIHN0YWNrIGFuZCBhbiBBUEkgdG8gY29udHJvbCBpdC5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYFdyaXRhYmxlU2lnbmFsYCB0byBhZGQgaGlzdG9yeSB0cmFja2luZyB0by5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGhpc3RvcnkgYmVoYXZpb3IuXHJcbiAqIEByZXR1cm5zIEEgYFNpZ25hbFdpdGhIaXN0b3J5PFQ+YCBpbnN0YW5jZSwgYXVnbWVudGluZyB0aGUgc291cmNlIHNpZ25hbCB3aXRoIGhpc3RvcnkgQVBJcy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogLSBBbnkgbmV3IGAuc2V0KClgIG9yIGAudXBkYXRlKClgIGNhbGwgb24gdGhlIHNpZ25hbCB3aWxsIGNsZWFyIHRoZSBlbnRpcmUgcmVkbyBzdGFjay5cclxuICogLSBUaGUgcHJpbWl0aXZlIGF0dGVtcHRzIHRvIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBzb3VyY2Ugc2lnbmFsJ3Mgb3duIGBlcXVhbGAgZnVuY3Rpb24sXHJcbiAqIGJ1dCB0aGlzIHJlbGllcyBvbiBhbiBpbnRlcm5hbCBBbmd1bGFyIEFQSS4gRm9yIG1heGltdW0gc3RhYmlsaXR5IGFjcm9zcyBBbmd1bGFyXHJcbiAqIHZlcnNpb25zLCBpdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGFuIGV4cGxpY2l0IGBlcXVhbGAgZnVuY3Rpb24gaW4gdGhlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzXHJcbiAqIGltcG9ydCB7IHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyB3aXRoSGlzdG9yeSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBjb25zdCBuYW1lID0gd2l0aEhpc3Rvcnkoc2lnbmFsKCdKb2huJyksIHsgbWF4U2l6ZTogNSB9KTtcclxuICpcclxuICogY29uc29sZS5sb2coJ0luaXRpYWwgdmFsdWU6JywgbmFtZSgpKTsgLy8gXCJKb2huXCJcclxuICpcclxuICogbmFtZS5zZXQoJ0pvaG4gRG9lJyk7XHJcbiAqIG5hbWUuc2V0KCdKYW5lIERvZScpO1xyXG4gKlxyXG4gKiBjb25zb2xlLmxvZygnQ3VycmVudCB2YWx1ZTonLCBuYW1lKCkpOyAvLyBcIkphbmUgRG9lXCJcclxuICogY29uc29sZS5sb2coJ0hpc3Rvcnk6JywgbmFtZS5oaXN0b3J5KCkpOyAvLyBbXCJKb2huXCIsIFwiSm9obiBEb2VcIl1cclxuICogY29uc29sZS5sb2coJ0NhbiB1bmRvOicsIG5hbWUuY2FuVW5kbygpKTsgLy8gdHJ1ZVxyXG4gKiBjb25zb2xlLmxvZygnQ2FuIHJlZG86JywgbmFtZS5jYW5SZWRvKCkpOyAvLyBmYWxzZVxyXG4gKlxyXG4gKiBuYW1lLnVuZG8oKTtcclxuICogY29uc29sZS5sb2coJ0FmdGVyIHVuZG86JywgbmFtZSgpKTsgLy8gXCJKb2huIERvZVwiXHJcbiAqIGNvbnNvbGUubG9nKCdDYW4gcmVkbzonLCBuYW1lLmNhblJlZG8oKSk7IC8vIHRydWVcclxuICpcclxuICogbmFtZS5yZWRvKCk7XHJcbiAqIGNvbnNvbGUubG9nKCdBZnRlciByZWRvOicsIG5hbWUoKSk7IC8vIFwiSmFuZSBEb2VcIlxyXG4gKlxyXG4gKiAvLyBBIG5ldyBjaGFuZ2Ugd2lsbCBjbGVhciB0aGUgcmVkbyBoaXN0b3J5XHJcbiAqIG5hbWUuc2V0KCdKYW5pbmUgRG9lJyk7XHJcbiAqIGNvbnNvbGUubG9nKCdDYW4gcmVkbzonLCBuYW1lLmNhblJlZG8oKSk7IC8vIGZhbHNlXHJcbiAqXHJcbiAqIG5hbWUuY2xlYXIoKTtcclxuICogY29uc29sZS5sb2coJ0NhbiB1bmRvOicsIG5hbWUuY2FuVW5kbygpKTsgLy8gZmFsc2VcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd2l0aEhpc3Rvcnk8VD4oXHJcbiAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBvcHQ/OiBDcmVhdGVIaXN0b3J5T3B0aW9uczxUPixcclxuKTogU2lnbmFsV2l0aEhpc3Rvcnk8VD4ge1xyXG4gIGNvbnN0IGVxdWFsID0gb3B0Py5lcXVhbCA/PyBnZXRTaWduYWxFcXVhbGl0eShzb3VyY2UpO1xyXG4gIGNvbnN0IG1heFNpemUgPSBvcHQ/Lm1heFNpemUgPz8gSW5maW5pdHk7XHJcblxyXG4gIGNvbnN0IGhpc3RvcnkgPSBtdXRhYmxlPFRbXT4oW10sIHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsOiB1bmRlZmluZWQsXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHJlZG9BcnJheSA9IG11dGFibGU8VFtdPihbXSk7XHJcblxyXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gc291cmNlLnNldDtcclxuXHJcbiAgY29uc3Qgc2V0ID0gKHZhbHVlOiBUKSA9PiB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdW50cmFja2VkKHNvdXJjZSk7XHJcbiAgICBpZiAoZXF1YWwodmFsdWUsIGN1cnJlbnQpKSByZXR1cm47XHJcblxyXG4gICAgc291cmNlLnNldCh2YWx1ZSk7XHJcblxyXG4gICAgaGlzdG9yeS5tdXRhdGUoKGMpID0+IHtcclxuICAgICAgaWYgKGMubGVuZ3RoID49IG1heFNpemUpIHtcclxuICAgICAgICBpZiAob3B0Py5jbGVhbnVwU3RyYXRlZ3kgPT09ICdzaGlmdCcpIHtcclxuICAgICAgICAgIGMuc2hpZnQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYyA9IGMuc2xpY2UoTWF0aC5mbG9vcihtYXhTaXplIC8gMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjLnB1c2goY3VycmVudCk7XHJcbiAgICAgIHJldHVybiBjO1xyXG4gICAgfSk7XHJcbiAgICByZWRvQXJyYXkuc2V0KFtdKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGUgPSAodXBkYXRlcjogKHByZXY6IFQpID0+IFQpID0+IHtcclxuICAgIHNldCh1cGRhdGVyKHVudHJhY2tlZChzb3VyY2UpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaW50ZXJuYWwgPSB0b1dyaXRhYmxlKFxyXG4gICAgY29tcHV0ZWQoKCkgPT4gc291cmNlKCksIHtcclxuICAgICAgZXF1YWwsXHJcbiAgICAgIGRlYnVnTmFtZTogb3B0Py5kZWJ1Z05hbWUsXHJcbiAgICB9KSxcclxuICAgIHNldCxcclxuICAgIHVwZGF0ZSxcclxuICApIGFzIFNpZ25hbFdpdGhIaXN0b3J5PFQ+O1xyXG4gIGludGVybmFsLmhpc3RvcnkgPSBoaXN0b3J5O1xyXG5cclxuICBpbnRlcm5hbC51bmRvID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaGlzdG9yeVN0YWNrID0gdW50cmFja2VkKGhpc3RvcnkpO1xyXG4gICAgaWYgKGhpc3RvcnlTdGFjay5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB2YWx1ZUZvclJlZG8gPSB1bnRyYWNrZWQoc291cmNlKTtcclxuICAgIGNvbnN0IHZhbHVlVG9SZXN0b3JlID0gaGlzdG9yeVN0YWNrLmF0KC0xKTtcclxuICAgIGlmICh2YWx1ZVRvUmVzdG9yZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgb3JpZ2luYWxTZXQuY2FsbChzb3VyY2UsIHZhbHVlVG9SZXN0b3JlKTtcclxuXHJcbiAgICBoaXN0b3J5LmlubGluZSgoaCkgPT4gaC5wb3AoKSk7XHJcbiAgICByZWRvQXJyYXkuaW5saW5lKChyKSA9PiByLnB1c2godmFsdWVGb3JSZWRvKSk7XHJcbiAgfTtcclxuXHJcbiAgaW50ZXJuYWwucmVkbyA9ICgpID0+IHtcclxuICAgIGNvbnN0IHJlZG9TdGFjayA9IHVudHJhY2tlZChyZWRvQXJyYXkpO1xyXG4gICAgaWYgKHJlZG9TdGFjay5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB2YWx1ZUZvclVuZG8gPSB1bnRyYWNrZWQoc291cmNlKTtcclxuICAgIGNvbnN0IHZhbHVlVG9SZXN0b3JlID0gcmVkb1N0YWNrLmF0KC0xKTtcclxuICAgIGlmICh2YWx1ZVRvUmVzdG9yZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgb3JpZ2luYWxTZXQuY2FsbChzb3VyY2UsIHZhbHVlVG9SZXN0b3JlKTtcclxuXHJcbiAgICByZWRvQXJyYXkuaW5saW5lKChyKSA9PiByLnBvcCgpKTtcclxuICAgIGhpc3RvcnkubXV0YXRlKChoKSA9PiB7XHJcbiAgICAgIGlmIChoLmxlbmd0aCA+PSBtYXhTaXplKSB7XHJcbiAgICAgICAgaWYgKG9wdD8uY2xlYW51cFN0cmF0ZWd5ID09PSAnc2hpZnQnKSB7XHJcbiAgICAgICAgICBoLnNoaWZ0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGggPSBoLnNsaWNlKE1hdGguZmxvb3IobWF4U2l6ZSAvIDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaC5wdXNoKHZhbHVlRm9yVW5kbyk7XHJcbiAgICAgIHJldHVybiBoO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgaW50ZXJuYWwuY2xlYXIgPSAoKSA9PiB7XHJcbiAgICBoaXN0b3J5LnNldChbXSk7XHJcbiAgICByZWRvQXJyYXkuc2V0KFtdKTtcclxuICB9O1xyXG5cclxuICBpbnRlcm5hbC5jYW5VbmRvID0gY29tcHV0ZWQoKCkgPT4gaGlzdG9yeSgpLmxlbmd0aCA+IDApO1xyXG4gIGludGVybmFsLmNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiByZWRvQXJyYXkoKS5sZW5ndGggPiAwKTtcclxuICBpbnRlcm5hbC5jYW5DbGVhciA9IGNvbXB1dGVkKCgpID0+IGludGVybmFsLmNhblVuZG8oKSB8fCBpbnRlcm5hbC5jYW5SZWRvKCkpO1xyXG5cclxuICByZXR1cm4gaW50ZXJuYWw7XHJcbn1cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1wcmltaXRpdmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbW1zdGFjay1wcmltaXRpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mmstack-primitives.mjs","sources":["../tmp-esm2022/lib/to-writable.js","../tmp-esm2022/lib/debounced.js","../tmp-esm2022/lib/mutable.js","../tmp-esm2022/lib/derived.js","../tmp-esm2022/lib/element-visibility.js","../tmp-esm2022/lib/map-array.js","../tmp-esm2022/lib/nested-effect.js","../tmp-esm2022/lib/pipeable/operators.js","../tmp-esm2022/lib/pipeable/pipeble.js","../tmp-esm2022/lib/sensors/media-query.js","../tmp-esm2022/lib/throttled.js","../tmp-esm2022/lib/sensors/mouse-position.js","../tmp-esm2022/lib/sensors/network-status.js","../tmp-esm2022/lib/sensors/page-visibility.js","../tmp-esm2022/lib/sensors/scroll-position.js","../tmp-esm2022/lib/sensors/window-size.js","../tmp-esm2022/lib/sensors/sensor.js","../tmp-esm2022/lib/stored.js","../tmp-esm2022/lib/tabSync.js","../tmp-esm2022/lib/until.js","../tmp-esm2022/lib/get-signal-equality.js","../tmp-esm2022/lib/with-history.js","../tmp-esm2022/mmstack-primitives.js"],"sourcesContent":["import { untracked } from '@angular/core';\n/**\n * Converts a read-only `Signal` into a `WritableSignal` by providing custom `set` and, optionally, `update` functions.\n * This can be useful for creating controlled write access to a signal that is otherwise read-only.\n *\n * @typeParam T - The type of value held by the signal.\n *\n * @param signal - The read-only `Signal` to be made writable.\n * @param set - A function that will be used to set the signal's value. This function *must* handle\n * the actual update mechanism (e.g., updating a backing store, emitting an event, etc.).\n * @param update - (Optional) A function that will be used to update the signal's value based on its\n * previous value. If not provided, a default `update` implementation is used that\n * calls the provided `set` function with the result of the updater function. The\n * default implementation uses `untracked` to avoid creating unnecessary dependencies\n * within the updater function.\n *\n * @returns A `WritableSignal` that uses the provided `set` and `update` functions. The `asReadonly`\n * method of the returned signal will still return the original read-only signal.\n *\n * @example\n * // Basic usage: Making a read-only signal writable with a custom set function.\n * const originalValue = signal({a: 0});\n * const readOnlySignal = computed(() => originalValue().a);\n * const writableSignal = toWritable(readOnlySignal, (newValue) => {\n * originalValue.update((prev) => { ...prev, a: newValue });\n * });\n *\n * writableSignal.set(5); // sets value of originalValue.a to 5 & triggers all signals\n */\nexport function toWritable(signal, set, update) {\n const internal = signal;\n internal.asReadonly = () => signal;\n internal.set = set;\n internal.update = update ?? ((updater) => set(updater(untracked(internal))));\n return internal;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8td3JpdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvdG8td3JpdGFibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFVLFNBQVMsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFbEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLE1BQWlCLEVBQ2pCLEdBQXVCLEVBQ3ZCLE1BQTJDO0lBRTNDLE1BQU0sUUFBUSxHQUFHLE1BQTJCLENBQUM7SUFDN0MsUUFBUSxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUM7SUFDbkMsUUFBUSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFN0UsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgdW50cmFja2VkLCBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIENvbnZlcnRzIGEgcmVhZC1vbmx5IGBTaWduYWxgIGludG8gYSBgV3JpdGFibGVTaWduYWxgIGJ5IHByb3ZpZGluZyBjdXN0b20gYHNldGAgYW5kLCBvcHRpb25hbGx5LCBgdXBkYXRlYCBmdW5jdGlvbnMuXHJcbiAqIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgY3JlYXRpbmcgY29udHJvbGxlZCB3cml0ZSBhY2Nlc3MgdG8gYSBzaWduYWwgdGhhdCBpcyBvdGhlcndpc2UgcmVhZC1vbmx5LlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB2YWx1ZSBoZWxkIGJ5IHRoZSBzaWduYWwuXHJcbiAqXHJcbiAqIEBwYXJhbSBzaWduYWwgLSBUaGUgcmVhZC1vbmx5IGBTaWduYWxgIHRvIGJlIG1hZGUgd3JpdGFibGUuXHJcbiAqIEBwYXJhbSBzZXQgLSBBIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHNldCB0aGUgc2lnbmFsJ3MgdmFsdWUuICBUaGlzIGZ1bmN0aW9uICptdXN0KiBoYW5kbGVcclxuICogICAgICAgICAgICAgIHRoZSBhY3R1YWwgdXBkYXRlIG1lY2hhbmlzbSAoZS5nLiwgdXBkYXRpbmcgYSBiYWNraW5nIHN0b3JlLCBlbWl0dGluZyBhbiBldmVudCwgZXRjLikuXHJcbiAqIEBwYXJhbSB1cGRhdGUgLSAoT3B0aW9uYWwpIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVzZWQgdG8gdXBkYXRlIHRoZSBzaWduYWwncyB2YWx1ZSBiYXNlZCBvbiBpdHNcclxuICogICAgICAgICAgICAgICAgIHByZXZpb3VzIHZhbHVlLiAgSWYgbm90IHByb3ZpZGVkLCBhIGRlZmF1bHQgYHVwZGF0ZWAgaW1wbGVtZW50YXRpb24gaXMgdXNlZCB0aGF0XHJcbiAqICAgICAgICAgICAgICAgICBjYWxscyB0aGUgcHJvdmlkZWQgYHNldGAgZnVuY3Rpb24gd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSB1cGRhdGVyIGZ1bmN0aW9uLiBUaGVcclxuICogICAgICAgICAgICAgICAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdXNlcyBgdW50cmFja2VkYCB0byBhdm9pZCBjcmVhdGluZyB1bm5lY2Vzc2FyeSBkZXBlbmRlbmNpZXNcclxuICogICAgICAgICAgICAgICAgIHdpdGhpbiB0aGUgdXBkYXRlciBmdW5jdGlvbi5cclxuICpcclxuICogQHJldHVybnMgQSBgV3JpdGFibGVTaWduYWxgIHRoYXQgdXNlcyB0aGUgcHJvdmlkZWQgYHNldGAgYW5kIGB1cGRhdGVgIGZ1bmN0aW9ucy4gIFRoZSBgYXNSZWFkb25seWBcclxuICogICAgICAgICAgbWV0aG9kIG9mIHRoZSByZXR1cm5lZCBzaWduYWwgd2lsbCBzdGlsbCByZXR1cm4gdGhlIG9yaWdpbmFsIHJlYWQtb25seSBzaWduYWwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIEJhc2ljIHVzYWdlOiBNYWtpbmcgYSByZWFkLW9ubHkgc2lnbmFsIHdyaXRhYmxlIHdpdGggYSBjdXN0b20gc2V0IGZ1bmN0aW9uLlxyXG4gKiBjb25zdCBvcmlnaW5hbFZhbHVlID0gc2lnbmFsKHthOiAwfSk7XHJcbiAqIGNvbnN0IHJlYWRPbmx5U2lnbmFsID0gY29tcHV0ZWQoKCkgPT4gb3JpZ2luYWxWYWx1ZSgpLmEpO1xyXG4gKiBjb25zdCB3cml0YWJsZVNpZ25hbCA9IHRvV3JpdGFibGUocmVhZE9ubHlTaWduYWwsIChuZXdWYWx1ZSkgPT4ge1xyXG4gKiAgb3JpZ2luYWxWYWx1ZS51cGRhdGUoKHByZXYpID0+IHsgLi4ucHJldiwgYTogbmV3VmFsdWUgfSk7XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiB3cml0YWJsZVNpZ25hbC5zZXQoNSk7IC8vIHNldHMgdmFsdWUgb2Ygb3JpZ2luYWxWYWx1ZS5hIHRvIDUgJiB0cmlnZ2VycyBhbGwgc2lnbmFsc1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvV3JpdGFibGU8VD4oXHJcbiAgc2lnbmFsOiBTaWduYWw8VD4sXHJcbiAgc2V0OiAodmFsdWU6IFQpID0+IHZvaWQsXHJcbiAgdXBkYXRlPzogKHVwZGF0ZXI6ICh2YWx1ZTogVCkgPT4gVCkgPT4gdm9pZCxcclxuKTogV3JpdGFibGVTaWduYWw8VD4ge1xyXG4gIGNvbnN0IGludGVybmFsID0gc2lnbmFsIGFzIFdyaXRhYmxlU2lnbmFsPFQ+O1xyXG4gIGludGVybmFsLmFzUmVhZG9ubHkgPSAoKSA9PiBzaWduYWw7XHJcbiAgaW50ZXJuYWwuc2V0ID0gc2V0O1xyXG4gIGludGVybmFsLnVwZGF0ZSA9IHVwZGF0ZSA/PyAoKHVwZGF0ZXIpID0+IHNldCh1cGRhdGVyKHVudHJhY2tlZChpbnRlcm5hbCkpKSk7XHJcblxyXG4gIHJldHVybiBpbnRlcm5hbDtcclxufVxyXG4iXX0=","import { computed, DestroyRef, inject, signal, untracked, } from '@angular/core';\nimport { toWritable } from './to-writable';\n/**\n * A convenience function that creates and debounces a new `WritableSignal` in one step.\n *\n * @see {debounce} for the core implementation details.\n *\n * @template T The type of value the signal holds.\n * @param initial The initial value of the signal.\n * @param opt Options for signal creation, including debounce time `ms`.\n * @returns A `DebouncedSignal<T>` instance.\n *\n * @example\n * // The existing example remains perfect here.\n * const query = debounced('', { ms: 500 });\n * effect(() => console.log('Debounced Query:', query()));\n * query.set('abc');\n * // ...500ms later...\n * // Output: Debounced Query: abc\n */\nexport function debounced(initial, opt) {\n return debounce(signal(initial, opt), opt);\n}\n/**\n * Wraps an existing `WritableSignal` to create a new one whose readable value is debounced.\n *\n * This implementation avoids using `effect` by pairing a trigger signal with an `untracked`\n * read of the source signal to control when the debounced value is re-evaluated.\n *\n * @template T The type of value the signal holds.\n * @param source The source `WritableSignal` to wrap. Writes are applied to this signal immediately.\n * @param opt Options for debouncing, including debounce time `ms` and an optional `DestroyRef`.\n * @returns A new `DebouncedSignal<T>` whose read value is debounced. The `.original` property\n * of the returned signal is a reference back to the provided `source` signal.\n *\n * @example\n * ```ts\n * import { signal, effect } from '@angular/core';\n *\n * // 1. Create a standard source signal.\n * const sourceQuery = signal('');\n *\n * // 2. Create a debounced version of it.\n * const debouncedQuery = debounce(sourceQuery, { ms: 500 });\n *\n * // This effect tracks the original signal and runs immediately.\n * effect(() => {\n * console.log('Original Query:', debouncedQuery.original());\n * });\n *\n * // This effect tracks the debounced signal and runs after the delay.\n * effect(() => {\n * console.log('Debounced Query:', debouncedQuery());\n * });\n *\n * console.log('Setting query to \"a\"');\n * debouncedQuery.set('a');\n * // Output: Original Query: a\n *\n * // ...500ms later...\n * // Output: Debounced Query: a\n * ```\n */\nexport function debounce(source, opt) {\n const ms = opt?.ms ?? 0;\n const trigger = signal(false, ...(ngDevMode ? [{ debugName: \"trigger\" }] : []));\n let timeout;\n try {\n const destroyRef = opt?.destroyRef ?? inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => {\n if (timeout)\n clearTimeout(timeout);\n timeout = undefined;\n });\n }\n catch {\n // not in injection context & no destroyRef provided opting out of cleanup\n }\n const triggerFn = (afterClean) => {\n if (timeout)\n clearTimeout(timeout);\n afterClean();\n timeout = setTimeout(() => {\n trigger.update((c) => !c);\n }, ms);\n };\n const set = (value) => {\n triggerFn(() => source.set(value));\n };\n const update = (fn) => {\n triggerFn(() => source.update(fn));\n };\n const writable = toWritable(computed(() => {\n trigger();\n return untracked(source);\n }, opt), set, update);\n writable.original = source;\n return writable;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVib3VuY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL2RlYm91bmNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBd0MzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixPQUFVLEVBQ1YsR0FBK0I7SUFFL0IsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVDRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQ3RCLE1BQXlCLEVBQ3pCLEdBQStCO0lBRS9CLE1BQU0sRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXhCLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLG1EQUFDLENBQUM7SUFFOUIsSUFBSSxPQUFrRCxDQUFDO0lBRXZELElBQUksQ0FBQztRQUNILE1BQU0sVUFBVSxHQUNkLEdBQUcsRUFBRSxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRTVELFVBQVUsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3pCLElBQUksT0FBTztnQkFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCwwRUFBMEU7SUFDNUUsQ0FBQztJQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBc0IsRUFBRSxFQUFFO1FBQzNDLElBQUksT0FBTztZQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxVQUFVLEVBQUUsQ0FBQztRQUNiLE9BQU8sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtRQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBa0IsRUFBRSxFQUFFO1FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osT0FBTyxFQUFFLENBQUM7UUFDVixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ1AsR0FBRyxFQUNILE1BQU0sQ0FDZSxDQUFDO0lBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBRTNCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIHR5cGUgQ3JlYXRlU2lnbmFsT3B0aW9ucyxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICB0eXBlIFNpZ25hbCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICcuL3RvLXdyaXRhYmxlJztcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjcmVhdGluZyBhIGRlYm91bmNlZCB3cml0YWJsZSBzaWduYWwuXHJcbiAqIEV4dGVuZHMgQW5ndWxhcidzIGBDcmVhdGVTaWduYWxPcHRpb25zYCB3aXRoIGEgZGVib3VuY2UgdGltZSBzZXR0aW5nLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSBoZWxkIGJ5IHRoZSBzaWduYWwuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVEZWJvdW5jZWRPcHRpb25zPFQ+ID0gQ3JlYXRlU2lnbmFsT3B0aW9uczxUPiAmIHtcclxuICAvKipcclxuICAgKiBUaGUgZGVib3VuY2UgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLiBTcGVjaWZpZXMgaG93IGxvbmcgdG8gd2FpdCBhZnRlciB0aGVcclxuICAgKiBsYXN0IGBzZXRgIG9yIGB1cGRhdGVgIGNhbGwgYmVmb3JlIHRoZSBkZWJvdW5jZWQgc2lnbmFsIHJlZmxlY3RzIHRoZSBuZXcgdmFsdWUuXHJcbiAgICovXHJcbiAgbXM/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgYERlc3Ryb3lSZWZgIHRvIGNsZWFuIHVwIHRoZSBkZWJvdW5jZSB0aW1lciB3aGVuIHRoZSBzaWduYWwgaXMgZGVzdHJveWVkLlxyXG4gICAqIElmIHByb3ZpZGVkLCB0aGUgdGltZXIgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHNpZ25hbCBpcyBkZXN0cm95ZWQuXHJcbiAgICogSWYgdGhlIHNpZ25hbCBpcyBjYWxsZWQgd2l0aGluIGEgcmVhY3RpdmUgY29udGV4dCBhIERlc3Ryb3lSZWYgaXMgaW5qZWN0ZWQgYXV0b21hdGljYWxseS5cclxuICAgKiBJZiBpdCBpcyBub3QgcHJvdmlkZWQgb3IgaW5qZWN0ZWQsIHRoZSB0aW1lciB3aWxsIG5vdCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuLi53aGljaCBpcyB1c3VhbGx5IGZpbmUgOilcclxuICAgKi9cclxuICBkZXN0cm95UmVmPzogRGVzdHJveVJlZjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNwZWNpYWxpemVkIGBXcml0YWJsZVNpZ25hbGAgd2hvc2UgcHVibGljbHkgcmVhZGFibGUgdmFsdWUgdXBkYXRlcyBhcmUgZGVib3VuY2VkLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcsIG5vbi1kZWJvdW5jZWQgc2lnbmFsIHZpYSB0aGUgYG9yaWdpbmFsYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRGVib3VuY2VkU2lnbmFsPFQ+ID0gV3JpdGFibGVTaWduYWw8VD4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsLCBpbm5lciBgV3JpdGFibGVTaWduYWxgLlxyXG4gICAqIFRoaXMgc2lnbmFsJ3MgdmFsdWUgaXMgdXBkYXRlZCAqaW1tZWRpYXRlbHkqIHVwb24gY2FsbHMgdG8gYHNldGAgb3IgYHVwZGF0ZWBcclxuICAgKiBvbiB0aGUgcGFyZW50IGBEZWJvdW5jZWRTaWduYWxgLiBVc2VmdWwgZm9yIGFjY2Vzc2luZyB0aGUgbGF0ZXN0IHZhbHVlXHJcbiAgICogd2l0aG91dCB0aGUgZGVib3VuY2UgZGVsYXkuXHJcbiAgICovXHJcbiAgb3JpZ2luYWw6IFNpZ25hbDxUPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbmQgZGVib3VuY2VzIGEgbmV3IGBXcml0YWJsZVNpZ25hbGAgaW4gb25lIHN0ZXAuXHJcbiAqXHJcbiAqIEBzZWUge2RlYm91bmNlfSBmb3IgdGhlIGNvcmUgaW1wbGVtZW50YXRpb24gZGV0YWlscy5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgdGhlIHNpZ25hbCBob2xkcy5cclxuICogQHBhcmFtIGluaXRpYWwgVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHNpZ25hbC5cclxuICogQHBhcmFtIG9wdCBPcHRpb25zIGZvciBzaWduYWwgY3JlYXRpb24sIGluY2x1ZGluZyBkZWJvdW5jZSB0aW1lIGBtc2AuXHJcbiAqIEByZXR1cm5zIEEgYERlYm91bmNlZFNpZ25hbDxUPmAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIC8vIFRoZSBleGlzdGluZyBleGFtcGxlIHJlbWFpbnMgcGVyZmVjdCBoZXJlLlxyXG4gKiBjb25zdCBxdWVyeSA9IGRlYm91bmNlZCgnJywgeyBtczogNTAwIH0pO1xyXG4gKiBlZmZlY3QoKCkgPT4gY29uc29sZS5sb2coJ0RlYm91bmNlZCBRdWVyeTonLCBxdWVyeSgpKSk7XHJcbiAqIHF1ZXJ5LnNldCgnYWJjJyk7XHJcbiAqIC8vIC4uLjUwMG1zIGxhdGVyLi4uXHJcbiAqIC8vIE91dHB1dDogRGVib3VuY2VkIFF1ZXJ5OiBhYmNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZWQ8VD4oXHJcbiAgaW5pdGlhbDogVCxcclxuICBvcHQ/OiBDcmVhdGVEZWJvdW5jZWRPcHRpb25zPFQ+LFxyXG4pOiBEZWJvdW5jZWRTaWduYWw8VD4ge1xyXG4gIHJldHVybiBkZWJvdW5jZShzaWduYWwoaW5pdGlhbCwgb3B0KSwgb3B0KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFdyYXBzIGFuIGV4aXN0aW5nIGBXcml0YWJsZVNpZ25hbGAgdG8gY3JlYXRlIGEgbmV3IG9uZSB3aG9zZSByZWFkYWJsZSB2YWx1ZSBpcyBkZWJvdW5jZWQuXHJcbiAqXHJcbiAqIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIHVzaW5nIGBlZmZlY3RgIGJ5IHBhaXJpbmcgYSB0cmlnZ2VyIHNpZ25hbCB3aXRoIGFuIGB1bnRyYWNrZWRgXHJcbiAqIHJlYWQgb2YgdGhlIHNvdXJjZSBzaWduYWwgdG8gY29udHJvbCB3aGVuIHRoZSBkZWJvdW5jZWQgdmFsdWUgaXMgcmUtZXZhbHVhdGVkLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSB0aGUgc2lnbmFsIGhvbGRzLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYFdyaXRhYmxlU2lnbmFsYCB0byB3cmFwLiBXcml0ZXMgYXJlIGFwcGxpZWQgdG8gdGhpcyBzaWduYWwgaW1tZWRpYXRlbHkuXHJcbiAqIEBwYXJhbSBvcHQgT3B0aW9ucyBmb3IgZGVib3VuY2luZywgaW5jbHVkaW5nIGRlYm91bmNlIHRpbWUgYG1zYCBhbmQgYW4gb3B0aW9uYWwgYERlc3Ryb3lSZWZgLlxyXG4gKiBAcmV0dXJucyBBIG5ldyBgRGVib3VuY2VkU2lnbmFsPFQ+YCB3aG9zZSByZWFkIHZhbHVlIGlzIGRlYm91bmNlZC4gVGhlIGAub3JpZ2luYWxgIHByb3BlcnR5XHJcbiAqIG9mIHRoZSByZXR1cm5lZCBzaWduYWwgaXMgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgcHJvdmlkZWQgYHNvdXJjZWAgc2lnbmFsLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBzaWduYWwsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKlxyXG4gKiAvLyAxLiBDcmVhdGUgYSBzdGFuZGFyZCBzb3VyY2Ugc2lnbmFsLlxyXG4gKiBjb25zdCBzb3VyY2VRdWVyeSA9IHNpZ25hbCgnJyk7XHJcbiAqXHJcbiAqIC8vIDIuIENyZWF0ZSBhIGRlYm91bmNlZCB2ZXJzaW9uIG9mIGl0LlxyXG4gKiBjb25zdCBkZWJvdW5jZWRRdWVyeSA9IGRlYm91bmNlKHNvdXJjZVF1ZXJ5LCB7IG1zOiA1MDAgfSk7XHJcbiAqXHJcbiAqIC8vIFRoaXMgZWZmZWN0IHRyYWNrcyB0aGUgb3JpZ2luYWwgc2lnbmFsIGFuZCBydW5zIGltbWVkaWF0ZWx5LlxyXG4gKiBlZmZlY3QoKCkgPT4ge1xyXG4gKiBjb25zb2xlLmxvZygnT3JpZ2luYWwgUXVlcnk6JywgZGVib3VuY2VkUXVlcnkub3JpZ2luYWwoKSk7XHJcbiAqIH0pO1xyXG4gKlxyXG4gKiAvLyBUaGlzIGVmZmVjdCB0cmFja3MgdGhlIGRlYm91bmNlZCBzaWduYWwgYW5kIHJ1bnMgYWZ0ZXIgdGhlIGRlbGF5LlxyXG4gKiBlZmZlY3QoKCkgPT4ge1xyXG4gKiBjb25zb2xlLmxvZygnRGVib3VuY2VkIFF1ZXJ5OicsIGRlYm91bmNlZFF1ZXJ5KCkpO1xyXG4gKiB9KTtcclxuICpcclxuICogY29uc29sZS5sb2coJ1NldHRpbmcgcXVlcnkgdG8gXCJhXCInKTtcclxuICogZGVib3VuY2VkUXVlcnkuc2V0KCdhJyk7XHJcbiAqIC8vIE91dHB1dDogT3JpZ2luYWwgUXVlcnk6IGFcclxuICpcclxuICogLy8gLi4uNTAwbXMgbGF0ZXIuLi5cclxuICogLy8gT3V0cHV0OiBEZWJvdW5jZWQgUXVlcnk6IGFcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVib3VuY2U8VD4oXHJcbiAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBvcHQ/OiBDcmVhdGVEZWJvdW5jZWRPcHRpb25zPFQ+LFxyXG4pOiBEZWJvdW5jZWRTaWduYWw8VD4ge1xyXG4gIGNvbnN0IG1zID0gb3B0Py5tcyA/PyAwO1xyXG5cclxuICBjb25zdCB0cmlnZ2VyID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcbiAgbGV0IHRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xyXG5cclxuICB0cnkge1xyXG4gICAgY29uc3QgZGVzdHJveVJlZiA9XHJcbiAgICAgIG9wdD8uZGVzdHJveVJlZiA/PyBpbmplY3QoRGVzdHJveVJlZiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcclxuXHJcbiAgICBkZXN0cm95UmVmPy5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgICBpZiAodGltZW91dCkgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSk7XHJcbiAgfSBjYXRjaCB7XHJcbiAgICAvLyBub3QgaW4gaW5qZWN0aW9uIGNvbnRleHQgJiBubyBkZXN0cm95UmVmIHByb3ZpZGVkIG9wdGluZyBvdXQgb2YgY2xlYW51cFxyXG4gIH1cclxuXHJcbiAgY29uc3QgdHJpZ2dlckZuID0gKGFmdGVyQ2xlYW46ICgpID0+IHZvaWQpID0+IHtcclxuICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICBhZnRlckNsZWFuKCk7XHJcbiAgICB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRyaWdnZXIudXBkYXRlKChjKSA9PiAhYyk7XHJcbiAgICB9LCBtcyk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2V0ID0gKHZhbHVlOiBUKSA9PiB7XHJcbiAgICB0cmlnZ2VyRm4oKCkgPT4gc291cmNlLnNldCh2YWx1ZSkpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHVwZGF0ZSA9IChmbjogKHByZXY6IFQpID0+IFQpID0+IHtcclxuICAgIHRyaWdnZXJGbigoKSA9PiBzb3VyY2UudXBkYXRlKGZuKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgd3JpdGFibGUgPSB0b1dyaXRhYmxlKFxyXG4gICAgY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICB0cmlnZ2VyKCk7XHJcbiAgICAgIHJldHVybiB1bnRyYWNrZWQoc291cmNlKTtcclxuICAgIH0sIG9wdCksXHJcbiAgICBzZXQsXHJcbiAgICB1cGRhdGUsXHJcbiAgKSBhcyBEZWJvdW5jZWRTaWduYWw8VD47XHJcbiAgd3JpdGFibGUub3JpZ2luYWwgPSBzb3VyY2U7XHJcblxyXG4gIHJldHVybiB3cml0YWJsZTtcclxufVxyXG4iXX0=","import { signal, } from '@angular/core';\nconst { is } = Object;\nexport function mutable(initial, opt) {\n const baseEqual = opt?.equal ?? is;\n let trigger = false;\n const equal = (a, b) => {\n if (trigger)\n return false;\n return baseEqual(a, b);\n };\n const sig = signal(initial, {\n ...opt,\n equal,\n });\n const internalUpdate = sig.update;\n sig.mutate = (updater) => {\n trigger = true;\n internalUpdate(updater);\n trigger = false;\n };\n sig.inline = (updater) => {\n sig.mutate((prev) => {\n updater(prev);\n return prev;\n });\n };\n return sig;\n}\n/**\n * Type guard function to check if a given `WritableSignal` is a `MutableSignal`. This is useful\n * for situations where you need to conditionally use the `mutate` or `inline` methods.\n *\n * @typeParam T - The type of the signal's value (optional, defaults to `any`).\n * @param value - The `WritableSignal` to check.\n * @returns `true` if the signal is a `MutableSignal`, `false` otherwise.\n *\n * @example\n * const mySignal = signal(0);\n * const myMutableSignal = mutable(0);\n *\n * if (isMutable(mySignal)) {\n * mySignal.mutate(x => x + 1); // This would cause a type error, as mySignal is not a MutableSignal.\n * }\n *\n * if (isMutable(myMutableSignal)) {\n * myMutableSignal.mutate(x => x + 1); // This is safe.\n * }\n */\nexport function isMutable(value) {\n return 'mutate' in value && typeof value.mutate === 'function';\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXV0YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9tdXRhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxNQUFNLEdBSVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sQ0FBQztBQWlGdEIsTUFBTSxVQUFVLE9BQU8sQ0FDckIsT0FBVyxFQUNYLEdBQTRCO0lBRTVCLE1BQU0sU0FBUyxHQUFHLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO0lBQ25DLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztJQUVwQixNQUFNLEtBQUssR0FBbUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDckQsSUFBSSxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDMUIsT0FBTyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBZ0IsT0FBTyxFQUFFO1FBQ3pDLEdBQUcsR0FBRztRQUNOLEtBQUs7S0FDTixDQUFxQixDQUFDO0lBRXZCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFbEMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ3ZCLE9BQU8sR0FBRyxJQUFJLENBQUM7UUFDZixjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEIsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNsQixDQUFDLENBQUM7SUFFRixHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDdkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNkLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEtBQXdCO0lBRXhCLE9BQU8sUUFBUSxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDO0FBQ2pFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIHNpZ25hbCxcclxuICB0eXBlIENyZWF0ZVNpZ25hbE9wdGlvbnMsXHJcbiAgdHlwZSBWYWx1ZUVxdWFsaXR5Rm4sXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmNvbnN0IHsgaXMgfSA9IE9iamVjdDtcclxuXHJcbi8qKlxyXG4gKiBBIGBNdXRhYmxlU2lnbmFsYCBpcyBhIHNwZWNpYWwgdHlwZSBvZiBgV3JpdGFibGVTaWduYWxgIHRoYXQgYWxsb3dzIGZvciBpbi1wbGFjZSBtdXRhdGlvbiBvZiBpdHMgdmFsdWUuXHJcbiAqIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBgc2V0YCBhbmQgYHVwZGF0ZWAgbWV0aG9kcywgaXQgcHJvdmlkZXMgYSBgbXV0YXRlYCBtZXRob2QuICBUaGlzIGlzIHVzZWZ1bFxyXG4gKiBmb3IgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHdoZW4gZGVhbGluZyB3aXRoIGNvbXBsZXggb2JqZWN0cyBvciBhcnJheXMsIGFzIGl0IGF2b2lkcyB1bm5lY2Vzc2FyeVxyXG4gKiBvYmplY3QgY29weWluZy5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTXV0YWJsZVNpZ25hbDxUPiA9IFdyaXRhYmxlU2lnbmFsPFQ+ICYge1xyXG4gIC8qKlxyXG4gICAqIE11dGF0ZXMgdGhlIHNpZ25hbCdzIHZhbHVlIGluLXBsYWNlLiAgVGhpcyBpcyBzaW1pbGFyIHRvIGB1cGRhdGVgLCBidXQgaXQncyBvcHRpbWl6ZWQgZm9yXHJcbiAgICogc2NlbmFyaW9zIHdoZXJlIHlvdSB3YW50IHRvIG1vZGlmeSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGRpcmVjdGx5IHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgbmV3IG9uZS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB1cGRhdGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjdXJyZW50IHZhbHVlIGFzIGlucHV0IGFuZCBtb2RpZmllcyBpdCBkaXJlY3RseS5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogY29uc3QgbXlBcnJheSA9IG11dGFibGUoWzEsIDIsIDNdKTtcclxuICAgKiBteUFycmF5Lm11dGF0ZSgoYXJyKSA9PiB7XHJcbiAgICogIGFyci5wdXNoKDQpO1xyXG4gICAqICByZXR1cm4gYXJyO1xyXG4gICAqIH0pOyAvLyBteUFycmF5KCkgbm93IHJldHVybnMgWzEsIDIsIDMsIDRdXHJcbiAgICovXHJcbiAgbXV0YXRlOiBXcml0YWJsZVNpZ25hbDxUPlsndXBkYXRlJ107XHJcblxyXG4gIC8qKlxyXG4gICAqIE11dGF0ZXMgdGhlIHNpZ25hbCdzIHZhbHVlIGluLXBsYWNlLCBzaW1pbGFyIHRvIGBtdXRhdGVgLCBidXQgd2l0aCBhIHZvaWQtcmV0dXJuaW5nIHZhbHVlIGluIHVwZGF0ZXJcclxuICAgKiBmdW5jdGlvbi4gVGhpcyBmdXJ0aGVyIGVtcGhhc2l6ZXMgdGhhdCB0aGUgbXV0YXRpb24gaXMgaGFwcGVuaW5nIGlubGluZSwgaW1wcm92aW5nIHJlYWRhYmlsaXR5XHJcbiAgICogaW4gc29tZSBjYXNlcy5cclxuICAgKiBAcGFyYW0gdXBkYXRlciAtIEZ1bmN0aW9uIHRvIGNoYW5nZSB0byB0aGUgY3VycmVudCB2YWx1ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogY29uc3QgbXlPYmplY3QgPSBtdXRhYmxlKHsgYTogMSwgYjogMiB9KTtcclxuICAgKiBteU9iamVjdC5pbmxpbmUoKG9iaikgPT4gKG9iai5hID0gMykpOyAvLyBteU9iamVjdCgpIG5vdyByZXR1cm5zIHsgYTogMywgYjogMiB9XHJcbiAgICovXHJcbiAgaW5saW5lOiAodXBkYXRlcjogKHZhbHVlOiBUKSA9PiB2b2lkKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgTXV0YWJsZVNpZ25hbGAuIFRoaXMgZnVuY3Rpb24gb3ZlcmxvYWRzIHRoZSBzdGFuZGFyZCBgc2lnbmFsYCBmdW5jdGlvbiB0byBwcm92aWRlXHJcbiAqIHRoZSBhZGRpdGlvbmFsIGBtdXRhdGVgIGFuZCBgaW5saW5lYCBtZXRob2RzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzaWduYWwgb3B0aW9ucywgaW5jbHVkaW5nIGEgY3VzdG9tIGBlcXVhbGAgZnVuY3Rpb24uXHJcbiAqIEByZXR1cm5zIEEgYE11dGFibGVTaWduYWxgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiAjIyMgSW1wb3J0YW50IE5vdGUgb24gYGNvbXB1dGVkYCBTaWduYWxzXHJcbiAqXHJcbiAqIFdoZW4gY3JlYXRpbmcgYSBgY29tcHV0ZWRgIHNpZ25hbCB0aGF0IGRlcml2ZXMgYSBub24tcHJpbWl0aXZlIHZhbHVlIChlLmcuLCBhbiBvYmplY3Qgb3IgYXJyYXkpXHJcbiAqIGZyb20gYSBgbXV0YWJsZWAgc2lnbmFsLCB5b3UgKiptdXN0KiogcHJvdmlkZSB0aGUgYHsgZXF1YWw6IGZhbHNlIH1gIG9wdGlvbiB0byB0aGUgYGNvbXB1dGVkYFxyXG4gKiBmdW5jdGlvbi5cclxuICpcclxuICogVGhpcyBpcyBiZWNhdXNlIGEgYC5tdXRhdGUoKWAgY2FsbCBub3RpZmllcyBpdHMgZGVwZW5kZW50cyB0aGF0IGl0IGhhcyBjaGFuZ2VkLCBidXQgaWYgdGhlXHJcbiAqIHJlZmVyZW5jZSB0byBhIGRlcml2ZWQgb2JqZWN0IGhhc24ndCBjaGFuZ2VkLCB0aGUgYGNvbXB1dGVkYCBzaWduYWwgd2lsbCBub3QgdHJpZ2dlciBpdHNcclxuICogb3duIGRlcGVuZGVudHMgYnkgZGVmYXVsdC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3Qgc3RhdGUgPSBtdXRhYmxlKHsgdXNlcjogeyBuYW1lOiAnSm9obicgfSwgbGFzdFVwZGF0ZWQ6IG5ldyBEYXRlKCkgfSk7XHJcbiAqXHJcbiAqIC8vIOKchSBDT1JSRUNUOiBEZXJpdmluZyBhIHByaW1pdGl2ZSB2YWx1ZSB3b3JrcyBhcyBleHBlY3RlZC5cclxuICogY29uc3QgbmFtZSA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkudXNlci5uYW1lKTtcclxuICpcclxuICogLy8g4p2MIElOQ09SUkVDVDogVGhpcyB3aWxsIG5vdCB1cGRhdGUgcmVsaWFibHkgYWZ0ZXIgdGhlIGZpcnN0IGNoYW5nZS5cclxuICogY29uc3QgdXNlck9iamVjdCA9IGNvbXB1dGVkKCgpID0+IHN0YXRlKCkudXNlcik7XHJcbiAqXHJcbiAqIC8vIOKchSBDT1JSRUNUOiBGb3Igb2JqZWN0IGRlcml2YXRpb25zLCBgZXF1YWw6IGZhbHNlYCBpcyByZXF1aXJlZC5cclxuICogY29uc3QgdXNlck9iamVjdEZpeGVkID0gY29tcHV0ZWQoKCkgPT4gc3RhdGUoKS51c2VyLCB7IGVxdWFsOiBmYWxzZSB9KTtcclxuICpcclxuICogLy8gVGhpcyBtdXRhdGlvbiB3aWxsIG5vdyBjb3JyZWN0bHkgdHJpZ2dlciBlZmZlY3RzIGRlcGVuZGluZyBvbiBgdXNlck9iamVjdEZpeGVkYC5cclxuICogc3RhdGUubXV0YXRlKHMgPT4gcy5sYXN0VXBkYXRlZCA9IG5ldyBEYXRlKCkpO1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtdXRhYmxlPFQ+KCk6IE11dGFibGVTaWduYWw8VCB8IHVuZGVmaW5lZD47XHJcbmV4cG9ydCBmdW5jdGlvbiBtdXRhYmxlPFQ+KGluaXRpYWw6IFQpOiBNdXRhYmxlU2lnbmFsPFQ+O1xyXG5leHBvcnQgZnVuY3Rpb24gbXV0YWJsZTxUPihcclxuICBpbml0aWFsOiBULFxyXG4gIG9wdD86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4sXHJcbik6IE11dGFibGVTaWduYWw8VD47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbXV0YWJsZTxUPihcclxuICBpbml0aWFsPzogVCxcclxuICBvcHQ/OiBDcmVhdGVTaWduYWxPcHRpb25zPFQ+LFxyXG4pOiBNdXRhYmxlU2lnbmFsPFQ+IHtcclxuICBjb25zdCBiYXNlRXF1YWwgPSBvcHQ/LmVxdWFsID8/IGlzO1xyXG4gIGxldCB0cmlnZ2VyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0IGVxdWFsOiBWYWx1ZUVxdWFsaXR5Rm48VCB8IHVuZGVmaW5lZD4gPSAoYSwgYikgPT4ge1xyXG4gICAgaWYgKHRyaWdnZXIpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBiYXNlRXF1YWwoYSwgYik7XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgc2lnID0gc2lnbmFsPFQgfCB1bmRlZmluZWQ+KGluaXRpYWwsIHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsLFxyXG4gIH0pIGFzIE11dGFibGVTaWduYWw8VD47XHJcblxyXG4gIGNvbnN0IGludGVybmFsVXBkYXRlID0gc2lnLnVwZGF0ZTtcclxuXHJcbiAgc2lnLm11dGF0ZSA9ICh1cGRhdGVyKSA9PiB7XHJcbiAgICB0cmlnZ2VyID0gdHJ1ZTtcclxuICAgIGludGVybmFsVXBkYXRlKHVwZGF0ZXIpO1xyXG4gICAgdHJpZ2dlciA9IGZhbHNlO1xyXG4gIH07XHJcblxyXG4gIHNpZy5pbmxpbmUgPSAodXBkYXRlcikgPT4ge1xyXG4gICAgc2lnLm11dGF0ZSgocHJldikgPT4ge1xyXG4gICAgICB1cGRhdGVyKHByZXYpO1xyXG4gICAgICByZXR1cm4gcHJldjtcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBzaWc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBUeXBlIGd1YXJkIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgZ2l2ZW4gYFdyaXRhYmxlU2lnbmFsYCBpcyBhIGBNdXRhYmxlU2lnbmFsYC4gIFRoaXMgaXMgdXNlZnVsXHJcbiAqIGZvciBzaXR1YXRpb25zIHdoZXJlIHlvdSBuZWVkIHRvIGNvbmRpdGlvbmFsbHkgdXNlIHRoZSBgbXV0YXRlYCBvciBgaW5saW5lYCBtZXRob2RzLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgc2lnbmFsJ3MgdmFsdWUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBgYW55YCkuXHJcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBgV3JpdGFibGVTaWduYWxgIHRvIGNoZWNrLlxyXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHNpZ25hbCBpcyBhIGBNdXRhYmxlU2lnbmFsYCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IG15U2lnbmFsID0gc2lnbmFsKDApO1xyXG4gKiBjb25zdCBteU11dGFibGVTaWduYWwgPSBtdXRhYmxlKDApO1xyXG4gKlxyXG4gKiBpZiAoaXNNdXRhYmxlKG15U2lnbmFsKSkge1xyXG4gKiAgIG15U2lnbmFsLm11dGF0ZSh4ID0+IHggKyAxKTsgLy8gVGhpcyB3b3VsZCBjYXVzZSBhIHR5cGUgZXJyb3IsIGFzIG15U2lnbmFsIGlzIG5vdCBhIE11dGFibGVTaWduYWwuXHJcbiAqIH1cclxuICpcclxuICogaWYgKGlzTXV0YWJsZShteU11dGFibGVTaWduYWwpKSB7XHJcbiAqICAgbXlNdXRhYmxlU2lnbmFsLm11dGF0ZSh4ID0+IHggKyAxKTsgLy8gVGhpcyBpcyBzYWZlLlxyXG4gKiB9XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaXNNdXRhYmxlPFQgPSBhbnk+KFxyXG4gIHZhbHVlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuKTogdmFsdWUgaXMgTXV0YWJsZVNpZ25hbDxUPiB7XHJcbiAgcmV0dXJuICdtdXRhdGUnIGluIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5tdXRhdGUgPT09ICdmdW5jdGlvbic7XHJcbn1cclxuIl19","import { computed, signal, untracked, } from '@angular/core';\nimport { isMutable } from './mutable';\nimport { toWritable } from './to-writable';\nexport function derived(source, optOrKey, opt) {\n const isArray = Array.isArray(untracked(source)) && typeof optOrKey === 'number';\n const from = typeof optOrKey === 'object' ? optOrKey.from : (v) => v[optOrKey];\n const onChange = typeof optOrKey === 'object'\n ? optOrKey.onChange\n : isArray\n ? isMutable(source)\n ? (next) => {\n source.mutate((cur) => {\n cur[optOrKey] = next;\n return cur;\n });\n }\n : (next) => {\n source.update((cur) => {\n const newArray = [...cur];\n newArray[optOrKey] = next;\n return newArray;\n });\n }\n : isMutable(source)\n ? (next) => {\n source.mutate((cur) => {\n cur[optOrKey] = next;\n return cur;\n });\n }\n : (next) => {\n source.update((cur) => ({ ...cur, [optOrKey]: next }));\n };\n const rest = typeof optOrKey === 'object' ? optOrKey : opt;\n const baseEqual = rest?.equal ?? Object.is;\n let trigger = false;\n const equal = isMutable(source)\n ? (a, b) => {\n if (trigger)\n return false;\n return baseEqual(a, b);\n }\n : baseEqual;\n const sig = toWritable(computed(() => from(source()), { ...rest, equal }), (newVal) => onChange(newVal));\n sig.from = from;\n if (isMutable(source)) {\n sig.mutate = (updater) => {\n trigger = true;\n sig.update(updater);\n trigger = false;\n };\n sig.inline = (updater) => {\n sig.mutate((prev) => {\n updater(prev);\n return prev;\n });\n };\n }\n return sig;\n}\n/**\n * Creates a \"fake\" `DerivedSignal` from a simple value. This is useful for creating\n * `FormControlSignal` instances that are not directly derived from another signal.\n * The returned signal's `from` function will always return the initial value.\n *\n * @typeParam T - This type parameter is not used in the implementation but is kept for type compatibility with `DerivedSignal`.\n * @typeParam U - The type of the signal's value.\n * @param initial - The initial value of the signal.\n * @returns A `DerivedSignal` instance.\n * @internal\n */\nexport function toFakeDerivation(initial) {\n const sig = signal(initial);\n sig.from = () => initial;\n return sig;\n}\n/**\n * Creates a \"fake\" `DerivedSignal` from an existing `WritableSignal`. This is useful\n * for treating a regular `WritableSignal` as a `DerivedSignal` without changing its behavior.\n * The returned signal's `from` function returns the current value of signal, using `untracked`.\n *\n * @typeParam T - This type parameter is not used in the implementation but is kept for type compatibility with `DerivedSignal`.\n * @typeParam U - The type of the signal's value.\n * @param initial - The existing `WritableSignal`.\n * @returns A `DerivedSignal` instance.\n * @internal\n */\nexport function toFakeSignalDerivation(initial) {\n const sig = initial;\n sig.from = () => untracked(initial);\n return sig;\n}\n/**\n * Type guard function to check if a given `WritableSignal` is a `DerivedSignal`.\n *\n * @typeParam T - The type of the source signal's value (optional, defaults to `any`).\n * @typeParam U - The type of the derived signal's value (optional, defaults to `any`).\n * @param sig - The `WritableSignal` to check.\n * @returns `true` if the signal is a `DerivedSignal`, `false` otherwise.\n */\nexport function isDerivation(sig) {\n return 'from' in sig;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVyaXZlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9kZXJpdmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBRVIsTUFBTSxFQUNOLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBdUozQyxNQUFNLFVBQVUsT0FBTyxDQUNyQixNQUE0QyxFQUM1QyxRQUE4QyxFQUM5QyxHQUE0QjtJQUU1QixNQUFNLE9BQU8sR0FDWCxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQztJQUVuRSxNQUFNLElBQUksR0FDUixPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFNLENBQUM7SUFFNUUsTUFBTSxRQUFRLEdBQ1osT0FBTyxRQUFRLEtBQUssUUFBUTtRQUMxQixDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7UUFDbkIsQ0FBQyxDQUFDLE9BQU87WUFDUCxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDakIsQ0FBQyxDQUFDLENBQUMsSUFBTyxFQUFFLEVBQUU7b0JBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNuQixHQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO3dCQUNoQyxPQUFPLEdBQVEsQ0FBQztvQkFDbEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FB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Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLE9BQTBCO0lBRTFCLE1BQU0sR0FBRyxHQUFHLE9BQThCLENBQUM7SUFDM0MsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLEdBQXNCO0lBRXRCLE9BQU8sTUFBTSxJQUFJLEdBQUcsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgVmFsdWVFcXVhbGl0eUZuLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGlzTXV0YWJsZSwgTXV0YWJsZVNpZ25hbCB9IGZyb20gJy4vbXV0YWJsZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICcuL3RvLXdyaXRhYmxlJztcclxuXHJcbnR5cGUgVW5rbm93bk9iamVjdCA9IFJlY29yZDxQcm9wZXJ0eUtleSwgdW5rbm93bj47XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBkZXJpdmVkIHNpZ25hbCB1c2luZyB0aGUgZnVsbCBgZGVyaXZlZGAgZnVuY3Rpb24gc2lnbmF0dXJlLlxyXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlIChwYXJlbnQpLlxyXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiB0aGUgZGVyaXZlZCBzaWduYWwncyB2YWx1ZSAoY2hpbGQpLlxyXG4gKi9cclxudHlwZSBDcmVhdGVEZXJpdmVkT3B0aW9uczxULCBVPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VT4gJiB7XHJcbiAgLyoqXHJcbiAgICogQSBmdW5jdGlvbiB0aGF0IGV4dHJhY3RzIHRoZSBkZXJpdmVkIHZhbHVlIChgVWApIGZyb20gdGhlIHNvdXJjZSBzaWduYWwncyB2YWx1ZSAoYFRgKS5cclxuICAgKi9cclxuICBmcm9tOiAodjogVCkgPT4gVTtcclxuICAvKipcclxuICAgKiBBIGZ1bmN0aW9uIHRoYXQgdXBkYXRlcyB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlIChgVGApIHdoZW4gdGhlIGRlcml2ZWQgc2lnbmFsJ3MgdmFsdWUgKGBVYCkgY2hhbmdlcy5cclxuICAgKiBUaGlzIGVzdGFibGlzaGVzIHRoZSB0d28td2F5IGJpbmRpbmcuXHJcbiAgICovXHJcbiAgb25DaGFuZ2U6IChuZXdWYWx1ZTogVSkgPT4gdm9pZDtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIGBXcml0YWJsZVNpZ25hbGAgdGhhdCBkZXJpdmVzIGl0cyB2YWx1ZSBmcm9tIGFub3RoZXIgYFdyaXRhYmxlU2lnbmFsYCAodGhlIFwic291cmNlXCIgc2lnbmFsKS5cclxuICogSXQgcHJvdmlkZXMgdHdvLXdheSBiaW5kaW5nOiBjaGFuZ2VzIHRvIHRoZSBzb3VyY2Ugc2lnbmFsIHVwZGF0ZSB0aGUgZGVyaXZlZCBzaWduYWwsIGFuZFxyXG4gKiBjaGFuZ2VzIHRvIHRoZSBkZXJpdmVkIHNpZ25hbCB1cGRhdGUgdGhlIHNvdXJjZSBzaWduYWwuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKHBhcmVudCkuXHJcbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIHRoZSBkZXJpdmVkIHNpZ25hbCdzIHZhbHVlIChjaGlsZCkuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBEZXJpdmVkU2lnbmFsPFQsIFU+ID0gV3JpdGFibGVTaWduYWw8VT4gJiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGZ1bmN0aW9uIHVzZWQgdG8gZGVyaXZlIHRoZSBkZXJpdmVkIHNpZ25hbCdzIHZhbHVlIGZyb20gdGhlIHNvdXJjZSBzaWduYWwncyB2YWx1ZS5cclxuICAgKiBUaGlzIGlzIHByaW1hcmlseSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBpbnRyb3NwZWN0aW9uLlxyXG4gICAqL1xyXG4gIGZyb206ICh2OiBUKSA9PiBVO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBgRGVyaXZlZFNpZ25hbGAgdGhhdCBkZXJpdmVzIGl0cyB2YWx1ZSBmcm9tIGFub3RoZXIgYFdyaXRhYmxlU2lnbmFsYC5cclxuICogVGhpcyBvdmVybG9hZCBwcm92aWRlcyB0aGUgbW9zdCBmbGV4aWJpbGl0eSwgYWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgY3VzdG9tIGBmcm9tYCBhbmQgYG9uQ2hhbmdlYCBmdW5jdGlvbnMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFUgVGhlIHR5cGUgb2YgdGhlIGRlcml2ZWQgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgV3JpdGFibGVTaWduYWxgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgYGZyb21gIGFuZCBgb25DaGFuZ2VgIGZ1bmN0aW9ucywgYW5kIG9wdGlvbmFsIHNpZ25hbCBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyBBIGBEZXJpdmVkU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgdXNlciA9IHNpZ25hbCh7IG5hbWU6ICdKb2huJywgYWdlOiAzMCB9KTtcclxuICogY29uc3QgbmFtZSA9IGRlcml2ZWQodXNlciwge1xyXG4gKiBmcm9tOiAodSkgPT4gdS5uYW1lLFxyXG4gKiBvbkNoYW5nZTogKG5ld05hbWUpID0+IHVzZXIudXBkYXRlKCh1KSA9PiAoeyAuLi51LCBuYW1lOiBuZXdOYW1lIH0pKSxcclxuICogfSk7XHJcbiAqXHJcbiAqIG5hbWUuc2V0KCdKYW5lJyk7IC8vIFVwZGF0ZXMgdGhlIG9yaWdpbmFsIHNpZ25hbFxyXG4gKiBjb25zb2xlLmxvZyh1c2VyKCkubmFtZSk7IC8vIE91dHB1dHM6IEphbmVcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlZDxULCBVPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIG9wdDogQ3JlYXRlRGVyaXZlZE9wdGlvbnM8VCwgVT4sXHJcbik6IERlcml2ZWRTaWduYWw8VCwgVT47XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBEZXJpdmVkU2lnbmFsYCB0aGF0IGRlcml2ZXMgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdCBoZWxkIGJ5IHRoZSBzb3VyY2Ugc2lnbmFsLlxyXG4gKiBUaGlzIG92ZXJsb2FkIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGFjY2Vzc2luZyBvYmplY3QgcHJvcGVydGllcy5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKG11c3QgYmUgYW4gb2JqZWN0KS5cclxuICogQHR5cGVQYXJhbSBUS2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGRlcml2ZS5cclxuICogQHBhcmFtIHNvdXJjZSBUaGUgc291cmNlIGBXcml0YWJsZVNpZ25hbGAgKGhvbGRpbmcgYW4gb2JqZWN0KS5cclxuICogQHBhcmFtIGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBkZXJpdmUuXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNpZ25hbCBvcHRpb25zIGZvciB0aGUgZGVyaXZlZCBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgYERlcml2ZWRTaWduYWxgIGluc3RhbmNlLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBjb25zdCB1c2VyID0gc2lnbmFsKHsgbmFtZTogJ0pvaG4nLCBhZ2U6IDMwIH0pO1xyXG4gKiBjb25zdCBuYW1lID0gZGVyaXZlZCh1c2VyLCAnbmFtZScpO1xyXG4gKlxyXG4gKiBjb25zb2xlLmxvZyhuYW1lKCkpOyAvLyBPdXRwdXRzOiBKb2huXHJcbiAqXHJcbiAqIC8vIFVwZGF0ZSB0aGUgZGVyaXZlZCBzaWduYWwsIHdoaWNoIGFsc28gdXBkYXRlcyB0aGUgc291cmNlXHJcbiAqIG5hbWUuc2V0KCdKYW5lJyk7XHJcbiAqXHJcbiAqIGNvbnNvbGUubG9nKHVzZXIoKS5uYW1lKTsgLy8gT3V0cHV0czogSmFuZVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBkZXJpdmVkPFQgZXh0ZW5kcyBVbmtub3duT2JqZWN0LCBUS2V5IGV4dGVuZHMga2V5b2YgVD4oXHJcbiAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBrZXk6IFRLZXksXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxUW1RLZXldPixcclxuKTogRGVyaXZlZFNpZ25hbDxULCBUW1RLZXldPjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgYERlcml2ZWRTaWduYWxgIGZyb20gYW4gYXJyYXksIGRlcml2aW5nIGFuIGVsZW1lbnQgYnkgaXRzIGluZGV4LlxyXG4gKiBUaGlzIG92ZXJsb2FkIGlzIGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yIGFjY2Vzc2luZyBhcnJheSBlbGVtZW50cy5cclxuICpcclxuICogQHR5cGVQYXJhbSBUIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKG11c3QgYmUgYW4gYXJyYXkpLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYFdyaXRhYmxlU2lnbmFsYCAoaG9sZGluZyBhbiBhcnJheSkuXHJcbiAqIEBwYXJhbSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgdG8gZGVyaXZlLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzaWduYWwgb3B0aW9ucyBmb3IgdGhlIGRlcml2ZWQgc2lnbmFsLlxyXG4gKiBAcmV0dXJucyBBIGBEZXJpdmVkU2lnbmFsYCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgbnVtYmVycyA9IHNpZ25hbChbMSwgMiwgM10pO1xyXG4gKiBjb25zdCBzZWNvbmROdW1iZXIgPSBkZXJpdmVkKG51bWJlcnMsIDEpO1xyXG4gKlxyXG4gKiBjb25zb2xlLmxvZyhzZWNvbmROdW1iZXIoKSk7IC8vIE91dHB1dHM6IDJcclxuICpcclxuICogLy8gVXBkYXRlIHRoZSBkZXJpdmVkIHNpZ25hbCwgd2hpY2ggYWxzbyB1cGRhdGVzIHRoZSBzb3VyY2VcclxuICogc2Vjb25kTnVtYmVyLnNldCg1KTtcclxuICpcclxuICogY29uc29sZS5sb2cobnVtYmVycygpKTsgLy8gT3V0cHV0czogWzEsIDUsIDNdXHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZWQ8VCBleHRlbmRzIGFueVtdPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIGluZGV4OiBudW1iZXIsXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxUW251bWJlcl0+LFxyXG4pOiBEZXJpdmVkU2lnbmFsPFQsIFRbbnVtYmVyXT47XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBEZXJpdmVkU2lnbmFsYCB0aGF0IGRlcml2ZXMgaXRzIHZhbHVlIGZyb20gYW5vdGhlciBgTXV0YWJsZVNpZ25hbGAuXHJcbiAqIFVzZSBtdXR1YWJsZSBzaWduYWxzIHdpdGggY2F1dGlvbiwgYnV0IHZlcnkgdXNlZnVsIGZvciBkZWVwbHkgbmVzdGVkIHN0cnVjdHVyZXMuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCBUaGUgdHlwZSBvZiB0aGUgc291cmNlIHNpZ25hbCdzIHZhbHVlLlxyXG4gKiBAdHlwZVBhcmFtIFUgVGhlIHR5cGUgb2YgdGhlIGRlcml2ZWQgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgV3JpdGFibGVTaWduYWxgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgYGZyb21gIGFuZCBgb25DaGFuZ2VgIGZ1bmN0aW9ucywgYW5kIG9wdGlvbmFsIHNpZ25hbCBvcHRpb25zLlxyXG4gKiBAcmV0dXJucyBBIGBEZXJpdmVkU2lnbmFsICYgTXV0YWJsZVNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzXHJcbiAqIGNvbnN0IHVzZXIgPSBzaWduYWwoeyBuYW1lOiAnSm9obicsIGFnZTogMzAgfSk7XHJcbiAqIGNvbnN0IG5hbWUgPSBkZXJpdmVkKHVzZXIsIHtcclxuICogZnJvbTogKHUpID0+IHUubmFtZSxcclxuICogb25DaGFuZ2U6IChuZXdOYW1lKSA9PiB1c2VyLnVwZGF0ZSgodSkgPT4gKHsgLi4udSwgbmFtZTogbmV3TmFtZSB9KSksXHJcbiAqIH0pO1xyXG4gKlxyXG4gKiBuYW1lLnNldCgnSmFuZScpOyAvLyBVcGRhdGVzIHRoZSBvcmlnaW5hbCBzaWduYWxcclxuICogY29uc29sZS5sb2codXNlcigpLm5hbWUpOyAvLyBPdXRwdXRzOiBKYW5lXHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZWQ8VCwgVT4oXHJcbiAgc291cmNlOiBNdXRhYmxlU2lnbmFsPFQ+LFxyXG4gIG9wdE9yS2V5OiBDcmVhdGVEZXJpdmVkT3B0aW9uczxULCBVPiB8IGtleW9mIFQsXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxVPixcclxuKTogRGVyaXZlZFNpZ25hbDxULCBVPiAmIE11dGFibGVTaWduYWw8VT47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlZDxULCBVPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+IHwgTXV0YWJsZVNpZ25hbDxUPixcclxuICBvcHRPcktleTogQ3JlYXRlRGVyaXZlZE9wdGlvbnM8VCwgVT4gfCBrZXlvZiBULFxyXG4gIG9wdD86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VT4sXHJcbik6IERlcml2ZWRTaWduYWw8VCwgVT4gfCAoRGVyaXZlZFNpZ25hbDxULCBVPiAmIE11dGFibGVTaWduYWw8VT4pIHtcclxuICBjb25zdCBpc0FycmF5ID1cclxuICAgIEFycmF5LmlzQXJyYXkodW50cmFja2VkKHNvdXJjZSkpICYmIHR5cGVvZiBvcHRPcktleSA9PT0gJ251bWJlcic7XHJcblxyXG4gIGNvbnN0IGZyb20gPVxyXG4gICAgdHlwZW9mIG9wdE9yS2V5ID09PSAnb2JqZWN0JyA/IG9wdE9yS2V5LmZyb20gOiAodjogVCkgPT4gdltvcHRPcktleV0gYXMgVTtcclxuXHJcbiAgY29uc3Qgb25DaGFuZ2UgPVxyXG4gICAgdHlwZW9mIG9wdE9yS2V5ID09PSAnb2JqZWN0J1xyXG4gICAgICA/IG9wdE9yS2V5Lm9uQ2hhbmdlXHJcbiAgICAgIDogaXNBcnJheVxyXG4gICAgICAgID8gaXNNdXRhYmxlKHNvdXJjZSlcclxuICAgICAgICAgID8gKG5leHQ6IFUpID0+IHtcclxuICAgICAgICAgICAgICBzb3VyY2UubXV0YXRlKChjdXIpID0+IHtcclxuICAgICAgICAgICAgICAgIChjdXIgYXMgYW55W10pW29wdE9yS2V5XSA9IG5leHQ7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyIGFzIFQ7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDogKG5leHQ6IFUpID0+IHtcclxuICAgICAgICAgICAgICBzb3VyY2UudXBkYXRlKChjdXIpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0FycmF5ID0gWy4uLihjdXIgYXMgdW5rbm93biBhcyBhbnlbXSldO1xyXG4gICAgICAgICAgICAgICAgbmV3QXJyYXlbb3B0T3JLZXldID0gbmV4dDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdBcnJheSBhcyBUO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgOiBpc011dGFibGUoc291cmNlKVxyXG4gICAgICAgICAgPyAobmV4dDogVSkgPT4ge1xyXG4gICAgICAgICAgICAgIHNvdXJjZS5tdXRhdGUoKGN1cikgPT4ge1xyXG4gICAgICAgICAgICAgICAgKGN1ciBhcyBVbmtub3duT2JqZWN0KVtvcHRPcktleV0gPSBuZXh0IGFzIFRba2V5b2YgVF07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICA6IChuZXh0OiBVKSA9PiB7XHJcbiAgICAgICAgICAgICAgc291cmNlLnVwZGF0ZSgoY3VyKSA9PiAoeyAuLi5jdXIsIFtvcHRPcktleV06IG5leHQgfSkpO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICBjb25zdCByZXN0ID0gdHlwZW9mIG9wdE9yS2V5ID09PSAnb2JqZWN0JyA/IG9wdE9yS2V5IDogb3B0O1xyXG5cclxuICBjb25zdCBiYXNlRXF1YWwgPSByZXN0Py5lcXVhbCA/PyBPYmplY3QuaXM7XHJcbiAgbGV0IHRyaWdnZXIgPSBmYWxzZTtcclxuXHJcbiAgY29uc3QgZXF1YWw6IFZhbHVlRXF1YWxpdHlGbjxVPiA9IGlzTXV0YWJsZShzb3VyY2UpXHJcbiAgICA/IChhOiBVLCBiOiBVKSA9PiB7XHJcbiAgICAgICAgaWYgKHRyaWdnZXIpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gYmFzZUVxdWFsKGEsIGIpO1xyXG4gICAgICB9XHJcbiAgICA6IGJhc2VFcXVhbDtcclxuXHJcbiAgY29uc3Qgc2lnID0gdG9Xcml0YWJsZTxVPihcclxuICAgIGNvbXB1dGVkKCgpID0+IGZyb20oc291cmNlKCkpLCB7IC4uLnJlc3QsIGVxdWFsIH0pLFxyXG4gICAgKG5ld1ZhbCkgPT4gb25DaGFuZ2UobmV3VmFsKSxcclxuICApIGFzIERlcml2ZWRTaWduYWw8VCwgVT4gJiBNdXRhYmxlU2lnbmFsPFU+O1xyXG5cclxuICBzaWcuZnJvbSA9IGZyb207XHJcblxyXG4gIGlmIChpc011dGFibGUoc291cmNlKSkge1xyXG4gICAgc2lnLm11dGF0ZSA9ICh1cGRhdGVyKSA9PiB7XHJcbiAgICAgIHRyaWdnZXIgPSB0cnVlO1xyXG4gICAgICBzaWcudXBkYXRlKHVwZGF0ZXIpO1xyXG4gICAgICB0cmlnZ2VyID0gZmFsc2U7XHJcbiAgICB9O1xyXG5cclxuICAgIHNpZy5pbmxpbmUgPSAodXBkYXRlcikgPT4ge1xyXG4gICAgICBzaWcubXV0YXRlKChwcmV2KSA9PiB7XHJcbiAgICAgICAgdXBkYXRlcihwcmV2KTtcclxuICAgICAgICByZXR1cm4gcHJldjtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHNpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBcImZha2VcIiBgRGVyaXZlZFNpZ25hbGAgZnJvbSBhIHNpbXBsZSB2YWx1ZS4gVGhpcyBpcyB1c2VmdWwgZm9yIGNyZWF0aW5nXHJcbiAqIGBGb3JtQ29udHJvbFNpZ25hbGAgaW5zdGFuY2VzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBkZXJpdmVkIGZyb20gYW5vdGhlciBzaWduYWwuXHJcbiAqIFRoZSByZXR1cm5lZCBzaWduYWwncyBgZnJvbWAgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIHRoZSBpbml0aWFsIHZhbHVlLlxyXG4gKlxyXG4gKiBAdHlwZVBhcmFtIFQgLSAgVGhpcyB0eXBlIHBhcmFtZXRlciBpcyBub3QgdXNlZCBpbiB0aGUgaW1wbGVtZW50YXRpb24gYnV0IGlzIGtlcHQgZm9yIHR5cGUgY29tcGF0aWJpbGl0eSB3aXRoIGBEZXJpdmVkU2lnbmFsYC5cclxuICogQHR5cGVQYXJhbSBVIC0gVGhlIHR5cGUgb2YgdGhlIHNpZ25hbCdzIHZhbHVlLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgYERlcml2ZWRTaWduYWxgIGluc3RhbmNlLlxyXG4gKiBAaW50ZXJuYWxcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0b0Zha2VEZXJpdmF0aW9uPFQsIFU+KGluaXRpYWw6IFUpOiBEZXJpdmVkU2lnbmFsPFQsIFU+IHtcclxuICBjb25zdCBzaWcgPSBzaWduYWwoaW5pdGlhbCkgYXMgRGVyaXZlZFNpZ25hbDxULCBVPjtcclxuICBzaWcuZnJvbSA9ICgpID0+IGluaXRpYWw7XHJcblxyXG4gIHJldHVybiBzaWc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgXCJmYWtlXCIgYERlcml2ZWRTaWduYWxgIGZyb20gYW4gZXhpc3RpbmcgYFdyaXRhYmxlU2lnbmFsYC4gVGhpcyBpcyB1c2VmdWxcclxuICogZm9yIHRyZWF0aW5nIGEgcmVndWxhciBgV3JpdGFibGVTaWduYWxgIGFzIGEgYERlcml2ZWRTaWduYWxgIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGJlaGF2aW9yLlxyXG4gKiAgVGhlIHJldHVybmVkIHNpZ25hbCdzIGBmcm9tYCBmdW5jdGlvbiByZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHNpZ25hbCwgdXNpbmcgYHVudHJhY2tlZGAuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoaXMgdHlwZSBwYXJhbWV0ZXIgaXMgbm90IHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uIGJ1dCBpcyBrZXB0IGZvciB0eXBlIGNvbXBhdGliaWxpdHkgd2l0aCBgRGVyaXZlZFNpZ25hbGAuXHJcbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIHRoZSBzaWduYWwncyB2YWx1ZS5cclxuICogQHBhcmFtIGluaXRpYWwgLSBUaGUgZXhpc3RpbmcgYFdyaXRhYmxlU2lnbmFsYC5cclxuICogQHJldHVybnMgQSBgRGVyaXZlZFNpZ25hbGAgaW5zdGFuY2UuXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRmFrZVNpZ25hbERlcml2YXRpb248VCwgVT4oXHJcbiAgaW5pdGlhbDogV3JpdGFibGVTaWduYWw8VT4sXHJcbik6IERlcml2ZWRTaWduYWw8VCwgVT4ge1xyXG4gIGNvbnN0IHNpZyA9IGluaXRpYWwgYXMgRGVyaXZlZFNpZ25hbDxULCBVPjtcclxuICBzaWcuZnJvbSA9ICgpID0+IHVudHJhY2tlZChpbml0aWFsKTtcclxuICByZXR1cm4gc2lnO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBndWFyZCBmdW5jdGlvbiB0byBjaGVjayBpZiBhIGdpdmVuIGBXcml0YWJsZVNpZ25hbGAgaXMgYSBgRGVyaXZlZFNpZ25hbGAuXHJcbiAqXHJcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgdmFsdWUgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBgYW55YCkuXHJcbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIHRoZSBkZXJpdmVkIHNpZ25hbCdzIHZhbHVlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gYGFueWApLlxyXG4gKiBAcGFyYW0gc2lnIC0gVGhlIGBXcml0YWJsZVNpZ25hbGAgdG8gY2hlY2suXHJcbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2lnbmFsIGlzIGEgYERlcml2ZWRTaWduYWxgLCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0Rlcml2YXRpb248VCwgVT4oXHJcbiAgc2lnOiBXcml0YWJsZVNpZ25hbDxVPixcclxuKTogc2lnIGlzIERlcml2ZWRTaWduYWw8VCwgVT4ge1xyXG4gIHJldHVybiAnZnJvbScgaW4gc2lnO1xyXG59XHJcbiJdfQ==","import { isPlatformServer } from '@angular/common';\nimport { computed, effect, ElementRef, inject, isSignal, PLATFORM_ID, signal, } from '@angular/core';\nfunction observerSupported() {\n return typeof IntersectionObserver !== 'undefined';\n}\n/**\n * Creates a read-only signal that tracks the intersection status of a target DOM element\n * with the viewport or a specified root element, using the `IntersectionObserver` API.\n *\n * It can observe a static `ElementRef`/`Element` or a `Signal` that resolves to one,\n * allowing for dynamic targets.\n *\n * @param target The DOM element (or `ElementRef`, or a `Signal` resolving to one) to observe.\n * If the signal resolves to `null`, observation stops.\n * @param options Optional `IntersectionObserverInit` options (e.g., `root`, `rootMargin`, `threshold`)\n * and an optional `debugName`.\n * @returns A `Signal<IntersectionObserverEntry | undefined>`. It emits `undefined` initially,\n * on the server, or if the target is `null`. Otherwise, it emits the latest\n * `IntersectionObserverEntry`. Consumers can derive a boolean `isVisible` from\n * this entry's `isIntersecting` property.\n *\n * @example\n * ```ts\n * import { Component, effect, ElementRef, viewChild } from '@angular/core';\n * import { elementVisibility } from '@mmstack/primitives';\n * import { computed } from '@angular/core'; // For derived boolean\n *\n * @Component({\n * selector: 'app-lazy-image',\n * template: `\n * <div #imageContainer style=\"height: 200px; border: 1px dashed grey;\">\n * @if (isVisible()) {\n * <img src=\"your-image-url.jpg\" alt=\"Lazy loaded image\" />\n * <p>Image is VISIBLE!</p>\n * } @else {\n * <p>Scroll down to see the image...</p>\n * }\n * </div>\n * `\n * })\n * export class LazyImageComponent {\n * readonly imageContainer = viewChild.required<ElementRef<HTMLDivElement>>('imageContainer');\n *\n * // Observe the element, get the full IntersectionObserverEntry\n * readonly intersectionEntry = elementVisibility(this.imageContainer);\n *\n * // Derive a simple boolean for visibility\n * readonly isVisible = computed(() => this.intersectionEntry()?.isIntersecting ?? false);\n *\n * constructor() {\n * effect(() => {\n * console.log('Intersection Entry:', this.intersectionEntry());\n * console.log('Is Visible:', this.isVisible());\n * });\n * }\n * }\n * ```\n */\nexport function elementVisibility(target = inject(ElementRef), opt) {\n if (isPlatformServer(inject(PLATFORM_ID)) || !observerSupported()) {\n const base = computed(() => undefined, {\n debugName: opt?.debugName,\n });\n base.visible = computed(() => false, ...(ngDevMode ? [{ debugName: \"visible\" }] : []));\n return base;\n }\n const state = signal(undefined, {\n debugName: opt?.debugName,\n equal: (a, b) => {\n if (!a && !b)\n return true;\n if (!a || !b)\n return false;\n return (a.target === b.target &&\n a.isIntersecting === b.isIntersecting &&\n a.intersectionRatio === b.intersectionRatio &&\n a.boundingClientRect.top === b.boundingClientRect.top &&\n a.boundingClientRect.left === b.boundingClientRect.left &&\n a.boundingClientRect.width === b.boundingClientRect.width &&\n a.boundingClientRect.height === b.boundingClientRect.height);\n },\n });\n const targetSignal = isSignal(target) ? target : computed(() => target);\n effect((cleanup) => {\n const el = targetSignal();\n if (!el)\n return state.set(undefined);\n let observer = null;\n observer = new IntersectionObserver(([entry]) => state.set(entry), opt);\n observer.observe(el instanceof ElementRef ? el.nativeElement : el);\n cleanup(() => {\n observer?.disconnect();\n });\n });\n const base = state.asReadonly();\n base.visible = computed(() => {\n const s = state();\n if (!s)\n return false;\n return s.isIntersecting;\n }, ...(ngDevMode ? [{ debugName: \"visible\" }] : []));\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC12aXNpYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL2VsZW1lbnQtdmlzaWJpbGl0eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLE1BQU0sRUFDTixVQUFVLEVBQ1YsTUFBTSxFQUNOLFFBQVEsRUFDUixXQUFXLEVBQ1gsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBV3ZCLFNBQVMsaUJBQWlCO0lBQ3hCLE9BQU8sT0FBTyxvQkFBb0IsS0FBSyxXQUFXLENBQUM7QUFDckQsQ0FBQztBQWNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixTQUdtRCxNQUFNLENBQUMsVUFBVSxDQUFDLEVBQ3JFLEdBQThCO0lBRTlCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRTtZQUNyQyxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVM7U0FDMUIsQ0FBb0MsQ0FBQztRQUN0QyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLG1EQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUF3QyxTQUFTLEVBQUU7UUFDckUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTO1FBQ3pCLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNkLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzNCLE9BQU8sQ0FDTCxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxNQUFNO2dCQUNyQixDQUFDLENBQUMsY0FBYyxLQUFLLENBQUMsQ0FBQyxjQUFjO2dCQUNyQyxDQUFDLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxDQUFDLGlCQUFpQjtnQkFDM0MsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRztnQkFDckQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSTtnQkFDdkQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSztnQkFDekQsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUM1RCxDQUFDO1FBQ0osQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFeEUsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDakIsTUFBTSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFFMUIsSUFBSSxDQUFDLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFckMsSUFBSSxRQUFRLEdBQWdDLElBQUksQ0FBQztRQUNqRCxRQUFRLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRSxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQ1gsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsVUFBVSxFQUFxQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtRQUMzQixNQUFNLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3JCLE9BQU8sQ0FBQyxDQUFDLGNBQWMsQ0FBQztJQUMxQixDQUFDLG1EQUFDLENBQUM7SUFDSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBlZmZlY3QsXHJcbiAgRWxlbWVudFJlZixcclxuICBpbmplY3QsXHJcbiAgaXNTaWduYWwsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgYGVsZW1lbnRWaXNpYmlsaXR5YCBzZW5zb3IsIGV4dGVuZGluZ1xyXG4gKiBzdGFuZGFyZCBgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0YCBvcHRpb25zLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgRWxlbWVudFZpc2liaWxpdHlPcHRpb25zID0gSW50ZXJzZWN0aW9uT2JzZXJ2ZXJJbml0ICYge1xyXG4gIC8qKiBPcHRpb25hbCBkZWJ1ZyBuYW1lIGZvciB0aGUgaW50ZXJuYWwgc2lnbmFsLiAqL1xyXG4gIGRlYnVnTmFtZT86IHN0cmluZztcclxufTtcclxuXHJcbmZ1bmN0aW9uIG9ic2VydmVyU3VwcG9ydGVkKCkge1xyXG4gIHJldHVybiB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnO1xyXG59XHJcblxyXG50eXBlIEludGVybmFsRWxlbWVudFZpc2liaWxpdHlTaWduYWwgPSBTaWduYWw8XHJcbiAgSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZFxyXG4+ICYge1xyXG4gIHZpc2libGU6IFNpZ25hbDxib29sZWFuPjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEVsZW1lbnRWaXNpYmlsaXR5U2lnbmFsID0gU2lnbmFsPFxyXG4gIEludGVyc2VjdGlvbk9ic2VydmVyRW50cnkgfCB1bmRlZmluZWRcclxuPiAmIHtcclxuICByZWFkb25seSB2aXNpYmxlOiBTaWduYWw8Ym9vbGVhbj47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWQtb25seSBzaWduYWwgdGhhdCB0cmFja3MgdGhlIGludGVyc2VjdGlvbiBzdGF0dXMgb2YgYSB0YXJnZXQgRE9NIGVsZW1lbnRcclxuICogd2l0aCB0aGUgdmlld3BvcnQgb3IgYSBzcGVjaWZpZWQgcm9vdCBlbGVtZW50LCB1c2luZyB0aGUgYEludGVyc2VjdGlvbk9ic2VydmVyYCBBUEkuXHJcbiAqXHJcbiAqIEl0IGNhbiBvYnNlcnZlIGEgc3RhdGljIGBFbGVtZW50UmVmYC9gRWxlbWVudGAgb3IgYSBgU2lnbmFsYCB0aGF0IHJlc29sdmVzIHRvIG9uZSxcclxuICogYWxsb3dpbmcgZm9yIGR5bmFtaWMgdGFyZ2V0cy5cclxuICpcclxuICogQHBhcmFtIHRhcmdldCBUaGUgRE9NIGVsZW1lbnQgKG9yIGBFbGVtZW50UmVmYCwgb3IgYSBgU2lnbmFsYCByZXNvbHZpbmcgdG8gb25lKSB0byBvYnNlcnZlLlxyXG4gKiBJZiB0aGUgc2lnbmFsIHJlc29sdmVzIHRvIGBudWxsYCwgb2JzZXJ2YXRpb24gc3RvcHMuXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGBJbnRlcnNlY3Rpb25PYnNlcnZlckluaXRgIG9wdGlvbnMgKGUuZy4sIGByb290YCwgYHJvb3RNYXJnaW5gLCBgdGhyZXNob2xkYClcclxuICogYW5kIGFuIG9wdGlvbmFsIGBkZWJ1Z05hbWVgLlxyXG4gKiBAcmV0dXJucyBBIGBTaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZD5gLiBJdCBlbWl0cyBgdW5kZWZpbmVkYCBpbml0aWFsbHksXHJcbiAqIG9uIHRoZSBzZXJ2ZXIsIG9yIGlmIHRoZSB0YXJnZXQgaXMgYG51bGxgLiBPdGhlcndpc2UsIGl0IGVtaXRzIHRoZSBsYXRlc3RcclxuICogYEludGVyc2VjdGlvbk9ic2VydmVyRW50cnlgLiBDb25zdW1lcnMgY2FuIGRlcml2ZSBhIGJvb2xlYW4gYGlzVmlzaWJsZWAgZnJvbVxyXG4gKiB0aGlzIGVudHJ5J3MgYGlzSW50ZXJzZWN0aW5nYCBwcm9wZXJ0eS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QsIEVsZW1lbnRSZWYsIHZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyBlbGVtZW50VmlzaWJpbGl0eSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKiBpbXBvcnQgeyBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnOyAvLyBGb3IgZGVyaXZlZCBib29sZWFuXHJcbiAqXHJcbiAqIEBDb21wb25lbnQoe1xyXG4gKiBzZWxlY3RvcjogJ2FwcC1sYXp5LWltYWdlJyxcclxuICogdGVtcGxhdGU6IGBcclxuICogPGRpdiAjaW1hZ2VDb250YWluZXIgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4OyBib3JkZXI6IDFweCBkYXNoZWQgZ3JleTtcIj5cclxuICogQGlmIChpc1Zpc2libGUoKSkge1xyXG4gKiA8aW1nIHNyYz1cInlvdXItaW1hZ2UtdXJsLmpwZ1wiIGFsdD1cIkxhenkgbG9hZGVkIGltYWdlXCIgLz5cclxuICogPHA+SW1hZ2UgaXMgVklTSUJMRSE8L3A+XHJcbiAqIH0gQGVsc2Uge1xyXG4gKiA8cD5TY3JvbGwgZG93biB0byBzZWUgdGhlIGltYWdlLi4uPC9wPlxyXG4gKiB9XHJcbiAqIDwvZGl2PlxyXG4gKiBgXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBMYXp5SW1hZ2VDb21wb25lbnQge1xyXG4gKiByZWFkb25seSBpbWFnZUNvbnRhaW5lciA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50Pj4oJ2ltYWdlQ29udGFpbmVyJyk7XHJcbiAqXHJcbiAqIC8vIE9ic2VydmUgdGhlIGVsZW1lbnQsIGdldCB0aGUgZnVsbCBJbnRlcnNlY3Rpb25PYnNlcnZlckVudHJ5XHJcbiAqIHJlYWRvbmx5IGludGVyc2VjdGlvbkVudHJ5ID0gZWxlbWVudFZpc2liaWxpdHkodGhpcy5pbWFnZUNvbnRhaW5lcik7XHJcbiAqXHJcbiAqIC8vIERlcml2ZSBhIHNpbXBsZSBib29sZWFuIGZvciB2aXNpYmlsaXR5XHJcbiAqIHJlYWRvbmx5IGlzVmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW50ZXJzZWN0aW9uRW50cnkoKT8uaXNJbnRlcnNlY3RpbmcgPz8gZmFsc2UpO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ0ludGVyc2VjdGlvbiBFbnRyeTonLCB0aGlzLmludGVyc2VjdGlvbkVudHJ5KCkpO1xyXG4gKiBjb25zb2xlLmxvZygnSXMgVmlzaWJsZTonLCB0aGlzLmlzVmlzaWJsZSgpKTtcclxuICogfSk7XHJcbiAqIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBlbGVtZW50VmlzaWJpbGl0eShcclxuICB0YXJnZXQ6XHJcbiAgICB8IEVsZW1lbnRSZWY8RWxlbWVudD5cclxuICAgIHwgRWxlbWVudFxyXG4gICAgfCBTaWduYWw8RWxlbWVudFJlZjxFbGVtZW50PiB8IEVsZW1lbnQgfCBudWxsPiA9IGluamVjdChFbGVtZW50UmVmKSxcclxuICBvcHQ/OiBFbGVtZW50VmlzaWJpbGl0eU9wdGlvbnMsXHJcbik6IEVsZW1lbnRWaXNpYmlsaXR5U2lnbmFsIHtcclxuICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSB8fCAhb2JzZXJ2ZXJTdXBwb3J0ZWQoKSkge1xyXG4gICAgY29uc3QgYmFzZSA9IGNvbXB1dGVkKCgpID0+IHVuZGVmaW5lZCwge1xyXG4gICAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lLFxyXG4gICAgfSkgYXMgSW50ZXJuYWxFbGVtZW50VmlzaWJpbGl0eVNpZ25hbDtcclxuICAgIGJhc2UudmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IGZhbHNlKTtcclxuICAgIHJldHVybiBiYXNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgc3RhdGUgPSBzaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7XHJcbiAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lLFxyXG4gICAgZXF1YWw6IChhLCBiKSA9PiB7XHJcbiAgICAgIGlmICghYSAmJiAhYikgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIGEudGFyZ2V0ID09PSBiLnRhcmdldCAmJlxyXG4gICAgICAgIGEuaXNJbnRlcnNlY3RpbmcgPT09IGIuaXNJbnRlcnNlY3RpbmcgJiZcclxuICAgICAgICBhLmludGVyc2VjdGlvblJhdGlvID09PSBiLmludGVyc2VjdGlvblJhdGlvICYmXHJcbiAgICAgICAgYS5ib3VuZGluZ0NsaWVudFJlY3QudG9wID09PSBiLmJvdW5kaW5nQ2xpZW50UmVjdC50b3AgJiZcclxuICAgICAgICBhLmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ID09PSBiLmJvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICYmXHJcbiAgICAgICAgYS5ib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggPT09IGIuYm91bmRpbmdDbGllbnRSZWN0LndpZHRoICYmXHJcbiAgICAgICAgYS5ib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0ID09PSBiLmJvdW5kaW5nQ2xpZW50UmVjdC5oZWlnaHRcclxuICAgICAgKTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHRhcmdldFNpZ25hbCA9IGlzU2lnbmFsKHRhcmdldCkgPyB0YXJnZXQgOiBjb21wdXRlZCgoKSA9PiB0YXJnZXQpO1xyXG5cclxuICBlZmZlY3QoKGNsZWFudXApID0+IHtcclxuICAgIGNvbnN0IGVsID0gdGFyZ2V0U2lnbmFsKCk7XHJcblxyXG4gICAgaWYgKCFlbCkgcmV0dXJuIHN0YXRlLnNldCh1bmRlZmluZWQpO1xyXG5cclxuICAgIGxldCBvYnNlcnZlcjogSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgfCBudWxsID0gbnVsbDtcclxuICAgIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbZW50cnldKSA9PiBzdGF0ZS5zZXQoZW50cnkpLCBvcHQpO1xyXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbCBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyBlbC5uYXRpdmVFbGVtZW50IDogZWwpO1xyXG5cclxuICAgIGNsZWFudXAoKCkgPT4ge1xyXG4gICAgICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xyXG4gICAgfSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBzdGF0ZS5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxFbGVtZW50VmlzaWJpbGl0eVNpZ25hbDtcclxuICBiYXNlLnZpc2libGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCBzID0gc3RhdGUoKTtcclxuICAgIGlmICghcykgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHMuaXNJbnRlcnNlY3Rpbmc7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { computed, isSignal, linkedSignal, } from '@angular/core';\nimport { derived } from './derived';\nimport { isMutable } from './mutable';\nimport { toWritable } from './to-writable';\n/**\n * @internal\n * Checks if a signal is a WritableSignal.\n * @param sig The signal to check.\n */\nfunction isWritable(sig) {\n // We just need to check for the presence of a 'set' method.\n return 'set' in sig;\n}\n/**\n * @internal\n * Creates a setter function for a source signal of type `Signal<T[]>` or a function returning `T[]`.\n * @param source The source signal of type `Signal<T[]>` or a function returning `T[]`.\n * @returns\n */\nfunction createSetter(source) {\n if (!isWritable(source))\n return () => {\n // noop;\n };\n if (isMutable(source))\n return (value, index) => {\n source.inline((arr) => {\n arr[index] = value;\n });\n };\n return (value, index) => {\n source.update((arr) => arr.map((v, i) => (i === index ? value : v)));\n };\n}\nexport function mapArray(source, map, options) {\n const data = isSignal(source) ? source : computed(source);\n const len = computed(() => data().length, ...(ngDevMode ? [{ debugName: \"len\" }] : []));\n const setter = createSetter(data);\n const opt = { ...options };\n const writableData = isWritable(data)\n ? data\n : toWritable(data, () => {\n // noop\n });\n if (isWritable(data) && isMutable(data) && !opt.equal) {\n opt.equal = (a, b) => {\n if (a !== b)\n return false; // actually check primitives and references\n return false; // opt out for same refs\n };\n }\n return linkedSignal({\n source: () => len(),\n computation: (len, prev) => {\n if (!prev)\n return Array.from({ length: len }, (_, i) => {\n const derivation = derived(writableData, // typcase to largest type\n {\n from: (src) => src[i],\n onChange: (value) => setter(value, i),\n }, opt);\n return map(derivation, i);\n });\n if (len === prev.value.length)\n return prev.value;\n if (len < prev.value.length) {\n const slice = prev.value.slice(0, len);\n if (opt.onDestroy) {\n for (let i = len; i < prev.value.length; i++) {\n opt.onDestroy?.(prev.value[i]);\n }\n }\n return slice;\n }\n else {\n const next = [...prev.value];\n for (let i = prev.value.length; i < len; i++) {\n const derivation = derived(writableData, // typcase to largest type\n {\n from: (src) => src[i],\n onChange: (value) => setter(value, i),\n }, opt);\n next[i] = map(derivation, i);\n }\n return next;\n }\n },\n equal: (a, b) => a.length === b.length,\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWFycmF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL21hcC1hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFFBQVEsRUFDUixZQUFZLEdBR2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNwQyxPQUFPLEVBQUUsU0FBUyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDOzs7O0dBSUc7QUFDSCxTQUFTLFVBQVUsQ0FBSSxHQUFjO0lBQ25DLDREQUE0RDtJQUM1RCxPQUFPLEtBQUssSUFBSSxHQUFHLENBQUM7QUFDdEIsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxZQUFZLENBQ25CLE1BQW1CO0lBRW5CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3JCLE9BQU8sR0FBRyxFQUFFO1lBQ1YsUUFBUTtRQUNWLENBQUMsQ0FBQztJQUVKLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztRQUNuQixPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDcEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQztJQUVKLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDdEIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFL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QUFDO2dCQUNOLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLEtBQUssSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUM3QyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQ3hCLFlBQWtDLEVBQUUsMEJBQTBCO29CQUM5RDt3QkFDRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQ3JCLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7cUJBQ3RDLEVBQ0QsR0FBRyxDQUNKLENBQUM7b0JBQ0YsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBQ0QsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07S0FDdkMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIGlzU2lnbmFsLFxyXG4gIGxpbmtlZFNpZ25hbCxcclxuICB0eXBlIFNpZ25hbCxcclxuICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBkZXJpdmVkIH0gZnJvbSAnLi9kZXJpdmVkJztcclxuaW1wb3J0IHsgaXNNdXRhYmxlLCBNdXRhYmxlU2lnbmFsIH0gZnJvbSAnLi9tdXRhYmxlJztcclxuaW1wb3J0IHsgdG9Xcml0YWJsZSB9IGZyb20gJy4vdG8td3JpdGFibGUnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBDaGVja3MgaWYgYSBzaWduYWwgaXMgYSBXcml0YWJsZVNpZ25hbC5cclxuICogQHBhcmFtIHNpZyBUaGUgc2lnbmFsIHRvIGNoZWNrLlxyXG4gKi9cclxuZnVuY3Rpb24gaXNXcml0YWJsZTxUPihzaWc6IFNpZ25hbDxUPik6IHNpZyBpcyBXcml0YWJsZVNpZ25hbDxUPiB7XHJcbiAgLy8gV2UganVzdCBuZWVkIHRvIGNoZWNrIGZvciB0aGUgcHJlc2VuY2Ugb2YgYSAnc2V0JyBtZXRob2QuXHJcbiAgcmV0dXJuICdzZXQnIGluIHNpZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbFxyXG4gKiBDcmVhdGVzIGEgc2V0dGVyIGZ1bmN0aW9uIGZvciBhIHNvdXJjZSBzaWduYWwgb2YgdHlwZSBgU2lnbmFsPFRbXT5gIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGBUW11gLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2Ugc2lnbmFsIG9mIHR5cGUgYFNpZ25hbDxUW10+YCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBgVFtdYC5cclxuICogQHJldHVybnNcclxuICovXHJcbmZ1bmN0aW9uIGNyZWF0ZVNldHRlcjxUPihcclxuICBzb3VyY2U6IFNpZ25hbDxUW10+LFxyXG4pOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIpID0+IHZvaWQge1xyXG4gIGlmICghaXNXcml0YWJsZShzb3VyY2UpKVxyXG4gICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgLy8gbm9vcDtcclxuICAgIH07XHJcblxyXG4gIGlmIChpc011dGFibGUoc291cmNlKSlcclxuICAgIHJldHVybiAodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgIHNvdXJjZS5pbmxpbmUoKGFycikgPT4ge1xyXG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG5cclxuICByZXR1cm4gKHZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgc291cmNlLnVwZGF0ZSgoYXJyKSA9PiBhcnIubWFwKCh2LCBpKSA9PiAoaSA9PT0gaW5kZXggPyB2YWx1ZSA6IHYpKSk7XHJcbiAgfTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFJlYWN0aXZlbHkgbWFwcyBpdGVtcyBmcm9tIGEgc291cmNlIGFycmF5IHRvIGEgbmV3IGFycmF5LCBjcmVhdGluZyBzdGFibGUgc2lnbmFscyBmb3IgZWFjaCBpdGVtLlxyXG4gKlxyXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGhpZ2hseSBvcHRpbWl6ZWQgZm9yIHBlcmZvcm1hbmNlLCBzaW1pbGFyIHRvIFNvbGlkSlMncyBgbWFwQXJyYXlgLlxyXG4gKiBGb3IgZWFjaCBpdGVtIGluIHRoZSBzb3VyY2UgYXJyYXksIGl0IGNyZWF0ZXMgYSBzdGFibGUgc2lnbmFsIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBtYXBwaW5nIGZ1bmN0aW9uLlxyXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBkb3duc3RyZWFtIGNvbnN1bWVycyBvbmx5IHJlLWV2YWx1YXRlIGZvciBpdGVtcyB0aGF0IGhhdmUgYWN0dWFsbHkgY2hhbmdlZCxcclxuICogb3Igd2hlbiBpdGVtcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LlxyXG4gKlxyXG4gKiBUaGUgdHlwZSBvZiBzaWduYWwgcGFzc2VkIHRvIHRoZSBgbWFwYCBmdW5jdGlvbiBkZXBlbmRzIG9uIHRoZSBzb3VyY2U6XHJcbiAqIC0gKipSZWFkb25seSBgU2lnbmFsYCoqOiBgbWFwYCByZWNlaXZlcyBhIHJlYWRvbmx5IGBTaWduYWw8VD5gLlxyXG4gKiAtICoqYFdyaXRhYmxlU2lnbmFsYCoqOiBgbWFwYCByZWNlaXZlcyBhIGBXcml0YWJsZVNpZ25hbDxUPmAsIGFsbG93aW5nIHR3by13YXkgYmluZGluZy5cclxuICogLSAqKmBNdXRhYmxlU2lnbmFsYCoqOiBgbWFwYCByZWNlaXZlcyBhIGBNdXRhYmxlU2lnbmFsPFQ+YCwgYWxsb3dpbmcgaW4tcGxhY2UgbXV0YXRpb24gZm9yIHBlcmZvcm1hbmNlLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiBpdGVtcyBpbiB0aGUgc291cmNlIGFycmF5LlxyXG4gKiBAdGVtcGxhdGUgVSBUaGUgdHlwZSBvZiBpdGVtcyBpbiB0aGUgcmVzdWx0aW5nIG1hcHBlZCBhcnJheS5cclxuICpcclxuICogQHBhcmFtIHNvdXJjZSBBIGBTaWduYWw8VFtdPmAgb3IgYSBmdW5jdGlvbiByZXR1cm5pbmcgYFRbXWAuXHJcbiAqIEBwYXJhbSBtYXAgVGhlIG1hcHBpbmcgZnVuY3Rpb24uIEl0IHJlY2VpdmVzIGEgc3RhYmxlIHNpZ25hbCBmb3IgdGhlIGl0ZW0gYW5kIGl0cyBpbmRleC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiwgaW5jbHVkaW5nIGBDcmVhdGVTaWduYWxPcHRpb25zYCBmb3IgdGhlIGl0ZW0gc2lnbmFsc1xyXG4gKiAoZS5nLiwgYSBjdXN0b20gYGVxdWFsYCBmdW5jdGlvbikgYW5kIGFuIGBvbkRlc3Ryb3lgIGNhbGxiYWNrIGZvciBjbGVhbnVwLlxyXG4gKiBAcmV0dXJucyBBIGBTaWduYWw8VVtdPmAgY29udGFpbmluZyB0aGUgbWFwcGVkIGFycmF5LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBXcml0YWJsZSBleGFtcGxlXHJcbiAqIGNvbnN0IHNvdXJjZUl0ZW1zID0gc2lnbmFsKFtcclxuICogeyBpZDogMSwgbmFtZTogJ0FwcGxlJyB9LFxyXG4gKiB7IGlkOiAyLCBuYW1lOiAnQmFuYW5hJyB9XHJcbiAqIF0pO1xyXG4gKlxyXG4gKiAvLyBUaGUgYGl0ZW1TaWduYWxgIGlzIHdyaXRhYmxlIGJlY2F1c2UgYHNvdXJjZUl0ZW1zYCBpcyBhIFdyaXRhYmxlU2lnbmFsLlxyXG4gKiBjb25zdCBtYXBwZWRJdGVtcyA9IG1hcEFycmF5KHNvdXJjZUl0ZW1zLCAoaXRlbVNpZ25hbCwgaW5kZXgpID0+ICh7XHJcbiAqIGxhYmVsOiBjb21wdXRlZCgoKSA9PiBgJHtpbmRleH06ICR7aXRlbVNpZ25hbCgpLm5hbWUudG9VcHBlckNhc2UoKX1gKSxcclxuICogc2V0TmFtZTogKG5ld05hbWU6IHN0cmluZykgPT4gaXRlbVNpZ25hbC51cGRhdGUoaXRlbSA9PiAoeyAuLi5pdGVtLCBuYW1lOiBuZXdOYW1lIH0pKVxyXG4gKiB9KSk7XHJcbiAqXHJcbiAqIC8vIFRoaXMgd2lsbCB1cGRhdGUgdGhlIG9yaWdpbmFsIHNvdXJjZSBzaWduYWwuXHJcbiAqIG1hcHBlZEl0ZW1zKClbMF0uc2V0TmFtZSgnQXZvY2FkbycpO1xyXG4gKiAvLyBzb3VyY2VJdGVtcygpIGlzIG5vdzogW3sgaWQ6IDEsIG5hbWU6ICdBdm9jYWRvJyB9LCB7IGlkOiAyLCBuYW1lOiAnQmFuYW5hJyB9XVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEFycmF5PFQsIFU+KFxyXG4gIHNvdXJjZTogTXV0YWJsZVNpZ25hbDxUW10+LFxyXG4gIG1hcDogKHZhbHVlOiBNdXRhYmxlU2lnbmFsPFQ+LCBpbmRleDogbnVtYmVyKSA9PiBVLFxyXG4gIG9wdGlvbnM/OiBDcmVhdGVTaWduYWxPcHRpb25zPFQ+ICYge1xyXG4gICAgb25EZXN0cm95PzogKHZhbHVlOiBVKSA9PiB2b2lkO1xyXG4gIH0sXHJcbik6IFNpZ25hbDxVW10+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1hcEFycmF5PFQsIFU+KFxyXG4gIHNvdXJjZTogV3JpdGFibGVTaWduYWw8VFtdPixcclxuICBtYXA6ICh2YWx1ZTogV3JpdGFibGVTaWduYWw8VD4sIGluZGV4OiBudW1iZXIpID0+IFUsXHJcbiAgb3B0aW9ucz86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgICBvbkRlc3Ryb3k/OiAodmFsdWU6IFUpID0+IHZvaWQ7XHJcbiAgfSxcclxuKTogU2lnbmFsPFVbXT47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFwQXJyYXk8VCwgVT4oXHJcbiAgc291cmNlOiBTaWduYWw8VFtdPiB8ICgoKSA9PiBUW10pLFxyXG4gIG1hcDogKHZhbHVlOiBTaWduYWw8VD4sIGluZGV4OiBudW1iZXIpID0+IFUsXHJcbiAgb3B0aW9ucz86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgICBvbkRlc3Ryb3k/OiAodmFsdWU6IFUpID0+IHZvaWQ7XHJcbiAgfSxcclxuKTogU2lnbmFsPFVbXT47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWFwQXJyYXk8VCwgVT4oXHJcbiAgc291cmNlOiBTaWduYWw8VFtdPiB8ICgoKSA9PiBUW10pLFxyXG4gIG1hcDpcclxuICAgIHwgKCh2YWx1ZTogU2lnbmFsPFQ+LCBpbmRleDogbnVtYmVyKSA9PiBVKVxyXG4gICAgfCAoKHZhbHVlOiBXcml0YWJsZVNpZ25hbDxUPiwgaW5kZXg6IG51bWJlcikgPT4gVSlcclxuICAgIHwgKCh2YWx1ZTogTXV0YWJsZVNpZ25hbDxUPiwgaW5kZXg6IG51bWJlcikgPT4gVSksXHJcbiAgb3B0aW9ucz86IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgICBvbkRlc3Ryb3k/OiAodmFsdWU6IFUpID0+IHZvaWQ7XHJcbiAgfSxcclxuKTogU2lnbmFsPFVbXT4ge1xyXG4gIGNvbnN0IGRhdGEgPSBpc1NpZ25hbChzb3VyY2UpID8gc291cmNlIDogY29tcHV0ZWQoc291cmNlKTtcclxuICBjb25zdCBsZW4gPSBjb21wdXRlZCgoKSA9PiBkYXRhKCkubGVuZ3RoKTtcclxuXHJcbiAgY29uc3Qgc2V0dGVyID0gY3JlYXRlU2V0dGVyKGRhdGEpO1xyXG5cclxuICBjb25zdCBvcHQgPSB7IC4uLm9wdGlvbnMgfTtcclxuXHJcbiAgY29uc3Qgd3JpdGFibGVEYXRhID0gaXNXcml0YWJsZShkYXRhKVxyXG4gICAgPyBkYXRhXHJcbiAgICA6IHRvV3JpdGFibGUoZGF0YSwgKCkgPT4ge1xyXG4gICAgICAgIC8vIG5vb3BcclxuICAgICAgfSk7XHJcblxyXG4gIGlmIChpc1dyaXRhYmxlKGRhdGEpICYmIGlzTXV0YWJsZShkYXRhKSAmJiAhb3B0LmVxdWFsKSB7XHJcbiAgICBvcHQuZXF1YWwgPSAoYTogVCwgYjogVCkgPT4ge1xyXG4gICAgICBpZiAoYSAhPT0gYikgcmV0dXJuIGZhbHNlOyAvLyBhY3R1YWxseSBjaGVjayBwcmltaXRpdmVzIGFuZCByZWZlcmVuY2VzXHJcbiAgICAgIHJldHVybiBmYWxzZTsgLy8gb3B0IG91dCBmb3Igc2FtZSByZWZzXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGxpbmtlZFNpZ25hbDxudW1iZXIsIFVbXT4oe1xyXG4gICAgc291cmNlOiAoKSA9PiBsZW4oKSxcclxuICAgIGNvbXB1dGF0aW9uOiAobGVuLCBwcmV2KSA9PiB7XHJcbiAgICAgIGlmICghcHJldilcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogbGVuIH0sIChfLCBpKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBkZXJpdmF0aW9uID0gZGVyaXZlZChcclxuICAgICAgICAgICAgd3JpdGFibGVEYXRhIGFzIE11dGFibGVTaWduYWw8VFtdPiwgLy8gdHlwY2FzZSB0byBsYXJnZXN0IHR5cGVcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZyb206IChzcmMpID0+IHNyY1tpXSxcclxuICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlKSA9PiBzZXR0ZXIodmFsdWUsIGkpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvcHQsXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHJldHVybiBtYXAoZGVyaXZhdGlvbiwgaSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAobGVuID09PSBwcmV2LnZhbHVlLmxlbmd0aCkgcmV0dXJuIHByZXYudmFsdWU7XHJcblxyXG4gICAgICBpZiAobGVuIDwgcHJldi52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBzbGljZSA9IHByZXYudmFsdWUuc2xpY2UoMCwgbGVuKTtcclxuXHJcbiAgICAgICAgaWYgKG9wdC5vbkRlc3Ryb3kpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSBsZW47IGkgPCBwcmV2LnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG9wdC5vbkRlc3Ryb3k/LihwcmV2LnZhbHVlW2ldKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzbGljZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBuZXh0ID0gWy4uLnByZXYudmFsdWVdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSBwcmV2LnZhbHVlLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBkZXJpdmF0aW9uID0gZGVyaXZlZChcclxuICAgICAgICAgICAgd3JpdGFibGVEYXRhIGFzIE11dGFibGVTaWduYWw8VFtdPiwgLy8gdHlwY2FzZSB0byBsYXJnZXN0IHR5cGVcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGZyb206IChzcmMpID0+IHNyY1tpXSxcclxuICAgICAgICAgICAgICBvbkNoYW5nZTogKHZhbHVlKSA9PiBzZXR0ZXIodmFsdWUsIGkpLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvcHQsXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbmV4dFtpXSA9IG1hcChkZXJpdmF0aW9uLCBpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5leHQ7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBlcXVhbDogKGEsIGIpID0+IGEubGVuZ3RoID09PSBiLmxlbmd0aCxcclxuICB9KTtcclxufVxyXG4iXX0=","import { effect, inject, Injector, isDevMode, untracked, } from '@angular/core';\nconst frameStack = [];\nfunction current() {\n return frameStack.at(-1) ?? null;\n}\nfunction clearFrame(frame, userCleanups) {\n for (const child of frame.children) {\n try {\n child.destroy();\n }\n catch (e) {\n if (isDevMode())\n console.error('Error destroying nested effect:', e);\n }\n }\n frame.children.clear();\n for (const fn of userCleanups) {\n try {\n fn();\n }\n catch (e) {\n if (isDevMode())\n console.error('Error destroying nested effect:', e);\n }\n }\n userCleanups.length = 0;\n}\n/**\n * Creates an effect that can be nested, similar to SolidJS's `createEffect`.\n *\n * This primitive enables true hierarchical reactivity. A `nestedEffect` created\n * within another `nestedEffect` is automatically destroyed and recreated when\n * the parent re-runs.\n *\n * It automatically handles injector propagation and lifetime management, allowing\n * you to create fine-grained, conditional side-effects that only track\n * dependencies when they are \"live\".\n *\n * @param effectFn The side-effect function, which receives a cleanup register function.\n * @param options (Optional) Angular's `CreateEffectOptions`.\n * @returns An `EffectRef` for the created effect.\n *\n * @example\n * ```ts\n * // Assume `coldGuard` changes rarely, but `hotSignal` changes often.\n * const coldGuard = signal(false);\n * const hotSignal = signal(0);\n *\n * nestedEffect(() => {\n * // This outer effect only tracks `coldGuard`.\n * if (coldGuard()) {\n *\n * // This inner effect is CREATED when coldGuard is true\n * // and DESTROYED when it becomes false.\n * nestedEffect(() => {\n * // It only tracks `hotSignal` while it exists.\n * console.log('Hot signal is:', hotSignal());\n * });\n * }\n * // If `coldGuard` is false, this outer effect does not track `hotSignal`.\n * });\n * ```\n * @example\n * ```ts\n * const users = signal([\n { id: 1, name: 'Alice' },\n { id: 2, name: 'Bob' }\n]);\n\n// The fine-grained mapped list\nconst mappedUsers = mapArray(\n users,\n (userSignal, index) => {\n // 1. Create a fine-grained SIDE EFFECT for *this item*\n // This effect's lifetime is now tied to this specific item. created once on init of this index.\n const effectRef = nestedEffect(() => {\n // This only runs if *this* userSignal changes,\n // not if the whole list changes.\n console.log(`User ${index} updated:`, userSignal().name);\n });\n\n // 2. Return the data AND the cleanup logic\n return {\n // The mapped data\n label: computed(() => `User: ${userSignal().name}`),\n \n // The cleanup function\n destroyEffect: () => effectRef.destroy()\n };\n },\n {\n // 3. Tell mapArray HOW to clean up when an item is removed, this needs to be manual as it's not a nestedEffect itself\n onDestroy: (mappedItem) => {\n mappedItem.destroyEffect();\n }\n }\n);\n * ```\n */\nexport function nestedEffect(effectFn, options) {\n const parent = current();\n const injector = options?.injector ?? parent?.injector ?? inject(Injector);\n const srcRef = untracked(() => {\n return effect((cleanup) => {\n const frame = {\n injector,\n children: new Set(),\n };\n const userCleanups = [];\n frameStack.push(frame);\n try {\n effectFn((fn) => {\n userCleanups.push(fn);\n });\n }\n finally {\n frameStack.pop();\n }\n return cleanup(() => clearFrame(frame, userCleanups));\n }, {\n ...options,\n injector,\n manualCleanup: !!parent,\n });\n });\n const ref = {\n ...srcRef,\n destroy: () => {\n parent?.children.delete(ref);\n srcRef.destroy();\n },\n };\n parent?.children.add(ref);\n return ref;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmVzdGVkLWVmZmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9uZXN0ZWQtZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxNQUFNLEVBR04sTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE1BQU0sVUFBVSxHQUFZLEVBQUUsQ0FBQztBQUUvQixTQUFTLE9BQU87SUFDZCxPQUFPLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUM7QUFDbkMsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQVksRUFBRSxZQUE0QjtJQUM1RCxLQUFLLE1BQU0sS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUM7WUFDSCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLFNBQVMsRUFBRTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2QixLQUFLLE1BQU0sRUFBRSxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQztZQUNILEVBQUUsRUFBRSxDQUFDO1FBQ1AsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxJQUFJLFNBQVMsRUFBRTtnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDMUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVFRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLFFBQTRELEVBQzVELE9BQTZCO0lBRTdCLE1BQU0sTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO0lBQ3pCLE1BQU0sUUFBUSxHQUFHLE9BQU8sRUFBRSxRQUFRLElBQUksTUFBTSxFQUFFLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFFM0UsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUM1QixPQUFPLE1BQU0sQ0FDWCxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQVU7Z0JBQ25CLFFBQVE7Z0JBQ1IsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFhO2FBQy9CLENBQUM7WUFFRixNQUFNLFlBQVksR0FBbUIsRUFBRSxDQUFDO1lBRXhDLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFdkIsSUFBSSxDQUFDO2dCQUNILFFBQVEsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUNkLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztvQkFBUyxDQUFDO2dCQUNULFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNuQixDQUFDO1lBRUQsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUMsRUFDRDtZQUNFLEdBQUcsT0FBTztZQUNWLFFBQVE7WUFDUixhQUFhLEVBQUUsQ0FBQyxDQUFDLE1BQU07U0FDeEIsQ0FDRixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLEdBQUcsR0FBRztRQUNWLEdBQUcsTUFBTTtRQUNULE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDWixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbkIsQ0FBQztLQUNGLENBQUM7SUFDRixNQUFNLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUUxQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIHR5cGUgQ3JlYXRlRWZmZWN0T3B0aW9ucyxcclxuICBlZmZlY3QsXHJcbiAgdHlwZSBFZmZlY3RDbGVhbnVwUmVnaXN0ZXJGbixcclxuICB0eXBlIEVmZmVjdFJlZixcclxuICBpbmplY3QsXHJcbiAgSW5qZWN0b3IsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIHVudHJhY2tlZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbnR5cGUgRnJhbWUgPSB7XHJcbiAgaW5qZWN0b3I6IEluamVjdG9yO1xyXG4gIGNoaWxkcmVuOiBTZXQ8RWZmZWN0UmVmPjtcclxufTtcclxuXHJcbmNvbnN0IGZyYW1lU3RhY2s6IEZyYW1lW10gPSBbXTtcclxuXHJcbmZ1bmN0aW9uIGN1cnJlbnQoKSB7XHJcbiAgcmV0dXJuIGZyYW1lU3RhY2suYXQoLTEpID8/IG51bGw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNsZWFyRnJhbWUoZnJhbWU6IEZyYW1lLCB1c2VyQ2xlYW51cHM6ICgoKSA9PiB2b2lkKVtdKSB7XHJcbiAgZm9yIChjb25zdCBjaGlsZCBvZiBmcmFtZS5jaGlsZHJlbikge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY2hpbGQuZGVzdHJveSgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRlc3Ryb3lpbmcgbmVzdGVkIGVmZmVjdDonLCBlKTtcclxuICAgIH1cclxuICB9XHJcbiAgZnJhbWUuY2hpbGRyZW4uY2xlYXIoKTtcclxuICBmb3IgKGNvbnN0IGZuIG9mIHVzZXJDbGVhbnVwcykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgZm4oKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLmVycm9yKCdFcnJvciBkZXN0cm95aW5nIG5lc3RlZCBlZmZlY3Q6JywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHVzZXJDbGVhbnVwcy5sZW5ndGggPSAwO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhbiBlZmZlY3QgdGhhdCBjYW4gYmUgbmVzdGVkLCBzaW1pbGFyIHRvIFNvbGlkSlMncyBgY3JlYXRlRWZmZWN0YC5cclxuICpcclxuICogVGhpcyBwcmltaXRpdmUgZW5hYmxlcyB0cnVlIGhpZXJhcmNoaWNhbCByZWFjdGl2aXR5LiBBIGBuZXN0ZWRFZmZlY3RgIGNyZWF0ZWRcclxuICogd2l0aGluIGFub3RoZXIgYG5lc3RlZEVmZmVjdGAgaXMgYXV0b21hdGljYWxseSBkZXN0cm95ZWQgYW5kIHJlY3JlYXRlZCB3aGVuXHJcbiAqIHRoZSBwYXJlbnQgcmUtcnVucy5cclxuICpcclxuICogSXQgYXV0b21hdGljYWxseSBoYW5kbGVzIGluamVjdG9yIHByb3BhZ2F0aW9uIGFuZCBsaWZldGltZSBtYW5hZ2VtZW50LCBhbGxvd2luZ1xyXG4gKiB5b3UgdG8gY3JlYXRlIGZpbmUtZ3JhaW5lZCwgY29uZGl0aW9uYWwgc2lkZS1lZmZlY3RzIHRoYXQgb25seSB0cmFja1xyXG4gKiBkZXBlbmRlbmNpZXMgd2hlbiB0aGV5IGFyZSBcImxpdmVcIi5cclxuICpcclxuICogQHBhcmFtIGVmZmVjdEZuIFRoZSBzaWRlLWVmZmVjdCBmdW5jdGlvbiwgd2hpY2ggcmVjZWl2ZXMgYSBjbGVhbnVwIHJlZ2lzdGVyIGZ1bmN0aW9uLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyAoT3B0aW9uYWwpIEFuZ3VsYXIncyBgQ3JlYXRlRWZmZWN0T3B0aW9uc2AuXHJcbiAqIEByZXR1cm5zIEFuIGBFZmZlY3RSZWZgIGZvciB0aGUgY3JlYXRlZCBlZmZlY3QuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzXHJcbiAqIC8vIEFzc3VtZSBgY29sZEd1YXJkYCBjaGFuZ2VzIHJhcmVseSwgYnV0IGBob3RTaWduYWxgIGNoYW5nZXMgb2Z0ZW4uXHJcbiAqIGNvbnN0IGNvbGRHdWFyZCA9IHNpZ25hbChmYWxzZSk7XHJcbiAqIGNvbnN0IGhvdFNpZ25hbCA9IHNpZ25hbCgwKTtcclxuICpcclxuICogbmVzdGVkRWZmZWN0KCgpID0+IHtcclxuICogLy8gVGhpcyBvdXRlciBlZmZlY3Qgb25seSB0cmFja3MgYGNvbGRHdWFyZGAuXHJcbiAqIGlmIChjb2xkR3VhcmQoKSkge1xyXG4gKlxyXG4gKiAvLyBUaGlzIGlubmVyIGVmZmVjdCBpcyBDUkVBVEVEIHdoZW4gY29sZEd1YXJkIGlzIHRydWVcclxuICogLy8gYW5kIERFU1RST1lFRCB3aGVuIGl0IGJlY29tZXMgZmFsc2UuXHJcbiAqIG5lc3RlZEVmZmVjdCgoKSA9PiB7XHJcbiAqIC8vIEl0IG9ubHkgdHJhY2tzIGBob3RTaWduYWxgIHdoaWxlIGl0IGV4aXN0cy5cclxuICogY29uc29sZS5sb2coJ0hvdCBzaWduYWwgaXM6JywgaG90U2lnbmFsKCkpO1xyXG4gKiB9KTtcclxuICogfVxyXG4gKiAvLyBJZiBgY29sZEd1YXJkYCBpcyBmYWxzZSwgdGhpcyBvdXRlciBlZmZlY3QgZG9lcyBub3QgdHJhY2sgYGhvdFNpZ25hbGAuXHJcbiAqIH0pO1xyXG4gKiBgYGBcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgdXNlcnMgPSBzaWduYWwoW1xyXG4gIHsgaWQ6IDEsIG5hbWU6ICdBbGljZScgfSxcclxuICB7IGlkOiAyLCBuYW1lOiAnQm9iJyB9XHJcbl0pO1xyXG5cclxuLy8gVGhlIGZpbmUtZ3JhaW5lZCBtYXBwZWQgbGlzdFxyXG5jb25zdCBtYXBwZWRVc2VycyA9IG1hcEFycmF5KFxyXG4gIHVzZXJzLFxyXG4gICh1c2VyU2lnbmFsLCBpbmRleCkgPT4ge1xyXG4gICAgLy8gMS4gQ3JlYXRlIGEgZmluZS1ncmFpbmVkIFNJREUgRUZGRUNUIGZvciAqdGhpcyBpdGVtKlxyXG4gICAgLy8gVGhpcyBlZmZlY3QncyBsaWZldGltZSBpcyBub3cgdGllZCB0byB0aGlzIHNwZWNpZmljIGl0ZW0uIGNyZWF0ZWQgb25jZSBvbiBpbml0IG9mIHRoaXMgaW5kZXguXHJcbiAgICBjb25zdCBlZmZlY3RSZWYgPSBuZXN0ZWRFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAvLyBUaGlzIG9ubHkgcnVucyBpZiAqdGhpcyogdXNlclNpZ25hbCBjaGFuZ2VzLFxyXG4gICAgICAvLyBub3QgaWYgdGhlIHdob2xlIGxpc3QgY2hhbmdlcy5cclxuICAgICAgY29uc29sZS5sb2coYFVzZXIgJHtpbmRleH0gdXBkYXRlZDpgLCB1c2VyU2lnbmFsKCkubmFtZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAyLiBSZXR1cm4gdGhlIGRhdGEgQU5EIHRoZSBjbGVhbnVwIGxvZ2ljXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBUaGUgbWFwcGVkIGRhdGFcclxuICAgICAgbGFiZWw6IGNvbXB1dGVkKCgpID0+IGBVc2VyOiAke3VzZXJTaWduYWwoKS5uYW1lfWApLFxyXG4gICAgICBcclxuICAgICAgLy8gVGhlIGNsZWFudXAgZnVuY3Rpb25cclxuICAgICAgZGVzdHJveUVmZmVjdDogKCkgPT4gZWZmZWN0UmVmLmRlc3Ryb3koKVxyXG4gICAgfTtcclxuICB9LFxyXG4gIHtcclxuICAgIC8vIDMuIFRlbGwgbWFwQXJyYXkgSE9XIHRvIGNsZWFuIHVwIHdoZW4gYW4gaXRlbSBpcyByZW1vdmVkLCB0aGlzIG5lZWRzIHRvIGJlIG1hbnVhbCBhcyBpdCdzIG5vdCBhIG5lc3RlZEVmZmVjdCBpdHNlbGZcclxuICAgIG9uRGVzdHJveTogKG1hcHBlZEl0ZW0pID0+IHtcclxuICAgICAgbWFwcGVkSXRlbS5kZXN0cm95RWZmZWN0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG4pO1xyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBuZXN0ZWRFZmZlY3QoXHJcbiAgZWZmZWN0Rm46IChyZWdpc3RlckNsZWFudXA6IEVmZmVjdENsZWFudXBSZWdpc3RlckZuKSA9PiB2b2lkLFxyXG4gIG9wdGlvbnM/OiBDcmVhdGVFZmZlY3RPcHRpb25zLFxyXG4pIHtcclxuICBjb25zdCBwYXJlbnQgPSBjdXJyZW50KCk7XHJcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zPy5pbmplY3RvciA/PyBwYXJlbnQ/LmluamVjdG9yID8/IGluamVjdChJbmplY3Rvcik7XHJcblxyXG4gIGNvbnN0IHNyY1JlZiA9IHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICByZXR1cm4gZWZmZWN0KFxyXG4gICAgICAoY2xlYW51cCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lOiBGcmFtZSA9IHtcclxuICAgICAgICAgIGluamVjdG9yLFxyXG4gICAgICAgICAgY2hpbGRyZW46IG5ldyBTZXQ8RWZmZWN0UmVmPigpLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IHVzZXJDbGVhbnVwczogKCgpID0+IHZvaWQpW10gPSBbXTtcclxuXHJcbiAgICAgICAgZnJhbWVTdGFjay5wdXNoKGZyYW1lKTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGVmZmVjdEZuKChmbikgPT4ge1xyXG4gICAgICAgICAgICB1c2VyQ2xlYW51cHMucHVzaChmbik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgICAgZnJhbWVTdGFjay5wb3AoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBjbGVhbnVwKCgpID0+IGNsZWFyRnJhbWUoZnJhbWUsIHVzZXJDbGVhbnVwcykpO1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgLi4ub3B0aW9ucyxcclxuICAgICAgICBpbmplY3RvcixcclxuICAgICAgICBtYW51YWxDbGVhbnVwOiAhIXBhcmVudCxcclxuICAgICAgfSxcclxuICAgICk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHJlZiA9IHtcclxuICAgIC4uLnNyY1JlZixcclxuICAgIGRlc3Ryb3k6ICgpID0+IHtcclxuICAgICAgcGFyZW50Py5jaGlsZHJlbi5kZWxldGUocmVmKTtcclxuICAgICAgc3JjUmVmLmRlc3Ryb3koKTtcclxuICAgIH0sXHJcbiAgfTtcclxuICBwYXJlbnQ/LmNoaWxkcmVuLmFkZChyZWYpO1xyXG5cclxuICByZXR1cm4gcmVmO1xyXG59XHJcbiJdfQ==","import { computed, effect, linkedSignal, } from '@angular/core';\n/** Project with optional equality. Pure & sync. */\nexport const select = (projector, opt) => (src) => computed(() => projector(src()), opt);\n/** Combine with another signal using a projector. */\nexport const combineWith = (other, project, opt) => (src) => computed(() => project(src(), other()), opt);\n/** Only re-emit when equal(prev, next) is false. */\nexport const distinct = (equal = Object.is) => (src) => computed(() => src(), { equal });\n/** map to new value */\nexport const map = (fn) => (src) => computed(() => fn(src()));\n/** filter values, keeping the last value if it was ever available, if first value is filtered will return undefined */\nexport const filter = (predicate) => (src) => linkedSignal({\n source: src,\n computation: (next, prev) => {\n if (predicate(next))\n return next;\n return prev?.source;\n },\n});\n/** tap into the value */\nexport const tap = (fn) => (src) => {\n effect(() => fn(src()));\n return src;\n};\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3BpcGVhYmxlL29wZXJhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLE1BQU0sRUFDTixZQUFZLEdBRWIsTUFBTSxlQUFlLENBQUM7QUFHdkIsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FDakIsQ0FDRSxTQUFzQixFQUN0QixHQUE0QixFQUNaLEVBQUUsQ0FDcEIsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUUxQyxxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUN0QixDQUNFLEtBQWdCLEVBQ2hCLE9BQTBCLEVBQzFCLEdBQTRCLEVBQ1osRUFBRSxDQUNwQixDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBRWpELG9EQUFvRDtBQUNwRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQ25CLENBQUksUUFBaUMsTUFBTSxDQUFDLEVBQUUsRUFBa0IsRUFBRSxDQUNsRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ04sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUVyQyx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUNkLENBQU8sRUFBZSxFQUFrQixFQUFFLENBQzFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDTixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUU5Qix1SEFBdUg7QUFDdkgsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUNqQixDQUFJLFNBQTRCLEVBQThCLEVBQUUsQ0FDaEUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUNOLFlBQVksQ0FBQztJQUNYLE1BQU0sRUFBRSxHQUFHO0lBQ1gsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO1FBQzFCLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxFQUFFLE1BQU0sQ0FBQztJQUN0QixDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRVAseUJBQXlCO0FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FDZCxDQUFJLEVBQWtCLEVBQWtCLEVBQUUsQ0FDMUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUNOLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXhCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIENyZWF0ZVNpZ25hbE9wdGlvbnMsXG4gIGVmZmVjdCxcbiAgbGlua2VkU2lnbmFsLFxuICBTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3BlcmF0b3IgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqIFByb2plY3Qgd2l0aCBvcHRpb25hbCBlcXVhbGl0eS4gUHVyZSAmIHN5bmMuICovXG5leHBvcnQgY29uc3Qgc2VsZWN0ID1cbiAgPEksIE8+KFxuICAgIHByb2plY3RvcjogKHY6IEkpID0+IE8sXG4gICAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxPPixcbiAgKTogT3BlcmF0b3I8SSwgTz4gPT5cbiAgKHNyYykgPT5cbiAgICBjb21wdXRlZCgoKSA9PiBwcm9qZWN0b3Ioc3JjKCkpLCBvcHQpO1xuXG4vKiogQ29tYmluZSB3aXRoIGFub3RoZXIgc2lnbmFsIHVzaW5nIGEgcHJvamVjdG9yLiAqL1xuZXhwb3J0IGNvbnN0IGNvbWJpbmVXaXRoID1cbiAgPEEsIEIsIFI+KFxuICAgIG90aGVyOiBTaWduYWw8Qj4sXG4gICAgcHJvamVjdDogKGE6IEEsIGI6IEIpID0+IFIsXG4gICAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxSPixcbiAgKTogT3BlcmF0b3I8QSwgUj4gPT5cbiAgKHNyYykgPT5cbiAgICBjb21wdXRlZCgoKSA9PiBwcm9qZWN0KHNyYygpLCBvdGhlcigpKSwgb3B0KTtcblxuLyoqIE9ubHkgcmUtZW1pdCB3aGVuIGVxdWFsKHByZXYsIG5leHQpIGlzIGZhbHNlLiAqL1xuZXhwb3J0IGNvbnN0IGRpc3RpbmN0ID1cbiAgPFQ+KGVxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbiA9IE9iamVjdC5pcyk6IE9wZXJhdG9yPFQsIFQ+ID0+XG4gIChzcmMpID0+XG4gICAgY29tcHV0ZWQoKCkgPT4gc3JjKCksIHsgZXF1YWwgfSk7XG5cbi8qKiBtYXAgdG8gbmV3IHZhbHVlICovXG5leHBvcnQgY29uc3QgbWFwID1cbiAgPEksIE8+KGZuOiAodjogSSkgPT4gTyk6IE9wZXJhdG9yPEksIE8+ID0+XG4gIChzcmMpID0+XG4gICAgY29tcHV0ZWQoKCkgPT4gZm4oc3JjKCkpKTtcblxuLyoqIGZpbHRlciB2YWx1ZXMsIGtlZXBpbmcgdGhlIGxhc3QgdmFsdWUgaWYgaXQgd2FzIGV2ZXIgYXZhaWxhYmxlLCBpZiBmaXJzdCB2YWx1ZSBpcyBmaWx0ZXJlZCB3aWxsIHJldHVybiB1bmRlZmluZWQgKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXIgPVxuICA8VD4ocHJlZGljYXRlOiAodjogVCkgPT4gYm9vbGVhbik6IE9wZXJhdG9yPFQsIFQgfCB1bmRlZmluZWQ+ID0+XG4gIChzcmMpID0+XG4gICAgbGlua2VkU2lnbmFsKHtcbiAgICAgIHNvdXJjZTogc3JjLFxuICAgICAgY29tcHV0YXRpb246IChuZXh0LCBwcmV2KSA9PiB7XG4gICAgICAgIGlmIChwcmVkaWNhdGUobmV4dCkpIHJldHVybiBuZXh0O1xuICAgICAgICByZXR1cm4gcHJldj8uc291cmNlO1xuICAgICAgfSxcbiAgICB9KTtcblxuLyoqIHRhcCBpbnRvIHRoZSB2YWx1ZSAqL1xuZXhwb3J0IGNvbnN0IHRhcCA9XG4gIDxUPihmbjogKHY6IFQpID0+IHZvaWQpOiBPcGVyYXRvcjxULCBUPiA9PlxuICAoc3JjKSA9PiB7XG4gICAgZWZmZWN0KCgpID0+IGZuKHNyYygpKSk7XG5cbiAgICByZXR1cm4gc3JjO1xuICB9O1xuIl19","import { computed, signal, } from '@angular/core';\n/**\n * Decorate any `Signal<T>` with a chainable `.pipe(...)` method.\n *\n * @example\n * const s = pipeable(signal(1)); // WritableSignal<number> (+ pipe)\n * const label = s.pipe(n => n * 2, n => `#${n}`); // Signal<string> (+ pipe)\n * label(); // \"#2\"\n */\nexport function pipeable(signal) {\n const internal = signal;\n const mapImpl = (...fns) => {\n const last = fns.at(-1);\n let opt;\n if (last && typeof last !== 'function') {\n fns = fns.slice(0, -1);\n opt = last;\n }\n if (fns.length === 0)\n return internal;\n if (fns.length === 1) {\n const fn = fns[0];\n return pipeable(computed(() => fn(internal()), opt));\n }\n const transformer = (input) => fns.reduce((acc, fn) => fn(acc), input);\n return pipeable(computed(() => transformer(internal()), opt));\n };\n const pipeImpl = (...ops) => {\n if (ops.length === 0)\n return internal;\n return ops.reduce((src, op) => pipeable(op(src)), internal);\n };\n Object.defineProperties(internal, {\n map: {\n value: mapImpl,\n configurable: true,\n enumerable: false,\n writable: false,\n },\n pipe: {\n value: pipeImpl,\n configurable: true,\n enumerable: false,\n writable: false,\n },\n });\n return internal;\n}\n/**\n * Create a new **writable** signal and return it as a `PipableSignal`.\n *\n * The returned value is a `WritableSignal<T>` with `.set`, `.update`, `.asReadonly`\n * still available (via intersection type), plus a chainable `.pipe(...)`.\n *\n * @example\n * const count = piped(1); // WritableSignal<number> (+ pipe)\n * const even = count.pipe(n => n % 2 === 0); // Signal<boolean> (+ pipe)\n * count.update(n => n + 1);\n */\nexport function piped(initial, opt) {\n return pipeable(signal(initial, opt));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlwZWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9waXBlYWJsZS9waXBlYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxRQUFRLEVBQ1IsTUFBTSxHQUlQLE1BQU0sZUFBZSxDQUFDO0FBUXZCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUN0QixNQUFZO0lBRVosTUFBTSxRQUFRLEdBQUcsTUFBaUQsQ0FBQztJQUVuRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsR0FBOEIsRUFBRSxFQUFFO1FBQ3BELE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixJQUFJLEdBQXlDLENBQUM7UUFDOUMsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDdkMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNiLENBQUM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sUUFBUSxDQUFDO1FBRXRDLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTVFLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hFLENBQUMsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxHQUF5QixFQUFFLEVBQUU7UUFDaEQsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUN0QyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQ2YsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzlCLFFBQStCLENBQ2hDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFO1FBQ2hDLEdBQUcsRUFBRTtZQUNILEtBQUssRUFBRSxPQUFPO1lBQ2QsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLEtBQUs7U0FDaEI7UUFFRCxJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsUUFBUTtZQUNmLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxLQUFLO1NBQ2hCO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUNuQixPQUFVLEVBQ1YsR0FBNEI7SUFFNUIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIHNpZ25hbCxcclxuICB0eXBlIENyZWF0ZVNpZ25hbE9wdGlvbnMsXHJcbiAgdHlwZSBTaWduYWwsXHJcbiAgdHlwZSBXcml0YWJsZVNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHR5cGUge1xyXG4gIE9wZXJhdG9yLFxyXG4gIFBpcGVhYmxlU2lnbmFsLFxyXG4gIFNpZ25hbFZhbHVlLFxyXG4gIFVuYXJ5RnVuY3Rpb24sXHJcbn0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG4vKipcclxuICogRGVjb3JhdGUgYW55IGBTaWduYWw8VD5gIHdpdGggYSBjaGFpbmFibGUgYC5waXBlKC4uLilgIG1ldGhvZC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgcyA9IHBpcGVhYmxlKHNpZ25hbCgxKSk7IC8vIFdyaXRhYmxlU2lnbmFsPG51bWJlcj4gKCsgcGlwZSlcclxuICogY29uc3QgbGFiZWwgPSBzLnBpcGUobiA9PiBuICogMiwgbiA9PiBgIyR7bn1gKTsgLy8gU2lnbmFsPHN0cmluZz4gKCsgcGlwZSlcclxuICogbGFiZWwoKTsgLy8gXCIjMlwiXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcGlwZWFibGU8VFNpZyBleHRlbmRzIFNpZ25hbDxhbnk+PihcclxuICBzaWduYWw6IFRTaWcsXHJcbik6IFBpcGVhYmxlU2lnbmFsPFNpZ25hbFZhbHVlPFRTaWc+LCBUU2lnPiB7XHJcbiAgY29uc3QgaW50ZXJuYWwgPSBzaWduYWwgYXMgUGlwZWFibGVTaWduYWw8U2lnbmFsVmFsdWU8VFNpZz4sIFRTaWc+O1xyXG5cclxuICBjb25zdCBtYXBJbXBsID0gKC4uLmZuczogVW5hcnlGdW5jdGlvbjxhbnksIGFueT5bXSkgPT4ge1xyXG4gICAgY29uc3QgbGFzdCA9IGZucy5hdCgtMSk7XHJcbiAgICBsZXQgb3B0OiBDcmVhdGVTaWduYWxPcHRpb25zPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAobGFzdCAmJiB0eXBlb2YgbGFzdCAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBmbnMgPSBmbnMuc2xpY2UoMCwgLTEpO1xyXG4gICAgICBvcHQgPSBsYXN0O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSByZXR1cm4gaW50ZXJuYWw7XHJcblxyXG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgY29uc3QgZm4gPSBmbnNbMF07XHJcbiAgICAgIHJldHVybiBwaXBlYWJsZShjb21wdXRlZCgoKSA9PiBmbihpbnRlcm5hbCgpKSwgb3B0KSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSAoaW5wdXQ6IGFueSkgPT4gZm5zLnJlZHVjZSgoYWNjLCBmbikgPT4gZm4oYWNjKSwgaW5wdXQpO1xyXG5cclxuICAgIHJldHVybiBwaXBlYWJsZShjb21wdXRlZCgoKSA9PiB0cmFuc2Zvcm1lcihpbnRlcm5hbCgpKSwgb3B0KSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgcGlwZUltcGwgPSAoLi4ub3BzOiBPcGVyYXRvcjxhbnksIGFueT5bXSkgPT4ge1xyXG4gICAgaWYgKG9wcy5sZW5ndGggPT09IDApIHJldHVybiBpbnRlcm5hbDtcclxuICAgIHJldHVybiBvcHMucmVkdWNlPFBpcGVhYmxlU2lnbmFsPGFueT4+KFxyXG4gICAgICAoc3JjLCBvcCkgPT4gcGlwZWFibGUob3Aoc3JjKSksXHJcbiAgICAgIGludGVybmFsIGFzIFBpcGVhYmxlU2lnbmFsPGFueT4sXHJcbiAgICApO1xyXG4gIH07XHJcblxyXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGludGVybmFsLCB7XHJcbiAgICBtYXA6IHtcclxuICAgICAgdmFsdWU6IG1hcEltcGwsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgIH0sXHJcblxyXG4gICAgcGlwZToge1xyXG4gICAgICB2YWx1ZTogcGlwZUltcGwsXHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBpbnRlcm5hbDtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZSBhIG5ldyAqKndyaXRhYmxlKiogc2lnbmFsIGFuZCByZXR1cm4gaXQgYXMgYSBgUGlwYWJsZVNpZ25hbGAuXHJcbiAqXHJcbiAqIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBhIGBXcml0YWJsZVNpZ25hbDxUPmAgd2l0aCBgLnNldGAsIGAudXBkYXRlYCwgYC5hc1JlYWRvbmx5YFxyXG4gKiBzdGlsbCBhdmFpbGFibGUgKHZpYSBpbnRlcnNlY3Rpb24gdHlwZSksIHBsdXMgYSBjaGFpbmFibGUgYC5waXBlKC4uLilgLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zdCBjb3VudCA9IHBpcGVkKDEpOyAvLyBXcml0YWJsZVNpZ25hbDxudW1iZXI+ICgrIHBpcGUpXHJcbiAqIGNvbnN0IGV2ZW4gPSBjb3VudC5waXBlKG4gPT4gbiAlIDIgPT09IDApOyAvLyBTaWduYWw8Ym9vbGVhbj4gKCsgcGlwZSlcclxuICogY291bnQudXBkYXRlKG4gPT4gbiArIDEpO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBpcGVkPFQ+KFxyXG4gIGluaXRpYWw6IFQsXHJcbiAgb3B0PzogQ3JlYXRlU2lnbmFsT3B0aW9uczxUPixcclxuKTogUGlwZWFibGVTaWduYWw8VCwgV3JpdGFibGVTaWduYWw8VD4+IHtcclxuICByZXR1cm4gcGlwZWFibGUoc2lnbmFsKGluaXRpYWwsIG9wdCkpO1xyXG59XHJcbiJdfQ==","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, signal, } from '@angular/core';\n/**\n * Creates a read-only signal that reactively tracks whether a CSS media query\n * string currently matches.\n *\n * It uses `window.matchMedia` to evaluate the query and listen for changes.\n * The primitive is SSR-safe (defaults to `false` on the server) and automatically\n * cleans up its event listeners when the creating context is destroyed.\n *\n * @param query The CSS media query string to evaluate (e.g., `'(min-width: 768px)'`, `'(prefers-color-scheme: dark)'`).\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<boolean>` which is `true` if the media query\n * currently matches, and `false` otherwise.\n *\n * @remarks\n * - On the server, this signal will always return `false` by default.\n * - It automatically updates if the match status of the media query changes in the browser.\n * - Event listeners are cleaned up automatically via `DestroyRef` if created in an injection context.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { mediaQuery } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-responsive-layout',\n * template: `\n * @if (isDesktop()) {\n * <p>Showing desktop layout.</p>\n * } @else {\n * <p>Showing mobile layout.</p>\n * }\n * `\n * })\n * export class ResponsiveLayoutComponent {\n * readonly isDesktop = mediaQuery('(min-width: 1024px)');\n *\n * constructor() {\n * effect(() => {\n * console.log('Is desktop view:', this.isDesktop());\n * });\n * }\n * }\n * ```\n */\nexport function mediaQuery(query, debugName = 'mediaQuery') {\n if (isPlatformServer(inject(PLATFORM_ID)))\n return computed(() => false, { debugName });\n const mediaQueryList = window.matchMedia(query);\n const state = signal(mediaQueryList.matches, { debugName: debugName });\n const handleChange = (event) => {\n state.set(event.matches);\n };\n mediaQueryList.addEventListener('change', handleChange);\n inject(DestroyRef).onDestroy(() => {\n mediaQueryList.removeEventListener('change', handleChange);\n });\n return state.asReadonly();\n}\n/**\n * Creates a read-only signal that tracks the user's OS/browser preference\n * for a dark color scheme using the `(prefers-color-scheme: dark)` media query.\n *\n * This is a convenience wrapper around the generic `mediaQuery` primitive.\n * It's SSR-safe (defaults to `false` on the server) and automatically\n * cleans up its event listeners.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<boolean>` which is `true` if a dark theme\n * is preferred, and `false` otherwise.\n * @see {mediaQuery} for the underlying implementation.\n *\n * @example\n * ```ts\n * const isDarkMode = prefersDarkMode();\n * effect(() => {\n * document.body.classList.toggle('dark-theme', isDarkMode());\n * });\n * ```\n */\nexport function prefersDarkMode(debugName) {\n return mediaQuery('(prefers-color-scheme: dark)', debugName);\n}\n/**\n * Creates a read-only signal that tracks the user's OS/browser preference\n * for reduced motion using the `(prefers-reduced-motion: reduce)` media query.\n *\n * This is a convenience wrapper around the generic `mediaQuery` primitive.\n * It's SSR-safe (defaults to `false` on the server) and automatically\n * cleans up its event listeners.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<boolean>` which is `true` if reduced motion\n * is preferred, and `false` otherwise.\n * @see {mediaQuery} for the underlying implementation.\n *\n * @example\n * ```ts\n * const reduceMotion = prefersReducedMotion();\n * effect(() => {\n * if (reduceMotion()) {\n * // Apply simplified animations or disable them\n * } else {\n * // Apply full animations\n * }\n * });\n * ```\n */\nexport function prefersReducedMotion(debugName) {\n return mediaQuery('(prefers-reduced-motion: reduce)', debugName);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaWEtcXVlcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy9tZWRpYS1xdWVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUNYLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUV2Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLEtBQWEsRUFDYixTQUFTLEdBQUcsWUFBWTtJQUV4QixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxPQUFPLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTlDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUV2RSxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQTBCLEVBQUUsRUFBRTtRQUNsRCxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQixDQUFDLENBQUM7SUFFRixjQUFjLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXhELE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2hDLGNBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDN0QsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUM1QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxTQUFrQjtJQUNoRCxPQUFPLFVBQVUsQ0FBQyw4QkFBOEIsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMvRCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxTQUFrQjtJQUNyRCxPQUFPLFVBQVUsQ0FBQyxrQ0FBa0MsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgc2lnbmFsLFxyXG4gIFNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHJlYWN0aXZlbHkgdHJhY2tzIHdoZXRoZXIgYSBDU1MgbWVkaWEgcXVlcnlcclxuICogc3RyaW5nIGN1cnJlbnRseSBtYXRjaGVzLlxyXG4gKlxyXG4gKiBJdCB1c2VzIGB3aW5kb3cubWF0Y2hNZWRpYWAgdG8gZXZhbHVhdGUgdGhlIHF1ZXJ5IGFuZCBsaXN0ZW4gZm9yIGNoYW5nZXMuXHJcbiAqIFRoZSBwcmltaXRpdmUgaXMgU1NSLXNhZmUgKGRlZmF1bHRzIHRvIGBmYWxzZWAgb24gdGhlIHNlcnZlcikgYW5kIGF1dG9tYXRpY2FsbHlcclxuICogY2xlYW5zIHVwIGl0cyBldmVudCBsaXN0ZW5lcnMgd2hlbiB0aGUgY3JlYXRpbmcgY29udGV4dCBpcyBkZXN0cm95ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBxdWVyeSBUaGUgQ1NTIG1lZGlhIHF1ZXJ5IHN0cmluZyB0byBldmFsdWF0ZSAoZS5nLiwgYCcobWluLXdpZHRoOiA3NjhweCknYCwgYCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJ2ApLlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGBTaWduYWw8Ym9vbGVhbj5gIHdoaWNoIGlzIGB0cnVlYCBpZiB0aGUgbWVkaWEgcXVlcnlcclxuICogY3VycmVudGx5IG1hdGNoZXMsIGFuZCBgZmFsc2VgIG90aGVyd2lzZS5cclxuICpcclxuICogQHJlbWFya3NcclxuICogLSBPbiB0aGUgc2VydmVyLCB0aGlzIHNpZ25hbCB3aWxsIGFsd2F5cyByZXR1cm4gYGZhbHNlYCBieSBkZWZhdWx0LlxyXG4gKiAtIEl0IGF1dG9tYXRpY2FsbHkgdXBkYXRlcyBpZiB0aGUgbWF0Y2ggc3RhdHVzIG9mIHRoZSBtZWRpYSBxdWVyeSBjaGFuZ2VzIGluIHRoZSBicm93c2VyLlxyXG4gKiAtIEV2ZW50IGxpc3RlbmVycyBhcmUgY2xlYW5lZCB1cCBhdXRvbWF0aWNhbGx5IHZpYSBgRGVzdHJveVJlZmAgaWYgY3JlYXRlZCBpbiBhbiBpbmplY3Rpb24gY29udGV4dC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgbWVkaWFRdWVyeSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtcmVzcG9uc2l2ZS1sYXlvdXQnLFxyXG4gKiB0ZW1wbGF0ZTogYFxyXG4gKiBAaWYgKGlzRGVza3RvcCgpKSB7XHJcbiAqIDxwPlNob3dpbmcgZGVza3RvcCBsYXlvdXQuPC9wPlxyXG4gKiB9IEBlbHNlIHtcclxuICogPHA+U2hvd2luZyBtb2JpbGUgbGF5b3V0LjwvcD5cclxuICogfVxyXG4gKiBgXHJcbiAqIH0pXHJcbiAqIGV4cG9ydCBjbGFzcyBSZXNwb25zaXZlTGF5b3V0Q29tcG9uZW50IHtcclxuICogcmVhZG9ubHkgaXNEZXNrdG9wID0gbWVkaWFRdWVyeSgnKG1pbi13aWR0aDogMTAyNHB4KScpO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ0lzIGRlc2t0b3AgdmlldzonLCB0aGlzLmlzRGVza3RvcCgpKTtcclxuICogfSk7XHJcbiAqIH1cclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBtZWRpYVF1ZXJ5KFxyXG4gIHF1ZXJ5OiBzdHJpbmcsXHJcbiAgZGVidWdOYW1lID0gJ21lZGlhUXVlcnknLFxyXG4pOiBTaWduYWw8Ym9vbGVhbj4ge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKVxyXG4gICAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IGZhbHNlLCB7IGRlYnVnTmFtZSB9KTtcclxuXHJcbiAgY29uc3QgbWVkaWFRdWVyeUxpc3QgPSB3aW5kb3cubWF0Y2hNZWRpYShxdWVyeSk7XHJcblxyXG4gIGNvbnN0IHN0YXRlID0gc2lnbmFsKG1lZGlhUXVlcnlMaXN0Lm1hdGNoZXMsIHsgZGVidWdOYW1lOiBkZWJ1Z05hbWUgfSk7XHJcblxyXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudDogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4ge1xyXG4gICAgc3RhdGUuc2V0KGV2ZW50Lm1hdGNoZXMpO1xyXG4gIH07XHJcblxyXG4gIG1lZGlhUXVlcnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGhhbmRsZUNoYW5nZSk7XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgbWVkaWFRdWVyeUxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgaGFuZGxlQ2hhbmdlKTtcclxuICB9KTtcclxuXHJcbiAgcmV0dXJuIHN0YXRlLmFzUmVhZG9ubHkoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSB1c2VyJ3MgT1MvYnJvd3NlciBwcmVmZXJlbmNlXHJcbiAqIGZvciBhIGRhcmsgY29sb3Igc2NoZW1lIHVzaW5nIHRoZSBgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKWAgbWVkaWEgcXVlcnkuXHJcbiAqXHJcbiAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCB0aGUgZ2VuZXJpYyBgbWVkaWFRdWVyeWAgcHJpbWl0aXZlLlxyXG4gKiBJdCdzIFNTUi1zYWZlIChkZWZhdWx0cyB0byBgZmFsc2VgIG9uIHRoZSBzZXJ2ZXIpIGFuZCBhdXRvbWF0aWNhbGx5XHJcbiAqIGNsZWFucyB1cCBpdHMgZXZlbnQgbGlzdGVuZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGBTaWduYWw8Ym9vbGVhbj5gIHdoaWNoIGlzIGB0cnVlYCBpZiBhIGRhcmsgdGhlbWVcclxuICogaXMgcHJlZmVycmVkLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqIEBzZWUge21lZGlhUXVlcnl9IGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgaXNEYXJrTW9kZSA9IHByZWZlcnNEYXJrTW9kZSgpO1xyXG4gKiBlZmZlY3QoKCkgPT4ge1xyXG4gKiBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2RhcmstdGhlbWUnLCBpc0RhcmtNb2RlKCkpO1xyXG4gKiB9KTtcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gcHJlZmVyc0RhcmtNb2RlKGRlYnVnTmFtZT86IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XHJcbiAgcmV0dXJuIG1lZGlhUXVlcnkoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknLCBkZWJ1Z05hbWUpO1xyXG59XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWQtb25seSBzaWduYWwgdGhhdCB0cmFja3MgdGhlIHVzZXIncyBPUy9icm93c2VyIHByZWZlcmVuY2VcclxuICogZm9yIHJlZHVjZWQgbW90aW9uIHVzaW5nIHRoZSBgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSlgIG1lZGlhIHF1ZXJ5LlxyXG4gKlxyXG4gKiBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgdGhlIGdlbmVyaWMgYG1lZGlhUXVlcnlgIHByaW1pdGl2ZS5cclxuICogSXQncyBTU1Itc2FmZSAoZGVmYXVsdHMgdG8gYGZhbHNlYCBvbiB0aGUgc2VydmVyKSBhbmQgYXV0b21hdGljYWxseVxyXG4gKiBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIGRlYnVnTmFtZSBPcHRpb25hbCBkZWJ1ZyBuYW1lIGZvciB0aGUgc2lnbmFsLlxyXG4gKiBAcmV0dXJucyBBIHJlYWQtb25seSBgU2lnbmFsPGJvb2xlYW4+YCB3aGljaCBpcyBgdHJ1ZWAgaWYgcmVkdWNlZCBtb3Rpb25cclxuICogaXMgcHJlZmVycmVkLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqIEBzZWUge21lZGlhUXVlcnl9IGZvciB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgcmVkdWNlTW90aW9uID0gcHJlZmVyc1JlZHVjZWRNb3Rpb24oKTtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogaWYgKHJlZHVjZU1vdGlvbigpKSB7XHJcbiAqIC8vIEFwcGx5IHNpbXBsaWZpZWQgYW5pbWF0aW9ucyBvciBkaXNhYmxlIHRoZW1cclxuICogfSBlbHNlIHtcclxuICogLy8gQXBwbHkgZnVsbCBhbmltYXRpb25zXHJcbiAqIH1cclxuICogfSk7XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHByZWZlcnNSZWR1Y2VkTW90aW9uKGRlYnVnTmFtZT86IHN0cmluZyk6IFNpZ25hbDxib29sZWFuPiB7XHJcbiAgcmV0dXJuIG1lZGlhUXVlcnkoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJywgZGVidWdOYW1lKTtcclxufVxyXG4iXX0=","import { computed, DestroyRef, inject, signal, untracked, } from '@angular/core';\nimport { toWritable } from './to-writable';\n/**\n * A convenience function that creates and throttles a new `WritableSignal` in one step.\n *\n * @see {throttle} for the core implementation details.\n *\n * @template T The type of value the signal holds.\n * @param initial The initial value of the signal.\n * @param opt Options for signal creation, including throttle time `ms`.\n * @returns A `ThrottledSignal<T>` instance.\n *\n * @example\n * const query = throttled('', { ms: 500 });\n * effect(() => console.log('Throttled Query:', query()));\n *\n * query.set('a');\n * query.set('b');\n * query.set('c');\n * // With a trailing-edge throttle, the final value 'c' would be set\n * // after the 500ms cooldown.\n */\nexport function throttled(initial, opt) {\n return throttle(signal(initial, opt), opt);\n}\n/**\n * Wraps an existing `WritableSignal` to create a new one whose readable value is throttled.\n *\n * This implementation avoids using `effect` by pairing a trigger signal with an `untracked`\n * read of the source signal to control when the throttled value is re-evaluated.\n *\n * @template T The type of value the signal holds.\n * @param source The source `WritableSignal` to wrap. Writes are applied to this signal immediately.\n * @param opt Options for throttling, including throttle time `ms` and an optional `DestroyRef`.\n * @returns A new `ThrottledSignal<T>` whose read value is throttled. The `.original` property\n * of the returned signal is a reference back to the provided `source` signal.\n *\n * @example\n * const query = throttled('', { ms: 500 });\n * effect(() => console.log('Throttled Query:', query()));\n *\n * query.set('a');\n * query.set('b');\n * query.set('c');\n * // With a trailing-edge throttle, the final value 'c' would be set\n * // after the 500ms cooldown.\n */\nexport function throttle(source, opt) {\n const ms = opt?.ms ?? 0;\n const trigger = signal(false, ...(ngDevMode ? [{ debugName: \"trigger\" }] : []));\n let timeout;\n try {\n const destroyRef = opt?.destroyRef ?? inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => {\n if (timeout)\n clearTimeout(timeout);\n timeout = undefined;\n });\n }\n catch {\n // not in injection context & no destroyRef provided opting out of cleanup\n }\n const triggerFn = (updateSourceAction) => {\n updateSourceAction();\n if (timeout)\n return;\n timeout = setTimeout(() => {\n trigger.update((c) => !c);\n timeout = undefined;\n }, ms);\n };\n const set = (value) => {\n triggerFn(() => source.set(value));\n };\n const update = (fn) => {\n triggerFn(() => source.update(fn));\n };\n const writable = toWritable(computed(() => {\n trigger();\n return untracked(source);\n }, opt), set, update);\n writable.original = source;\n return writable;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyb3R0bGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3Rocm90dGxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUVSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBaUMzQzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLE9BQVUsRUFDVixHQUErQjtJQUUvQixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsTUFBeUIsRUFDekIsR0FBK0I7SUFFL0IsTUFBTSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFeEIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssbURBQUMsQ0FBQztJQUU5QixJQUFJLE9BQWtELENBQUM7SUFFdkQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQ2QsR0FBRyxFQUFFLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFNUQsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekIsSUFBSSxPQUFPO2dCQUFFLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLDBFQUEwRTtJQUM1RSxDQUFDO0lBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxrQkFBOEIsRUFBRSxFQUFFO1FBQ25ELGtCQUFrQixFQUFFLENBQUM7UUFDckIsSUFBSSxPQUFPO1lBQUUsT0FBTztRQUVwQixPQUFPLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDdEIsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0lBRUYsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtRQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFHLENBQUMsRUFBa0IsRUFBRSxFQUFFO1FBQ3BDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFO1FBQ1osT0FBTyxFQUFFLENBQUM7UUFDVixPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQixDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQ1AsR0FBRyxFQUNILE1BQU0sQ0FDZSxDQUFDO0lBQ3hCLFFBQVEsQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDO0lBRTNCLE9BQU8sUUFBUSxDQUFDO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIHR5cGUgQ3JlYXRlU2lnbmFsT3B0aW9ucyxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICBzaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERlYm91bmNlZFNpZ25hbCB9IGZyb20gJy4vZGVib3VuY2VkJztcclxuaW1wb3J0IHsgdG9Xcml0YWJsZSB9IGZyb20gJy4vdG8td3JpdGFibGUnO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNyZWF0aW5nIGEgdGhyb3R0bGVkIHdyaXRhYmxlIHNpZ25hbC5cclxuICogRXh0ZW5kcyBBbmd1bGFyJ3MgYENyZWF0ZVNpZ25hbE9wdGlvbnNgIHdpdGggYSB0aHJvdHRsZSB0aW1lIHNldHRpbmcuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHZhbHVlIGhlbGQgYnkgdGhlIHNpZ25hbC5cclxuICovXHJcbmV4cG9ydCB0eXBlIENyZWF0ZVRocm90dGxlZE9wdGlvbnM8VD4gPSBDcmVhdGVTaWduYWxPcHRpb25zPFQ+ICYge1xyXG4gIC8qKlxyXG4gICAqIFRoZSB0aHJvdHRsZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuIFRoZSBtaW5pbXVtIHRpbWVcclxuICAgKiBpbiBtaWxsaXNlY29uZHMgdGhhdCBtdXN0IHBhc3MgYmV0d2VlbiB1cGRhdGVzIHRvIHRoZSB0aHJvdHRsZWQgc2lnbmFsJ3MgdmFsdWUuXHJcbiAgICovXHJcbiAgbXM/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgYERlc3Ryb3lSZWZgIHRvIGNsZWFuIHVwIHRoZSB0aHJvdHRsZSB0aW1lciB3aGVuIHRoZSBzaWduYWwgaXMgZGVzdHJveWVkLlxyXG4gICAqIElmIHByb3ZpZGVkLCB0aGUgdGltZXIgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHNpZ25hbCBpcyBkZXN0cm95ZWQuXHJcbiAgICogSWYgdGhlIHNpZ25hbCBpcyBjYWxsZWQgd2l0aGluIGEgcmVhY3RpdmUgY29udGV4dCBhIERlc3Ryb3lSZWYgaXMgaW5qZWN0ZWQgYXV0b21hdGljYWxseS5cclxuICAgKiBJZiBpdCBpcyBub3QgcHJvdmlkZWQgb3IgaW5qZWN0ZWQsIHRoZSB0aW1lciB3aWxsIG5vdCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkuLi53aGljaCBpcyB1c3VhbGx5IGZpbmUgOilcclxuICAgKi9cclxuICBkZXN0cm95UmVmPzogRGVzdHJveVJlZjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNwZWNpYWxpemVkIGBXcml0YWJsZVNpZ25hbGAgd2hvc2UgcHVibGljbHkgcmVhZGFibGUgdmFsdWUgdXBkYXRlcyBhcmUgdGhyb3R0bGVkLlxyXG4gKlxyXG4gKiBJdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcsIG5vbi10aHJvdHRsZWQgc2lnbmFsIHZpYSB0aGUgYG9yaWdpbmFsYCBwcm9wZXJ0eS5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKiBAc2VlIHtEZWJvdW5jZWRTaWduYWx9IGFzIHRoZSBvdXRwdXQgdHlwZSBoYXMgdGhlIHNhbWUgc3RydWN0dXJlLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgVGhyb3R0bGVkU2lnbmFsPFQ+ID0gRGVib3VuY2VkU2lnbmFsPFQ+O1xyXG5cclxuLyoqXHJcbiAqIEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjcmVhdGVzIGFuZCB0aHJvdHRsZXMgYSBuZXcgYFdyaXRhYmxlU2lnbmFsYCBpbiBvbmUgc3RlcC5cclxuICpcclxuICogQHNlZSB7dGhyb3R0bGV9IGZvciB0aGUgY29yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSB0aGUgc2lnbmFsIGhvbGRzLlxyXG4gKiBAcGFyYW0gaW5pdGlhbCBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gb3B0IE9wdGlvbnMgZm9yIHNpZ25hbCBjcmVhdGlvbiwgaW5jbHVkaW5nIHRocm90dGxlIHRpbWUgYG1zYC5cclxuICogQHJldHVybnMgQSBgVGhyb3R0bGVkU2lnbmFsPFQ+YCBpbnN0YW5jZS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogY29uc3QgcXVlcnkgPSB0aHJvdHRsZWQoJycsIHsgbXM6IDUwMCB9KTtcclxuICogZWZmZWN0KCgpID0+IGNvbnNvbGUubG9nKCdUaHJvdHRsZWQgUXVlcnk6JywgcXVlcnkoKSkpO1xyXG4gKlxyXG4gKiBxdWVyeS5zZXQoJ2EnKTtcclxuICogcXVlcnkuc2V0KCdiJyk7XHJcbiAqIHF1ZXJ5LnNldCgnYycpO1xyXG4gKiAvLyBXaXRoIGEgdHJhaWxpbmctZWRnZSB0aHJvdHRsZSwgdGhlIGZpbmFsIHZhbHVlICdjJyB3b3VsZCBiZSBzZXRcclxuICogLy8gYWZ0ZXIgdGhlIDUwMG1zIGNvb2xkb3duLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlZDxUPihcclxuICBpbml0aWFsOiBULFxyXG4gIG9wdD86IENyZWF0ZVRocm90dGxlZE9wdGlvbnM8VD4sXHJcbik6IERlYm91bmNlZFNpZ25hbDxUPiB7XHJcbiAgcmV0dXJuIHRocm90dGxlKHNpZ25hbChpbml0aWFsLCBvcHQpLCBvcHQpO1xyXG59XHJcblxyXG4vKipcclxuICogV3JhcHMgYW4gZXhpc3RpbmcgYFdyaXRhYmxlU2lnbmFsYCB0byBjcmVhdGUgYSBuZXcgb25lIHdob3NlIHJlYWRhYmxlIHZhbHVlIGlzIHRocm90dGxlZC5cclxuICpcclxuICogVGhpcyBpbXBsZW1lbnRhdGlvbiBhdm9pZHMgdXNpbmcgYGVmZmVjdGAgYnkgcGFpcmluZyBhIHRyaWdnZXIgc2lnbmFsIHdpdGggYW4gYHVudHJhY2tlZGBcclxuICogcmVhZCBvZiB0aGUgc291cmNlIHNpZ25hbCB0byBjb250cm9sIHdoZW4gdGhlIHRocm90dGxlZCB2YWx1ZSBpcyByZS1ldmFsdWF0ZWQuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHZhbHVlIHRoZSBzaWduYWwgaG9sZHMuXHJcbiAqIEBwYXJhbSBzb3VyY2UgVGhlIHNvdXJjZSBgV3JpdGFibGVTaWduYWxgIHRvIHdyYXAuIFdyaXRlcyBhcmUgYXBwbGllZCB0byB0aGlzIHNpZ25hbCBpbW1lZGlhdGVseS5cclxuICogQHBhcmFtIG9wdCBPcHRpb25zIGZvciB0aHJvdHRsaW5nLCBpbmNsdWRpbmcgdGhyb3R0bGUgdGltZSBgbXNgIGFuZCBhbiBvcHRpb25hbCBgRGVzdHJveVJlZmAuXHJcbiAqIEByZXR1cm5zIEEgbmV3IGBUaHJvdHRsZWRTaWduYWw8VD5gIHdob3NlIHJlYWQgdmFsdWUgaXMgdGhyb3R0bGVkLiBUaGUgYC5vcmlnaW5hbGAgcHJvcGVydHlcclxuICogb2YgdGhlIHJldHVybmVkIHNpZ25hbCBpcyBhIHJlZmVyZW5jZSBiYWNrIHRvIHRoZSBwcm92aWRlZCBgc291cmNlYCBzaWduYWwuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGNvbnN0IHF1ZXJ5ID0gdGhyb3R0bGVkKCcnLCB7IG1zOiA1MDAgfSk7XHJcbiAqIGVmZmVjdCgoKSA9PiBjb25zb2xlLmxvZygnVGhyb3R0bGVkIFF1ZXJ5OicsIHF1ZXJ5KCkpKTtcclxuICpcclxuICogcXVlcnkuc2V0KCdhJyk7XHJcbiAqIHF1ZXJ5LnNldCgnYicpO1xyXG4gKiBxdWVyeS5zZXQoJ2MnKTtcclxuICogLy8gV2l0aCBhIHRyYWlsaW5nLWVkZ2UgdGhyb3R0bGUsIHRoZSBmaW5hbCB2YWx1ZSAnYycgd291bGQgYmUgc2V0XHJcbiAqIC8vIGFmdGVyIHRoZSA1MDBtcyBjb29sZG93bi5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB0aHJvdHRsZTxUPihcclxuICBzb3VyY2U6IFdyaXRhYmxlU2lnbmFsPFQ+LFxyXG4gIG9wdD86IENyZWF0ZVRocm90dGxlZE9wdGlvbnM8VD4sXHJcbik6IFRocm90dGxlZFNpZ25hbDxUPiB7XHJcbiAgY29uc3QgbXMgPSBvcHQ/Lm1zID8/IDA7XHJcblxyXG4gIGNvbnN0IHRyaWdnZXIgPSBzaWduYWwoZmFsc2UpO1xyXG5cclxuICBsZXQgdGltZW91dDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIHRyeSB7XHJcbiAgICBjb25zdCBkZXN0cm95UmVmID1cclxuICAgICAgb3B0Py5kZXN0cm95UmVmID8/IGluamVjdChEZXN0cm95UmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICAgIGRlc3Ryb3lSZWY/Lm9uRGVzdHJveSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aW1lb3V0KSBjbGVhclRpbWVvdXQodGltZW91dCk7XHJcbiAgICAgIHRpbWVvdXQgPSB1bmRlZmluZWQ7XHJcbiAgICB9KTtcclxuICB9IGNhdGNoIHtcclxuICAgIC8vIG5vdCBpbiBpbmplY3Rpb24gY29udGV4dCAmIG5vIGRlc3Ryb3lSZWYgcHJvdmlkZWQgb3B0aW5nIG91dCBvZiBjbGVhbnVwXHJcbiAgfVxyXG5cclxuICBjb25zdCB0cmlnZ2VyRm4gPSAodXBkYXRlU291cmNlQWN0aW9uOiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICB1cGRhdGVTb3VyY2VBY3Rpb24oKTtcclxuICAgIGlmICh0aW1lb3V0KSByZXR1cm47XHJcblxyXG4gICAgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0cmlnZ2VyLnVwZGF0ZSgoYykgPT4gIWMpO1xyXG4gICAgICB0aW1lb3V0ID0gdW5kZWZpbmVkO1xyXG4gICAgfSwgbXMpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHNldCA9ICh2YWx1ZTogVCkgPT4ge1xyXG4gICAgdHJpZ2dlckZuKCgpID0+IHNvdXJjZS5zZXQodmFsdWUpKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGUgPSAoZm46IChwcmV2OiBUKSA9PiBUKSA9PiB7XHJcbiAgICB0cmlnZ2VyRm4oKCkgPT4gc291cmNlLnVwZGF0ZShmbikpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0IHdyaXRhYmxlID0gdG9Xcml0YWJsZShcclxuICAgIGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgdHJpZ2dlcigpO1xyXG4gICAgICByZXR1cm4gdW50cmFja2VkKHNvdXJjZSk7XHJcbiAgICB9LCBvcHQpLFxyXG4gICAgc2V0LFxyXG4gICAgdXBkYXRlLFxyXG4gICkgYXMgVGhyb3R0bGVkU2lnbmFsPFQ+O1xyXG4gIHdyaXRhYmxlLm9yaWdpbmFsID0gc291cmNlO1xyXG5cclxuICByZXR1cm4gd3JpdGFibGU7XHJcbn1cclxuIl19","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, ElementRef, inject, isDevMode, PLATFORM_ID, } from '@angular/core';\nimport { throttled } from '../throttled';\n/**\n * Creates a read-only signal that tracks the mouse cursor's position.\n *\n * It can track mouse movements on a specific target (window, document, or element)\n * and optionally include touch movements. The coordinate space ('client' or 'page')\n * can also be configured.\n * The primitive is SSR-safe and automatically cleans up its event listeners.\n *\n * @param options Optional configuration for the sensor.\n * @returns A read-only `Signal<MousePosition>`. On the server, it returns a static\n * signal with `{ x: 0, y: 0 }`.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { mousePosition } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-mouse-tracker',\n * template: `<p>Mouse Position: X: {{ pos().x }}, Y: {{ pos().y }}</p>`\n * })\n * export class MouseTrackerComponent {\n * readonly pos = mousePosition({ coordinateSpace: 'page' });\n *\n * constructor() {\n * effect(() => {\n * console.log('Mouse moved to:', this.pos());\n * });\n * }\n * }\n * ```\n */\nexport function mousePosition(opt) {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const base = computed(() => ({\n x: 0,\n y: 0,\n }), {\n debugName: opt?.debugName ?? 'mousePosition',\n });\n base.unthrottled = base;\n return base;\n }\n const { target = window, coordinateSpace = 'client', touch = false, debugName = 'mousePosition', throttle = 100, } = opt ?? {};\n const eventTarget = target instanceof ElementRef ? target.nativeElement : target;\n if (!eventTarget) {\n if (isDevMode())\n console.warn('mousePosition: Target element not found.');\n const base = computed(() => ({\n x: 0,\n y: 0,\n }), {\n debugName,\n });\n base.unthrottled = base;\n return base;\n }\n const pos = throttled({ x: 0, y: 0 }, {\n ms: throttle,\n equal: (a, b) => a.x === b.x && a.y === b.y,\n debugName,\n });\n const updatePosition = (event) => {\n let x, y;\n if (event instanceof MouseEvent) {\n x = coordinateSpace === 'page' ? event.pageX : event.clientX;\n y = coordinateSpace === 'page' ? event.pageY : event.clientY;\n }\n else if (event.touches.length > 0) {\n const firstTouch = event.touches[0];\n x = coordinateSpace === 'page' ? firstTouch.pageX : firstTouch.clientX;\n y = coordinateSpace === 'page' ? firstTouch.pageY : firstTouch.clientY;\n }\n else {\n return;\n }\n pos.set({ x, y });\n };\n eventTarget.addEventListener('mousemove', updatePosition);\n if (touch) {\n eventTarget.addEventListener('touchmove', updatePosition);\n }\n inject(DestroyRef).onDestroy(() => {\n eventTarget.removeEventListener('mousemove', updatePosition);\n if (touch) {\n eventTarget.removeEventListener('touchmove', updatePosition);\n }\n });\n const base = pos.asReadonly();\n base.unthrottled = pos.original;\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW91c2UtcG9zaXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy9tb3VzZS1wb3NpdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixVQUFVLEVBQ1YsTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEdBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXlEekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErQkc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFDLEdBQTBCO0lBQ3RELElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxRQUFRLENBQ25CLEdBQUcsRUFBRSxDQUFDLENBQUM7WUFDTCxDQUFDLEVBQUUsQ0FBQztZQUNKLENBQUMsRUFBRSxDQUFDO1NBQ0wsQ0FBQyxFQUNGO1lBQ0UsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLElBQUksZUFBZTtTQUM3QyxDQUM2QixDQUFDO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLGVBQWUsR0FBRyxRQUFRLEVBQzFCLEtBQUssR0FBRyxLQUFLLEVBQ2IsU0FBUyxHQUFHLGVBQWUsRUFDM0IsUUFBUSxHQUFHLEdBQUcsR0FDZixHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFFZCxNQUFNLFdBQVcsR0FDZixNQUFNLFlBQVksVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFN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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBpc0Rldk1vZGUsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0aHJvdHRsZWQgfSBmcm9tICcuLi90aHJvdHRsZWQnO1xyXG5cclxudHlwZSBNb3VzZVBvc2l0aW9uID0ge1xyXG4gIHg6IG51bWJlcjtcclxuICB5OiBudW1iZXI7XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgdGhlIGBtb3VzZVBvc2l0aW9uYCBzZW5zb3IuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBNb3VzZVBvc2l0aW9uT3B0aW9ucyA9IHtcclxuICAvKipcclxuICAgKiBUaGUgdGFyZ2V0IGVsZW1lbnQgdG8gbGlzdGVuIGZvciBtb3VzZSBtb3ZlbWVudHMgb24uXHJcbiAgICogQ2FuIGJlIGB3aW5kb3dgLCBgZG9jdW1lbnRgLCBhbiBgSFRNTEVsZW1lbnRgLCBvciBhbiBgRWxlbWVudFJlZjxIVE1MRWxlbWVudD5gLlxyXG4gICAqIEBkZWZhdWx0IHdpbmRvd1xyXG4gICAqL1xyXG4gIHRhcmdldD86IFdpbmRvdyB8IERvY3VtZW50IHwgSFRNTEVsZW1lbnQgfCBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAvKipcclxuICAgKiBEZWZpbmVzIHRoZSBjb29yZGluYXRlIHN5c3RlbSBmb3IgdGhlIHJlcG9ydGVkIHBvc2l0aW9uLlxyXG4gICAqIC0gYCdjbGllbnQnYDogQ29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IChgY2xpZW50WGAsIGBjbGllbnRZYCkuXHJcbiAgICogLSBgJ3BhZ2UnYDogQ29vcmRpbmF0ZXMgcmVsYXRpdmUgdG8gdGhlIGVudGlyZSBkb2N1bWVudCAoYHBhZ2VYYCwgYHBhZ2VZYCkuXHJcbiAgICogQGRlZmF1bHQgJ2NsaWVudCdcclxuICAgKi9cclxuICBjb29yZGluYXRlU3BhY2U/OiAnY2xpZW50JyB8ICdwYWdlJztcclxuICAvKipcclxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBzZW5zb3Igd2lsbCBhbHNvIGxpc3RlbiB0byBgdG91Y2htb3ZlYCBldmVudHMgYW5kIHJlcG9ydFxyXG4gICAqIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZmlyc3QgdG91Y2ggcG9pbnQuXHJcbiAgICogQGRlZmF1bHQgZmFsc2VcclxuICAgKi9cclxuICB0b3VjaD86IGJvb2xlYW47XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVidWcgbmFtZSBmb3IgdGhlIGludGVybmFsIHNpZ25hbC5cclxuICAgKi9cclxuICBkZWJ1Z05hbWU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIHRoZSB1cGRhdGVzLlxyXG4gICAqIEBkZWZhdWx0IDEwMFxyXG4gICAqL1xyXG4gIHRocm90dGxlPzogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB1c2VkIGZvciBzZXR0aW5nIHRoZSBzaW5jZSBzaWduYWxcclxuICovXHJcbnR5cGUgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsID0gU2lnbmFsPE1vdXNlUG9zaXRpb24+ICYge1xyXG4gIHVudGhyb3R0bGVkOiBTaWduYWw8TW91c2VQb3NpdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogQSBzcGVjaWFsaXplZCBTaWduYWwgdGhhdCB0cmFja3MgbW91c2UgcG9zaXRpb24gd2l0aGluIGFuIGVsZW1lbnQuXHJcbiAqIEl0J3MgYSB0aHJvdHRsZWQgc2lnbmFsIG9mIHRoZSBtb3VzZSBjb29yZGluYXRlcyB3aXRoIGFuIGF0dGFjaGVkIGB1bnRocm90dGxlZGAgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTW91c2VQb3NpdGlvblNpZ25hbCA9IFNpZ25hbDxNb3VzZVBvc2l0aW9uPiAmIHtcclxuICAvKiogQSBzaWduYWwgcHJvdmlkaW5nIHRoZSByYXcsIHVudGhyb3R0bGVkIG1vdXNlIHBvc2l0aW9uLiAqL1xyXG4gIHJlYWRvbmx5IHVudGhyb3R0bGVkOiBTaWduYWw8TW91c2VQb3NpdGlvbj47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHJlYWQtb25seSBzaWduYWwgdGhhdCB0cmFja3MgdGhlIG1vdXNlIGN1cnNvcidzIHBvc2l0aW9uLlxyXG4gKlxyXG4gKiBJdCBjYW4gdHJhY2sgbW91c2UgbW92ZW1lbnRzIG9uIGEgc3BlY2lmaWMgdGFyZ2V0ICh3aW5kb3csIGRvY3VtZW50LCBvciBlbGVtZW50KVxyXG4gKiBhbmQgb3B0aW9uYWxseSBpbmNsdWRlIHRvdWNoIG1vdmVtZW50cy4gVGhlIGNvb3JkaW5hdGUgc3BhY2UgKCdjbGllbnQnIG9yICdwYWdlJylcclxuICogY2FuIGFsc28gYmUgY29uZmlndXJlZC5cclxuICogVGhlIHByaW1pdGl2ZSBpcyBTU1Itc2FmZSBhbmQgYXV0b21hdGljYWxseSBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNlbnNvci5cclxuICogQHJldHVybnMgQSByZWFkLW9ubHkgYFNpZ25hbDxNb3VzZVBvc2l0aW9uPmAuIE9uIHRoZSBzZXJ2ZXIsIGl0IHJldHVybnMgYSBzdGF0aWNcclxuICogc2lnbmFsIHdpdGggYHsgeDogMCwgeTogMCB9YC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgbW91c2VQb3NpdGlvbiB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtbW91c2UtdHJhY2tlcicsXHJcbiAqIHRlbXBsYXRlOiBgPHA+TW91c2UgUG9zaXRpb246IFg6IHt7IHBvcygpLnggfX0sIFk6IHt7IHBvcygpLnkgfX08L3A+YFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgTW91c2VUcmFja2VyQ29tcG9uZW50IHtcclxuICogcmVhZG9ubHkgcG9zID0gbW91c2VQb3NpdGlvbih7IGNvb3JkaW5hdGVTcGFjZTogJ3BhZ2UnIH0pO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ01vdXNlIG1vdmVkIHRvOicsIHRoaXMucG9zKCkpO1xyXG4gKiB9KTtcclxuICogfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG1vdXNlUG9zaXRpb24ob3B0PzogTW91c2VQb3NpdGlvbk9wdGlvbnMpOiBNb3VzZVBvc2l0aW9uU2lnbmFsIHtcclxuICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSkge1xyXG4gICAgY29uc3QgYmFzZSA9IGNvbXB1dGVkKFxyXG4gICAgICAoKSA9PiAoe1xyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMCxcclxuICAgICAgfSksXHJcbiAgICAgIHtcclxuICAgICAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lID8/ICdtb3VzZVBvc2l0aW9uJyxcclxuICAgICAgfSxcclxuICAgICkgYXMgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG4gICAgYmFzZS51bnRocm90dGxlZCA9IGJhc2U7XHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHtcclxuICAgIHRhcmdldCA9IHdpbmRvdyxcclxuICAgIGNvb3JkaW5hdGVTcGFjZSA9ICdjbGllbnQnLFxyXG4gICAgdG91Y2ggPSBmYWxzZSxcclxuICAgIGRlYnVnTmFtZSA9ICdtb3VzZVBvc2l0aW9uJyxcclxuICAgIHRocm90dGxlID0gMTAwLFxyXG4gIH0gPSBvcHQgPz8ge307XHJcblxyXG4gIGNvbnN0IGV2ZW50VGFyZ2V0ID1cclxuICAgIHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnRSZWYgPyB0YXJnZXQubmF0aXZlRWxlbWVudCA6IHRhcmdldDtcclxuXHJcbiAgaWYgKCFldmVudFRhcmdldCkge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ21vdXNlUG9zaXRpb246IFRhcmdldCBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuXHJcbiAgICBjb25zdCBiYXNlID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICB9KSxcclxuICAgICAge1xyXG4gICAgICAgIGRlYnVnTmFtZSxcclxuICAgICAgfSxcclxuICAgICkgYXMgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG4gICAgYmFzZS51bnRocm90dGxlZCA9IGJhc2U7XHJcbiAgICByZXR1cm4gYmFzZTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHBvcyA9IHRocm90dGxlZChcclxuICAgIHsgeDogMCwgeTogMCB9LFxyXG4gICAge1xyXG4gICAgICBtczogdGhyb3R0bGUsXHJcbiAgICAgIGVxdWFsOiAoYSwgYikgPT4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnksXHJcbiAgICAgIGRlYnVnTmFtZSxcclxuICAgIH0sXHJcbiAgKTtcclxuXHJcbiAgY29uc3QgdXBkYXRlUG9zaXRpb24gPSAoZXZlbnQ6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KSA9PiB7XHJcbiAgICBsZXQgeDogbnVtYmVyLCB5OiBudW1iZXI7XHJcblxyXG4gICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xyXG4gICAgICB4ID0gY29vcmRpbmF0ZVNwYWNlID09PSAncGFnZScgPyBldmVudC5wYWdlWCA6IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgIHkgPSBjb29yZGluYXRlU3BhY2UgPT09ICdwYWdlJyA/IGV2ZW50LnBhZ2VZIDogZXZlbnQuY2xpZW50WTtcclxuICAgIH0gZWxzZSBpZiAoZXZlbnQudG91Y2hlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0VG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG4gICAgICB4ID0gY29vcmRpbmF0ZVNwYWNlID09PSAncGFnZScgPyBmaXJzdFRvdWNoLnBhZ2VYIDogZmlyc3RUb3VjaC5jbGllbnRYO1xyXG4gICAgICB5ID0gY29vcmRpbmF0ZVNwYWNlID09PSAncGFnZScgPyBmaXJzdFRvdWNoLnBhZ2VZIDogZmlyc3RUb3VjaC5jbGllbnRZO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgcG9zLnNldCh7IHgsIHkgfSk7XHJcbiAgfTtcclxuXHJcbiAgZXZlbnRUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdXBkYXRlUG9zaXRpb24gYXMgRXZlbnRMaXN0ZW5lcik7XHJcbiAgaWYgKHRvdWNoKSB7XHJcbiAgICBldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLCB1cGRhdGVQb3NpdGlvbiBhcyBFdmVudExpc3RlbmVyKTtcclxuICB9XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT4ge1xyXG4gICAgZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ21vdXNlbW92ZScsXHJcbiAgICAgIHVwZGF0ZVBvc2l0aW9uIGFzIEV2ZW50TGlzdGVuZXIsXHJcbiAgICApO1xyXG4gICAgaWYgKHRvdWNoKSB7XHJcbiAgICAgIGV2ZW50VGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ3RvdWNobW92ZScsXHJcbiAgICAgICAgdXBkYXRlUG9zaXRpb24gYXMgRXZlbnRMaXN0ZW5lcixcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgY29uc3QgYmFzZSA9IHBvcy5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG4gIGJhc2UudW50aHJvdHRsZWQgPSBwb3Mub3JpZ2luYWw7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, signal, } from '@angular/core';\nconst serverDate = new Date();\n/**\n * Creates a read-only signal that tracks the browser's online status.\n *\n * The main signal returns a boolean (`true` for online, `false` for offline).\n * An additional `since` signal is attached, tracking when the status last changed.\n * It's SSR-safe and automatically cleans up its event listeners.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A `NetworkStatusSignal` instance.\n */\nexport function networkStatus(debugName = 'networkStatus') {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const sig = computed(() => true, {\n debugName,\n });\n sig.since = computed(() => serverDate, ...(ngDevMode ? [{ debugName: \"since\" }] : []));\n return sig;\n }\n const state = signal(navigator.onLine, ...(ngDevMode ? [{ debugName: \"state\", debugName }] : [{\n debugName,\n }]));\n const since = signal(new Date(), ...(ngDevMode ? [{ debugName: \"since\" }] : []));\n const goOnline = () => {\n state.set(true);\n since.set(new Date());\n };\n const goOffline = () => {\n state.set(false);\n since.set(new Date());\n };\n window.addEventListener('online', goOnline);\n window.addEventListener('offline', goOffline);\n inject(DestroyRef).onDestroy(() => {\n window.removeEventListener('online', goOnline);\n window.removeEventListener('offline', goOffline);\n });\n const sig = state.asReadonly();\n sig.since = since.asReadonly();\n return sig;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay1zdGF0dXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy9uZXR3b3JrLXN0YXR1cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUVYLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQWtCdkIsTUFBTSxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztBQUU5Qjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixTQUFTLEdBQUcsZUFBZTtJQUUzQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRTtZQUMvQixTQUFTO1NBQ1YsQ0FBZ0MsQ0FBQztRQUNsQyxHQUFHLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLGlEQUFDLENBQUM7UUFDdkMsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLHlDQUNuQyxTQUFTLE9BRDRCO1lBQ3JDLFNBQVM7U0FDVixHQUFDLENBQUM7SUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsaURBQUMsQ0FBQztJQUVqQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFDRixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7UUFDckIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQixLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QixDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFOUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFVBQVUsRUFBaUMsQ0FBQztJQUM5RCxHQUFHLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUUvQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICBQTEFURk9STV9JRCxcclxuICBTaWduYWwsXHJcbiAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB1c2VkIGZvciBzZXR0aW5nIHRoZSBzaW5jZSBzaWduYWxcclxuICovXHJcbnR5cGUgSW50ZXJuYWxOZXR3b3JrU3RhdHVzU2lnbmFsID0gU2lnbmFsPGJvb2xlYW4+ICYge1xyXG4gIHNpbmNlOiBTaWduYWw8RGF0ZT47XHJcbn07XHJcblxyXG4vKipcclxuICogQSBzcGVjaWFsaXplZCBTaWduYWwgdGhhdCB0cmFja3MgbmV0d29yayBzdGF0dXMuXHJcbiAqIEl0J3MgYSBib29sZWFuIHNpZ25hbCB3aXRoIGFuIGF0dGFjaGVkIGBzaW5jZWAgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgTmV0d29ya1N0YXR1c1NpZ25hbCA9IFNpZ25hbDxib29sZWFuPiAmIHtcclxuICAvKiogQSBzaWduYWwgdHJhY2tpbmcgdGhlIHRpbWVzdGFtcCBvZiB0aGUgbGFzdCBzdGF0dXMgY2hhbmdlLiAqL1xyXG4gIHJlYWRvbmx5IHNpbmNlOiBTaWduYWw8RGF0ZT47XHJcbn07XHJcblxyXG5jb25zdCBzZXJ2ZXJEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgYnJvd3NlcidzIG9ubGluZSBzdGF0dXMuXHJcbiAqXHJcbiAqIFRoZSBtYWluIHNpZ25hbCByZXR1cm5zIGEgYm9vbGVhbiAoYHRydWVgIGZvciBvbmxpbmUsIGBmYWxzZWAgZm9yIG9mZmxpbmUpLlxyXG4gKiBBbiBhZGRpdGlvbmFsIGBzaW5jZWAgc2lnbmFsIGlzIGF0dGFjaGVkLCB0cmFja2luZyB3aGVuIHRoZSBzdGF0dXMgbGFzdCBjaGFuZ2VkLlxyXG4gKiBJdCdzIFNTUi1zYWZlIGFuZCBhdXRvbWF0aWNhbGx5IGNsZWFucyB1cCBpdHMgZXZlbnQgbGlzdGVuZXJzLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgYE5ldHdvcmtTdGF0dXNTaWduYWxgIGluc3RhbmNlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG5ldHdvcmtTdGF0dXMoXHJcbiAgZGVidWdOYW1lID0gJ25ldHdvcmtTdGF0dXMnLFxyXG4pOiBOZXR3b3JrU3RhdHVzU2lnbmFsIHtcclxuICBpZiAoaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKSkge1xyXG4gICAgY29uc3Qgc2lnID0gY29tcHV0ZWQoKCkgPT4gdHJ1ZSwge1xyXG4gICAgICBkZWJ1Z05hbWUsXHJcbiAgICB9KSBhcyBJbnRlcm5hbE5ldHdvcmtTdGF0dXNTaWduYWw7XHJcbiAgICBzaWcuc2luY2UgPSBjb21wdXRlZCgoKSA9PiBzZXJ2ZXJEYXRlKTtcclxuICAgIHJldHVybiBzaWc7XHJcbiAgfVxyXG5cclxuICBjb25zdCBzdGF0ZSA9IHNpZ25hbChuYXZpZ2F0b3Iub25MaW5lLCB7XHJcbiAgICBkZWJ1Z05hbWUsXHJcbiAgfSk7XHJcbiAgY29uc3Qgc2luY2UgPSBzaWduYWwobmV3IERhdGUoKSk7XHJcblxyXG4gIGNvbnN0IGdvT25saW5lID0gKCkgPT4ge1xyXG4gICAgc3RhdGUuc2V0KHRydWUpO1xyXG4gICAgc2luY2Uuc2V0KG5ldyBEYXRlKCkpO1xyXG4gIH07XHJcbiAgY29uc3QgZ29PZmZsaW5lID0gKCkgPT4ge1xyXG4gICAgc3RhdGUuc2V0KGZhbHNlKTtcclxuICAgIHNpbmNlLnNldChuZXcgRGF0ZSgpKTtcclxuICB9O1xyXG5cclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgZ29PbmxpbmUpO1xyXG4gIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgZ29PZmZsaW5lKTtcclxuXHJcbiAgaW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignb25saW5lJywgZ29PbmxpbmUpO1xyXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29mZmxpbmUnLCBnb09mZmxpbmUpO1xyXG4gIH0pO1xyXG5cclxuICBjb25zdCBzaWcgPSBzdGF0ZS5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxOZXR3b3JrU3RhdHVzU2lnbmFsO1xyXG4gIHNpZy5zaW5jZSA9IHNpbmNlLmFzUmVhZG9ubHkoKTtcclxuXHJcbiAgcmV0dXJuIHNpZztcclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, signal, } from '@angular/core';\n/**\n * Creates a read-only signal that tracks the page's visibility state.\n *\n * It uses the browser's Page Visibility API to reactively report if the\n * current document is `'visible'`, `'hidden'`, or in another state.\n * The primitive is SSR-safe and automatically cleans up its event listeners\n * when the creating context is destroyed.\n *\n * @param debugName Optional debug name for the signal.\n * @returns A read-only `Signal<DocumentVisibilityState>`. On the server,\n * it returns a static signal with a value of `'visible'`.\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { pageVisibility } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-visibility-tracker',\n * template: `<p>Page is currently: {{ visibilityState() }}</p>`\n * })\n * export class VisibilityTrackerComponent {\n * readonly visibilityState = pageVisibility();\n *\n * constructor() {\n * effect(() => {\n * if (this.visibilityState() === 'hidden') {\n * console.log('Page is hidden, pausing expensive animations...');\n * } else {\n * console.log('Page is visible, resuming activity.');\n * }\n * });\n * }\n * }\n * ```\n */\nexport function pageVisibility(debugName = 'pageVisibility') {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n return computed(() => 'visible', { debugName });\n }\n const visibility = signal(document.visibilityState, ...(ngDevMode ? [{ debugName: \"visibility\", debugName }] : [{ debugName }]));\n const onVisibilityChange = () => visibility.set(document.visibilityState);\n document.addEventListener('visibilitychange', onVisibilityChange);\n inject(DestroyRef).onDestroy(() => document.removeEventListener('visibilitychange', onVisibilityChange));\n return visibility.asReadonly();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS12aXNpYmlsaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3NlbnNvcnMvcGFnZS12aXNpYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLE1BQU0sRUFDTixXQUFXLEVBRVgsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFNBQVMsR0FBRyxnQkFBZ0I7SUFFNUIsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFDLE9BQU8sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSw4Q0FBSSxTQUFTLE9BQVgsRUFBRSxTQUFTLEVBQUUsR0FBQyxDQUFDO0lBRW5FLE1BQU0sa0JBQWtCLEdBQUcsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7SUFFMUUsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFFbEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsUUFBUSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLENBQ3JFLENBQUM7SUFFRixPQUFPLFVBQVUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBpbmplY3QsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgcGFnZSdzIHZpc2liaWxpdHkgc3RhdGUuXHJcbiAqXHJcbiAqIEl0IHVzZXMgdGhlIGJyb3dzZXIncyBQYWdlIFZpc2liaWxpdHkgQVBJIHRvIHJlYWN0aXZlbHkgcmVwb3J0IGlmIHRoZVxyXG4gKiBjdXJyZW50IGRvY3VtZW50IGlzIGAndmlzaWJsZSdgLCBgJ2hpZGRlbidgLCBvciBpbiBhbm90aGVyIHN0YXRlLlxyXG4gKiBUaGUgcHJpbWl0aXZlIGlzIFNTUi1zYWZlIGFuZCBhdXRvbWF0aWNhbGx5IGNsZWFucyB1cCBpdHMgZXZlbnQgbGlzdGVuZXJzXHJcbiAqIHdoZW4gdGhlIGNyZWF0aW5nIGNvbnRleHQgaXMgZGVzdHJveWVkLlxyXG4gKlxyXG4gKiBAcGFyYW0gZGVidWdOYW1lIE9wdGlvbmFsIGRlYnVnIG5hbWUgZm9yIHRoZSBzaWduYWwuXHJcbiAqIEByZXR1cm5zIEEgcmVhZC1vbmx5IGBTaWduYWw8RG9jdW1lbnRWaXNpYmlsaXR5U3RhdGU+YC4gT24gdGhlIHNlcnZlcixcclxuICogaXQgcmV0dXJucyBhIHN0YXRpYyBzaWduYWwgd2l0aCBhIHZhbHVlIG9mIGAndmlzaWJsZSdgLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyBwYWdlVmlzaWJpbGl0eSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtdmlzaWJpbGl0eS10cmFja2VyJyxcclxuICogdGVtcGxhdGU6IGA8cD5QYWdlIGlzIGN1cnJlbnRseToge3sgdmlzaWJpbGl0eVN0YXRlKCkgfX08L3A+YFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgVmlzaWJpbGl0eVRyYWNrZXJDb21wb25lbnQge1xyXG4gKiByZWFkb25seSB2aXNpYmlsaXR5U3RhdGUgPSBwYWdlVmlzaWJpbGl0eSgpO1xyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogaWYgKHRoaXMudmlzaWJpbGl0eVN0YXRlKCkgPT09ICdoaWRkZW4nKSB7XHJcbiAqIGNvbnNvbGUubG9nKCdQYWdlIGlzIGhpZGRlbiwgcGF1c2luZyBleHBlbnNpdmUgYW5pbWF0aW9ucy4uLicpO1xyXG4gKiB9IGVsc2Uge1xyXG4gKiBjb25zb2xlLmxvZygnUGFnZSBpcyB2aXNpYmxlLCByZXN1bWluZyBhY3Rpdml0eS4nKTtcclxuICogfVxyXG4gKiB9KTtcclxuICogfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2VWaXNpYmlsaXR5KFxyXG4gIGRlYnVnTmFtZSA9ICdwYWdlVmlzaWJpbGl0eScsXHJcbik6IFNpZ25hbDxEb2N1bWVudFZpc2liaWxpdHlTdGF0ZT4ge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKSB7XHJcbiAgICByZXR1cm4gY29tcHV0ZWQoKCkgPT4gJ3Zpc2libGUnLCB7IGRlYnVnTmFtZSB9KTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHZpc2liaWxpdHkgPSBzaWduYWwoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlLCB7IGRlYnVnTmFtZSB9KTtcclxuXHJcbiAgY29uc3Qgb25WaXNpYmlsaXR5Q2hhbmdlID0gKCkgPT4gdmlzaWJpbGl0eS5zZXQoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlKTtcclxuXHJcbiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eUNoYW5nZSk7XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT5cclxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHlDaGFuZ2UpLFxyXG4gICk7XHJcblxyXG4gIHJldHVybiB2aXNpYmlsaXR5LmFzUmVhZG9ubHkoKTtcclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common'; // Corrected import\nimport { computed, DestroyRef, ElementRef, inject, PLATFORM_ID, // Used for SSR fallback\n } from '@angular/core';\nimport { throttled } from '../throttled';\n/**\n * Creates a read-only signal that tracks the scroll position (x, y) of the window\n * or a specified HTML element.\n *\n * Updates are throttled by default to optimize performance. An `unthrottled`\n * property is available on the returned signal for direct access to raw updates.\n * The primitive is SSR-safe and automatically cleans up its event listeners.\n *\n * @param options Optional configuration for the scroll sensor.\n * @returns A `ScrollPositionSignal`. On the server, it returns a static\n * signal with `{ x: 0, y: 0 }`.\n *\n * @example\n * ```ts\n * import { Component, effect, ElementRef, viewChild } from '@angular/core';\n * import { scrollPosition } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-scroll-tracker',\n * template: `\n * <p>Window Scroll: X: {{ windowScroll().x }}, Y: {{ windowScroll().y }}</p>\n * <div #scrollableDiv style=\"height: 200px; width: 200px; overflow: auto; border: 1px solid black;\">\n * <div style=\"height: 400px; width: 400px;\">Scroll me!</div>\n * </div>\n * @if (divScroll()) {\n * <p>Div Scroll: X: {{ divScroll().x }}, Y: {{ divScroll().y }}</p>\n * }\n * `\n * })\n * export class ScrollTrackerComponent {\n * readonly windowScroll = scrollPosition(); // Defaults to window\n * readonly scrollableDiv = viewChild<ElementRef<HTMLDivElement>>('scrollableDiv');\n * readonly divScroll = scrollPosition({ target: this.scrollableDiv() }); // Example with element target\n *\n * constructor() {\n * effect(() => {\n * console.log('Window scrolled to:', this.windowScroll());\n * if (this.divScroll()) {\n * console.log('Div scrolled to:', this.divScroll());\n * }\n * });\n * }\n * }\n * ```\n */\nexport function scrollPosition(opt) {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const base = computed(() => ({\n x: 0,\n y: 0,\n }), {\n debugName: opt?.debugName ?? 'scrollPosition',\n });\n base.unthrottled = base;\n return base;\n }\n const { target = window, throttle = 100, debugName = 'scrollPosition', } = opt || {};\n let element;\n let getScrollPosition;\n if (target instanceof Window) {\n element = target;\n getScrollPosition = () => {\n return { x: target.scrollX, y: target.scrollY };\n };\n }\n else if (target instanceof ElementRef) {\n element = target.nativeElement;\n getScrollPosition = () => {\n return {\n x: target.nativeElement.scrollLeft,\n y: target.nativeElement.scrollTop,\n };\n };\n }\n else {\n element = target;\n getScrollPosition = () => {\n return {\n x: target.scrollLeft,\n y: target.scrollTop,\n };\n };\n }\n const state = throttled(getScrollPosition(), {\n debugName,\n equal: (a, b) => a.x === b.x && a.y === b.y,\n ms: throttle,\n });\n const onScroll = () => state.set(getScrollPosition());\n element.addEventListener('scroll', onScroll, { passive: true });\n inject(DestroyRef).onDestroy(() => element.removeEventListener('scroll', onScroll));\n const base = state.asReadonly();\n base.unthrottled = state.original;\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nyb2xsLXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3NlbnNvcnMvc2Nyb2xsLXBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDLENBQUMsbUJBQW1CO0FBQ3ZFLE9BQU8sRUFDTCxRQUFRLEVBQ1IsVUFBVSxFQUNWLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxFQUFFLHdCQUF3QjtFQUV0QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBZ0R6Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixHQUEyQjtJQUUzQixJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUNuQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUFFLENBQUM7WUFDSixDQUFDLEVBQUUsQ0FBQztTQUNMLENBQUMsRUFDRjtZQUNFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLGdCQUFnQjtTQUM5QyxDQUM4QixDQUFDO1FBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sRUFDSixNQUFNLEdBQUcsTUFBTSxFQUNmLFFBQVEsR0FBRyxHQUFHLEVBQ2QsU0FBUyxHQUFHLGdCQUFnQixHQUM3QixHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFFZCxJQUFJLE9BQTZCLENBQUM7SUFFbEMsSUFBSSxpQkFBdUMsQ0FBQztJQUU1QyxJQUFJLE1BQU0sWUFBWSxNQUFNLEVBQUUsQ0FBQztRQUM3QixPQUFPLEdBQUcsTUFBTSxDQUFDO1FBRWpCLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtZQUN2QixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRCxDQUFDLENBQUM7SUFDSixDQUFDO1NBQU0sSUFBSSxNQUFNLFlBQVksVUFBVSxFQUFFLENBQUM7UUFDeEMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDL0IsaUJBQWlCLEdBQUcsR0FBRyxFQUFFO1lBQ3ZCLE9BQU87Z0JBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVTtnQkFDbEMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUzthQUNsQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ2pCLGlCQUFpQixHQUFHLEdBQUcsRUFBRTtZQUN2QixPQUFPO2dCQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsVUFBVTtnQkFDcEIsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxTQUFTO2FBQ3BCLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFpQixpQkFBaUIsRUFBRSxFQUFFO1FBQzNELFNBQVM7UUFDVCxLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMzQyxFQUFFLEVBQUUsUUFBUTtLQUNiLENBQUMsQ0FBQztJQUVILE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFaEUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FDaEQsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxVQUFVLEVBQWtDLENBQUM7SUFDaEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBQ2xDLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nOyAvLyBDb3JyZWN0ZWQgaW1wb3J0XHJcbmltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgRGVzdHJveVJlZixcclxuICBFbGVtZW50UmVmLFxyXG4gIGluamVjdCxcclxuICBQTEFURk9STV9JRCwgLy8gVXNlZCBmb3IgU1NSIGZhbGxiYWNrXHJcbiAgdHlwZSBTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRocm90dGxlZCB9IGZyb20gJy4uL3Rocm90dGxlZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgc2Nyb2xsIHBvc2l0aW9uLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2Nyb2xsUG9zaXRpb24gPSB7XHJcbiAgLyoqIFRoZSBob3Jpem9udGFsIHNjcm9sbCBwb3NpdGlvbiAocGl4ZWxzIGZyb20gdGhlIGxlZnQpLiAqL1xyXG4gIHJlYWRvbmx5IHg6IG51bWJlcjtcclxuICAvKiogVGhlIHZlcnRpY2FsIHNjcm9sbCBwb3NpdGlvbiAocGl4ZWxzIGZyb20gdGhlIHRvcCkuICovXHJcbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBgc2Nyb2xsUG9zaXRpb25gIHNlbnNvci5cclxuICovXHJcbmV4cG9ydCB0eXBlIFNjcm9sbFBvc2l0aW9uT3B0aW9ucyA9IHtcclxuICAvKipcclxuICAgKiBUaGUgdGFyZ2V0IHRvIGxpc3RlbiBmb3Igc2Nyb2xsIGV2ZW50cyBvbi5cclxuICAgKiBDYW4gYmUgYHdpbmRvd2AgKGZvciBwYWdlIHNjcm9sbCkgb3IgYW4gYEhUTUxFbGVtZW50YC9gRWxlbWVudFJlZjxIVE1MRWxlbWVudD5gLlxyXG4gICAqIEBkZWZhdWx0IHdpbmRvd1xyXG4gICAqL1xyXG4gIHRhcmdldD86IFdpbmRvdyB8IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIHRoZSB1cGRhdGVzLlxyXG4gICAqIFNjcm9sbCBldmVudHMgY2FuIGZpcmUgdmVyeSByYXBpZGx5LlxyXG4gICAqIEBkZWZhdWx0IDEwMCAvLyBBIGNvbW1vbiBkZWZhdWx0IGZvciBzY3JvbGwgdGhyb3R0bGluZ1xyXG4gICAqL1xyXG4gIHRocm90dGxlPzogbnVtYmVyO1xyXG4gIC8qKiBPcHRpb25hbCBkZWJ1ZyBuYW1lIGZvciB0aGUgaW50ZXJuYWwgc2lnbmFsLiAqL1xyXG4gIGRlYnVnTmFtZT86IHN0cmluZztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJuYWwgdXNlZCBmb3Igc2V0dGluZyB0aGUgdW50aHJvdHRsZWQgc2lnbmFsXHJcbiAqL1xyXG50eXBlIEludGVybmFsU2Nyb2xsUG9zaXRpb25TaWduYWwgPSBTaWduYWw8U2Nyb2xsUG9zaXRpb24+ICYge1xyXG4gIHVudGhyb3R0bGVkOiBTaWduYWw8U2Nyb2xsUG9zaXRpb24+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEEgc3BlY2lhbGl6ZWQgU2lnbmFsIHRoYXQgdHJhY2tzIHNjcm9sbCBwb3NpdGlvbi5cclxuICogSXQncyBhIHRocm90dGxlZCBzaWduYWwgb2YgdGhlIHNjcm9sbCBjb29yZGluYXRlcyB3aXRoIGFuIGF0dGFjaGVkIGB1bnRocm90dGxlZGAgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgU2Nyb2xsUG9zaXRpb25TaWduYWwgPSBTaWduYWw8U2Nyb2xsUG9zaXRpb24+ICYge1xyXG4gIC8qKiBBIHNpZ25hbCBwcm92aWRpbmcgdGhlIHJhdywgdW50aHJvdHRsZWQgc2Nyb2xsIHBvc2l0aW9uLiAqL1xyXG4gIHJlYWRvbmx5IHVudGhyb3R0bGVkOiBTaWduYWw8U2Nyb2xsUG9zaXRpb24+O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSByZWFkLW9ubHkgc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBzY3JvbGwgcG9zaXRpb24gKHgsIHkpIG9mIHRoZSB3aW5kb3dcclxuICogb3IgYSBzcGVjaWZpZWQgSFRNTCBlbGVtZW50LlxyXG4gKlxyXG4gKiBVcGRhdGVzIGFyZSB0aHJvdHRsZWQgYnkgZGVmYXVsdCB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZS4gQW4gYHVudGhyb3R0bGVkYFxyXG4gKiBwcm9wZXJ0eSBpcyBhdmFpbGFibGUgb24gdGhlIHJldHVybmVkIHNpZ25hbCBmb3IgZGlyZWN0IGFjY2VzcyB0byByYXcgdXBkYXRlcy5cclxuICogVGhlIHByaW1pdGl2ZSBpcyBTU1Itc2FmZSBhbmQgYXV0b21hdGljYWxseSBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNjcm9sbCBzZW5zb3IuXHJcbiAqIEByZXR1cm5zIEEgYFNjcm9sbFBvc2l0aW9uU2lnbmFsYC4gT24gdGhlIHNlcnZlciwgaXQgcmV0dXJucyBhIHN0YXRpY1xyXG4gKiBzaWduYWwgd2l0aCBgeyB4OiAwLCB5OiAwIH1gLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgRWxlbWVudFJlZiwgdmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbiAqIGltcG9ydCB7IHNjcm9sbFBvc2l0aW9uIH0gZnJvbSAnQG1tc3RhY2svcHJpbWl0aXZlcyc7XHJcbiAqXHJcbiAqIEBDb21wb25lbnQoe1xyXG4gKiBzZWxlY3RvcjogJ2FwcC1zY3JvbGwtdHJhY2tlcicsXHJcbiAqIHRlbXBsYXRlOiBgXHJcbiAqIDxwPldpbmRvdyBTY3JvbGw6IFg6IHt7IHdpbmRvd1Njcm9sbCgpLnggfX0sIFk6IHt7IHdpbmRvd1Njcm9sbCgpLnkgfX08L3A+XHJcbiAqIDxkaXYgI3Njcm9sbGFibGVEaXYgc3R5bGU9XCJoZWlnaHQ6IDIwMHB4OyB3aWR0aDogMjAwcHg7IG92ZXJmbG93OiBhdXRvOyBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcIj5cclxuICogPGRpdiBzdHlsZT1cImhlaWdodDogNDAwcHg7IHdpZHRoOiA0MDBweDtcIj5TY3JvbGwgbWUhPC9kaXY+XHJcbiAqIDwvZGl2PlxyXG4gKiBAaWYgKGRpdlNjcm9sbCgpKSB7XHJcbiAqIDxwPkRpdiBTY3JvbGw6IFg6IHt7IGRpdlNjcm9sbCgpLnggfX0sIFk6IHt7IGRpdlNjcm9sbCgpLnkgfX08L3A+XHJcbiAqIH1cclxuICogYFxyXG4gKiB9KVxyXG4gKiBleHBvcnQgY2xhc3MgU2Nyb2xsVHJhY2tlckNvbXBvbmVudCB7XHJcbiAqIHJlYWRvbmx5IHdpbmRvd1Njcm9sbCA9IHNjcm9sbFBvc2l0aW9uKCk7IC8vIERlZmF1bHRzIHRvIHdpbmRvd1xyXG4gKiByZWFkb25seSBzY3JvbGxhYmxlRGl2ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+Pignc2Nyb2xsYWJsZURpdicpO1xyXG4gKiByZWFkb25seSBkaXZTY3JvbGwgPSBzY3JvbGxQb3NpdGlvbih7IHRhcmdldDogdGhpcy5zY3JvbGxhYmxlRGl2KCkgfSk7IC8vIEV4YW1wbGUgd2l0aCBlbGVtZW50IHRhcmdldFxyXG4gKlxyXG4gKiBjb25zdHJ1Y3RvcigpIHtcclxuICogZWZmZWN0KCgpID0+IHtcclxuICogY29uc29sZS5sb2coJ1dpbmRvdyBzY3JvbGxlZCB0bzonLCB0aGlzLndpbmRvd1Njcm9sbCgpKTtcclxuICogaWYgKHRoaXMuZGl2U2Nyb2xsKCkpIHtcclxuICogY29uc29sZS5sb2coJ0RpdiBzY3JvbGxlZCB0bzonLCB0aGlzLmRpdlNjcm9sbCgpKTtcclxuICogfVxyXG4gKiB9KTtcclxuICogfVxyXG4gKiB9XHJcbiAqIGBgYFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFBvc2l0aW9uKFxyXG4gIG9wdD86IFNjcm9sbFBvc2l0aW9uT3B0aW9ucyxcclxuKTogU2Nyb2xsUG9zaXRpb25TaWduYWwge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKSB7XHJcbiAgICBjb25zdCBiYXNlID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLFxyXG4gICAgICB9KSxcclxuICAgICAge1xyXG4gICAgICAgIGRlYnVnTmFtZTogb3B0Py5kZWJ1Z05hbWUgPz8gJ3Njcm9sbFBvc2l0aW9uJyxcclxuICAgICAgfSxcclxuICAgICkgYXMgSW50ZXJuYWxTY3JvbGxQb3NpdGlvblNpZ25hbDtcclxuICAgIGJhc2UudW50aHJvdHRsZWQgPSBiYXNlO1xyXG4gICAgcmV0dXJuIGJhc2U7XHJcbiAgfVxyXG5cclxuICBjb25zdCB7XHJcbiAgICB0YXJnZXQgPSB3aW5kb3csXHJcbiAgICB0aHJvdHRsZSA9IDEwMCxcclxuICAgIGRlYnVnTmFtZSA9ICdzY3JvbGxQb3NpdGlvbicsXHJcbiAgfSA9IG9wdCB8fCB7fTtcclxuXHJcbiAgbGV0IGVsZW1lbnQ6IFdpbmRvdyB8IEhUTUxFbGVtZW50O1xyXG5cclxuICBsZXQgZ2V0U2Nyb2xsUG9zaXRpb246ICgpID0+IFNjcm9sbFBvc2l0aW9uO1xyXG5cclxuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgV2luZG93KSB7XHJcbiAgICBlbGVtZW50ID0gdGFyZ2V0O1xyXG5cclxuICAgIGdldFNjcm9sbFBvc2l0aW9uID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4geyB4OiB0YXJnZXQuc2Nyb2xsWCwgeTogdGFyZ2V0LnNjcm9sbFkgfTtcclxuICAgIH07XHJcbiAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBFbGVtZW50UmVmKSB7XHJcbiAgICBlbGVtZW50ID0gdGFyZ2V0Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBnZXRTY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiB0YXJnZXQubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0LFxyXG4gICAgICAgIHk6IHRhcmdldC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCxcclxuICAgICAgfTtcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIGVsZW1lbnQgPSB0YXJnZXQ7XHJcbiAgICBnZXRTY3JvbGxQb3NpdGlvbiA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB4OiB0YXJnZXQuc2Nyb2xsTGVmdCxcclxuICAgICAgICB5OiB0YXJnZXQuc2Nyb2xsVG9wLFxyXG4gICAgICB9O1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHN0YXRlID0gdGhyb3R0bGVkPFNjcm9sbFBvc2l0aW9uPihnZXRTY3JvbGxQb3NpdGlvbigpLCB7XHJcbiAgICBkZWJ1Z05hbWUsXHJcbiAgICBlcXVhbDogKGEsIGIpID0+IGEueCA9PT0gYi54ICYmIGEueSA9PT0gYi55LFxyXG4gICAgbXM6IHRocm90dGxlLFxyXG4gIH0pO1xyXG5cclxuICBjb25zdCBvblNjcm9sbCA9ICgpID0+IHN0YXRlLnNldChnZXRTY3JvbGxQb3NpdGlvbigpKTtcclxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7XHJcblxyXG4gIGluamVjdChEZXN0cm95UmVmKS5vbkRlc3Ryb3koKCkgPT5cclxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwpLFxyXG4gICk7XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBzdGF0ZS5hc1JlYWRvbmx5KCkgYXMgSW50ZXJuYWxTY3JvbGxQb3NpdGlvblNpZ25hbDtcclxuICBiYXNlLnVudGhyb3R0bGVkID0gc3RhdGUub3JpZ2luYWw7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, inject, PLATFORM_ID, } from '@angular/core';\nimport { throttled } from '../throttled';\n/**\n * Creates a read-only signal that tracks the browser window's inner dimensions (width and height).\n *\n * Updates are throttled by default (100ms) to optimize performance during resize events.\n * An `unthrottled` property is available on the returned signal for direct access to raw updates.\n * The primitive is SSR-safe (returns a default size on the server) and automatically\n * cleans up its event listeners.\n *\n * @param opt Optional configuration, including `throttle` (ms) and `debugName`.\n * @returns A `WindowSizeSignal` (a `Signal<WindowSize>` with an `unthrottled` property).\n *\n * @example\n * ```ts\n * import { Component, effect } from '@angular/core';\n * import { windowSize } from '@mmstack/primitives';\n *\n * @Component({\n * selector: 'app-responsive-header',\n * template: `\n * <header>\n * Current Window Size: {{ size().width }}px x {{ size().height }}px\n * @if (isMobile()) {\n * <p>Mobile Menu</p>\n * } @else {\n * <p>Desktop Menu</p>\n * }\n * </header>\n * `\n * })\n * export class ResponsiveHeaderComponent {\n * readonly size = windowSize();\n * readonly isMobile = computed(() => this.size().width < 768);\n *\n * constructor() {\n * effect(() => {\n * console.log('Window resized to:', this.size());\n * });\n * }\n * }\n * ```\n */\nexport function windowSize(opt) {\n if (isPlatformServer(inject(PLATFORM_ID))) {\n const base = computed(() => ({\n width: 1024,\n height: 768,\n }), { debugName: opt?.debugName ?? 'windowSize' });\n base.unthrottled = base;\n return base;\n }\n const sizeSignal = throttled({ width: window.innerWidth, height: window.innerHeight }, {\n debugName: opt?.debugName ?? 'windowSize',\n equal: (a, b) => a.width === b.width && a.height === b.height,\n ms: opt?.throttle ?? 100,\n });\n const onResize = () => {\n sizeSignal.set({ width: window.innerWidth, height: window.innerHeight });\n };\n window.addEventListener('resize', onResize);\n inject(DestroyRef).onDestroy(() => {\n window.removeEventListener('resize', onResize);\n });\n const base = sizeSignal.asReadonly();\n base.unthrottled = sizeSignal.original;\n return base;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93LXNpemUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvc2Vuc29ycy93aW5kb3ctc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0Q3pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUF1QjtJQUNoRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUNuQixHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ0wsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsR0FBRztTQUNaLENBQUMsRUFDRixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLFlBQVksRUFBRSxDQUNsQixDQUFDO1FBRTlCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FDMUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxFQUN4RDtRQUNFLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUyxJQUFJLFlBQVk7UUFDekMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLE1BQU07UUFDN0QsRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLElBQUksR0FBRztLQUN6QixDQUNGLENBQUM7SUFFRixNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7UUFDcEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7SUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2hDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakQsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsVUFBVSxFQUE4QixDQUFDO0lBQ2pFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUN2QyxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBjb21wdXRlZCxcclxuICBEZXN0cm95UmVmLFxyXG4gIGluamVjdCxcclxuICBQTEFURk9STV9JRCxcclxuICBTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRocm90dGxlZCB9IGZyb20gJy4uL3Rocm90dGxlZCc7XHJcblxyXG4vKipcclxuICogUmVwcmVzZW50cyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgd2luZG93LlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgV2luZG93U2l6ZSA9IHtcclxuICAvKiogVGhlIGN1cnJlbnQgaW5uZXIgd2lkdGggb2YgdGhlIHdpbmRvdyBpbiBwaXhlbHMuICovXHJcbiAgcmVhZG9ubHkgd2lkdGg6IG51bWJlcjtcclxuICAvKiogVGhlIGN1cnJlbnQgaW5uZXIgaGVpZ2h0IG9mIHRoZSB3aW5kb3cgaW4gcGl4ZWxzLiAqL1xyXG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBgbW91c2VQb3NpdGlvbmAgc2Vuc29yLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgV2luZG93U2l6ZU9wdGlvbnMgPSB7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVidWcgbmFtZSBmb3IgdGhlIGludGVybmFsIHNpZ25hbC5cclxuICAgKi9cclxuICBkZWJ1Z05hbWU/OiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIHRvIHRocm90dGxlIHRoZSB1cGRhdGVzLlxyXG4gICAqIEBkZWZhdWx0IDEwMFxyXG4gICAqL1xyXG4gIHRocm90dGxlPzogbnVtYmVyO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBpbnRlcm5hbCB1c2VkIGZvciBzZXR0aW5nIHRoZSBzaW5jZSBzaWduYWxcclxuICovXHJcbnR5cGUgSW50ZXJuYWxXaW5kb3dTaXplU2lnbmFsID0gU2lnbmFsPFdpbmRvd1NpemU+ICYge1xyXG4gIHVudGhyb3R0bGVkOiBTaWduYWw8V2luZG93U2l6ZT47XHJcbn07XHJcblxyXG4vKipcclxuICogQSBzcGVjaWFsaXplZCBTaWduYWwgdGhhdCB0cmFja3Mgd2luZG93IHNpemUuXHJcbiAqIEl0J3MgYSB0aHJvdHRsZWQgc2lnbmFsIG9mIHRoZSB3aW5kb3cuaW5uZXJIZWlnaHQvaW5uZXJXaWR0aCBwcm9wZXJ0aWVzXHJcbiAqIHdpdGggYW4gYXR0YWNoZWQgYHVudGhyb3R0bGVkYCBzaWduYWwuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBXaW5kb3dTaXplU2lnbmFsID0gU2lnbmFsPFdpbmRvd1NpemU+ICYge1xyXG4gIC8qKiBBIHNpZ25hbCBwcm92aWRpbmcgdGhlIHJhdywgdW50aHJvdHRsZWQgd2luZG93IHNpemUuICovXHJcbiAgcmVhZG9ubHkgdW50aHJvdHRsZWQ6IFNpZ25hbDxXaW5kb3dTaXplPjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgcmVhZC1vbmx5IHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgYnJvd3NlciB3aW5kb3cncyBpbm5lciBkaW1lbnNpb25zICh3aWR0aCBhbmQgaGVpZ2h0KS5cclxuICpcclxuICogVXBkYXRlcyBhcmUgdGhyb3R0bGVkIGJ5IGRlZmF1bHQgKDEwMG1zKSB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBkdXJpbmcgcmVzaXplIGV2ZW50cy5cclxuICogQW4gYHVudGhyb3R0bGVkYCBwcm9wZXJ0eSBpcyBhdmFpbGFibGUgb24gdGhlIHJldHVybmVkIHNpZ25hbCBmb3IgZGlyZWN0IGFjY2VzcyB0byByYXcgdXBkYXRlcy5cclxuICogVGhlIHByaW1pdGl2ZSBpcyBTU1Itc2FmZSAocmV0dXJucyBhIGRlZmF1bHQgc2l6ZSBvbiB0aGUgc2VydmVyKSBhbmQgYXV0b21hdGljYWxseVxyXG4gKiBjbGVhbnMgdXAgaXRzIGV2ZW50IGxpc3RlbmVycy5cclxuICpcclxuICogQHBhcmFtIG9wdCBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBpbmNsdWRpbmcgYHRocm90dGxlYCAobXMpIGFuZCBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgV2luZG93U2l6ZVNpZ25hbGAgKGEgYFNpZ25hbDxXaW5kb3dTaXplPmAgd2l0aCBhbiBgdW50aHJvdHRsZWRgIHByb3BlcnR5KS5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogaW1wb3J0IHsgQ29tcG9uZW50LCBlZmZlY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuICogaW1wb3J0IHsgd2luZG93U2l6ZSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBAQ29tcG9uZW50KHtcclxuICogc2VsZWN0b3I6ICdhcHAtcmVzcG9uc2l2ZS1oZWFkZXInLFxyXG4gKiB0ZW1wbGF0ZTogYFxyXG4gKiA8aGVhZGVyPlxyXG4gKiBDdXJyZW50IFdpbmRvdyBTaXplOiB7eyBzaXplKCkud2lkdGggfX1weCB4IHt7IHNpemUoKS5oZWlnaHQgfX1weFxyXG4gKiBAaWYgKGlzTW9iaWxlKCkpIHtcclxuICogPHA+TW9iaWxlIE1lbnU8L3A+XHJcbiAqIH0gQGVsc2Uge1xyXG4gKiA8cD5EZXNrdG9wIE1lbnU8L3A+XHJcbiAqIH1cclxuICogPC9oZWFkZXI+XHJcbiAqIGBcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFJlc3BvbnNpdmVIZWFkZXJDb21wb25lbnQge1xyXG4gKiByZWFkb25seSBzaXplID0gd2luZG93U2l6ZSgpO1xyXG4gKiByZWFkb25seSBpc01vYmlsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2l6ZSgpLndpZHRoIDwgNzY4KTtcclxuICpcclxuICogY29uc3RydWN0b3IoKSB7XHJcbiAqIGVmZmVjdCgoKSA9PiB7XHJcbiAqIGNvbnNvbGUubG9nKCdXaW5kb3cgcmVzaXplZCB0bzonLCB0aGlzLnNpemUoKSk7XHJcbiAqIH0pO1xyXG4gKiB9XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd2luZG93U2l6ZShvcHQ/OiBXaW5kb3dTaXplT3B0aW9ucyk6IFdpbmRvd1NpemVTaWduYWwge1xyXG4gIGlmIChpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpKSB7XHJcbiAgICBjb25zdCBiYXNlID0gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+ICh7XHJcbiAgICAgICAgd2lkdGg6IDEwMjQsXHJcbiAgICAgICAgaGVpZ2h0OiA3NjgsXHJcbiAgICAgIH0pLFxyXG4gICAgICB7IGRlYnVnTmFtZTogb3B0Py5kZWJ1Z05hbWUgPz8gJ3dpbmRvd1NpemUnIH0sXHJcbiAgICApIGFzIEludGVybmFsV2luZG93U2l6ZVNpZ25hbDtcclxuXHJcbiAgICBiYXNlLnVudGhyb3R0bGVkID0gYmFzZTtcclxuICAgIHJldHVybiBiYXNlO1xyXG4gIH1cclxuXHJcbiAgY29uc3Qgc2l6ZVNpZ25hbCA9IHRocm90dGxlZDxXaW5kb3dTaXplPihcclxuICAgIHsgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLCBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCB9LFxyXG4gICAge1xyXG4gICAgICBkZWJ1Z05hbWU6IG9wdD8uZGVidWdOYW1lID8/ICd3aW5kb3dTaXplJyxcclxuICAgICAgZXF1YWw6IChhLCBiKSA9PiBhLndpZHRoID09PSBiLndpZHRoICYmIGEuaGVpZ2h0ID09PSBiLmhlaWdodCxcclxuICAgICAgbXM6IG9wdD8udGhyb3R0bGUgPz8gMTAwLFxyXG4gICAgfSxcclxuICApO1xyXG5cclxuICBjb25zdCBvblJlc2l6ZSA9ICgpID0+IHtcclxuICAgIHNpemVTaWduYWwuc2V0KHsgd2lkdGg6IHdpbmRvdy5pbm5lcldpZHRoLCBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodCB9KTtcclxuICB9O1xyXG5cclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25SZXNpemUpO1xyXG5cclxuICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvblJlc2l6ZSk7XHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IGJhc2UgPSBzaXplU2lnbmFsLmFzUmVhZG9ubHkoKSBhcyBJbnRlcm5hbFdpbmRvd1NpemVTaWduYWw7XHJcbiAgYmFzZS51bnRocm90dGxlZCA9IHNpemVTaWduYWwub3JpZ2luYWw7XHJcbiAgcmV0dXJuIGJhc2U7XHJcbn1cclxuIl19","import { prefersDarkMode, prefersReducedMotion } from './media-query';\nimport { mousePosition, } from './mouse-position';\nimport { networkStatus } from './network-status';\nimport { pageVisibility } from './page-visibility';\nimport { scrollPosition, } from './scroll-position';\nimport { windowSize } from './window-size';\n/**\n * Implementation for sensor overloads.\n * Users should refer to the specific overloads for detailed documentation.\n * @internal\n */\nexport function sensor(type, options) {\n switch (type) {\n case 'mousePosition':\n return mousePosition(options);\n case 'networkStatus':\n return networkStatus(options?.debugName);\n case 'pageVisibility':\n return pageVisibility(options?.debugName);\n case 'dark-mode':\n return prefersDarkMode(options?.debugName);\n case 'reduced-motion':\n return prefersReducedMotion(options?.debugName);\n case 'windowSize':\n return windowSize(options);\n case 'scrollPosition':\n return scrollPosition(options);\n default:\n throw new Error(`Unknown sensor type: ${type}`);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3NlbnNvcnMvc2Vuc29yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUdMLGFBQWEsR0FDZCxNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBdUIsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFHTCxjQUFjLEdBQ2YsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQTZGaEY7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQ3BCLElBT29CLEVBQ3BCLE9BTXlCO0lBU3pCLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLGVBQWU7WUFDbEIsT0FBTyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsS0FBSyxlQUFlO1lBQ2xCLE9BQU8sYUFBYSxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzQyxLQUFLLGdCQUFnQjtZQUNuQixPQUFPLGNBQWMsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDNUMsS0FBSyxXQUFXO1lBQ2QsT0FBTyxlQUFlLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdDLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sb0JBQW9CLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssWUFBWTtZQUNmLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdCLEtBQUssZ0JBQWdCO1lBQ25CLE9BQU8sY0FBYyxDQUFDLE9BQWdDLENBQUMsQ0FBQztRQUMxRDtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLElBQUksRUFBRSxDQUFDLENBQUM7SUFDcEQsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgcHJlZmVyc0RhcmtNb2RlLCBwcmVmZXJzUmVkdWNlZE1vdGlvbiB9IGZyb20gJy4vbWVkaWEtcXVlcnknO1xyXG5pbXBvcnQge1xyXG4gIE1vdXNlUG9zaXRpb25PcHRpb25zLFxyXG4gIE1vdXNlUG9zaXRpb25TaWduYWwsXHJcbiAgbW91c2VQb3NpdGlvbixcclxufSBmcm9tICcuL21vdXNlLXBvc2l0aW9uJztcclxuaW1wb3J0IHsgTmV0d29ya1N0YXR1c1NpZ25hbCwgbmV0d29ya1N0YXR1cyB9IGZyb20gJy4vbmV0d29yay1zdGF0dXMnO1xyXG5pbXBvcnQgeyBwYWdlVmlzaWJpbGl0eSB9IGZyb20gJy4vcGFnZS12aXNpYmlsaXR5JztcclxuaW1wb3J0IHtcclxuICBTY3JvbGxQb3NpdGlvbk9wdGlvbnMsXHJcbiAgU2Nyb2xsUG9zaXRpb25TaWduYWwsXHJcbiAgc2Nyb2xsUG9zaXRpb24sXHJcbn0gZnJvbSAnLi9zY3JvbGwtcG9zaXRpb24nO1xyXG5pbXBvcnQgeyBXaW5kb3dTaXplT3B0aW9ucywgV2luZG93U2l6ZVNpZ25hbCwgd2luZG93U2l6ZSB9IGZyb20gJy4vd2luZG93LXNpemUnO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBtb3VzZSBjdXJzb3IncyBwb3NpdGlvbi5cclxuICogQHBhcmFtIHR5cGUgTXVzdCBiZSBgJ21vdXNlUG9zaXRpb24nYC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIG1vdXNlIHBvc2l0aW9uIHNlbnNvci5cclxuICogQHJldHVybnMgQSBgTW91c2VQb3NpdGlvblNpZ25hbGAgdGhhdCB0cmFja3MgbW91c2UgY29vcmRpbmF0ZXMgYW5kIHByb3ZpZGVzIGFuIHVudGhyb3R0bGVkIHZlcnNpb24uXHJcbiAqIEBzZWUge21vdXNlUG9zaXRpb259IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy5cclxuICogQGV4YW1wbGUgY29uc3QgcG9zID0gc2Vuc29yKCdtb3VzZVBvc2l0aW9uJywgeyBjb29yZGluYXRlU3BhY2U6ICdwYWdlJywgdGhyb3R0bGU6IDUwIH0pO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbnNvcihcclxuICB0eXBlOiAnbW91c2VQb3NpdGlvbicsXHJcbiAgb3B0aW9ucz86IE1vdXNlUG9zaXRpb25PcHRpb25zLFxyXG4pOiBNb3VzZVBvc2l0aW9uU2lnbmFsO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBicm93c2VyJ3Mgb25saW5lL29mZmxpbmUgc3RhdHVzLlxyXG4gKiBAcGFyYW0gdHlwZSBNdXN0IGJlIGAnbmV0d29ya1N0YXR1cydgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBjdXJyZW50bHkgb25seSBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgTmV0d29ya1N0YXR1c1NpZ25hbGAgd2hpY2ggaXMgYSBib29sZWFuIGluZGljYXRpbmcgb25saW5lIHN0YXR1cywgd2l0aCBhbiBhdHRhY2hlZCBgc2luY2VgIHNpZ25hbC5cclxuICogQHNlZSB7bmV0d29ya1N0YXR1c30gZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLlxyXG4gKiBAZXhhbXBsZSBjb25zdCBvbmxpbmVTdGF0dXMgPSBzZW5zb3IoJ25ldHdvcmtTdGF0dXMnKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ25ldHdvcmtTdGF0dXMnLFxyXG4gIG9wdGlvbnM/OiB7IGRlYnVnTmFtZT86IHN0cmluZyB9LFxyXG4pOiBOZXR3b3JrU3RhdHVzU2lnbmFsO1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBwYWdlJ3MgdmlzaWJpbGl0eSBzdGF0ZSAoZS5nLiwgJ3Zpc2libGUnLCAnaGlkZGVuJykuXHJcbiAqIEBwYXJhbSB0eXBlIE11c3QgYmUgYCdwYWdlVmlzaWJpbGl0eSdgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBjdXJyZW50bHkgb25seSBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgU2lnbmFsPERvY3VtZW50VmlzaWJpbGl0eVN0YXRlPmAgaW5kaWNhdGluZyB0aGUgcGFnZSdzIGN1cnJlbnQgdmlzaWJpbGl0eS5cclxuICogQHNlZSB7cGFnZVZpc2liaWxpdHl9IGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy5cclxuICogQGV4YW1wbGUgY29uc3QgdmlzaWJpbGl0eSA9IHNlbnNvcigncGFnZVZpc2liaWxpdHknKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ3BhZ2VWaXNpYmlsaXR5JyxcclxuICBvcHRpb25zPzogeyBkZWJ1Z05hbWU/OiBzdHJpbmcgfSxcclxuKTogU2lnbmFsPERvY3VtZW50VmlzaWJpbGl0eVN0YXRlPjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgc2Vuc29yIHNpZ25hbCB0aGF0IHRyYWNrcyB0aGUgdXNlcidzIE9TL2Jyb3dzZXIgcHJlZmVyZW5jZSBmb3IgYSBkYXJrIGNvbG9yIHNjaGVtZS5cclxuICogQHBhcmFtIHR5cGUgTXVzdCBiZSBgJ2RhcmstbW9kZSdgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uLCBjdXJyZW50bHkgb25seSBgZGVidWdOYW1lYC5cclxuICogQHJldHVybnMgQSBgU2lnbmFsPGJvb2xlYW4+YCB3aGljaCBpcyBgdHJ1ZWAgaWYgYSBkYXJrIHRoZW1lIGlzIHByZWZlcnJlZC5cclxuICogQHNlZSB7cHJlZmVyc0RhcmtNb2RlfSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXHJcbiAqIEBleGFtcGxlIGNvbnN0IGlzRGFya01vZGUgPSBzZW5zb3IoJ2RhcmstbW9kZScpO1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbnNvcihcclxuICB0eXBlOiAnZGFyay1tb2RlJyxcclxuICBvcHRpb25zPzogeyBkZWJ1Z05hbWU/OiBzdHJpbmcgfSxcclxuKTogU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSB1c2VyJ3MgT1MvYnJvd3NlciBwcmVmZXJlbmNlIGZvciByZWR1Y2VkIG1vdGlvbi5cclxuICogQHBhcmFtIHR5cGUgTXVzdCBiZSBgJ3JlZHVjZWQtbW90aW9uJ2AuXHJcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24sIGN1cnJlbnRseSBvbmx5IGBkZWJ1Z05hbWVgLlxyXG4gKiBAcmV0dXJucyBBIGBTaWduYWw8Ym9vbGVhbj5gIHdoaWNoIGlzIGB0cnVlYCBpZiByZWR1Y2VkIG1vdGlvbiBpcyBwcmVmZXJyZWQuXHJcbiAqIEBzZWUge3ByZWZlcnNSZWR1Y2VkTW90aW9ufSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXHJcbiAqIEBleGFtcGxlIGNvbnN0IHdhbnRzUmVkdWNlZE1vdGlvbiA9IHNlbnNvcigncmVkdWNlZC1tb3Rpb24nKTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ3JlZHVjZWQtbW90aW9uJyxcclxuICBvcHRpb25zPzogeyBkZWJ1Z05hbWU/OiBzdHJpbmcgfSxcclxuKTogU2lnbmFsPGJvb2xlYW4+O1xyXG5cclxuLyoqXHJcbiAqIENyZWF0ZXMgYSBzZW5zb3Igc2lnbmFsIHRoYXQgdHJhY2tzIHRoZSBicm93c2VyIHdpbmRvdydzIGlubmVyIGRpbWVuc2lvbnMgKHdpZHRoIGFuZCBoZWlnaHQpLlxyXG4gKiBAcGFyYW0gdHlwZSBNdXN0IGJlIGAnd2luZG93U2l6ZSdgLlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgd2luZG93IHNpemUgc2Vuc29yLCBpbmNsdWRpbmcgYHRocm90dGxlYCBhbmQgYGRlYnVnTmFtZWAuXHJcbiAqIEByZXR1cm5zIEEgYFdpbmRvd1NpemVTaWduYWxgIHRoYXQgdHJhY2tzIHdpbmRvdyBkaW1lbnNpb25zIGFuZCBwcm92aWRlcyBhbiB1bnRocm90dGxlZCB2ZXJzaW9uLlxyXG4gKiBAc2VlIHt3aW5kb3dTaXplfSBmb3IgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBhbmQgZXhhbXBsZXMuXHJcbiAqIEBleGFtcGxlIGNvbnN0IHNpemUgPSBzZW5zb3IoJ3dpbmRvd1NpemUnLCB7IHRocm90dGxlOiAyMDAgfSk7XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc2Vuc29yKFxyXG4gIHR5cGU6ICd3aW5kb3dTaXplJyxcclxuICBvcHRpb25zPzogV2luZG93U2l6ZU9wdGlvbnMsXHJcbik6IFdpbmRvd1NpemVTaWduYWw7XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIHNlbnNvciBzaWduYWwgdGhhdCB0cmFja3MgdGhlIHNjcm9sbCBwb3NpdGlvbiAoeCwgeSkgb2YgdGhlIHdpbmRvdyBvciBhIHNwZWNpZmllZCBlbGVtZW50LlxyXG4gKiBAcGFyYW0gdHlwZSBNdXN0IGJlIGAnc2Nyb2xsUG9zaXRpb24nYC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIHNjcm9sbCBwb3NpdGlvbiBzZW5zb3IsIGluY2x1ZGluZyBgdGFyZ2V0YCwgYHRocm90dGxlYCwgYW5kIGBkZWJ1Z05hbWVgLlxyXG4gKiBAcmV0dXJucyBBIGBTY3JvbGxQb3NpdGlvblNpZ25hbGAgdGhhdCB0cmFja3Mgc2Nyb2xsIGNvb3JkaW5hdGVzIGFuZCBwcm92aWRlcyBhbiB1bnRocm90dGxlZCB2ZXJzaW9uLlxyXG4gKiBAc2VlIHtzY3JvbGxQb3NpdGlvbn0gZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24gYW5kIGV4YW1wbGVzLlxyXG4gKiBAZXhhbXBsZSBjb25zdCBwYWdlU2Nyb2xsID0gc2Vuc29yKCdzY3JvbGxQb3NpdGlvbicsIHsgdGhyb3R0bGU6IDE1MCB9KTtcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBzZW5zb3IoXHJcbiAgdHlwZTogJ3Njcm9sbFBvc2l0aW9uJyxcclxuICBvcHRpb25zPzogU2Nyb2xsUG9zaXRpb25PcHRpb25zLFxyXG4pOiBTY3JvbGxQb3NpdGlvblNpZ25hbDtcclxuXHJcbi8qKlxyXG4gKiBJbXBsZW1lbnRhdGlvbiBmb3Igc2Vuc29yIG92ZXJsb2Fkcy5cclxuICogVXNlcnMgc2hvdWxkIHJlZmVyIHRvIHRoZSBzcGVjaWZpYyBvdmVybG9hZHMgZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXHJcbiAqIEBpbnRlcm5hbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHNlbnNvcihcclxuICB0eXBlOlxyXG4gICAgfCAnbW91c2VQb3NpdGlvbidcclxuICAgIHwgJ25ldHdvcmtTdGF0dXMnXHJcbiAgICB8ICdwYWdlVmlzaWJpbGl0eSdcclxuICAgIHwgJ2RhcmstbW9kZSdcclxuICAgIHwgJ3JlZHVjZWQtbW90aW9uJ1xyXG4gICAgfCAnd2luZG93U2l6ZSdcclxuICAgIHwgJ3Njcm9sbFBvc2l0aW9uJyxcclxuICBvcHRpb25zPzpcclxuICAgIHwge1xyXG4gICAgICAgIGRlYnVnTmFtZT86IHN0cmluZztcclxuICAgICAgfVxyXG4gICAgfCBNb3VzZVBvc2l0aW9uT3B0aW9uc1xyXG4gICAgfCBXaW5kb3dTaXplT3B0aW9uc1xyXG4gICAgfCBTY3JvbGxQb3NpdGlvbk9wdGlvbnMsXHJcbik6XHJcbiAgfCBNb3VzZVBvc2l0aW9uU2lnbmFsXHJcbiAgfCBOZXR3b3JrU3RhdHVzU2lnbmFsXHJcbiAgfCBTaWduYWw8RG9jdW1lbnRWaXNpYmlsaXR5U3RhdGU+XHJcbiAgfCBTaWduYWw8Ym9vbGVhbj5cclxuICB8IFdpbmRvd1NpemVTaWduYWxcclxuICB8IFNjcm9sbFBvc2l0aW9uU2lnbmFsXHJcbiAgfCBTaWduYWw8SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeSB8IHVuZGVmaW5lZD4ge1xyXG4gIHN3aXRjaCAodHlwZSkge1xyXG4gICAgY2FzZSAnbW91c2VQb3NpdGlvbic6XHJcbiAgICAgIHJldHVybiBtb3VzZVBvc2l0aW9uKG9wdGlvbnMpO1xyXG4gICAgY2FzZSAnbmV0d29ya1N0YXR1cyc6XHJcbiAgICAgIHJldHVybiBuZXR3b3JrU3RhdHVzKG9wdGlvbnM/LmRlYnVnTmFtZSk7XHJcbiAgICBjYXNlICdwYWdlVmlzaWJpbGl0eSc6XHJcbiAgICAgIHJldHVybiBwYWdlVmlzaWJpbGl0eShvcHRpb25zPy5kZWJ1Z05hbWUpO1xyXG4gICAgY2FzZSAnZGFyay1tb2RlJzpcclxuICAgICAgcmV0dXJuIHByZWZlcnNEYXJrTW9kZShvcHRpb25zPy5kZWJ1Z05hbWUpO1xyXG4gICAgY2FzZSAncmVkdWNlZC1tb3Rpb24nOlxyXG4gICAgICByZXR1cm4gcHJlZmVyc1JlZHVjZWRNb3Rpb24ob3B0aW9ucz8uZGVidWdOYW1lKTtcclxuICAgIGNhc2UgJ3dpbmRvd1NpemUnOlxyXG4gICAgICByZXR1cm4gd2luZG93U2l6ZShvcHRpb25zKTtcclxuICAgIGNhc2UgJ3Njcm9sbFBvc2l0aW9uJzpcclxuICAgICAgcmV0dXJuIHNjcm9sbFBvc2l0aW9uKG9wdGlvbnMgYXMgU2Nyb2xsUG9zaXRpb25PcHRpb25zKTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBzZW5zb3IgdHlwZTogJHt0eXBlfWApO1xyXG4gIH1cclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { computed, DestroyRef, effect, inject, isDevMode, isSignal, PLATFORM_ID, signal, untracked, } from '@angular/core';\nimport { toWritable } from './to-writable';\n// Internal dummy store for server-side rendering\nconst noopStore = {\n getItem: () => null,\n setItem: () => {\n /* noop */\n },\n removeItem: () => {\n /* noop */\n },\n};\n/**\n * Creates a `WritableSignal` whose state is automatically synchronized with persistent storage\n * (like `localStorage` or `sessionStorage`).\n *\n * It handles Server-Side Rendering (SSR) gracefully, allows dynamic storage keys,\n * custom serialization/deserialization, custom storage providers, and optional\n * synchronization across browser tabs.\n *\n * @template T The type of value held by the signal and stored (after serialization).\n * @param fallback The default value of type `T` to use when no value is found in storage\n * or when deserialization fails. The signal's value will never be `null` or `undefined`\n * publicly, it will always revert to this fallback.\n * @param options Configuration options (`CreateStoredOptions<T>`). Requires at least the `key`.\n * @returns A `StoredSignal<T>` instance. This signal behaves like a standard `WritableSignal<T>`,\n * but its value is persisted. It includes a `.clear()` method to remove the item from storage\n * and a `.key` signal providing the current storage key.\n *\n * @remarks\n * - **Persistence:** The signal automatically saves its value to storage whenever the signal's\n * value or its configured `key` changes. This is managed internally using `effect`.\n * - **SSR Safety:** Detects server environments and uses a no-op storage, preventing errors.\n * - **Error Handling:** Catches and logs errors during serialization/deserialization in dev mode.\n * - **Tab Sync:** If `syncTabs` is true, listens to `storage` events to keep the signal value\n * consistent across browser tabs using the same key. Cleanup is handled automatically\n * using `DestroyRef`.\n * - **Removal:** Use the `.clear()` method on the returned signal to remove the item from storage.\n * Setting the signal to the fallback value will store the fallback value, not remove the item.\n *\n * @example\n * ```ts\n * import { Component, effect, signal } from '@angular/core';\n * import { stored } from '@mmstack/primitives'; // Adjust import path\n *\n * @Component({\n * selector: 'app-settings',\n * standalone: true,\n * template: `\n * Theme:\n * <select [ngModel]=\"theme()\" (ngModelChange)=\"theme.set($event)\">\n * <option value=\"light\">Light</option>\n * <option value=\"dark\">Dark</option>\n * </select>\n * <button (click)=\"theme.clear()\">Clear Theme Setting</button>\n * <p>Storage Key Used: {{ theme.key() }}</p>\n * ` // Requires FormsModule for ngModel\n * })\n * export class SettingsComponent {\n * theme = stored<'light' | 'dark'>('light', { key: 'app-theme', syncTabs: true });\n * }\n * ```\n */\nexport function stored(fallback, { key, store: providedStore, serialize = JSON.stringify, deserialize = JSON.parse, syncTabs = false, equal = Object.is, onKeyChange = 'load', cleanupOldKey = false, ...rest }) {\n const isServer = isPlatformServer(inject(PLATFORM_ID));\n const fallbackStore = isServer ? noopStore : localStorage;\n const store = providedStore ?? fallbackStore;\n const keySig = typeof key === 'string'\n ? computed(() => key)\n : isSignal(key)\n ? key\n : computed(key);\n const getValue = (key) => {\n const found = store.getItem(key);\n if (found === null)\n return null;\n try {\n return deserialize(found);\n }\n catch (err) {\n if (isDevMode())\n console.error(`Failed to parse stored value for key \"${key}\":`, err);\n return null;\n }\n };\n const storeValue = (key, value) => {\n try {\n if (value === null)\n return store.removeItem(key);\n const serialized = serialize(value);\n store.setItem(key, serialized);\n }\n catch (err) {\n if (isDevMode())\n console.error(`Failed to store value for key \"${key}\":`, err);\n }\n };\n const opt = {\n ...rest,\n equal,\n };\n const initialKey = untracked(keySig);\n const internal = signal(getValue(initialKey), ...(ngDevMode ? [{ debugName: \"internal\", ...opt,\n equal: (a, b) => {\n if (a === null && b === null)\n return true;\n if (a === null || b === null)\n return false;\n return equal(a, b);\n } }] : [{\n ...opt,\n equal: (a, b) => {\n if (a === null && b === null)\n return true;\n if (a === null || b === null)\n return false;\n return equal(a, b);\n },\n }]));\n let prevKey = initialKey;\n if (onKeyChange === 'store') {\n effect(() => {\n const k = keySig();\n storeValue(k, internal());\n if (prevKey !== k) {\n if (cleanupOldKey)\n store.removeItem(prevKey);\n prevKey = k;\n }\n });\n }\n else {\n effect(() => {\n const k = keySig();\n const internalValue = internal();\n if (k === prevKey) {\n return storeValue(k, internalValue); // normal operation\n }\n else {\n if (cleanupOldKey)\n store.removeItem(prevKey);\n const value = getValue(k);\n prevKey = k;\n internal.set(value); // load new value\n }\n });\n }\n if (syncTabs && !isServer) {\n const destroyRef = inject(DestroyRef);\n const sync = (e) => {\n if (e.key !== untracked(keySig))\n return;\n if (e.newValue === null)\n internal.set(null);\n else\n internal.set(getValue(e.key));\n };\n window.addEventListener('storage', sync);\n destroyRef.onDestroy(() => window.removeEventListener('storage', sync));\n }\n const writable = toWritable(computed(() => internal() ?? fallback, opt), internal.set);\n writable.clear = () => {\n internal.set(null);\n };\n writable.key = keySig;\n return writable;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3N0b3JlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxRQUFRLEVBQ1IsV0FBVyxFQUVYLE1BQU0sRUFDTixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWUzQyxpREFBaUQ7QUFDakQsTUFBTSxTQUFTLEdBQVU7SUFDdkIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7SUFDbkIsT0FBTyxFQUFFLEdBQUcsRUFBRTtRQUNaLFVBQVU7SUFDWixDQUFDO0lBQ0QsVUFBVSxFQUFFLEdBQUcsRUFBRTtRQUNmLFVBQVU7SUFDWixDQUFDO0NBQ0YsQ0FBQztBQTBFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrREc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUNwQixRQUFXLEVBQ1gsRUFDRSxHQUFHLEVBQ0gsS0FBSyxFQUFFLGFBQWEsRUFDcEIsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQzFCLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxFQUN4QixRQUFRLEdBQUcsS0FBSyxFQUNoQixLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsRUFDakIsV0FBVyxHQUFHLE1BQU0sRUFDcEIsYUFBYSxHQUFHLEtBQUssRUFDckIsR0FBRyxJQUFJLEVBQ2dCO0lBRXpCLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBRXZELE1BQU0sYUFBYSxH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QUFLLElBQUk7Z0JBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Z0JBQ3ZDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQztRQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFekMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FDekIsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLFFBQVEsRUFBRSxHQUFHLENBQUMsRUFDM0MsUUFBUSxDQUFDLEdBQUcsQ0FDTSxDQUFDO0lBRXJCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3BCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDO0lBQ0YsUUFBUSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUM7SUFDdEIsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIGNvbXB1dGVkLFxyXG4gIERlc3Ryb3lSZWYsXHJcbiAgZWZmZWN0LFxyXG4gIGluamVjdCxcclxuICBpc0Rldk1vZGUsXHJcbiAgaXNTaWduYWwsXHJcbiAgUExBVEZPUk1fSUQsXHJcbiAgU2lnbmFsLFxyXG4gIHNpZ25hbCxcclxuICB1bnRyYWNrZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IHRvV3JpdGFibGUgfSBmcm9tICcuL3RvLXdyaXRhYmxlJztcclxuXHJcbi8qKlxyXG4gKiBJbnRlcmZhY2UgZm9yIHN0b3JhZ2UgbWVjaGFuaXNtcyBjb21wYXRpYmxlIHdpdGggdGhlIGBzdG9yZWRgIHNpZ25hbC5cclxuICogTWF0Y2hlcyB0aGUgZXNzZW50aWFsIHBhcnRzIG9mIHRoZSBgU3RvcmFnZWAgaW50ZXJmYWNlIChgbG9jYWxTdG9yYWdlYCwgYHNlc3Npb25TdG9yYWdlYCkuXHJcbiAqL1xyXG50eXBlIFN0b3JlID0ge1xyXG4gIC8qKiBSZXRyaWV2ZXMgYW4gaXRlbSBmcm9tIHN0b3JhZ2UgZm9yIGEgZ2l2ZW4ga2V5LiAqL1xyXG4gIGdldEl0ZW06IChrZXk6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbDtcclxuICAvKiogU2V0cyBhbiBpdGVtIGluIHN0b3JhZ2UgZm9yIGEgZ2l2ZW4ga2V5LiAqL1xyXG4gIHNldEl0ZW06IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcclxuICAvKiogUmVtb3ZlcyBhbiBpdGVtIGZyb20gc3RvcmFnZSBmb3IgYSBnaXZlbiBrZXkuICovXHJcbiAgcmVtb3ZlSXRlbTogKGtleTogc3RyaW5nKSA9PiB2b2lkO1xyXG59O1xyXG5cclxuLy8gSW50ZXJuYWwgZHVtbXkgc3RvcmUgZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xyXG5jb25zdCBub29wU3RvcmU6IFN0b3JlID0ge1xyXG4gIGdldEl0ZW06ICgpID0+IG51bGwsXHJcbiAgc2V0SXRlbTogKCkgPT4ge1xyXG4gICAgLyogbm9vcCAqL1xyXG4gIH0sXHJcbiAgcmVtb3ZlSXRlbTogKCkgPT4ge1xyXG4gICAgLyogbm9vcCAqL1xyXG4gIH0sXHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBzaWduYWwgc3luY2hyb25pemVkIHdpdGggcGVyc2lzdGVudCBzdG9yYWdlIHVzaW5nIGBzdG9yZWQoKWAuXHJcbiAqIEV4dGVuZHMgQW5ndWxhcidzIGBDcmVhdGVTaWduYWxPcHRpb25zYC5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKi9cclxuZXhwb3J0IHR5cGUgQ3JlYXRlU3RvcmVkT3B0aW9uczxUPiA9IENyZWF0ZVNpZ25hbE9wdGlvbnM8VD4gJiB7XHJcbiAgLyoqXHJcbiAgICogVGhlIGtleSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBpdGVtIGluIHN0b3JhZ2UuXHJcbiAgICogQ2FuIGJlIGEgc3RhdGljIHN0cmluZyBvciBhIGZ1bmN0aW9uL3NpZ25hbCByZXR1cm5pbmcgYSBzdHJpbmcgZm9yIGR5bmFtaWMga2V5c1xyXG4gICAqIChlLmcuLCBiYXNlZCBvbiB1c2VyIElEIG9yIG90aGVyIGFwcGxpY2F0aW9uIHN0YXRlKS5cclxuICAgKi9cclxuICBrZXk6IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcpO1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIGN1c3RvbSBzdG9yYWdlIGltcGxlbWVudGF0aW9uIChlLmcuLCBgc2Vzc2lvblN0b3JhZ2VgIG9yIGEgY3VzdG9tIGFkYXB0ZXIpLlxyXG4gICAqIE11c3QgY29uZm9ybSB0byB0aGUgYFN0b3JlYCBpbnRlcmZhY2UgKGBnZXRJdGVtYCwgYHNldEl0ZW1gLCBgcmVtb3ZlSXRlbWApLlxyXG4gICAqIERlZmF1bHRzIHRvIGBsb2NhbFN0b3JhZ2VgIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIGFuZCBhIG5vLW9wIHN0b3JlIG9uIHRoZSBzZXJ2ZXIuXHJcbiAgICovXHJcbiAgc3RvcmU/OiBTdG9yZTtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBmdW5jdGlvbiB0byBzZXJpYWxpemUgdGhlIHZhbHVlICh0eXBlIGBUYCkgaW50byBhIHN0cmluZyBiZWZvcmUgc3RvcmluZy5cclxuICAgKiBEZWZhdWx0cyB0byBgSlNPTi5zdHJpbmdpZnlgLlxyXG4gICAqIEBwYXJhbSB7VH0gdmFsdWUgVGhlIHZhbHVlIHRvIHNlcmlhbGl6ZS5cclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc2VyaWFsaXplZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXHJcbiAgICovXHJcbiAgc2VyaWFsaXplPzogKHZhbHVlOiBUKSA9PiBzdHJpbmc7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgZnVuY3Rpb24gdG8gZGVzZXJpYWxpemUgdGhlIHN0cmluZyByZXRyaWV2ZWQgZnJvbSBzdG9yYWdlIGJhY2sgaW50byB0aGUgdmFsdWUgKHR5cGUgYFRgKS5cclxuICAgKiBEZWZhdWx0cyB0byBgSlNPTi5wYXJzZWAuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIFRoZSBzdHJpbmcgcmV0cmlldmVkIGZyb20gc3RvcmFnZS5cclxuICAgKiBAcmV0dXJucyB7VH0gVGhlIGRlc2VyaWFsaXplZCB2YWx1ZS5cclxuICAgKi9cclxuICBkZXNlcmlhbGl6ZT86ICh2YWx1ZTogc3RyaW5nKSA9PiBUO1xyXG4gIC8qKlxyXG4gICAqIElmIGB0cnVlYCwgdGhlIHNpZ25hbCB3aWxsIGF0dGVtcHQgdG8gc3luY2hyb25pemUgaXRzIHN0YXRlIGFjcm9zcyBtdWx0aXBsZSBicm93c2VyIHRhYnNcclxuICAgKiB1c2luZyB0aGUgYHN0b3JhZ2VgIGV2ZW50LiBDaGFuZ2VzIG1hZGUgaW4gb25lIHRhYiAoc2V0LCB1cGRhdGUsIGNsZWFyKSB3aWxsIGJlXHJcbiAgICogcmVmbGVjdGVkIGluIG90aGVyIHRhYnMgdXNpbmcgdGhlIHNhbWUgc3RvcmFnZSBrZXkuXHJcbiAgICogUmVxdWlyZXMgYSBicm93c2VyIGVudmlyb25tZW50LiBEZWZhdWx0cyB0byBgZmFsc2VgLlxyXG4gICAqL1xyXG4gIHN5bmNUYWJzPzogYm9vbGVhbjtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBwYXJhbWV0ZXIgdG8gc3BlY2lmeSBob3cga2V5IGNoYW5nZXMgc2hvdWxkIGJlIGhhbmRsZWQsIGxvYWQgaXMgdGhlIGRlZmF1bHQuXHJcbiAgICogLSBgbG9hZGA6IFRoZSBzaWduYWwgd2lsbCBsb2FkIHRoZSB2YWx1ZSBmcm9tIHN0b3JhZ2Ugd2hlbiB0aGUga2V5IGNoYW5nZXMgJiByZXBsYWNlIHRoZSBzaWduYWwncyB2YWx1ZS5cclxuICAgKiAtIGBzdG9yZWA6IFRoZSBzaWduYWwgd2lsbCBzdG9yZSB0aGUgY3VycmVudCB2YWx1ZSB0byB0aGUgbmV3IGtleSB3aGVuIHRoZSBrZXkgY2hhbmdlcy5cclxuICAgKi9cclxuICBvbktleUNoYW5nZT86ICdsb2FkJyB8ICdzdG9yZSc7XHJcbiAgLyoqXHJcbiAgICogSWYgJ3RydWUnLCB0aGUgc2lnbmFsIHdpbGwgcmVtb3ZlIHRoZSBvbGQga2V5IGZyb20gc3RvcmFnZSB3aGVuIHRoZSBrZXkgY2hhbmdlcywgZGVmYXVsdHMgdG8gYGZhbHNlYC5cclxuICAgKi9cclxuICBjbGVhbnVwT2xkS2V5PzogYm9vbGVhbjtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBBIHNwZWNpYWxpemVkIGBXcml0YWJsZVNpZ25hbGAgcmV0dXJuZWQgYnkgdGhlIGBzdG9yZWQoKWAgZnVuY3Rpb24uXHJcbiAqIEl0IHN5bmNocm9uaXplcyBpdHMgdmFsdWUgd2l0aCBwZXJzaXN0ZW50IHN0b3JhZ2UgYW5kIHByb3ZpZGVzIGFkZGl0aW9uYWwgbWV0aG9kcy5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsIChtYXRjaGVzIHRoZSBmYWxsYmFjayB0eXBlKS5cclxuICovXHJcbmV4cG9ydCB0eXBlIFN0b3JlZFNpZ25hbDxUPiA9IFdyaXRhYmxlU2lnbmFsPFQ+ICYge1xyXG4gIC8qKlxyXG4gICAqIFJlbW92ZXMgdGhlIGl0ZW0gYXNzb2NpYXRlZCB3aXRoIHRoZSBzaWduYWwncyBrZXkgZnJvbSB0aGUgY29uZmlndXJlZCBzdG9yYWdlLlxyXG4gICAqIEFmdGVyIGNsZWFyaW5nLCByZWFkaW5nIHRoZSBzaWduYWwgd2lsbCByZXR1cm4gdGhlIGZhbGxiYWNrIHZhbHVlIHVudGlsIGl0J3Mgc2V0IGFnYWluLlxyXG4gICAqL1xyXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xyXG4gIC8qKlxyXG4gICAqIEEgYFNpZ25hbDxzdHJpbmc+YCBjb250YWluaW5nIHRoZSBjdXJyZW50IHN0b3JhZ2Uga2V5IGJlaW5nIHVzZWQgYnkgdGhpcyBzdG9yZWQgc2lnbmFsLlxyXG4gICAqIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpZiB0aGUga2V5IHdhcyBjb25maWd1cmVkIGR5bmFtaWNhbGx5LiBZb3UgY2FuIHJlYWQgb3IgcmVhY3RcclxuICAgKiB0byB0aGlzIHNpZ25hbCB0byBrbm93IHRoZSBhY3RpdmUga2V5LlxyXG4gICAqL1xyXG4gIGtleTogU2lnbmFsPHN0cmluZz47XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIGBXcml0YWJsZVNpZ25hbGAgd2hvc2Ugc3RhdGUgaXMgYXV0b21hdGljYWxseSBzeW5jaHJvbml6ZWQgd2l0aCBwZXJzaXN0ZW50IHN0b3JhZ2VcclxuICogKGxpa2UgYGxvY2FsU3RvcmFnZWAgb3IgYHNlc3Npb25TdG9yYWdlYCkuXHJcbiAqXHJcbiAqIEl0IGhhbmRsZXMgU2VydmVyLVNpZGUgUmVuZGVyaW5nIChTU1IpIGdyYWNlZnVsbHksIGFsbG93cyBkeW5hbWljIHN0b3JhZ2Uga2V5cyxcclxuICogY3VzdG9tIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uLCBjdXN0b20gc3RvcmFnZSBwcm92aWRlcnMsIGFuZCBvcHRpb25hbFxyXG4gKiBzeW5jaHJvbml6YXRpb24gYWNyb3NzIGJyb3dzZXIgdGFicy5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsIGFuZCBzdG9yZWQgKGFmdGVyIHNlcmlhbGl6YXRpb24pLlxyXG4gKiBAcGFyYW0gZmFsbGJhY2sgVGhlIGRlZmF1bHQgdmFsdWUgb2YgdHlwZSBgVGAgdG8gdXNlIHdoZW4gbm8gdmFsdWUgaXMgZm91bmQgaW4gc3RvcmFnZVxyXG4gKiBvciB3aGVuIGRlc2VyaWFsaXphdGlvbiBmYWlscy4gVGhlIHNpZ25hbCdzIHZhbHVlIHdpbGwgbmV2ZXIgYmUgYG51bGxgIG9yIGB1bmRlZmluZWRgXHJcbiAqIHB1YmxpY2x5LCBpdCB3aWxsIGFsd2F5cyByZXZlcnQgdG8gdGhpcyBmYWxsYmFjay5cclxuICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zIChgQ3JlYXRlU3RvcmVkT3B0aW9uczxUPmApLiBSZXF1aXJlcyBhdCBsZWFzdCB0aGUgYGtleWAuXHJcbiAqIEByZXR1cm5zIEEgYFN0b3JlZFNpZ25hbDxUPmAgaW5zdGFuY2UuIFRoaXMgc2lnbmFsIGJlaGF2ZXMgbGlrZSBhIHN0YW5kYXJkIGBXcml0YWJsZVNpZ25hbDxUPmAsXHJcbiAqIGJ1dCBpdHMgdmFsdWUgaXMgcGVyc2lzdGVkLiBJdCBpbmNsdWRlcyBhIGAuY2xlYXIoKWAgbWV0aG9kIHRvIHJlbW92ZSB0aGUgaXRlbSBmcm9tIHN0b3JhZ2VcclxuICogYW5kIGEgYC5rZXlgIHNpZ25hbCBwcm92aWRpbmcgdGhlIGN1cnJlbnQgc3RvcmFnZSBrZXkuXHJcbiAqXHJcbiAqIEByZW1hcmtzXHJcbiAqIC0gKipQZXJzaXN0ZW5jZToqKiBUaGUgc2lnbmFsIGF1dG9tYXRpY2FsbHkgc2F2ZXMgaXRzIHZhbHVlIHRvIHN0b3JhZ2Ugd2hlbmV2ZXIgdGhlIHNpZ25hbCdzXHJcbiAqIHZhbHVlIG9yIGl0cyBjb25maWd1cmVkIGBrZXlgIGNoYW5nZXMuIFRoaXMgaXMgbWFuYWdlZCBpbnRlcm5hbGx5IHVzaW5nIGBlZmZlY3RgLlxyXG4gKiAtICoqU1NSIFNhZmV0eToqKiBEZXRlY3RzIHNlcnZlciBlbnZpcm9ubWVudHMgYW5kIHVzZXMgYSBuby1vcCBzdG9yYWdlLCBwcmV2ZW50aW5nIGVycm9ycy5cclxuICogLSAqKkVycm9yIEhhbmRsaW5nOioqIENhdGNoZXMgYW5kIGxvZ3MgZXJyb3JzIGR1cmluZyBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBpbiBkZXYgbW9kZS5cclxuICogLSAqKlRhYiBTeW5jOioqIElmIGBzeW5jVGFic2AgaXMgdHJ1ZSwgbGlzdGVucyB0byBgc3RvcmFnZWAgZXZlbnRzIHRvIGtlZXAgdGhlIHNpZ25hbCB2YWx1ZVxyXG4gKiBjb25zaXN0ZW50IGFjcm9zcyBicm93c2VyIHRhYnMgdXNpbmcgdGhlIHNhbWUga2V5LiBDbGVhbnVwIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseVxyXG4gKiB1c2luZyBgRGVzdHJveVJlZmAuXHJcbiAqIC0gKipSZW1vdmFsOioqIFVzZSB0aGUgYC5jbGVhcigpYCBtZXRob2Qgb24gdGhlIHJldHVybmVkIHNpZ25hbCB0byByZW1vdmUgdGhlIGl0ZW0gZnJvbSBzdG9yYWdlLlxyXG4gKiBTZXR0aW5nIHRoZSBzaWduYWwgdG8gdGhlIGZhbGxiYWNrIHZhbHVlIHdpbGwgc3RvcmUgdGhlIGZhbGxiYWNrIHZhbHVlLCBub3QgcmVtb3ZlIHRoZSBpdGVtLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGB0c1xyXG4gKiBpbXBvcnQgeyBDb21wb25lbnQsIGVmZmVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbiAqIGltcG9ydCB7IHN0b3JlZCB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnOyAvLyBBZGp1c3QgaW1wb3J0IHBhdGhcclxuICpcclxuICogQENvbXBvbmVudCh7XHJcbiAqIHNlbGVjdG9yOiAnYXBwLXNldHRpbmdzJyxcclxuICogc3RhbmRhbG9uZTogdHJ1ZSxcclxuICogdGVtcGxhdGU6IGBcclxuICogVGhlbWU6XHJcbiAqIDxzZWxlY3QgW25nTW9kZWxdPVwidGhlbWUoKVwiIChuZ01vZGVsQ2hhbmdlKT1cInRoZW1lLnNldCgkZXZlbnQpXCI+XHJcbiAqIDxvcHRpb24gdmFsdWU9XCJsaWdodFwiPkxpZ2h0PC9vcHRpb24+XHJcbiAqIDxvcHRpb24gdmFsdWU9XCJkYXJrXCI+RGFyazwvb3B0aW9uPlxyXG4gKiA8L3NlbGVjdD5cclxuICogPGJ1dHRvbiAoY2xpY2spPVwidGhlbWUuY2xlYXIoKVwiPkNsZWFyIFRoZW1lIFNldHRpbmc8L2J1dHRvbj5cclxuICogPHA+U3RvcmFnZSBLZXkgVXNlZDoge3sgdGhlbWUua2V5KCkgfX08L3A+XHJcbiAqIGAgLy8gUmVxdWlyZXMgRm9ybXNNb2R1bGUgZm9yIG5nTW9kZWxcclxuICogfSlcclxuICogZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IHtcclxuICogIHRoZW1lID0gc3RvcmVkPCdsaWdodCcgfCAnZGFyayc+KCdsaWdodCcsIHsga2V5OiAnYXBwLXRoZW1lJywgc3luY1RhYnM6IHRydWUgfSk7XHJcbiAqIH1cclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gc3RvcmVkPFQ+KFxyXG4gIGZhbGxiYWNrOiBULFxyXG4gIHtcclxuICAgIGtleSxcclxuICAgIHN0b3JlOiBwcm92aWRlZFN0b3JlLFxyXG4gICAgc2VyaWFsaXplID0gSlNPTi5zdHJpbmdpZnksXHJcbiAgICBkZXNlcmlhbGl6ZSA9IEpTT04ucGFyc2UsXHJcbiAgICBzeW5jVGFicyA9IGZhbHNlLFxyXG4gICAgZXF1YWwgPSBPYmplY3QuaXMsXHJcbiAgICBvbktleUNoYW5nZSA9ICdsb2FkJyxcclxuICAgIGNsZWFudXBPbGRLZXkgPSBmYWxzZSxcclxuICAgIC4uLnJlc3RcclxuICB9OiBDcmVhdGVTdG9yZWRPcHRpb25zPFQ+LFxyXG4pOiBTdG9yZWRTaWduYWw8VD4ge1xyXG4gIGNvbnN0IGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcclxuXHJcbiAgY29uc3QgZmFsbGJhY2tTdG9yZSA9IGlzU2VydmVyID8gbm9vcFN0b3JlIDogbG9jYWxTdG9yYWdlO1xyXG4gIGNvbnN0IHN0b3JlID0gcHJvdmlkZWRTdG9yZSA/PyBmYWxsYmFja1N0b3JlO1xyXG5cclxuICBjb25zdCBrZXlTaWcgPVxyXG4gICAgdHlwZW9mIGtleSA9PT0gJ3N0cmluZydcclxuICAgICAgPyBjb21wdXRlZCgoKSA9PiBrZXkpXHJcbiAgICAgIDogaXNTaWduYWwoa2V5KVxyXG4gICAgICAgID8ga2V5XHJcbiAgICAgICAgOiBjb21wdXRlZChrZXkpO1xyXG5cclxuICBjb25zdCBnZXRWYWx1ZSA9IChrZXk6IHN0cmluZyk6IFQgfCBudWxsID0+IHtcclxuICAgIGNvbnN0IGZvdW5kID0gc3RvcmUuZ2V0SXRlbShrZXkpO1xyXG4gICAgaWYgKGZvdW5kID09PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiBkZXNlcmlhbGl6ZShmb3VuZCk7XHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKVxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSBzdG9yZWQgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiOmAsIGVycik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IHN0b3JlVmFsdWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBUIHwgbnVsbCkgPT4ge1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gc3RvcmUucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplKHZhbHVlKTtcclxuICAgICAgc3RvcmUuc2V0SXRlbShrZXksIHNlcmlhbGl6ZWQpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSlcclxuICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gc3RvcmUgdmFsdWUgZm9yIGtleSBcIiR7a2V5fVwiOmAsIGVycik7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgY29uc3Qgb3B0ID0ge1xyXG4gICAgLi4ucmVzdCxcclxuICAgIGVxdWFsLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGluaXRpYWxLZXkgPSB1bnRyYWNrZWQoa2V5U2lnKTtcclxuICBjb25zdCBpbnRlcm5hbCA9IHNpZ25hbChnZXRWYWx1ZShpbml0aWFsS2V5KSwge1xyXG4gICAgLi4ub3B0LFxyXG4gICAgZXF1YWw6IChhLCBiKSA9PiB7XHJcbiAgICAgIGlmIChhID09PSBudWxsICYmIGIgPT09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAoYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIHJldHVybiBlcXVhbChhLCBiKTtcclxuICAgIH0sXHJcbiAgfSk7XHJcblxyXG4gIGxldCBwcmV2S2V5ID0gaW5pdGlhbEtleTtcclxuXHJcbiAgaWYgKG9uS2V5Q2hhbmdlID09PSAnc3RvcmUnKSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBrID0ga2V5U2lnKCk7XHJcbiAgICAgIHN0b3JlVmFsdWUoaywgaW50ZXJuYWwoKSk7XHJcbiAgICAgIGlmIChwcmV2S2V5ICE9PSBrKSB7XHJcbiAgICAgICAgaWYgKGNsZWFudXBPbGRLZXkpIHN0b3JlLnJlbW92ZUl0ZW0ocHJldktleSk7XHJcbiAgICAgICAgcHJldktleSA9IGs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICBjb25zdCBrID0ga2V5U2lnKCk7XHJcbiAgICAgIGNvbnN0IGludGVybmFsVmFsdWUgPSBpbnRlcm5hbCgpO1xyXG4gICAgICBpZiAoayA9PT0gcHJldktleSkge1xyXG4gICAgICAgIHJldHVybiBzdG9yZVZhbHVlKGssIGludGVybmFsVmFsdWUpOyAvLyBub3JtYWwgb3BlcmF0aW9uXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGNsZWFudXBPbGRLZXkpIHN0b3JlLnJlbW92ZUl0ZW0ocHJldktleSk7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRWYWx1ZShrKTtcclxuXHJcbiAgICAgICAgcHJldktleSA9IGs7XHJcbiAgICAgICAgaW50ZXJuYWwuc2V0KHZhbHVlKTsgLy8gbG9hZCBuZXcgdmFsdWVcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpZiAoc3luY1RhYnMgJiYgIWlzU2VydmVyKSB7XHJcbiAgICBjb25zdCBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gICAgY29uc3Qgc3luYyA9IChlOiBTdG9yYWdlRXZlbnQpID0+IHtcclxuICAgICAgaWYgKGUua2V5ICE9PSB1bnRyYWNrZWQoa2V5U2lnKSkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKGUubmV3VmFsdWUgPT09IG51bGwpIGludGVybmFsLnNldChudWxsKTtcclxuICAgICAgZWxzZSBpbnRlcm5hbC5zZXQoZ2V0VmFsdWUoZS5rZXkpKTtcclxuICAgIH07XHJcblxyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCBzeW5jKTtcclxuXHJcbiAgICBkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIHN5bmMpKTtcclxuICB9XHJcblxyXG4gIGNvbnN0IHdyaXRhYmxlID0gdG9Xcml0YWJsZTxUPihcclxuICAgIGNvbXB1dGVkKCgpID0+IGludGVybmFsKCkgPz8gZmFsbGJhY2ssIG9wdCksXHJcbiAgICBpbnRlcm5hbC5zZXQsXHJcbiAgKSBhcyBTdG9yZWRTaWduYWw8VD47XHJcblxyXG4gIHdyaXRhYmxlLmNsZWFyID0gKCkgPT4ge1xyXG4gICAgaW50ZXJuYWwuc2V0KG51bGwpO1xyXG4gIH07XHJcbiAgd3JpdGFibGUua2V5ID0ga2V5U2lnO1xyXG4gIHJldHVybiB3cml0YWJsZTtcclxufVxyXG4iXX0=","import { isPlatformServer } from '@angular/common';\nimport { DestroyRef, effect, inject, Injectable, PLATFORM_ID, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class MessageBus {\n channel = new BroadcastChannel('mmstack-tab-sync-bus');\n listeners = new Map();\n subscribe(id, listener) {\n this.unsubscribe(id); // Ensure no duplicate listeners\n const wrapped = (ev) => {\n try {\n if (ev.data?.id === id)\n listener(ev.data?.value);\n }\n catch {\n // noop\n }\n };\n this.channel.addEventListener('message', wrapped);\n this.listeners.set(id, wrapped);\n return {\n unsub: (() => this.unsubscribe(id)).bind(this),\n post: ((value) => this.channel.postMessage({ id, value })).bind(this),\n };\n }\n unsubscribe(id) {\n const listener = this.listeners.get(id);\n if (!listener)\n return;\n this.channel.removeEventListener('message', listener);\n this.listeners.delete(id);\n }\n static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: MessageBus, deps: [], target: i0.ɵɵFactoryTarget.Injectable });\n static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: MessageBus, providedIn: 'root' });\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.1\", ngImport: i0, type: MessageBus, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root',\n }]\n }] });\nexport function generateDeterministicID() {\n const stack = new Error().stack;\n if (stack) {\n // Look for the actual caller (first non-internal frame)\n const lines = stack.split('\\n');\n for (let i = 2; i < lines.length; i++) {\n const line = lines[i];\n if (line && !line.includes('tabSync') && !line.includes('MessageBus')) {\n let hash = 0;\n for (let j = 0; j < line.length; j++) {\n const char = line.charCodeAt(j);\n hash = (hash << 5) - hash + char;\n hash = hash & hash;\n }\n return `auto-${Math.abs(hash)}`;\n }\n }\n }\n throw new Error('Could not generate deterministic ID, please provide one manually.');\n}\n/**\n * Synchronizes a WritableSignal across browser tabs using BroadcastChannel API.\n *\n * Creates a shared signal that automatically syncs its value between all tabs\n * of the same application. When the signal is updated in one tab, all other\n * tabs will receive the new value automatically.\n *\n * @template T - The type of the WritableSignal\n * @param sig - The WritableSignal to synchronize across tabs\n * @param opt - Optional configuration object\n * @param opt.id - Explicit channel ID for synchronization. If not provided,\n * a deterministic ID is generated based on the call site.\n * Use explicit IDs in production for reliability.\n *\n * @returns The same WritableSignal instance, now synchronized across tabs\n *\n * @throws {Error} When deterministic ID generation fails and no explicit ID is provided\n *\n * @example\n * ```typescript\n * // Basic usage - auto-generates channel ID from call site\n * const theme = tabSync(signal('dark'));\n *\n * // With explicit ID (recommended for production)\n * const userPrefs = tabSync(signal({ lang: 'en' }), { id: 'user-preferences' });\n *\n * // Changes in one tab will sync to all other tabs\n * theme.set('light'); // All tabs will update to 'light'\n * ```\n *\n * @remarks\n * - Only works in browser environments (returns original signal on server)\n * - Uses a single BroadcastChannel for all synchronized signals\n * - Automatically cleans up listeners when the injection context is destroyed\n * - Initial signal value after sync setup is not broadcasted to prevent loops\n *\n */\nexport function tabSync(sig, opt) {\n if (isPlatformServer(inject(PLATFORM_ID)))\n return sig;\n const id = opt?.id || generateDeterministicID();\n const bus = inject(MessageBus);\n const { unsub, post } = bus.subscribe(id, (next) => sig.set(next));\n let first = false;\n const effectRef = effect(() => {\n const val = sig();\n if (!first) {\n first = true;\n return;\n }\n post(val);\n }, ...(ngDevMode ? [{ debugName: \"effectRef\" }] : []));\n inject(DestroyRef).onDestroy(() => {\n effectRef.destroy();\n unsub();\n });\n return sig;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiU3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi90YWJTeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsV0FBVyxHQUVaLE1BQU0sZUFBZSxDQUFDOztBQUt2QixNQUFNLE9BQU8sVUFBVTtJQUNKLE9BQU8sR0FBRyxJQUFJLGdCQUFnQixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdkQsU0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQyxDQUFDO0lBRTNFLFNBQVMsQ0FBSSxFQUFVLEVBQUUsUUFBMkI7UUFDbEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGdDQUFnQztRQUN0RCxNQUFNLE9BQU8sR0FBRyxDQUFDLEVBQWdCLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFO29CQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTztZQUNULENBQUM7UUFDSCxDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFaEMsT0FBTztZQUNMLEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxD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UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1gsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNiLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQyxxREFBQyxDQUFDO0lBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDaEMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BCLEtBQUssRUFBRSxDQUFDO0lBQ1YsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIERlc3Ryb3lSZWYsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBQTEFURk9STV9JRCxcbiAgV3JpdGFibGVTaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUJ1cyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2hhbm5lbCA9IG5ldyBCcm9hZGNhc3RDaGFubmVsKCdtbXN0YWNrLXRhYi1zeW5jLWJ1cycpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVycyA9IG5ldyBNYXA8c3RyaW5nLCAoZXY6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZD4oKTtcblxuICBzdWJzY3JpYmU8VD4oaWQ6IHN0cmluZywgbGlzdGVuZXI6IChkYXRhOiBUKSA9PiB2b2lkKSB7XG4gICAgdGhpcy51bnN1YnNjcmliZShpZCk7IC8vIEVuc3VyZSBubyBkdXBsaWNhdGUgbGlzdGVuZXJzXG4gICAgY29uc3Qgd3JhcHBlZCA9IChldjogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZXYuZGF0YT8uaWQgPT09IGlkKSBsaXN0ZW5lcihldi5kYXRhPy52YWx1ZSk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gbm9vcFxuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB3cmFwcGVkKTtcbiAgICB0aGlzLmxpc3RlbmVycy5zZXQoaWQsIHdyYXBwZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHVuc3ViOiAoKCkgPT4gdGhpcy51bnN1YnNjcmliZShpZCkpLmJpbmQodGhpcyksXG4gICAgICBwb3N0OiAoKHZhbHVlOiBUKSA9PiB0aGlzLmNoYW5uZWwucG9zdE1lc3NhZ2UoeyBpZCwgdmFsdWUgfSkpLmJpbmQodGhpcyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgdW5zdWJzY3JpYmUoaWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5saXN0ZW5lcnMuZ2V0KGlkKTtcbiAgICBpZiAoIWxpc3RlbmVyKSByZXR1cm47XG4gICAgdGhpcy5jaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lcik7XG4gICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGlkKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVEZXRlcm1pbmlzdGljSUQoKTogc3RyaW5nIHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgaWYgKHN0YWNrKSB7XG4gICAgLy8gTG9vayBmb3IgdGhlIGFjdHVhbCBjYWxsZXIgKGZpcnN0IG5vbi1pbnRlcm5hbCBmcmFtZSlcbiAgICBjb25zdCBsaW5lcyA9IHN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICBmb3IgKGxldCBpID0gMjsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBsaW5lID0gbGluZXNbaV07XG4gICAgICBpZiAobGluZSAmJiAhbGluZS5pbmNsdWRlcygndGFiU3luYycpICYmICFsaW5lLmluY2x1ZGVzKCdNZXNzYWdlQnVzJykpIHtcbiAgICAgICAgbGV0IGhhc2ggPSAwO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxpbmUubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjaGFyID0gbGluZS5jaGFyQ29kZUF0KGopO1xuICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCA1KSAtIGhhc2ggKyBjaGFyO1xuICAgICAgICAgIGhhc2ggPSBoYXNoICYgaGFzaDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYGF1dG8tJHtNYXRoLmFicyhoYXNoKX1gO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ0NvdWxkIG5vdCBnZW5lcmF0ZSBkZXRlcm1pbmlzdGljIElELCBwbGVhc2UgcHJvdmlkZSBvbmUgbWFudWFsbHkuJyxcbiAgKTtcbn1cblxudHlwZSBTeW5jU2lnbmFsT3B0aW9ucyA9IHtcbiAgaWQ/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIFN5bmNocm9uaXplcyBhIFdyaXRhYmxlU2lnbmFsIGFjcm9zcyBicm93c2VyIHRhYnMgdXNpbmcgQnJvYWRjYXN0Q2hhbm5lbCBBUEkuXG4gKlxuICogQ3JlYXRlcyBhIHNoYXJlZCBzaWduYWwgdGhhdCBhdXRvbWF0aWNhbGx5IHN5bmNzIGl0cyB2YWx1ZSBiZXR3ZWVuIGFsbCB0YWJzXG4gKiBvZiB0aGUgc2FtZSBhcHBsaWNhdGlvbi4gV2hlbiB0aGUgc2lnbmFsIGlzIHVwZGF0ZWQgaW4gb25lIHRhYiwgYWxsIG90aGVyXG4gKiB0YWJzIHdpbGwgcmVjZWl2ZSB0aGUgbmV3IHZhbHVlIGF1dG9tYXRpY2FsbHkuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgV3JpdGFibGVTaWduYWxcbiAqIEBwYXJhbSBzaWcgLSBUaGUgV3JpdGFibGVTaWduYWwgdG8gc3luY2hyb25pemUgYWNyb3NzIHRhYnNcbiAqIEBwYXJhbSBvcHQgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdFxuICogQHBhcmFtIG9wdC5pZCAtIEV4cGxpY2l0IGNoYW5uZWwgSUQgZm9yIHN5bmNocm9uaXphdGlvbi4gSWYgbm90IHByb3ZpZGVkLFxuICogICAgICAgICAgICAgICAgIGEgZGV0ZXJtaW5pc3RpYyBJRCBpcyBnZW5lcmF0ZWQgYmFzZWQgb24gdGhlIGNhbGwgc2l0ZS5cbiAqICAgICAgICAgICAgICAgICBVc2UgZXhwbGljaXQgSURzIGluIHByb2R1Y3Rpb24gZm9yIHJlbGlhYmlsaXR5LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzYW1lIFdyaXRhYmxlU2lnbmFsIGluc3RhbmNlLCBub3cgc3luY2hyb25pemVkIGFjcm9zcyB0YWJzXG4gKlxuICogQHRocm93cyB7RXJyb3J9IFdoZW4gZGV0ZXJtaW5pc3RpYyBJRCBnZW5lcmF0aW9uIGZhaWxzIGFuZCBubyBleHBsaWNpdCBJRCBpcyBwcm92aWRlZFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBCYXNpYyB1c2FnZSAtIGF1dG8tZ2VuZXJhdGVzIGNoYW5uZWwgSUQgZnJvbSBjYWxsIHNpdGVcbiAqIGNvbnN0IHRoZW1lID0gdGFiU3luYyhzaWduYWwoJ2RhcmsnKSk7XG4gKlxuICogLy8gV2l0aCBleHBsaWNpdCBJRCAocmVjb21tZW5kZWQgZm9yIHByb2R1Y3Rpb24pXG4gKiBjb25zdCB1c2VyUHJlZnMgPSB0YWJTeW5jKHNpZ25hbCh7IGxhbmc6ICdlbicgfSksIHsgaWQ6ICd1c2VyLXByZWZlcmVuY2VzJyB9KTtcbiAqXG4gKiAvLyBDaGFuZ2VzIGluIG9uZSB0YWIgd2lsbCBzeW5jIHRvIGFsbCBvdGhlciB0YWJzXG4gKiB0aGVtZS5zZXQoJ2xpZ2h0Jyk7IC8vIEFsbCB0YWJzIHdpbGwgdXBkYXRlIHRvICdsaWdodCdcbiAqIGBgYFxuICpcbiAqIEByZW1hcmtzXG4gKiAtIE9ubHkgd29ya3MgaW4gYnJvd3NlciBlbnZpcm9ubWVudHMgKHJldHVybnMgb3JpZ2luYWwgc2lnbmFsIG9uIHNlcnZlcilcbiAqIC0gVXNlcyBhIHNpbmdsZSBCcm9hZGNhc3RDaGFubmVsIGZvciBhbGwgc3luY2hyb25pemVkIHNpZ25hbHNcbiAqIC0gQXV0b21hdGljYWxseSBjbGVhbnMgdXAgbGlzdGVuZXJzIHdoZW4gdGhlIGluamVjdGlvbiBjb250ZXh0IGlzIGRlc3Ryb3llZFxuICogLSBJbml0aWFsIHNpZ25hbCB2YWx1ZSBhZnRlciBzeW5jIHNldHVwIGlzIG5vdCBicm9hZGNhc3RlZCB0byBwcmV2ZW50IGxvb3BzXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gdGFiU3luYzxUIGV4dGVuZHMgV3JpdGFibGVTaWduYWw8YW55Pj4oXG4gIHNpZzogVCxcbiAgb3B0PzogU3luY1NpZ25hbE9wdGlvbnMsXG4pOiBUIHtcbiAgaWYgKGlzUGxhdGZvcm1TZXJ2ZXIoaW5qZWN0KFBMQVRGT1JNX0lEKSkpIHJldHVybiBzaWc7XG5cbiAgY29uc3QgaWQgPSBvcHQ/LmlkIHx8IGdlbmVyYXRlRGV0ZXJtaW5pc3RpY0lEKCk7XG5cbiAgY29uc3QgYnVzID0gaW5qZWN0KE1lc3NhZ2VCdXMpO1xuXG4gIGNvbnN0IHsgdW5zdWIsIHBvc3QgfSA9IGJ1cy5zdWJzY3JpYmUoaWQsIChuZXh0KSA9PiBzaWcuc2V0KG5leHQpKTtcblxuICBsZXQgZmlyc3QgPSBmYWxzZTtcblxuICBjb25zdCBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHZhbCA9IHNpZygpO1xuICAgIGlmICghZmlyc3QpIHtcbiAgICAgIGZpcnN0ID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcG9zdCh2YWwpO1xuICB9KTtcblxuICBpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcbiAgICBlZmZlY3RSZWYuZGVzdHJveSgpO1xuICAgIHVuc3ViKCk7XG4gIH0pO1xuXG4gIHJldHVybiBzaWc7XG59XG4iXX0=","import { DestroyRef, effect, inject, Injector, runInInjectionContext, untracked, } from '@angular/core';\nexport function until(sourceSignal, predicate, options = {}) {\n const injector = options.injector ?? inject(Injector);\n return new Promise((resolve, reject) => {\n let effectRef;\n let timeoutId;\n let settled = false;\n const cleanupAndReject = (reason) => {\n if (!settled) {\n settled = true;\n if (timeoutId)\n clearTimeout(timeoutId);\n effectRef?.destroy();\n reject(new Error(reason));\n }\n };\n const cleanupAndResolve = (value) => {\n if (!settled) {\n settled = true;\n if (timeoutId)\n clearTimeout(timeoutId);\n effectRef?.destroy();\n resolve(value);\n }\n };\n try {\n const destroyRef = options.destroyRef ?? inject(DestroyRef, { optional: true });\n destroyRef?.onDestroy(() => {\n cleanupAndReject('until: Operation cancelled due to context destruction.');\n });\n }\n catch {\n // noop\n }\n const initialValue = untracked(sourceSignal);\n if (predicate(initialValue)) {\n cleanupAndResolve(initialValue);\n return;\n }\n if (options?.timeout !== undefined) {\n timeoutId = setTimeout(() => cleanupAndReject(`until: Timeout after ${options.timeout}ms.`), options.timeout);\n }\n runInInjectionContext(injector, () => {\n effectRef = effect(() => {\n if (settled) {\n return effectRef?.destroy();\n }\n const currentValue = sourceSignal();\n if (predicate(currentValue)) {\n cleanupAndResolve(currentValue);\n }\n });\n });\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW50aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3NyYy9saWIvdW50aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFVBQVUsRUFDVixNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBbUV2QixNQUFNLFVBQVUsS0FBSyxDQUNuQixZQUF1QixFQUN2QixTQUFnQyxFQUNoQyxVQUF3QixFQUFFO0lBRTFCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sSUFBSSxPQUFPLENBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEMsSUFBSSxTQUFnQyxDQUFDO1FBQ3JDLElBQUksU0FBb0QsQ0FBQztRQUN6RCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFcEIsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE1BQWMsRUFBRSxFQUFFO1lBQzFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDYixPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNmLElBQUksU0FBUztvQkFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3ZDLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFRLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDZixJQUFJLFNBQVM7b0JBQUUsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQixDQUFDO1FBQ0gsQ0FBQyxDQUFDO1FBRUYsSUFBSSxDQUFDO1lBQ0gsTUFBTSxVQUFVLEdBQ2QsT0FBTyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFFL0QsVUFBVSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLGdCQUFnQixDQUNkLHdEQUF3RCxDQUN6RCxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDN0MsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM1QixpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksT0FBTyxFQUFFLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuQyxTQUFTLEdBQUcsVUFBVSxDQUNwQixHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyx3QkFBd0IsT0FBTyxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQ3BFLE9BQU8sQ0FBQyxPQUFPLENBQ2hCLENBQUM7UUFDSixDQUFDO1FBRUQscUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtZQUNuQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtnQkFDdEIsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixPQUFPLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQztnQkFDOUIsQ0FBQztnQkFFRCxNQUFNLFlBQVksR0FBRyxZQUFZLEVBQUUsQ0FBQztnQkFDcEMsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBEZXN0cm95UmVmLFxyXG4gIGVmZmVjdCxcclxuICBFZmZlY3RSZWYsXHJcbiAgaW5qZWN0LFxyXG4gIEluamVjdG9yLFxyXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcclxuICBTaWduYWwsXHJcbiAgdW50cmFja2VkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IHR5cGUgVW50aWxPcHRpb25zID0ge1xyXG4gIC8qKlxyXG4gICAqIE9wdGlvbmFsIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBJZiB0aGUgY29uZGl0aW9uIGlzIG5vdCBtZXRcclxuICAgKiB3aXRoaW4gdGhpcyBwZXJpb2QsIHRoZSBwcm9taXNlIHdpbGwgcmVqZWN0LlxyXG4gICAqL1xyXG4gIHRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgLyoqXHJcbiAgICogT3B0aW9uYWwgRGVzdHJveVJlZi4gSWYgcHJvdmlkZWQgYW5kIHRoZSBjb21wb25lbnQvY29udGV4dCBpcyBkZXN0cm95ZWRcclxuICAgKiBiZWZvcmUgdGhlIGNvbmRpdGlvbiBpcyBtZXQgb3IgdGltZW91dCBvY2N1cnMsIHRoZSBwcm9taXNlIHdpbGwgcmVqZWN0LlxyXG4gICAqIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBhdHRlbXB0IHRvIGluamVjdCBvbmUgaWYgY2FsbGVkIGluIGFuIGluamVjdGlvbiBjb250ZXh0LlxyXG4gICAqL1xyXG4gIGRlc3Ryb3lSZWY/OiBEZXN0cm95UmVmO1xyXG4gIGluamVjdG9yPzogSW5qZWN0b3I7XHJcbn07XHJcblxyXG4vKipcclxuICogQ3JlYXRlcyBhIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGEgc2lnbmFsJ3MgdmFsdWUgc2F0aXNmaWVzIGEgdHlwZSBwcmVkaWNhdGUuXHJcbiAqXHJcbiAqIFRoaXMgb3ZlcmxvYWQgaXMgdXNlZCB3aGVuIHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gaXMgYSB0eXBlIGd1YXJkIChlLmcuLCBgKHYpOiB2IGlzIE15VHlwZWApLlxyXG4gKiBUaGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIHJlc29sdmUgd2l0aCB0aGUgbmFycm93ZWQgdHlwZS5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIGJhc2UgdHlwZSBvZiB0aGUgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEB0ZW1wbGF0ZSBVIFRoZSBuYXJyb3dlZCB0eXBlIGFzc2VydGVkIGJ5IHRoZSBwcmVkaWNhdGUuXHJcbiAqIEBwYXJhbSBzb3VyY2VTaWduYWwgVGhlIHNpZ25hbCB0byBvYnNlcnZlLlxyXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgdHlwZSBndWFyZCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBvZiB0eXBlIGBVYC5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGltZW91dCBhbmQgZXhwbGljaXQgZGVzdHJ1Y3Rpb24uXHJcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNpZ25hbCdzIHZhbHVlLCBuYXJyb3dlZCB0byB0eXBlIGBVYC5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgdHNcclxuICogY29uc3QgZXZlbnQgPSBzaWduYWw8RXZlbnQgfCBudWxsPihudWxsKTtcclxuICpcclxuICogLy8gVGhlIHJldHVybmVkIHByb21pc2UgaXMgYFByb21pc2U8TW91c2VFdmVudD5gXHJcbiAqIGNvbnN0IG1vdXNlRXZlbnRQcm9taXNlID0gdW50aWwoZXZlbnQsIChlKTogZSBpcyBNb3VzZUV2ZW50ID0+IGUgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KTtcclxuICpcclxuICogYXN5bmMgZnVuY3Rpb24gbG9nTW91c2VFdmVudCgpIHtcclxuICogY29uc3QgbWUgPSBhd2FpdCBtb3VzZUV2ZW50UHJvbWlzZTtcclxuICogY29uc29sZS5sb2cobWUuY2xpZW50WCk7IC8vIGBtZWAgaXMgY29ycmVjdGx5IHR5cGVkIGFzIE1vdXNlRXZlbnRcclxuICogfVxyXG4gKiBgYGBcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1bnRpbDxULCBVIGV4dGVuZHMgVD4oXHJcbiAgc291cmNlU2lnbmFsOiBTaWduYWw8VD4sXHJcbiAgcHJlZGljYXRlOiAodmFsdWU6IFQpID0+IHZhbHVlIGlzIFUsXHJcbiAgb3B0aW9ucz86IFVudGlsT3B0aW9ucyxcclxuKTogUHJvbWlzZTxVPjtcclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYSBzaWduYWwncyB2YWx1ZSBzYXRpc2ZpZXMgYSBnaXZlbiBwcmVkaWNhdGUuXHJcbiAqXHJcbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBlcmF0aXZlbHkgd2FpdGluZyBmb3IgYSByZWFjdGl2ZSBzdGF0ZSB0byBjaGFuZ2UsXHJcbiAqIGZvciBleGFtcGxlLCBpbiB0ZXN0cyBvciB0byBvcmNoZXN0cmF0ZSBjb21wbGV4IGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgc2lnbmFsJ3MgdmFsdWUuXHJcbiAqIEBwYXJhbSBzb3VyY2VTaWduYWwgVGhlIHNpZ25hbCB0byBvYnNlcnZlLlxyXG4gKiBAcGFyYW0gcHJlZGljYXRlIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgc2lnbmFsJ3MgdmFsdWUgYW5kIHJldHVybnMgYHRydWVgIGlmIHRoZSBjb25kaXRpb24gaXMgbWV0LlxyXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aW1lb3V0IGFuZCBleHBsaWNpdCBkZXN0cnVjdGlvbi5cclxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2lnbmFsJ3MgdmFsdWUgd2hlbiB0aGUgcHJlZGljYXRlIGlzIHRydWUsXHJcbiAqIG9yIHJlamVjdHMgb24gdGltZW91dCBvciBjb250ZXh0IGRlc3RydWN0aW9uLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHVudGlsPFQ+KFxyXG4gIHNvdXJjZVNpZ25hbDogU2lnbmFsPFQ+LFxyXG4gIHByZWRpY2F0ZTogKHZhbHVlOiBUKSA9PiBib29sZWFuLFxyXG4gIG9wdGlvbnM/OiBVbnRpbE9wdGlvbnMsXHJcbik6IFByb21pc2U8VD47XHJcbmV4cG9ydCBmdW5jdGlvbiB1bnRpbDxUPihcclxuICBzb3VyY2VTaWduYWw6IFNpZ25hbDxUPixcclxuICBwcmVkaWNhdGU6ICh2YWx1ZTogVCkgPT4gYm9vbGVhbixcclxuICBvcHRpb25zOiBVbnRpbE9wdGlvbnMgPSB7fSxcclxuKTogUHJvbWlzZTxUPiB7XHJcbiAgY29uc3QgaW5qZWN0b3IgPSBvcHRpb25zLmluamVjdG9yID8/IGluamVjdChJbmplY3Rvcik7XHJcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgIGxldCBlZmZlY3RSZWY6IEVmZmVjdFJlZiB8IHVuZGVmaW5lZDtcclxuICAgIGxldCB0aW1lb3V0SWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xyXG4gICAgbGV0IHNldHRsZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCBjbGVhbnVwQW5kUmVqZWN0ID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmICghc2V0dGxlZCkge1xyXG4gICAgICAgIHNldHRsZWQgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aW1lb3V0SWQpIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xyXG4gICAgICAgIGVmZmVjdFJlZj8uZGVzdHJveSgpO1xyXG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IocmVhc29uKSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgY2xlYW51cEFuZFJlc29sdmUgPSAodmFsdWU6IFQpID0+IHtcclxuICAgICAgaWYgKCFzZXR0bGVkKSB7XHJcbiAgICAgICAgc2V0dGxlZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRpbWVvdXRJZCkgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XHJcbiAgICAgICAgZWZmZWN0UmVmPy5kZXN0cm95KCk7XHJcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGVzdHJveVJlZiA9XHJcbiAgICAgICAgb3B0aW9ucy5kZXN0cm95UmVmID8/IGluamVjdChEZXN0cm95UmVmLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG5cclxuICAgICAgZGVzdHJveVJlZj8ub25EZXN0cm95KCgpID0+IHtcclxuICAgICAgICBjbGVhbnVwQW5kUmVqZWN0KFxyXG4gICAgICAgICAgJ3VudGlsOiBPcGVyYXRpb24gY2FuY2VsbGVkIGR1ZSB0byBjb250ZXh0IGRlc3RydWN0aW9uLicsXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgLy8gbm9vcFxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHVudHJhY2tlZChzb3VyY2VTaWduYWwpO1xyXG4gICAgaWYgKHByZWRpY2F0ZShpbml0aWFsVmFsdWUpKSB7XHJcbiAgICAgIGNsZWFudXBBbmRSZXNvbHZlKGluaXRpYWxWYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucz8udGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoXHJcbiAgICAgICAgKCkgPT4gY2xlYW51cEFuZFJlamVjdChgdW50aWw6IFRpbWVvdXQgYWZ0ZXIgJHtvcHRpb25zLnRpbWVvdXR9bXMuYCksXHJcbiAgICAgICAgb3B0aW9ucy50aW1lb3V0LFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xyXG4gICAgICBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmIChzZXR0bGVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZWZmZWN0UmVmPy5kZXN0cm95KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBzb3VyY2VTaWduYWwoKTtcclxuICAgICAgICBpZiAocHJlZGljYXRlKGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgIGNsZWFudXBBbmRSZXNvbHZlKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH0pO1xyXG59XHJcbiJdfQ==","import { SIGNAL } from '@angular/core/primitives/signals';\n/**\n * @interal\n */\nexport function getSignalEquality(sig) {\n const internal = sig[SIGNAL];\n if (internal && typeof internal.equal === 'function') {\n return internal.equal;\n }\n return Object.is; // Default equality check\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXNpZ25hbC1lcXVhbGl0eS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvc3JjL2xpYi9nZXQtc2lnbmFsLWVxdWFsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUxRDs7R0FFRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBSSxHQUFjO0lBQ2pELE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBRTFCLENBQUM7SUFDRixJQUFJLFFBQVEsSUFBSSxPQUFPLFFBQVEsQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFLENBQUM7UUFDckQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7QUFDN0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgVmFsdWVFcXVhbGl0eUZuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNJR05BTCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcHJpbWl0aXZlcy9zaWduYWxzJztcclxuXHJcbi8qKlxyXG4gKiBAaW50ZXJhbFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpZ25hbEVxdWFsaXR5PFQ+KHNpZzogU2lnbmFsPFQ+KTogVmFsdWVFcXVhbGl0eUZuPFQ+IHtcclxuICBjb25zdCBpbnRlcm5hbCA9IHNpZ1tTSUdOQUxdIGFzIHtcclxuICAgIGVxdWFsPzogVmFsdWVFcXVhbGl0eUZuPFQ+O1xyXG4gIH07XHJcbiAgaWYgKGludGVybmFsICYmIHR5cGVvZiBpbnRlcm5hbC5lcXVhbCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIGludGVybmFsLmVxdWFsO1xyXG4gIH1cclxuICByZXR1cm4gT2JqZWN0LmlzOyAvLyBEZWZhdWx0IGVxdWFsaXR5IGNoZWNrXHJcbn1cclxuIl19","import { computed, untracked, } from '@angular/core';\nimport { getSignalEquality } from './get-signal-equality';\nimport { mutable } from './mutable';\nimport { toWritable } from './to-writable';\n/**\n * Enhances an existing `WritableSignal` by adding a complete undo/redo history\n * stack and an API to control it.\n *\n * @template T The type of value held by the signal.\n * @param source The source `WritableSignal` to add history tracking to.\n * @param options Optional configuration for the history behavior.\n * @returns A `SignalWithHistory<T>` instance, augmenting the source signal with history APIs.\n *\n * @remarks\n * - Any new `.set()` or `.update()` call on the signal will clear the entire redo stack.\n * - The primitive attempts to automatically use the source signal's own `equal` function,\n * but this relies on an internal Angular API. For maximum stability across Angular\n * versions, it is recommended to provide an explicit `equal` function in the options.\n *\n * @example\n * ```ts\n * import { signal } from '@angular/core';\n * import { withHistory } from '@mmstack/primitives';\n *\n * const name = withHistory(signal('John'), { maxSize: 5 });\n *\n * console.log('Initial value:', name()); // \"John\"\n *\n * name.set('John Doe');\n * name.set('Jane Doe');\n *\n * console.log('Current value:', name()); // \"Jane Doe\"\n * console.log('History:', name.history()); // [\"John\", \"John Doe\"]\n * console.log('Can undo:', name.canUndo()); // true\n * console.log('Can redo:', name.canRedo()); // false\n *\n * name.undo();\n * console.log('After undo:', name()); // \"John Doe\"\n * console.log('Can redo:', name.canRedo()); // true\n *\n * name.redo();\n * console.log('After redo:', name()); // \"Jane Doe\"\n *\n * // A new change will clear the redo history\n * name.set('Janine Doe');\n * console.log('Can redo:', name.canRedo()); // false\n *\n * name.clear();\n * console.log('Can undo:', name.canUndo()); // false\n * ```\n */\nexport function withHistory(source, opt) {\n const equal = opt?.equal ?? getSignalEquality(source);\n const maxSize = opt?.maxSize ?? Infinity;\n const history = mutable([], {\n ...opt,\n equal: undefined,\n });\n const redoArray = mutable([]);\n const originalSet = source.set;\n const set = (value) => {\n const current = untracked(source);\n if (equal(value, current))\n return;\n source.set(value);\n history.mutate((c) => {\n if (c.length >= maxSize) {\n if (opt?.cleanupStrategy === 'shift') {\n c.shift();\n }\n else {\n c = c.slice(Math.floor(maxSize / 2));\n }\n }\n c.push(current);\n return c;\n });\n redoArray.set([]);\n };\n const update = (updater) => {\n set(updater(untracked(source)));\n };\n const internal = toWritable(computed(() => source(), {\n equal,\n debugName: opt?.debugName,\n }), set, update);\n internal.history = history;\n internal.undo = () => {\n const historyStack = untracked(history);\n if (historyStack.length === 0)\n return;\n const valueForRedo = untracked(source);\n const valueToRestore = historyStack.at(-1);\n if (valueToRestore === undefined)\n return;\n originalSet.call(source, valueToRestore);\n history.inline((h) => h.pop());\n redoArray.inline((r) => r.push(valueForRedo));\n };\n internal.redo = () => {\n const redoStack = untracked(redoArray);\n if (redoStack.length === 0)\n return;\n const valueForUndo = untracked(source);\n const valueToRestore = redoStack.at(-1);\n if (valueToRestore === undefined)\n return;\n originalSet.call(source, valueToRestore);\n redoArray.inline((r) => r.pop());\n history.mutate((h) => {\n if (h.length >= maxSize) {\n if (opt?.cleanupStrategy === 'shift') {\n h.shift();\n }\n else {\n h = h.slice(Math.floor(maxSize / 2));\n }\n }\n h.push(valueForUndo);\n return h;\n });\n };\n internal.clear = () => {\n history.set([]);\n redoArray.set([]);\n };\n internal.canUndo = computed(() => history().length > 0, ...(ngDevMode ? [{ debugName: \"canUndo\" }] : []));\n internal.canRedo = computed(() => redoArray().length > 0, ...(ngDevMode ? [{ debugName: \"canRedo\" }] : []));\n internal.canClear = computed(() => internal.canUndo() || internal.canRedo(), ...(ngDevMode ? [{ debugName: \"canClear\" }] : []));\n return internal;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1oaXN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbGliL3dpdGgtaGlzdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUdSLFNBQVMsR0FHVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFvRDNDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBOENHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBeUIsRUFDekIsR0FBNkI7SUFFN0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFLEtBQUssSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0RCxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUUsT0FBTyxJQUFJLFFBQVEsQ0FBQztJQUV6QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQU0sRUFBRSxFQUFFO1FBQy9CLEdBQUcsR0FBRztRQUNOLEtBQUssRUFBRSxTQUFTO0tBQ2pCLENBQUMsQ0FBQztJQUVILE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBTSxFQUFFLENBQUMsQ0FBQztJQUVuQyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO0lBRS9CLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBUSxFQUFFLEVBQUU7UUFDdkIsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7WUFBRSxPQUFPO1FBRWxDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ25CLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxHQUFHLEVBQUUsZUFBZSxLQUFLLE9BQU8sRUFBRSxDQUFDO29CQUNyQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ1osQ0FBQztxQkFBTSxDQUFDO29CQUNOLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZDLENBQUM7WUFDSCxDQUFDO1lBQ0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNoQixPQUFPLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwQixDQUFDLENBQUM7SUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLE9BQXVCLEVBQUUsRUFBRTtRQUN6QyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEMsQ0FBQyxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUN6QixRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDdkIsS0FBSztRQUNMLFNBQVMsRUFBRSxHQUFHLEVBQUUsU0FBUztLQUMxQixDQUFDLEVBQ0YsR0FBRyxFQUNILE1BQU0sQ0FDaUIsQ0FBQztJQUMxQixRQUFRLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUUzQixRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRTtRQUNuQixNQUFNLFlBQVksR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBRXRDLE1BQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxNQUFNLGNBQWMsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxjQUFjLEtBQUssU0FBUztZQUFFLE9BQU87UUFFekMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFekMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDL0IsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQztJQUVGLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxFQUFFO1FBQ25CLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFFbkMsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLGNBQWMsS0FBSyxTQUFTO1lBQUUsT0FBTztRQUV6QyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV6QyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUN4QixJQUFJLEdBQUcsRUFBRSxlQUFlLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQ3JDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDWixDQUFDO3FCQUFNLENBQUM7b0JBQ04sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsQ0FBQztZQUNILENBQUM7WUFDRCxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3JCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUM7SUFFRixRQUFRLENBQUMsS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNwQixPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hCLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBRUYsUUFBUSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsbURBQUMsQ0FBQztJQUN4RCxRQUFRLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxtREFBQyxDQUFDO0lBQzFELFFBQVEsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFLG9EQUFDLENBQUM7SUFFN0UsT0FBTyxRQUFRLENBQUM7QUFDbEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgY29tcHV0ZWQsXHJcbiAgdHlwZSBDcmVhdGVTaWduYWxPcHRpb25zLFxyXG4gIHR5cGUgU2lnbmFsLFxyXG4gIHVudHJhY2tlZCxcclxuICB0eXBlIFZhbHVlRXF1YWxpdHlGbixcclxuICB0eXBlIFdyaXRhYmxlU2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXRTaWduYWxFcXVhbGl0eSB9IGZyb20gJy4vZ2V0LXNpZ25hbC1lcXVhbGl0eSc7XHJcbmltcG9ydCB7IG11dGFibGUgfSBmcm9tICcuL211dGFibGUnO1xyXG5pbXBvcnQgeyB0b1dyaXRhYmxlIH0gZnJvbSAnLi90by13cml0YWJsZSc7XHJcblxyXG4vKipcclxuICogQSBXcml0YWJsZVNpZ25hbCBlbmhhbmNlZCB3aXRoIHVuZG8vcmVkbyBjYXBhYmlsaXRpZXMgYW5kIGhpc3RvcnkgdHJhY2tpbmcuXHJcbiAqXHJcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHZhbHVlIGhlbGQgYnkgdGhlIHNpZ25hbC5cclxuICovXHJcbmV4cG9ydCB0eXBlIFNpZ25hbFdpdGhIaXN0b3J5PFQ+ID0gV3JpdGFibGVTaWduYWw8VD4gJiB7XHJcbiAgLyoqIEEgcmVhZC1vbmx5IHNpZ25hbCBvZiB0aGUgdW5kbyBoaXN0b3J5IHN0YWNrLiBUaGUgb2xkZXN0IGNoYW5nZXMgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgYXJyYXkuICovXHJcbiAgaGlzdG9yeTogU2lnbmFsPFRbXT47XHJcbiAgLyoqIFJldmVydHMgdGhlIHNpZ25hbCB0byBpdHMgbW9zdCByZWNlbnQgcHJldmlvdXMgc3RhdGUgaW4gdGhlIGhpc3RvcnkuICovXHJcbiAgdW5kbzogKCkgPT4gdm9pZDtcclxuICAvKiogUmUtYXBwbGllcyB0aGUgbGFzdCBzdGF0ZSB0aGF0IHdhcyB1bmRvbmUuICovXHJcbiAgcmVkbzogKCkgPT4gdm9pZDtcclxuICAvKiogQSBzaWduYWwgdGhhdCBpcyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIHN0YXRlcyBpbiB0aGUgcmVkbyBzdGFjay4gKi9cclxuICBjYW5SZWRvOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIEEgc2lnbmFsIHRoYXQgaXMgYHRydWVgIGlmIHRoZXJlIGFyZSBzdGF0ZXMgaW4gdGhlIHVuZG8gaGlzdG9yeS4gKi9cclxuICBjYW5VbmRvOiBTaWduYWw8Ym9vbGVhbj47XHJcbiAgLyoqIENsZWFycyBib3RoIHRoZSB1bmRvIGFuZCByZWRvIGhpc3Rvcnkgc3RhY2tzLiAqL1xyXG4gIGNsZWFyOiAoKSA9PiB2b2lkO1xyXG4gIC8qKiBBIHNpZ25hbCB0aGF0IGlzIGB0cnVlYCBpZiB0aGVyZSBpcyBhbnkgaGlzdG9yeSB0aGF0IGNhbiBiZSBjbGVhcmVkLiAqL1xyXG4gIGNhbkNsZWFyOiBTaWduYWw8Ym9vbGVhbj47XHJcbn07XHJcblxyXG4vKipcclxuICogT3B0aW9ucyBmb3IgY3JlYXRpbmcgYSBzaWduYWwgd2l0aCBoaXN0b3J5IHRyYWNraW5nLlxyXG4gKlxyXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB2YWx1ZSBoZWxkIGJ5IHRoZSBzaWduYWwuXHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDcmVhdGVIaXN0b3J5T3B0aW9uczxUPiA9IE9taXQ8XHJcbiAgQ3JlYXRlU2lnbmFsT3B0aW9uczxUW10+LFxyXG4gICdlcXVhbCdcclxuPiAmIHtcclxuICAvKipcclxuICAgKiBPcHRpb25hbCBjdXN0b20gZXF1YWxpdHkgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGlmIGEgdmFsdWUgaGFzIGNoYW5nZWQgYmVmb3JlXHJcbiAgICogYWRkaW5nIGl0IHRvIGhpc3RvcnkuIERlZmF1bHRzIHRvIHRoZSBzb3VyY2Ugc2lnbmFsJ3MgZXF1YWxpdHkgZnVuY3Rpb24gb3IgYE9iamVjdC5pc2AuXHJcbiAgICovXHJcbiAgZXF1YWw/OiBWYWx1ZUVxdWFsaXR5Rm48VD47XHJcbiAgLyoqXHJcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHVuZG8gc3RhdGVzIHRvIGtlZXAgaW4gdGhlIGhpc3RvcnkuXHJcbiAgICogQGRlZmF1bHQgSW5maW5pdHlcclxuICAgKi9cclxuICBtYXhTaXplPzogbnVtYmVyO1xyXG4gIC8qKlxyXG4gICAqIFRoZSBzdHJhdGVneSBmb3IgdHJpbW1pbmcgdGhlIGhpc3Rvcnkgd2hlbiBgbWF4U2l6ZWAgaXMgcmVhY2hlZC5cclxuICAgKiAtIGBzaGlmdGA6IFJlbW92ZXMgdGhlIHNpbmdsZSBvbGRlc3QgZW50cnkgZnJvbSB0aGUgaGlzdG9yeS5cclxuICAgKiAtIGBoYWx2ZWA6IFJlbW92ZXMgdGhlIG9sZGVzdCBoYWxmIG9mIHRoZSBoaXN0b3J5IHN0YWNrLlxyXG4gICAqIEBkZWZhdWx0ICdoYWx2ZSdcclxuICAgKi9cclxuICBjbGVhbnVwU3RyYXRlZ3k/OiAnc2hpZnQnIHwgJ2hhbHZlJztcclxufTtcclxuXHJcbi8qKlxyXG4gKiBFbmhhbmNlcyBhbiBleGlzdGluZyBgV3JpdGFibGVTaWduYWxgIGJ5IGFkZGluZyBhIGNvbXBsZXRlIHVuZG8vcmVkbyBoaXN0b3J5XHJcbiAqIHN0YWNrIGFuZCBhbiBBUEkgdG8gY29udHJvbCBpdC5cclxuICpcclxuICogQHRlbXBsYXRlIFQgVGhlIHR5cGUgb2YgdmFsdWUgaGVsZCBieSB0aGUgc2lnbmFsLlxyXG4gKiBAcGFyYW0gc291cmNlIFRoZSBzb3VyY2UgYFdyaXRhYmxlU2lnbmFsYCB0byBhZGQgaGlzdG9yeSB0cmFja2luZyB0by5cclxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGhpc3RvcnkgYmVoYXZpb3IuXHJcbiAqIEByZXR1cm5zIEEgYFNpZ25hbFdpdGhIaXN0b3J5PFQ+YCBpbnN0YW5jZSwgYXVnbWVudGluZyB0aGUgc291cmNlIHNpZ25hbCB3aXRoIGhpc3RvcnkgQVBJcy5cclxuICpcclxuICogQHJlbWFya3NcclxuICogLSBBbnkgbmV3IGAuc2V0KClgIG9yIGAudXBkYXRlKClgIGNhbGwgb24gdGhlIHNpZ25hbCB3aWxsIGNsZWFyIHRoZSBlbnRpcmUgcmVkbyBzdGFjay5cclxuICogLSBUaGUgcHJpbWl0aXZlIGF0dGVtcHRzIHRvIGF1dG9tYXRpY2FsbHkgdXNlIHRoZSBzb3VyY2Ugc2lnbmFsJ3Mgb3duIGBlcXVhbGAgZnVuY3Rpb24sXHJcbiAqIGJ1dCB0aGlzIHJlbGllcyBvbiBhbiBpbnRlcm5hbCBBbmd1bGFyIEFQSS4gRm9yIG1heGltdW0gc3RhYmlsaXR5IGFjcm9zcyBBbmd1bGFyXHJcbiAqIHZlcnNpb25zLCBpdCBpcyByZWNvbW1lbmRlZCB0byBwcm92aWRlIGFuIGV4cGxpY2l0IGBlcXVhbGAgZnVuY3Rpb24gaW4gdGhlIG9wdGlvbnMuXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYHRzXHJcbiAqIGltcG9ydCB7IHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG4gKiBpbXBvcnQgeyB3aXRoSGlzdG9yeSB9IGZyb20gJ0BtbXN0YWNrL3ByaW1pdGl2ZXMnO1xyXG4gKlxyXG4gKiBjb25zdCBuYW1lID0gd2l0aEhpc3Rvcnkoc2lnbmFsKCdKb2huJyksIHsgbWF4U2l6ZTogNSB9KTtcclxuICpcclxuICogY29uc29sZS5sb2coJ0luaXRpYWwgdmFsdWU6JywgbmFtZSgpKTsgLy8gXCJKb2huXCJcclxuICpcclxuICogbmFtZS5zZXQoJ0pvaG4gRG9lJyk7XHJcbiAqIG5hbWUuc2V0KCdKYW5lIERvZScpO1xyXG4gKlxyXG4gKiBjb25zb2xlLmxvZygnQ3VycmVudCB2YWx1ZTonLCBuYW1lKCkpOyAvLyBcIkphbmUgRG9lXCJcclxuICogY29uc29sZS5sb2coJ0hpc3Rvcnk6JywgbmFtZS5oaXN0b3J5KCkpOyAvLyBbXCJKb2huXCIsIFwiSm9obiBEb2VcIl1cclxuICogY29uc29sZS5sb2coJ0NhbiB1bmRvOicsIG5hbWUuY2FuVW5kbygpKTsgLy8gdHJ1ZVxyXG4gKiBjb25zb2xlLmxvZygnQ2FuIHJlZG86JywgbmFtZS5jYW5SZWRvKCkpOyAvLyBmYWxzZVxyXG4gKlxyXG4gKiBuYW1lLnVuZG8oKTtcclxuICogY29uc29sZS5sb2coJ0FmdGVyIHVuZG86JywgbmFtZSgpKTsgLy8gXCJKb2huIERvZVwiXHJcbiAqIGNvbnNvbGUubG9nKCdDYW4gcmVkbzonLCBuYW1lLmNhblJlZG8oKSk7IC8vIHRydWVcclxuICpcclxuICogbmFtZS5yZWRvKCk7XHJcbiAqIGNvbnNvbGUubG9nKCdBZnRlciByZWRvOicsIG5hbWUoKSk7IC8vIFwiSmFuZSBEb2VcIlxyXG4gKlxyXG4gKiAvLyBBIG5ldyBjaGFuZ2Ugd2lsbCBjbGVhciB0aGUgcmVkbyBoaXN0b3J5XHJcbiAqIG5hbWUuc2V0KCdKYW5pbmUgRG9lJyk7XHJcbiAqIGNvbnNvbGUubG9nKCdDYW4gcmVkbzonLCBuYW1lLmNhblJlZG8oKSk7IC8vIGZhbHNlXHJcbiAqXHJcbiAqIG5hbWUuY2xlYXIoKTtcclxuICogY29uc29sZS5sb2coJ0NhbiB1bmRvOicsIG5hbWUuY2FuVW5kbygpKTsgLy8gZmFsc2VcclxuICogYGBgXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gd2l0aEhpc3Rvcnk8VD4oXHJcbiAgc291cmNlOiBXcml0YWJsZVNpZ25hbDxUPixcclxuICBvcHQ/OiBDcmVhdGVIaXN0b3J5T3B0aW9uczxUPixcclxuKTogU2lnbmFsV2l0aEhpc3Rvcnk8VD4ge1xyXG4gIGNvbnN0IGVxdWFsID0gb3B0Py5lcXVhbCA/PyBnZXRTaWduYWxFcXVhbGl0eShzb3VyY2UpO1xyXG4gIGNvbnN0IG1heFNpemUgPSBvcHQ/Lm1heFNpemUgPz8gSW5maW5pdHk7XHJcblxyXG4gIGNvbnN0IGhpc3RvcnkgPSBtdXRhYmxlPFRbXT4oW10sIHtcclxuICAgIC4uLm9wdCxcclxuICAgIGVxdWFsOiB1bmRlZmluZWQsXHJcbiAgfSk7XHJcblxyXG4gIGNvbnN0IHJlZG9BcnJheSA9IG11dGFibGU8VFtdPihbXSk7XHJcblxyXG4gIGNvbnN0IG9yaWdpbmFsU2V0ID0gc291cmNlLnNldDtcclxuXHJcbiAgY29uc3Qgc2V0ID0gKHZhbHVlOiBUKSA9PiB7XHJcbiAgICBjb25zdCBjdXJyZW50ID0gdW50cmFja2VkKHNvdXJjZSk7XHJcbiAgICBpZiAoZXF1YWwodmFsdWUsIGN1cnJlbnQpKSByZXR1cm47XHJcblxyXG4gICAgc291cmNlLnNldCh2YWx1ZSk7XHJcblxyXG4gICAgaGlzdG9yeS5tdXRhdGUoKGMpID0+IHtcclxuICAgICAgaWYgKGMubGVuZ3RoID49IG1heFNpemUpIHtcclxuICAgICAgICBpZiAob3B0Py5jbGVhbnVwU3RyYXRlZ3kgPT09ICdzaGlmdCcpIHtcclxuICAgICAgICAgIGMuc2hpZnQoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYyA9IGMuc2xpY2UoTWF0aC5mbG9vcihtYXhTaXplIC8gMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjLnB1c2goY3VycmVudCk7XHJcbiAgICAgIHJldHVybiBjO1xyXG4gICAgfSk7XHJcbiAgICByZWRvQXJyYXkuc2V0KFtdKTtcclxuICB9O1xyXG5cclxuICBjb25zdCB1cGRhdGUgPSAodXBkYXRlcjogKHByZXY6IFQpID0+IFQpID0+IHtcclxuICAgIHNldCh1cGRhdGVyKHVudHJhY2tlZChzb3VyY2UpKSk7XHJcbiAgfTtcclxuXHJcbiAgY29uc3QgaW50ZXJuYWwgPSB0b1dyaXRhYmxlKFxyXG4gICAgY29tcHV0ZWQoKCkgPT4gc291cmNlKCksIHtcclxuICAgICAgZXF1YWwsXHJcbiAgICAgIGRlYnVnTmFtZTogb3B0Py5kZWJ1Z05hbWUsXHJcbiAgICB9KSxcclxuICAgIHNldCxcclxuICAgIHVwZGF0ZSxcclxuICApIGFzIFNpZ25hbFdpdGhIaXN0b3J5PFQ+O1xyXG4gIGludGVybmFsLmhpc3RvcnkgPSBoaXN0b3J5O1xyXG5cclxuICBpbnRlcm5hbC51bmRvID0gKCkgPT4ge1xyXG4gICAgY29uc3QgaGlzdG9yeVN0YWNrID0gdW50cmFja2VkKGhpc3RvcnkpO1xyXG4gICAgaWYgKGhpc3RvcnlTdGFjay5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB2YWx1ZUZvclJlZG8gPSB1bnRyYWNrZWQoc291cmNlKTtcclxuICAgIGNvbnN0IHZhbHVlVG9SZXN0b3JlID0gaGlzdG9yeVN0YWNrLmF0KC0xKTtcclxuICAgIGlmICh2YWx1ZVRvUmVzdG9yZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgb3JpZ2luYWxTZXQuY2FsbChzb3VyY2UsIHZhbHVlVG9SZXN0b3JlKTtcclxuXHJcbiAgICBoaXN0b3J5LmlubGluZSgoaCkgPT4gaC5wb3AoKSk7XHJcbiAgICByZWRvQXJyYXkuaW5saW5lKChyKSA9PiByLnB1c2godmFsdWVGb3JSZWRvKSk7XHJcbiAgfTtcclxuXHJcbiAgaW50ZXJuYWwucmVkbyA9ICgpID0+IHtcclxuICAgIGNvbnN0IHJlZG9TdGFjayA9IHVudHJhY2tlZChyZWRvQXJyYXkpO1xyXG4gICAgaWYgKHJlZG9TdGFjay5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB2YWx1ZUZvclVuZG8gPSB1bnRyYWNrZWQoc291cmNlKTtcclxuICAgIGNvbnN0IHZhbHVlVG9SZXN0b3JlID0gcmVkb1N0YWNrLmF0KC0xKTtcclxuICAgIGlmICh2YWx1ZVRvUmVzdG9yZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgb3JpZ2luYWxTZXQuY2FsbChzb3VyY2UsIHZhbHVlVG9SZXN0b3JlKTtcclxuXHJcbiAgICByZWRvQXJyYXkuaW5saW5lKChyKSA9PiByLnBvcCgpKTtcclxuICAgIGhpc3RvcnkubXV0YXRlKChoKSA9PiB7XHJcbiAgICAgIGlmIChoLmxlbmd0aCA+PSBtYXhTaXplKSB7XHJcbiAgICAgICAgaWYgKG9wdD8uY2xlYW51cFN0cmF0ZWd5ID09PSAnc2hpZnQnKSB7XHJcbiAgICAgICAgICBoLnNoaWZ0KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGggPSBoLnNsaWNlKE1hdGguZmxvb3IobWF4U2l6ZSAvIDIpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaC5wdXNoKHZhbHVlRm9yVW5kbyk7XHJcbiAgICAgIHJldHVybiBoO1xyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgaW50ZXJuYWwuY2xlYXIgPSAoKSA9PiB7XHJcbiAgICBoaXN0b3J5LnNldChbXSk7XHJcbiAgICByZWRvQXJyYXkuc2V0KFtdKTtcclxuICB9O1xyXG5cclxuICBpbnRlcm5hbC5jYW5VbmRvID0gY29tcHV0ZWQoKCkgPT4gaGlzdG9yeSgpLmxlbmd0aCA+IDApO1xyXG4gIGludGVybmFsLmNhblJlZG8gPSBjb21wdXRlZCgoKSA9PiByZWRvQXJyYXkoKS5sZW5ndGggPiAwKTtcclxuICBpbnRlcm5hbC5jYW5DbGVhciA9IGNvbXB1dGVkKCgpID0+IGludGVybmFsLmNhblVuZG8oKSB8fCBpbnRlcm5hbC5jYW5SZWRvKCkpO1xyXG5cclxuICByZXR1cm4gaW50ZXJuYWw7XHJcbn1cclxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW1zdGFjay1wcmltaXRpdmVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9zcmMvbW1zdGFjay1wcmltaXRpdmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}