-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathneptune.js.map
1 lines (1 loc) · 350 KB
/
neptune.js.map
1
{"version":3,"file":"neptune.js","sources":["../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/is_server.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/symbols.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/utils.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/callable.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/constants.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/lazy.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/owner.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/superroot.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/context.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/batch.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_observable_boolean.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_observable_frozen.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_untracked.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/scheduler.sync.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/observable.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/observables.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/observer.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/memo.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/memo.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/boolean.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/cleanup.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/context.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/context.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/disposed.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/scheduler.async.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/effect.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/effect.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/resolve.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/root.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/for.cache.keyed.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_observable.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/get.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/objects/suspense.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/suspense.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/for.cache.unkeyed.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_store.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/untrack.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/for.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/warmup.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/switch.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/ternary.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_batching.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/observable.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/is_observable_writable.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/target.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/readonly.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/root.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/selector.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/store.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/suspended.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/tick.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/try_catch.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/untracked.js","../node_modules/.pnpm/[email protected]/node_modules/oby/dist/methods/with.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/constants.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/wrap_element.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/creators.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/lang.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_resolved.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_event_listener.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_abort_controller.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_abort_signal.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_scheduler.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_animation_frame.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_animation_loop.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/suspense.context.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/suspense.manager.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_render_effect.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_resource.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_fetch.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_idle_callback.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_idle_loop.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_interval.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_promise.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_timeout.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_cheap_disposed.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_microtask.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/classlist.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/diff.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/fragment.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/resolvers.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/utils/setters.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/create_element.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/dynamic.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/error_boundary.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/for.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/fragment.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_guarded.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/if.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/keep_alive.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/render.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/portal.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/suspense.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/switch.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/ternary.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/jsx/runtime.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/create_directive.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/hmr.js","../node_modules/.pnpm/[email protected]/node_modules/htm/dist/htm.module.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/html.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/lazy.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/components/suspense.collector.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/render_to_string.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/template.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/create_context.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/methods/h.js","../node_modules/.pnpm/[email protected]/node_modules/voby/dist/hooks/use_context.js","../src/ui/components.js","../node_modules/.pnpm/[email protected]/node_modules/spitroast/dist/index.mjs","../node_modules/.pnpm/[email protected]/node_modules/idb-keyval/dist/index.js","../src/api/utils.js","../node_modules/.pnpm/[email protected]/node_modules/es-module-lexer/dist/lexer.js","../node_modules/.pnpm/@[email protected]/node_modules/@uwu/quartz/index.js","../node_modules/.pnpm/[email protected]/node_modules/quartz-plugin-url-import/index.js","../src/api/intercept.js","../src/api/plugins.js","../src/api/themes.js","../src/api/observe.js","../src/api/registerRoute.js","../src/api/registerTab.js","../src/api/hookContextMenu.js","../src/api/showModal.js","../src/windowObject.js","../src/handleExfiltrations.js","../src/ui/pluginsTab.js","../src/ui/themesTab.js","../src/styles.js","../src/ui/settings.js","../src/index.js"],"sourcesContent":["/* HELPERS */\nconst IS_BROWSER = !!globalThis.CDATASection?.toString?.().match(/^\\s*function\\s+CDATASection\\s*\\(\\s*\\)\\s*\\{\\s*\\[native code\\]\\s*\\}\\s*$/);\n/* MAIN */\nconst isServer = () => {\n return !IS_BROWSER;\n};\n/* EXPORT */\nexport default isServer;\n","/* MAIN */\nconst SYMBOL_CACHED = Symbol('Cached');\nconst SYMBOL_OBSERVABLE = Symbol('Observable');\nconst SYMBOL_OBSERVABLE_BOOLEAN = Symbol('Observable.Boolean');\nconst SYMBOL_OBSERVABLE_FROZEN = Symbol('Observable.Frozen');\nconst SYMBOL_OBSERVABLE_READABLE = Symbol('Observable.Readable');\nconst SYMBOL_OBSERVABLE_WRITABLE = Symbol('Observable.Writable');\nconst SYMBOL_STORE = Symbol('Store');\nconst SYMBOL_STORE_KEYS = Symbol('Store.Keys');\nconst SYMBOL_STORE_OBSERVABLE = Symbol('Store.Observable');\nconst SYMBOL_STORE_TARGET = Symbol('Store.Target');\nconst SYMBOL_STORE_VALUES = Symbol('Store.Values');\nconst SYMBOL_STORE_UNTRACKED = Symbol('Store.Untracked');\nconst SYMBOL_SUSPENSE = Symbol('Suspense');\nconst SYMBOL_UNCACHED = Symbol('Uncached');\nconst SYMBOL_UNTRACKED = Symbol('Untracked');\nconst SYMBOL_UNTRACKED_UNWRAPPED = Symbol('Untracked.Unwrapped');\n/* EXPORT */\nexport { SYMBOL_CACHED, SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_BOOLEAN, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_OBSERVABLE_WRITABLE, SYMBOL_STORE, SYMBOL_STORE_KEYS, SYMBOL_STORE_OBSERVABLE, SYMBOL_STORE_TARGET, SYMBOL_STORE_VALUES, SYMBOL_STORE_UNTRACKED, SYMBOL_SUSPENSE, SYMBOL_UNCACHED, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED };\n","/* MAIN */\nconst castArray = (value) => {\n return isArray(value) ? value : [value];\n};\nconst castError = (error) => {\n if (error instanceof Error)\n return error;\n if (typeof error === 'string')\n return new Error(error);\n return new Error('Unknown error');\n};\nconst { is } = Object;\nconst { isArray } = Array;\nconst isEqual = (a, b) => {\n if (a.length !== b.length)\n return false;\n for (let i = 0, l = a.length; i < l; i++) {\n const valueA = a[i];\n const valueB = b[i];\n if (!is(valueA, valueB))\n return false;\n }\n return true;\n};\nconst isFunction = (value) => {\n return typeof value === 'function';\n};\nconst isObject = (value) => {\n return (value !== null) && (typeof value === 'object');\n};\nconst isSymbol = (value) => {\n return typeof value === 'symbol';\n};\nconst noop = () => {\n return;\n};\nconst nope = () => {\n return false;\n};\n/* EXPORT */\nexport { castArray, castError, is, isArray, isEqual, isFunction, isObject, isSymbol, noop, nope };\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_OBSERVABLE_WRITABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN - FUNCTIONS */\nfunction frozenFunction() {\n if (arguments.length) {\n throw new Error('A readonly Observable can not be updated');\n }\n else {\n return this;\n }\n}\nfunction readableFunction() {\n if (arguments.length) {\n throw new Error('A readonly Observable can not be updated');\n }\n else {\n return this.get();\n }\n}\nfunction writableFunction(fn) {\n if (arguments.length) {\n if (isFunction(fn)) {\n return this.C(fn);\n }\n else {\n return this.set(fn); //TSC\n }\n }\n else {\n return this.get();\n }\n}\n/* MAIN - GENERATORS */\nconst frozen = (value) => {\n const fn = frozenFunction.bind(value); //TSC\n fn[SYMBOL_OBSERVABLE] = true;\n fn[SYMBOL_OBSERVABLE_FROZEN] = true;\n return fn;\n};\nconst readable = (value) => {\n //TODO: Make a frozen one instead if disposed\n const fn = readableFunction.bind(value); //TSC\n fn[SYMBOL_OBSERVABLE] = true;\n fn[SYMBOL_OBSERVABLE_READABLE] = value;\n return fn;\n};\nconst writable = (value) => {\n const fn = writableFunction.bind(value); //TSC\n fn[SYMBOL_OBSERVABLE] = true;\n fn[SYMBOL_OBSERVABLE_WRITABLE] = value;\n return fn;\n};\n/* EXPORT */\nexport { frozen, readable, writable };\n","/* IMPORT */\nimport { frozen } from './objects/callable.js';\n/* MAIN */\nconst DIRTY_NO = 0; // The observer is not dirty, for sure\nconst DIRTY_MAYBE_NO = 1; // The observer is not dirty, possibly\nconst DIRTY_MAYBE_YES = 2; // The observer is dirty, possibly\nconst DIRTY_YES = 3; // The observer is dirty, for sure\nconst OBSERVABLE_FALSE = frozen(false);\nconst OBSERVABLE_TRUE = frozen(true);\nconst UNAVAILABLE = new Proxy({}, new Proxy({}, { get() { throw new Error('Unavailable value'); } })); //TSC\nconst UNINITIALIZED = function () { }; //TSC\n/* EXPORT */\nexport { DIRTY_NO, DIRTY_MAYBE_NO, DIRTY_MAYBE_YES, DIRTY_YES };\nexport { OBSERVABLE_FALSE, OBSERVABLE_TRUE };\nexport { UNAVAILABLE, UNINITIALIZED };\n","/* IMPORT */\n/* MAIN */\nconst lazyArrayEach = (arr, fn) => {\n if (arr instanceof Array) {\n for (let i = 0, l = arr.length; i < l; i++) {\n fn(arr[i]);\n }\n }\n else if (arr) {\n fn(arr);\n }\n};\nconst lazyArrayEachRight = (arr, fn) => {\n if (arr instanceof Array) {\n for (let i = arr.length - 1; i >= 0; i--) {\n fn(arr[i]);\n }\n }\n else if (arr) {\n fn(arr);\n }\n};\nconst lazyArrayPush = (obj, key, value) => {\n const arr = obj[key];\n if (arr instanceof Array) {\n arr.push(value);\n }\n else if (arr) {\n obj[key] = [arr, value];\n }\n else {\n obj[key] = value;\n }\n};\nconst lazySetAdd = (obj, key, value) => {\n const set = obj[key];\n if (set instanceof Set) {\n set.add(value);\n }\n else if (set) {\n if (value !== set) {\n const s = new Set();\n s.add(set);\n s.add(value);\n obj[key] = s;\n }\n }\n else {\n obj[key] = value;\n }\n};\nconst lazySetDelete = (obj, key, value) => {\n const set = obj[key];\n if (set instanceof Set) {\n set.delete(value);\n }\n else if (set === value) {\n obj[key] = undefined;\n }\n};\nconst lazySetEach = (set, fn) => {\n if (set instanceof Set) {\n for (const value of set) {\n fn(value);\n }\n }\n else if (set) {\n fn(set);\n }\n};\n/* EXPORT */\nexport { lazyArrayEach, lazyArrayEachRight, lazyArrayPush };\nexport { lazySetAdd, lazySetDelete, lazySetEach };\n","/* IMPORT */\nimport { UNAVAILABLE } from '../constants.js';\nimport { OBSERVER, OWNER, setObserver, setOwner } from '../context.js';\nimport { lazyArrayEachRight } from '../lazy.js';\nimport { castError } from '../utils.js';\n/* HELPERS */\nconst onCleanup = (cleanup) => cleanup.call(cleanup);\nconst onDispose = (owner) => owner.Q(true);\n/* MAIN */\n//TODO: Throw when registering stuff O disposing, maybe\nclass Owner {\n constructor() {\n /* VARIABLES */\n this.disposed = false;\n this.B = undefined;\n this.S = undefined;\n this.D = undefined;\n this.K = undefined;\n this.T = undefined;\n this.U = undefined;\n }\n /* API */\n catch(error, silent) {\n const { S } = this;\n if (S) {\n S(error); //TODO: This assumes that the error handler won't throw immediately, which we know, but Owner shouldn't know\n return true;\n }\n else {\n if (this.parent?.catch(error, true))\n return true;\n if (silent)\n return false;\n // console.error ( error.stack ); // <-- Log \"error.stack\" to better understand where the error happened\n throw error;\n }\n }\n Q(deep) {\n lazyArrayEachRight(this.D, onDispose);\n lazyArrayEachRight(this.K, onDispose);\n lazyArrayEachRight(this.U, onDispose);\n lazyArrayEachRight(this.B, onCleanup);\n this.B = undefined;\n this.disposed = deep;\n this.S = undefined;\n this.K = undefined;\n this.U = undefined;\n }\n get(symbol) {\n return this.context?.[symbol];\n }\n E(fn, owner, observer) {\n const ownerPrev = OWNER;\n const observerPrev = OBSERVER;\n setOwner(owner);\n setObserver(observer);\n try {\n return fn();\n }\n catch (error) {\n this.catch(castError(error), false); // Bubbling the error up\n return UNAVAILABLE; // Returning a value that is the least likely to cause bugs\n }\n finally {\n setOwner(ownerPrev);\n setObserver(observerPrev);\n }\n }\n}\n/* EXPORT */\nexport default Owner;\n","/* IMPORT */\nimport Owner from './owner.js';\n/* MAIN */\nclass SuperRoot extends Owner {\n constructor() {\n /* VARIABLES */\n super(...arguments);\n this.context = {};\n }\n}\n/* EXPORT */\nexport default SuperRoot;\n","/* IMPORT */\nimport SuperRoot from './objects/superroot.js';\n/* MAIN - READ */\n// This module relies on live-binding of exported variables to avoid a bunch of property accesses\nlet BATCH;\nlet SUPER_OWNER = new SuperRoot();\nlet OBSERVER;\nlet OWNER = SUPER_OWNER;\n/* MAIN - WRITE */\n// Unfortunately live-bounded exports can't just be overridden, so we need these functions\nconst setBatch = (value) => BATCH = value;\nconst setObserver = (value) => OBSERVER = value;\nconst setOwner = (value) => OWNER = value;\n/* EXPORT */\nexport { BATCH, OBSERVER, OWNER, SUPER_OWNER };\nexport { setBatch, setObserver, setOwner };\n","/* IMPORT */\nimport { setBatch } from '../context.js';\nimport { noop } from '../utils.js';\n/* HELPERS */\nlet M = 0;\nlet resolve = noop;\n/* MAIN */\nconst batch = async (fn) => {\n if (!M) {\n setBatch(new Promise(r => resolve = r));\n }\n try {\n M += 1;\n return await fn();\n }\n finally {\n M -= 1;\n if (!M) {\n setBatch(undefined);\n resolve();\n }\n }\n};\n/* MAIN */\nexport default batch;\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE_BOOLEAN } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst isObservableBoolean = (value) => {\n return isFunction(value) && (SYMBOL_OBSERVABLE_BOOLEAN in value);\n};\n/* EXPORT */\nexport default isObservableBoolean;\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst isObservableFrozen = (value) => {\n return isFunction(value) && ((SYMBOL_OBSERVABLE_FROZEN in value) || !!value[SYMBOL_OBSERVABLE_READABLE]?.parent?.disposed);\n};\n/* EXPORT */\nexport default isObservableFrozen;\n","/* IMPORT */\nimport { SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst isUntracked = (value) => {\n return isFunction(value) && ((SYMBOL_UNTRACKED in value) || (SYMBOL_UNTRACKED_UNWRAPPED in value));\n};\n/* EXPORT */\nexport default isUntracked;\n","/* IMPORT */\n/* MAIN */\n// This ensures that there's only one flushing of the queue happening at the same time\nclass Scheduler {\n constructor() {\n /* VARIABLES */\n this.A1 = [];\n this.M = 0;\n this.A2 = false;\n /* QUEING API */\n this.N = () => {\n if (this.A2)\n return;\n if (this.M)\n return;\n if (!this.A1.length)\n return;\n try {\n this.A2 = true;\n while (true) {\n const queue = this.A1;\n if (!queue.length)\n break;\n this.A1 = [];\n for (let i = 0, l = queue.length; i < l; i++) {\n queue[i].C();\n }\n }\n }\n finally {\n this.A2 = false;\n }\n };\n this.E = (fn) => {\n this.M += 1;\n fn();\n this.M -= 1;\n this.N();\n };\n /* SCHEDULING API */\n this.F = (observer) => {\n this.A1.push(observer);\n };\n }\n}\n/* EXPORT */\nexport default new Scheduler();\n","/* IMPORT */\nimport { DIRTY_MAYBE_NO, DIRTY_YES, UNINITIALIZED } from '../constants.js';\nimport { OBSERVER } from '../context.js';\nimport Scheduler from './scheduler.sync.js';\nimport { is, nope } from '../utils.js';\n/* MAIN */\nclass Observable {\n /* CONSTRUCTOR */\n constructor(value, options, parent) {\n this.K = new Set();\n this.value = value;\n if (parent) {\n this.parent = parent;\n }\n if (options?.equals !== undefined) {\n this.equals = options.equals || nope;\n }\n }\n /* API */\n get() {\n if (!this.parent?.disposed) {\n this.parent?.C();\n OBSERVER?.A.L(this);\n }\n return this.value;\n }\n set(value) {\n const equals = this.equals || is;\n const fresh = (this.value === UNINITIALIZED) || !equals(value, this.value);\n if (!fresh)\n return value;\n this.value = value;\n Scheduler.M += 1;\n this.I(DIRTY_YES);\n Scheduler.M -= 1;\n Scheduler.N();\n return value;\n }\n I(J) {\n for (const observer of this.K) {\n if (observer.J !== DIRTY_MAYBE_NO || observer.A.has(this)) { // Maybe this is a potential future dependency we haven't re-read yet\n if (observer.sync) {\n observer.J = Math.max(observer.J, J);\n Scheduler.F(observer);\n }\n else {\n observer.I(J);\n }\n }\n }\n }\n C(fn) {\n const value = fn(this.value);\n return this.set(value);\n }\n}\n/* EXPORT */\nexport default Observable;\n","/* IMPORT */\n/* MAIN */\n// Dedicated data structures for managing A efficiently\n// We use an array if the list is small enough, as that's faster than a Set, and only switch to Sets O that\nclass ObservablesArray {\n /* CONSTRUCTOR */\n constructor(observer) {\n this.observer = observer;\n this.A = [];\n this.P = 0;\n }\n /* API */\n Q(deep) {\n if (deep) {\n const { observer, A } = this;\n for (let i = 0; i < A.length; i++) {\n A[i].K.delete(observer);\n }\n }\n this.P = 0;\n }\n R() {\n const { observer, A, P } = this;\n const observablesLength = A.length;\n if (P < observablesLength) {\n for (let i = P; i < observablesLength; i++) {\n A[i].K.delete(observer);\n }\n A.length = P;\n }\n }\n empty() {\n return !this.A.length;\n }\n has(observable) {\n const index = this.A.indexOf(observable);\n return index >= 0 && index < this.P;\n }\n L(observable) {\n const { observer, A, P } = this;\n const observablesLength = A.length;\n if (observablesLength > 0) {\n if (A[P] === observable) {\n this.P += 1;\n return;\n }\n const index = A.indexOf(observable);\n if (index >= 0 && index < P) {\n return;\n }\n if (P < observablesLength - 1) {\n this.R();\n }\n else if (P === observablesLength - 1) {\n A[P].K.delete(observer);\n }\n }\n observable.K.add(observer);\n A[this.P++] = observable;\n if (P === 128) { // Switching to a Set, as indexOf checks may get artbirarily expensive otherwise\n observer.A = new ObservablesSet(observer, A);\n }\n }\n C() {\n const { A } = this;\n for (let i = 0, l = A.length; i < l; i++) {\n A[i].parent?.C();\n }\n }\n}\nclass ObservablesSet {\n /* CONSTRUCTOR */\n constructor(observer, A) {\n this.observer = observer;\n this.A = new Set(A);\n }\n /* API */\n Q(deep) {\n for (const observable of this.A) {\n observable.K.delete(this.observer);\n }\n }\n R() {\n return;\n }\n empty() {\n return !this.A.size;\n }\n has(observable) {\n return this.A.has(observable);\n }\n L(observable) {\n const { observer, A } = this;\n const sizePrev = A.size;\n observable.K.add(observer);\n const sizeNext = A.size;\n if (sizePrev === sizeNext)\n return; // Cheaper than Set.has+Set.add\n A.add(observable);\n }\n C() {\n for (const observable of this.A) {\n observable.parent?.C();\n }\n }\n}\n/* EXPORT */\nexport { ObservablesArray, ObservablesSet };\n","/* IMPORT */\nimport { DIRTY_NO, DIRTY_MAYBE_NO, DIRTY_MAYBE_YES, DIRTY_YES } from '../constants.js';\nimport { OWNER, SUPER_OWNER } from '../context.js';\nimport { lazyArrayPush } from '../lazy.js';\nimport { ObservablesArray, ObservablesSet } from './observables.js';\nimport Owner from './owner.js';\n/* MAIN */\nclass Observer extends Owner {\n /* CONSTRUCTOR */\n constructor() {\n super();\n /* VARIABLES */\n this.parent = OWNER;\n this.context = OWNER.context;\n this.J = DIRTY_YES;\n this.A = new ObservablesArray(this);\n if (OWNER !== SUPER_OWNER) {\n lazyArrayPush(this.parent, 'K', this);\n }\n }\n /* API */\n Q(deep) {\n this.A.Q(deep);\n super.Q(deep);\n }\n H(fn) {\n this.Q(false);\n this.J = DIRTY_MAYBE_NO; // Resetting the trip flag, we didn't re-execute just yet\n try {\n return this.E(fn, this, this);\n }\n finally {\n this.A.R();\n }\n }\n run() {\n throw new Error('Abstract method');\n }\n I(J) {\n throw new Error('Abstract method');\n }\n C() {\n if (this.disposed)\n return; // Disposed, it shouldn't be updated again\n if (this.J === DIRTY_MAYBE_YES) { // Maybe we are dirty, let's check with our A, to be sure\n this.A.C();\n }\n if (this.J === DIRTY_YES) { // We are dirty, let's H\n this.J = DIRTY_MAYBE_NO; // Trip flag, to be able to tell if we caused ourselves to be dirty again\n this.run();\n if (this.J === DIRTY_MAYBE_NO) { // Not dirty anymore\n this.J = DIRTY_NO;\n }\n else { // Maybe we are still dirty, let's check again\n this.C();\n }\n }\n else { // Not dirty\n this.J = DIRTY_NO;\n }\n }\n}\n/* EXPORT */\nexport default Observer;\n","/* IMPORT */\nimport { DIRTY_MAYBE_YES, UNAVAILABLE, UNINITIALIZED } from '../constants.js';\nimport Observable from './observable.js';\nimport Observer from './observer.js';\n/* MAIN */\nclass Memo extends Observer {\n /* CONSTRUCTOR */\n constructor(fn, options) {\n super();\n this.fn = fn;\n this.observable = new Observable(UNINITIALIZED, options, this);\n if (options?.sync === true) {\n this.sync = true;\n this.C();\n }\n }\n /* API */\n run() {\n const G = super.H(this.fn);\n if (!this.disposed && this.A.empty()) {\n this.disposed = true;\n }\n if (G !== UNAVAILABLE) {\n this.observable.set(G);\n }\n }\n I(J) {\n const statusPrev = this.J;\n if (statusPrev >= J)\n return;\n this.J = J;\n if (statusPrev === DIRTY_MAYBE_YES)\n return;\n this.observable.I(DIRTY_MAYBE_YES);\n }\n}\n/* EXPORT */\nexport default Memo;\n","/* IMPORT */\nimport isObservableFrozen from './is_observable_frozen.js';\nimport isUntracked from './is_untracked.js';\nimport { frozen, readable } from '../objects/callable.js';\nimport Memo from '../objects/memo.js';\n/* MAIN */\nconst memo = (fn, options) => {\n if (isObservableFrozen(fn)) {\n return fn;\n }\n else if (isUntracked(fn)) {\n return frozen(fn());\n }\n else {\n const memo = new Memo(fn, options);\n const observable = readable(memo.observable);\n return observable;\n }\n};\n/* EXPORT */\nexport default memo;\n","/* IMPORT */\nimport isObservableBoolean from './is_observable_boolean.js';\nimport isObservableFrozen from './is_observable_frozen.js';\nimport isUntracked from './is_untracked.js';\nimport memo from './memo.js';\nimport { SYMBOL_OBSERVABLE_BOOLEAN } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst boolean = (value) => {\n if (isFunction(value)) {\n if (isObservableFrozen(value) || isUntracked(value)) {\n return !!value();\n }\n else if (isObservableBoolean(value)) {\n return value;\n }\n else {\n const boolean = memo(() => !!value());\n boolean[SYMBOL_OBSERVABLE_BOOLEAN] = true;\n return boolean;\n }\n }\n else {\n return !!value;\n }\n};\n/* EXPORT */\nexport default boolean;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport { lazyArrayPush } from '../lazy.js';\n/* MAIN */\nconst cleanup = (fn) => {\n lazyArrayPush(OWNER, 'B', fn);\n};\n/* EXPORT */\nexport default cleanup;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport { lazyArrayPush } from '../lazy.js';\nimport Owner from './owner.js';\n/* MAIN */\nclass Context extends Owner {\n /* CONSTRUCTOR */\n constructor(context) {\n super();\n /* VARIABLES */\n this.parent = OWNER;\n this.context = { ...OWNER.context, ...context };\n lazyArrayPush(this.parent, 'D', this);\n }\n /* API */\n E(fn) {\n return super.E(fn, this, undefined);\n }\n}\n/* EXPORT */\nexport default Context;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport Context from '../objects/context.js';\nimport { isSymbol, noop } from '../utils.js';\nfunction context(symbolOrContext, fn) {\n if (isSymbol(symbolOrContext)) {\n return OWNER.context[symbolOrContext];\n }\n else {\n return new Context(symbolOrContext).E(fn || noop);\n }\n}\n/* EXPORT */\nexport default context;\n","/* IMPORT */\nimport cleanup from './cleanup.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\n/* MAIN */\nconst disposed = () => {\n const observable = new Observable(false);\n const A4 = () => observable.set(true);\n cleanup(A4);\n return readable(observable);\n};\n/* EXPORT */\nexport default disposed;\n","/* IMPORT */\nimport { BATCH } from '../context.js';\n/* MAIN */\n// Using 2 microtasks to give a chance to things using 1 microtask (like refs in Voby) to run first\nclass Scheduler {\n constructor() {\n /* VARIABLES */\n this.A1 = [];\n this.A2 = false;\n this.A3 = false;\n /* QUEUING API */\n this.N = () => {\n if (this.A2)\n return;\n if (!this.A1.length)\n return;\n try {\n this.A2 = true;\n while (true) {\n const queue = this.A1;\n if (!queue.length)\n break;\n this.A1 = [];\n for (let i = 0, l = queue.length; i < l; i++) {\n queue[i].C();\n }\n }\n }\n finally {\n this.A2 = false;\n }\n };\n this.queue = () => {\n if (this.A3)\n return;\n this.A3 = true;\n this.resolve();\n };\n this.resolve = () => {\n queueMicrotask(() => {\n queueMicrotask(() => {\n if (BATCH) {\n BATCH.finally(this.resolve);\n }\n else {\n this.A3 = false;\n this.N();\n }\n });\n });\n };\n /* SCHEDULING API */\n this.F = (effect) => {\n this.A1.push(effect);\n this.queue();\n };\n }\n}\n/* EXPORT */\nexport default new Scheduler();\n","/* IMPORT */\nimport { lazyArrayPush } from '../lazy.js';\nimport Observer from './observer.js';\nimport Scheduler from './scheduler.async.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nclass Effect extends Observer {\n /* CONSTRUCTOR */\n constructor(fn, options) {\n super();\n this.fn = fn;\n if (options?.suspense !== false) {\n const suspense = this.get(SYMBOL_SUSPENSE);\n if (suspense) {\n this.suspense = suspense;\n }\n }\n if (options?.sync === true) {\n this.sync = true;\n }\n if (options?.sync === 'init') {\n this.init = true;\n this.C();\n }\n else {\n this.F();\n }\n }\n /* API */\n run() {\n const G = super.H(this.fn);\n if (isFunction(G)) {\n lazyArrayPush(this, 'B', G);\n }\n }\n F() {\n if (this.suspense?.suspended)\n return;\n if (this.sync) {\n this.C();\n }\n else {\n Scheduler.F(this);\n }\n }\n I(J) {\n const statusPrev = this.J;\n if (statusPrev >= J)\n return;\n this.J = J;\n if (!this.sync || (statusPrev !== 2 && statusPrev !== 3)) { // It isn't currently executing, so let's F it\n this.F();\n }\n }\n C() {\n if (this.suspense?.suspended)\n return;\n super.C();\n }\n}\n/* EXPORT */\nexport default Effect;\n","/* IMPORT */\nimport Effect from '../objects/effect.js';\n/* MAIN */\nconst effect = (fn, options) => {\n const effect = new Effect(fn, options);\n const Q = () => effect.Q(true);\n return Q;\n};\n/* EXPORT */\nexport default effect;\n","/* IMPORT */\nimport memo from './memo.js';\nimport { frozen } from '../objects/callable.js';\nimport { SYMBOL_OBSERVABLE, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from '../symbols.js';\nimport { isFunction } from '../utils.js';\nfunction resolve(value) {\n if (isFunction(value)) {\n if (SYMBOL_UNTRACKED_UNWRAPPED in value) {\n return resolve(value());\n }\n else if (SYMBOL_UNTRACKED in value) {\n return frozen(resolve(value()));\n }\n else if (SYMBOL_OBSERVABLE in value) {\n return value;\n }\n else {\n return memo(() => resolve(value()));\n }\n }\n if (value instanceof Array) {\n const resolved = new Array(value.length);\n for (let i = 0, l = resolved.length; i < l; i++) {\n resolved[i] = resolve(value[i]);\n }\n return resolved;\n }\n else {\n return value;\n }\n}\n/* EXPORT */\nexport default resolve;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport { lazySetAdd, lazySetDelete } from '../lazy.js';\nimport Owner from './owner.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\n/* MAIN */\nclass Root extends Owner {\n /* CONSTRUCTOR */\n constructor(V) {\n super();\n /* VARIABLES */\n this.parent = OWNER;\n this.context = OWNER.context;\n if (V) {\n const suspense = this.get(SYMBOL_SUSPENSE);\n if (suspense) {\n this.A0 = true;\n lazySetAdd(this.parent, 'T', this);\n }\n }\n }\n /* API */\n Q(deep) {\n if (this.A0) {\n lazySetDelete(this.parent, 'T', this);\n }\n super.Q(deep);\n }\n E(fn) {\n const Q = () => this.Q(true);\n const fnWithDispose = () => fn(Q);\n return super.E(fnWithDispose, this, undefined);\n }\n}\n/* EXPORT */\nexport default Root;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport { lazySetAdd, lazySetDelete } from '../lazy.js';\nimport cleanup from './cleanup.js';\nimport resolve from './resolve.js';\nimport { frozen, readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\nimport Root from '../objects/root.js';\nimport { SYMBOL_CACHED, SYMBOL_SUSPENSE, SYMBOL_UNCACHED } from '../symbols.js';\n/* HELPERS */\nconst DUMMY_INDEX = frozen(-1);\nclass MappedRoot extends Root {\n}\n/* MAIN */\nclass CacheKeyed {\n /* CONSTRUCTOR */\n constructor(fn) {\n /* VARIABLES */\n this.parent = OWNER;\n this.suspense = OWNER.get(SYMBOL_SUSPENSE);\n this.A5 = new Map();\n this.A6 = false; // The A6 is flipped with each iteration, the T that don't have the updated one are disposed, it's like a cheap M basically\n this.A7 = 0; // Number of previous items\n this.A8 = 0; // Number of previous items that got reused\n this.A9 = 0; // Number of next items\n /* API */\n this.cleanup = () => {\n if (!this.A7)\n return; // There was nothing AA, no need to cleanup\n if (this.A7 === this.A8)\n return; // All the previous items were reused, no need to cleanup\n const { A5, A6 } = this;\n if (!A5.size)\n return; // Nothing to Q of\n if (this.A9) { // Regular cleanup\n A5.forEach((mapped, value) => {\n if (mapped.A6 === A6)\n return;\n mapped.Q(true);\n A5.delete(value);\n });\n }\n else { // There is nothing O, disposing quickly\n this.A5.forEach(mapped => {\n mapped.Q(true);\n });\n this.A5 = new Map();\n }\n };\n this.Q = () => {\n if (this.suspense) {\n lazySetDelete(this.parent, 'T', this.T);\n }\n this.A7 = this.A5.size;\n this.A8 = 0;\n this.A9 = 0;\n this.cleanup();\n };\n this.AA = () => {\n this.A6 = !this.A6;\n this.A8 = 0;\n this.A9 = 0;\n };\n this.O = (values) => {\n this.A9 = values.length;\n this.cleanup();\n this.A7 = this.A9;\n this.A8 = 0;\n };\n this.map = (values) => {\n this.AA();\n const { A5, A6, fn, AB } = this;\n const results = new Array(values.length);\n let resultsCached = true; // Whether all results are cached, if so this enables an optimization\n let resultsUncached = true; // Whether all results are anew, if so this enables an optimization in Voby\n let A8 = 0;\n for (let i = 0, l = values.length; i < l; i++) {\n const value = values[i];\n const cached = A5.get(value);\n if (cached && cached.A6 !== A6) {\n resultsUncached = false;\n A8 += 1;\n cached.A6 = A6;\n cached.index?.set(i);\n results[i] = cached.G; //TSC\n }\n else {\n resultsCached = false;\n const mapped = new MappedRoot(false);\n if (cached) {\n cleanup(() => mapped.Q(true));\n }\n mapped.E(() => {\n let index = DUMMY_INDEX;\n if (AB) {\n mapped.index = new Observable(i);\n index = readable(mapped.index);\n }\n const G = results[i] = resolve(fn(value, index));\n mapped.A6 = A6;\n mapped.G = G;\n if (!cached) {\n A5.set(value, mapped);\n }\n });\n }\n }\n this.A8 = A8;\n this.O(values);\n if (resultsCached) {\n results[SYMBOL_CACHED] = true;\n }\n if (resultsUncached) {\n results[SYMBOL_UNCACHED] = true;\n }\n return results;\n };\n this.T = () => {\n return Array.from(this.A5.values());\n };\n this.fn = fn;\n this.AB = (fn.length > 1);\n if (this.suspense) {\n lazySetAdd(this.parent, 'T', this.T);\n }\n }\n}\n/* EXPORT */\nexport default CacheKeyed;\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst isObservable = (value) => {\n return isFunction(value) && (SYMBOL_OBSERVABLE in value);\n};\n/* EXPORT */\nexport default isObservable;\n","/* IMPORT */\nimport isObservable from './is_observable.js';\nimport { isFunction } from '../utils.js';\nfunction get(value, getFunction = true) {\n const is = getFunction ? isFunction : isObservable;\n if (is(value)) {\n return value();\n }\n else {\n return value;\n }\n}\n/* EXPORT */\nexport default get;\n","/* IMPORT */\nimport { DIRTY_MAYBE_YES, DIRTY_YES } from '../constants.js';\nimport { OWNER } from '../context.js';\nimport { lazyArrayEach, lazyArrayPush, lazySetEach } from '../lazy.js';\nimport Effect from './effect.js';\nimport Owner from './owner.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nclass Suspense extends Owner {\n /* CONSTRUCTOR */\n constructor() {\n super();\n /* VARIABLES */\n this.parent = OWNER;\n this.context = { ...OWNER.context, [SYMBOL_SUSPENSE]: this };\n lazyArrayPush(this.parent, 'U', this);\n this.suspended = (OWNER.get(SYMBOL_SUSPENSE)?.suspended || 0);\n }\n /* API */\n A4(force) {\n if (!this.suspended && !force)\n return; // Already suspended, this can happen at instantion time\n const suspendedPrev = this.suspended;\n const suspendedNext = suspendedPrev + (force ? 1 : -1);\n this.suspended = suspendedNext;\n if (!!suspendedPrev === !!suspendedNext)\n return; // Same state, nothing to pause or resume\n /* NOTIFYING OBSERVERS, ROOTS AND SUSPENSES */\n this.observable?.set(!!suspendedNext);\n const notifyOwner = (owner) => {\n lazyArrayEach(owner.D, notifyOwner);\n lazyArrayEach(owner.K, notifyObserver);\n lazyArrayEach(owner.U, notifySuspense);\n lazySetEach(owner.T, notifyRoot);\n };\n const notifyObserver = (observer) => {\n if (observer instanceof Effect) {\n if (observer.J === DIRTY_MAYBE_YES || observer.J === DIRTY_YES) {\n if (observer.init) {\n observer.C();\n }\n else {\n observer.F();\n }\n }\n }\n notifyOwner(observer);\n };\n const notifyRoot = (root) => {\n if (isFunction(root)) {\n root().forEach(notifyOwner);\n }\n else {\n notifyOwner(root);\n }\n };\n const notifySuspense = (suspense) => {\n suspense.A4(force);\n };\n notifyOwner(this);\n }\n E(fn) {\n return super.E(fn, this, undefined);\n }\n}\n/* EXPORT */\nexport default Suspense;\n","/* IMPORT */\nimport boolean from './boolean.js';\nimport effect from './effect.js';\nimport get from './get.js';\nimport Suspense from '../objects/suspense.js';\n/* MAIN */\nconst suspense = (when, fn) => {\n const suspense = new Suspense();\n const condition = boolean(when);\n const A4 = () => suspense.A4(get(condition));\n effect(A4, { sync: true });\n return suspense.E(fn);\n};\n/* EXPORT */\nexport default suspense;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport { lazySetAdd, lazySetDelete } from '../lazy.js';\nimport cleanup from './cleanup.js';\nimport get from './get.js';\nimport memo from './memo.js';\nimport resolve from './resolve.js';\nimport suspense from './suspense.js';\nimport { frozen, readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\nimport Root from '../objects/root.js';\nimport { SYMBOL_CACHED, SYMBOL_SUSPENSE, SYMBOL_UNCACHED } from '../symbols.js';\n/* HELPERS */\nconst DUMMY_INDEX = frozen(-1);\nclass MappedRoot extends Root {\n}\n/* MAIN */\n//TODO: Optimize this more\nclass CacheUnkeyed {\n /* CONSTRUCTOR */\n constructor(fn, pooled) {\n /* VARIABLES */\n this.parent = OWNER;\n this.suspense = OWNER.get(SYMBOL_SUSPENSE);\n this.A5 = new Map();\n this.AC = [];\n this.AD = 0;\n /* API */\n this.cleanup = () => {\n let pooled = 0;\n let poolable = Math.max(0, this.pooled ? this.AD - this.AC.length : 0);\n this.A5.forEach(mapped => {\n if (poolable > 0 && pooled++ < poolable) {\n mapped.suspended?.set(true);\n this.AC.push(mapped);\n }\n else {\n mapped.Q(true);\n }\n });\n };\n this.Q = () => {\n if (this.suspense) {\n lazySetDelete(this.parent, 'T', this.T);\n }\n this.A5.forEach(mapped => {\n mapped.Q(true);\n });\n this.AC.forEach(mapped => {\n mapped.Q(true);\n });\n };\n this.map = (values) => {\n const { A5, fn, AB } = this;\n const cacheNext = new Map();\n const results = new Array(values.length);\n const AC = this.AC;\n const pooled = this.pooled;\n let resultsCached = true; // Whether all results are cached, if so this enables an optimization\n let resultsUncached = true; // Whether all results are anew, if so this enables an optimization in Voby\n let leftovers = [];\n if (A5.size) {\n for (let i = 0, l = values.length; i < l; i++) {\n const value = values[i];\n const cached = A5.get(value);\n if (cached) {\n resultsUncached = false;\n A5.delete(value);\n cacheNext.set(value, cached);\n cached.index?.set(i);\n results[i] = cached.G; //TSC\n }\n else {\n leftovers.push(i);\n }\n }\n }\n else {\n leftovers = new Array(results.length);\n }\n outer: for (let i = 0, l = leftovers.length; i < l; i++) {\n const index = leftovers[i] || i;\n const value = values[index];\n const isDuplicate = cacheNext.has(value);\n if (!isDuplicate) {\n for (const [key, mapped] of A5.entries()) {\n A5.delete(key);\n cacheNext.set(value, mapped);\n mapped.index?.set(index);\n mapped.value?.set(value);\n results[index] = mapped.G; //TSC\n continue outer;\n }\n }\n resultsCached = false;\n let mapped;\n if (pooled && AC.length) {\n mapped = AC.pop(); //TSC\n mapped.index?.set(index);\n mapped.value?.set(value);\n mapped.suspended?.set(false);\n results[index] = mapped.G; //TSC\n }\n else {\n mapped = new MappedRoot(false);\n mapped.E(() => {\n let $index = DUMMY_INDEX;\n if (AB) {\n mapped.index = new Observable(index);\n $index = readable(mapped.index);\n }\n const observable = mapped.value = new Observable(value);\n const suspended = pooled ? new Observable(false) : undefined;\n const $value = memo(() => get(observable.get())); //TSC\n const G = results[index] = suspended ? suspense(() => suspended.get(), () => resolve(fn($value, $index))) : resolve(fn($value, $index));\n mapped.value = observable;\n mapped.G = G;\n mapped.suspended = suspended;\n });\n }\n if (isDuplicate) { // Expensive, not reusable\n cleanup(() => mapped.Q(true));\n }\n else { // Cheap, reusable\n cacheNext.set(value, mapped);\n }\n }\n this.AD = Math.max(this.AD, results.length);\n this.cleanup();\n this.A5 = cacheNext;\n if (resultsCached) {\n results[SYMBOL_CACHED] = true;\n }\n if (resultsUncached) {\n results[SYMBOL_UNCACHED] = true;\n }\n return results;\n };\n this.T = () => {\n return [...this.A5.values(), ...this.AC.values()];\n };\n this.fn = fn;\n this.AB = (fn.length > 1);\n this.pooled = pooled;\n if (this.suspense) {\n lazySetAdd(this.parent, 'T', this.T);\n }\n }\n}\n/* EXPORT */\nexport default CacheUnkeyed;\n","/* IMPORT */\nimport { SYMBOL_STORE } from '../symbols.js';\nimport { isObject } from '../utils.js';\n/* MAIN */\nconst isStore = (value) => {\n return isObject(value) && (SYMBOL_STORE in value);\n};\n/* EXPORT */\nexport default isStore;\n","/* IMPORT */\nimport { OBSERVER, setObserver } from '../context.js';\nimport { isFunction } from '../utils.js';\nfunction untrack(fn) {\n if (isFunction(fn)) {\n const observerPrev = OBSERVER;\n if (observerPrev) {\n try {\n setObserver(undefined);\n return fn();\n }\n finally {\n setObserver(observerPrev);\n }\n }\n else {\n return fn();\n }\n }\n else {\n return fn;\n }\n}\n/* EXPORT */\nexport default untrack;\n","/* IMPORT */\nimport cleanup from './cleanup.js';\nimport CacheKeyed from './for.cache.keyed.js';\nimport CacheUnkeyed from './for.cache.unkeyed.js';\nimport get from './get.js';\nimport isObservable from './is_observable.js';\nimport isStore from './is_store.js';\nimport memo from './memo.js';\nimport resolve from './resolve.js';\nimport untrack from './untrack.js';\nimport { frozen } from '../objects/callable.js';\nimport { SYMBOL_CACHED, SYMBOL_STORE_VALUES } from '../symbols.js';\nimport { isArray, isEqual } from '../utils.js';\nfunction _for(values, fn, fallback = [], options) {\n if (isArray(values) && !isStore(values)) { // Fast path for plain arrays\n const isUnkeyed = !!options?.unkeyed;\n return frozen(untrack(() => {\n if (values.length) {\n return values.map((value, index) => {\n return resolve(fn(isUnkeyed && !isObservable(value) ? frozen(value) : value, index));\n });\n }\n else {\n return resolve(fallback);\n }\n }));\n }\n else { // Regular path\n const { Q, map } = options?.unkeyed ? new CacheUnkeyed(fn, !!options.pooled) : new CacheKeyed(fn); //TSC\n cleanup(Q);\n const value = memo(() => {\n return get(values) ?? [];\n }, {\n equals: (next, prev) => {\n return !!next && !!prev && !next.length && !prev.length && !isStore(next) && !isStore(prev);\n }\n });\n return memo(() => {\n const array = value();\n if (isStore(array)) {\n array[SYMBOL_STORE_VALUES];\n }\n return untrack(() => {\n const results = map(array);\n return results?.length ? results : resolve(fallback);\n });\n }, {\n equals: (next, prev) => {\n return isArray(next) && !!next[SYMBOL_CACHED] && isArray(prev) && isEqual(next, prev);\n }\n });\n }\n}\n/* EXPORT */\nexport default _for;\n","/* IMPORT */\nimport untrack from './untrack.js';\n/* MAIN */\n// This function ensures an Observable contains a fresh value, mainly to try to push it into a frozen state, if possible\nconst warmup = (value) => {\n untrack(value);\n return value;\n};\n/* EXPORT */\nexport default warmup;\n","/* IMPORT */\nimport get from './get.js';\nimport isObservableBoolean from './is_observable_boolean.js';\nimport isObservableFrozen from './is_observable_frozen.js';\nimport isUntracked from './is_untracked.js';\nimport memo from './memo.js';\nimport resolve from './resolve.js';\nimport warmup from './warmup.js';\nimport { frozen } from '../objects/callable.js';\nimport { is, isFunction } from '../utils.js';\n/* HELPERS */\nconst match = (condition, values, fallback) => {\n for (let i = 0, l = values.length; i < l; i++) {\n const value = values[i];\n if (value.length === 1)\n return value[0];\n if (is(value[0], condition))\n return value[1];\n }\n return fallback;\n};\nfunction _switch(when, values, fallback) {\n const isDynamic = isFunction(when) && !isObservableFrozen(when) && !isUntracked(when);\n if (isDynamic) {\n if (isObservableBoolean(when)) {\n return memo(() => resolve(match(when(), values, fallback)));\n }\n const value = warmup(memo(() => match(when(), values, fallback)));\n if (isObservableFrozen(value)) {\n return frozen(resolve(value()));\n }\n else {\n return memo(() => resolve(get(value)));\n }\n }\n else {\n const value = match(get(when), values, fallback);\n return frozen(resolve(value));\n }\n}\n/* EXPORT */\nexport default _switch;\n","/* IMPORT */\nimport boolean from './boolean.js';\nimport _switch from './switch.js';\n/* MAIN */\nconst ternary = (when, valueTrue, valueFalse) => {\n const condition = boolean(when);\n return _switch(condition, [[true, valueTrue], [valueFalse]]);\n};\n/* EXPORT */\nexport default ternary;\n","/* IMPORT */\nimport { BATCH } from '../context.js';\nimport SchedulerAsync from '../objects/scheduler.async.js';\nimport SchedulerSync from '../objects/scheduler.sync.js';\n/* MAIN */\nconst isBatching = () => {\n return !!BATCH || SchedulerAsync.A3 || SchedulerAsync.A2 || SchedulerSync.A2;\n};\n/* EXPORT */\nexport default isBatching;\n","/* IMPORT */\nimport { writable } from '../objects/callable.js';\nimport ObservableClass from '../objects/observable.js';\nfunction observable(value, options) {\n return writable(new ObservableClass(value, options));\n}\n/* EXPORT */\nexport default observable;\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE_WRITABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst isObservableWritable = (value) => {\n return isFunction(value) && (SYMBOL_OBSERVABLE_WRITABLE in value);\n};\n/* EXPORT */\nexport default isObservableWritable;\n","/* IMPORT */\nimport { UNAVAILABLE } from '../constants.js';\nimport { SYMBOL_OBSERVABLE_READABLE, SYMBOL_OBSERVABLE_WRITABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst target = (observable) => {\n if (isFunction(observable)) {\n return observable[SYMBOL_OBSERVABLE_READABLE] || observable[SYMBOL_OBSERVABLE_WRITABLE] || UNAVAILABLE;\n }\n else {\n return observable;\n }\n};\n/* EXPORT */\nexport default target;\n","/* IMPORT */\nimport isObservableWritable from './is_observable_writable.js';\nimport target from './target.js';\nimport { readable } from '../objects/callable.js';\n/* MAIN */\nconst readonly = (observable) => {\n if (isObservableWritable(observable)) {\n return readable(target(observable));\n }\n else {\n return observable;\n }\n};\n/* EXPORT */\nexport default readonly;\n","/* IMPORT */\nimport Root from '../objects/root.js';\n/* MAIN */\nconst root = (fn) => {\n return new Root(true).E(fn);\n};\n/* EXPORT */\nexport default root;\n","/* IMPORT */\nimport { OBSERVABLE_FALSE, OBSERVABLE_TRUE } from '../constants.js';\nimport cleanup from './cleanup.js';\nimport effect from './effect.js';\nimport isObservableFrozen from './is_observable_frozen.js';\nimport memo from './memo.js';\nimport untrack from './untrack.js';\nimport warmup from './warmup.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\nimport { is } from '../utils.js';\n/* HELPERS */\nclass DisposableMap extends Map {\n constructor() {\n super(...arguments);\n this.disposed = false;\n }\n}\nclass SelectedObservable extends Observable {\n constructor() {\n super(...arguments);\n this.AE = 1;\n }\n /* API */\n call() {\n if (this.AF.disposed)\n return;\n this.AE -= 1;\n if (this.AE)\n return;\n this.AF.delete(this.AG);\n }\n}\n/* MAIN */\nconst selector = (AG) => {\n /* NORMALIZING SOURCE */\n AG = warmup(memo(AG));\n /* FROZEN SOURCE */\n if (isObservableFrozen(AG)) {\n const sourceValue = untrack(AG);\n return (value) => {\n return (value === sourceValue) ? OBSERVABLE_TRUE : OBSERVABLE_FALSE;\n };\n }\n /* SELECTEDS */\n let AF = new DisposableMap();\n let selectedValue = untrack(AG);\n effect(() => {\n const valuePrev = selectedValue;\n const valueNext = AG();\n if (is(valuePrev, valueNext))\n return;\n selectedValue = valueNext;\n AF.get(valuePrev)?.set(false);\n AF.get(valueNext)?.set(true);\n }, { suspense: false, sync: true });\n /* CLEANUP ALL */\n const cleanupAll = () => {\n AF.disposed = true;\n };\n cleanup(cleanupAll);\n /* SELECTOR */\n return (value) => {\n /* INIT */\n let selected = AF.get(value);\n if (selected) {\n selected.AE += 1;\n }\n else {\n selected = new SelectedObservable(value === selectedValue);\n selected.AF = AF;\n selected.AG = value;\n AF.set(value, selected);\n }\n /* CLEANUP */\n cleanup(selected);\n /* RETURN */\n return readable(selected);\n };\n};\n/* EXPORT */\nexport default selector;\n","/* IMPORT */\nimport { BATCH, OBSERVER } from '../context.js';\nimport { lazySetAdd, lazySetDelete, lazySetEach } from '../lazy.js';\nimport cleanup from './cleanup.js';\nimport effect from './effect.js';\nimport isBatching from './is_batching.js';\nimport isStore from './is_store.js';\nimport untrack from './untrack.js';\nimport { readable } from '../objects/callable.js';\nimport ObservableClass from '../objects/observable.js';\nimport { SYMBOL_STORE, SYMBOL_STORE_KEYS, SYMBOL_STORE_OBSERVABLE, SYMBOL_STORE_TARGET, SYMBOL_STORE_VALUES, SYMBOL_STORE_UNTRACKED } from '../symbols.js';\nimport { castArray, is, isArray, isFunction, isObject, noop, nope } from '../utils.js';\n/* CLASSES */\nclass StoreMap extends Map {\n AH(key, value) {\n super.set(key, value);\n return value;\n }\n}\nclass StoreCleanable {\n constructor() {\n this.AE = 0;\n }\n listen() {\n this.AE += 1;\n cleanup(this);\n }\n call() {\n this.AE -= 1;\n if (this.AE)\n return;\n this.Q();\n }\n Q() { }\n}\nclass StoreKeys extends StoreCleanable {\n constructor(parent, observable) {\n super();\n this.parent = parent;\n this.observable = observable;\n }\n Q() {\n this.parent.keys = undefined;\n }\n}\nclass StoreValues extends StoreCleanable {\n constructor(parent, observable) {\n super();\n this.parent = parent;\n this.observable = observable;\n }\n Q() {\n this.parent.values = undefined;\n }\n}\nclass StoreHas extends StoreCleanable {\n constructor(parent, key, observable) {\n super();\n this.parent = parent;\n this.key = key;\n this.observable = observable;\n }\n Q() {\n this.parent.has?.delete(this.key);\n }\n}\nclass StoreProperty extends StoreCleanable {\n constructor(parent, key, observable, AI) {\n super();\n this.parent = parent;\n this.key = key;\n this.observable = observable;\n this.AI = AI;\n }\n Q() {\n this.parent.AJ?.delete(this.key);\n }\n}\nconst StoreListenersRegular = {\n /* VARIABLES */\n AK: 0,\n AL: new Set(),\n AM: new Set(),\n /* API */\n AN: () => {\n const { AL, AM } = StoreListenersRegular;\n const traversed = new Set();\n const traverse = (AI) => {\n if (traversed.has(AI))\n return;\n traversed.add(AI);\n lazySetEach(AI.AO, traverse);\n lazySetEach(AI.AP, listener => {\n AL.add(listener);\n });\n };\n AM.forEach(traverse);\n return () => {\n AL.forEach(listener => {\n listener();\n });\n };\n },\n V: (AI) => {\n StoreListenersRegular.AM.add(AI);\n StoreScheduler.F();\n },\n reset: () => {\n StoreListenersRegular.AL = new Set();\n StoreListenersRegular.AM = new Set();\n }\n};\nconst StoreListenersRoots = {\n /* VARIABLES */\n AK: 0,\n AM: new Map(),\n /* API */\n AN: () => {\n const { AM } = StoreListenersRoots;\n return () => {\n AM.forEach((rootsSet, store) => {\n const T = Array.from(rootsSet);\n lazySetEach(store.AQ, listener => {\n listener(T);\n });\n });\n };\n },\n V: (store, root) => {\n const T = StoreListenersRoots.AM.get(store) || new Set();\n T.add(root);\n StoreListenersRoots.AM.set(store, T);\n StoreScheduler.F();\n },\n AR: (current, parent, key) => {\n if (!parent.AO) {\n const root = current?.store || untrack(() => parent.store[key]);\n StoreListenersRoots.V(parent, root);\n }\n else {\n const traversed = new Set();\n const traverse = (AI) => {\n if (traversed.has(AI))\n return;\n traversed.add(AI);\n lazySetEach(AI.AO, parent => {\n if (!parent.AO) {\n StoreListenersRoots.V(parent, AI.store);\n }\n traverse(parent);\n });\n };\n traverse(current || parent);\n }\n },\n reset: () => {\n StoreListenersRoots.AM = new Map();\n }\n};\nconst StoreScheduler = {\n /* VARIABLES */\n AK: false,\n /* API */\n N: () => {\n const flushRegular = StoreListenersRegular.AN();\n const flushRoots = StoreListenersRoots.AN();\n StoreScheduler.reset();\n flushRegular();\n flushRoots();\n },\n AS: () => {\n if (isBatching()) {\n if (BATCH) {\n BATCH.finally(StoreScheduler.AS);\n }\n else {\n setTimeout(StoreScheduler.AS, 0);\n }\n }\n else {\n StoreScheduler.N();\n }\n },\n reset: () => {\n StoreScheduler.AK = false;\n StoreListenersRegular.reset();\n StoreListenersRoots.reset();\n },\n F: () => {\n if (StoreScheduler.AK)\n return;\n StoreScheduler.AK = true;\n queueMicrotask(StoreScheduler.AS);\n }\n};\n/* CONSTANTS */\nconst NODES = new WeakMap();\nconst SPECIAL_SYMBOLS = new Set([SYMBOL_STORE, SYMBOL_STORE_KEYS, SYMBOL_STORE_OBSERVABLE, SYMBOL_STORE_TARGET, SYMBOL_STORE_VALUES]);\nconst UNREACTIVE_KEYS = new Set(['__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'prototype', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toSource', 'toString', 'valueOf']);\nconst STORE_TRAPS = {\n /* API */\n get: (target, key) => {\n if (SPECIAL_SYMBOLS.has(key)) {\n if (key === SYMBOL_STORE)\n return true;\n if (key === SYMBOL_STORE_TARGET)\n return target;\n if (key === SYMBOL_STORE_KEYS) {\n if (isListenable()) {\n const AI = getNodeExisting(target);\n AI.keys || (AI.keys = getNodeKeys(AI));\n AI.keys.listen();\n AI.keys.observable.get();\n }\n return;\n }\n if (key === SYMBOL_STORE_VALUES) {\n if (isListenable()) {\n const AI = getNodeExisting(target);\n AI.values || (AI.values = getNodeValues(AI));\n AI.values.listen();\n AI.values.observable.get();\n }\n return;\n }\n if (key === SYMBOL_STORE_OBSERVABLE) {\n return (key) => {\n key = (typeof key === 'number') ? String(key) : key;\n const AI = getNodeExisting(target);\n const getter = AI.AT?.get(key);\n if (getter)\n return getter.bind(AI.store);\n AI.AJ || (AI.AJ = new StoreMap());\n const value = target[key];\n const property = AI.AJ.get(key) || AI.AJ.AH(key, getNodeProperty(AI, key, value));\n const options = AI.equals ? { equals: AI.equals } : undefined;\n property.observable || (property.observable = getNodeObservable(AI, value, options));\n const observable = readable(property.observable);\n return observable;\n };\n }\n }\n if (UNREACTIVE_KEYS.has(key))\n return target[key];\n const AI = getNodeExisting(target);\n const getter = AI.AT?.get(key);\n const value = getter || target[key];\n AI.AJ || (AI.AJ = new StoreMap());\n const listenable = isListenable();\n const proxiable = isProxiable(value);\n const property = listenable || proxiable ? AI.AJ.get(key) || AI.AJ.AH(key, getNodeProperty(AI, key, value)) : undefined;\n if (property?.AI) {\n lazySetAdd(property.AI, 'AO', AI);\n }\n if (property && listenable) {\n const options = AI.equals ? { equals: AI.equals } : undefined;\n property.listen();\n property.observable || (property.observable = getNodeObservable(AI, value, options));\n property.observable.get();\n }\n if (getter) {\n return getter.call(AI.store);\n }\n else {\n if (typeof value === 'function' && value === Array.prototype[key]) {\n return function () {\n return value.apply(AI.store, arguments);\n };\n }\n return property?.AI?.store || value;\n }\n },\n set: (target, key, value) => {\n value = getTarget(value);\n const AI = getNodeExisting(target);\n const setter = AI.AU?.get(key);\n if (setter) {\n setter.call(AI.store, value);\n }\n else {\n const targetIsArray = isArray(target);\n const valuePrev = target[key];\n const hadProperty = !!valuePrev || (key in target);\n const equals = AI.equals || is;\n if (hadProperty && equals(value, valuePrev) && (key !== 'length' || !targetIsArray))\n return true; // Array.prototype.length is special, it gets updated AA this trap is called, we need to special-case it...\n const lengthPrev = targetIsArray && target['length'];\n target[key] = value;\n const lengthNext = targetIsArray && target['length'];\n if (targetIsArray && key !== 'length' && lengthPrev !== lengthNext) { // Inferring updating the length property, since it happens implicitly\n AI.AJ?.get('length')?.observable?.set(lengthNext);\n }\n AI.values?.observable.set(0);\n if (!hadProperty) {\n AI.keys?.observable.set(0);\n AI.has?.get(key)?.observable.set(true);\n }\n const property = AI.AJ?.get(key);\n if (property?.AI) {\n lazySetDelete(property.AI, 'AO', AI);\n }\n if (property) {\n property.observable?.set(value);\n property.AI = isProxiable(value) ? NODES.get(value) || getNode(value, key, AI) : undefined;\n }\n if (property?.AI) {\n lazySetAdd(property.AI, 'AO', AI);\n }\n if (StoreListenersRoots.AK) {\n StoreListenersRoots.AR(property?.AI, AI, key);\n }\n if (StoreListenersRegular.AK) {\n StoreListenersRegular.V(AI);\n }\n if (targetIsArray && key === 'length') { // Inferring deleting keys, since it happens implicitly\n const lengthPrev = Number(valuePrev);\n const lengthNext = Number(value);\n for (let i = lengthNext; i < lengthPrev; i++) {\n if (i in target)\n continue;\n STORE_TRAPS.deleteProperty(target, `${i}`, true);\n }\n }\n }\n return true;\n },\n deleteProperty: (target, key, _force) => {\n const hasProperty = (key in target);\n if (!_force && !hasProperty)\n return true;\n const deleted = Reflect.deleteProperty(target, key);\n if (!deleted)\n return false;\n const AI = getNodeExisting(target);\n AI.AT?.delete(key);\n AI.AU?.delete(key);\n AI.keys?.observable.set(0);\n AI.values?.observable.set(0);\n AI.has?.get(key)?.observable.set(false);\n const property = AI.AJ?.get(key);\n if (StoreListenersRoots.AK) {\n StoreListenersRoots.AR(property?.AI, AI, key);\n }\n if (property?.AI) {\n lazySetDelete(property.AI, 'AO', AI);\n }\n if (property) {\n property.observable?.set(undefined);\n property.AI = undefined;\n }\n if (StoreListenersRegular.AK) {\n StoreListenersRegular.V(AI);\n }\n return true;\n },\n defineProperty: (target, key, descriptor) => {\n const AI = getNodeExisting(target);\n const equals = AI.equals || is;\n const hadProperty = (key in target);\n const descriptorPrev = Reflect.getOwnPropertyDescriptor(target, key);\n if ('value' in descriptor && isStore(descriptor.value)) {\n descriptor = { ...descriptor, value: getTarget(descriptor.value) };\n }\n if (descriptorPrev && isEqualDescriptor(descriptorPrev, descriptor, equals))\n return true;\n const defined = Reflect.defineProperty(target, key, descriptor);\n if (!defined)\n return false;\n if (!descriptor.get) {\n AI.AT?.delete(key);\n }\n else if (descriptor.get) {\n AI.AT || (AI.AT = new StoreMap());\n AI.AT.set(key, descriptor.get);\n }\n if (!descriptor.set) {\n AI.AU?.delete(key);\n }\n else if (descriptor.set) {\n AI.AU || (AI.AU = new StoreMap());\n AI.AU.set(key, descriptor.set);\n }\n if (hadProperty !== !!descriptor.enumerable) {\n AI.keys?.observable.set(0);\n }\n AI.has?.get(key)?.observable.set(true);\n const property = AI.AJ?.get(key);\n if (StoreListenersRoots.AK) {\n StoreListenersRoots.AR(property?.AI, AI, key);\n }\n if (property?.AI) {\n lazySetDelete(property.AI, 'AO', AI);\n }\n if (property) {\n if ('get' in descriptor) {\n property.observable?.set(descriptor.get);\n property.AI = undefined;\n }\n else {\n const value = descriptor.value;\n property.observable?.set(value);\n property.AI = isProxiable(value) ? NODES.get(value) || getNode(value, key, AI) : undefined;\n }\n }\n if (property?.AI) {\n lazySetAdd(property.AI, 'AO', AI);\n }\n if (StoreListenersRoots.AK) {\n StoreListenersRoots.AR(property?.AI, AI, key);\n }\n if (StoreListenersRegular.AK) {\n StoreListenersRegular.V(AI);\n }\n return true;\n },\n has: (target, key) => {\n if (key === SYMBOL_STORE)\n return true;\n if (key === SYMBOL_STORE_TARGET)\n return true;\n const value = (key in target);\n if (isListenable()) {\n const AI = getNodeExisting(target);\n AI.has || (AI.has = new StoreMap());\n const has = AI.has.get(key) || AI.has.AH(key, getNodeHas(AI, key, value));\n has.listen();\n has.observable.get();\n }\n return value;\n },\n ownKeys: (target) => {\n const keys = Reflect.ownKeys(target);\n if (isListenable()) {\n const AI = getNodeExisting(target);\n AI.keys || (AI.keys = getNodeKeys(AI));\n AI.keys.listen();\n AI.keys.observable.get();\n }\n return keys;\n }\n};\nconst STORE_UNTRACK_TRAPS = {\n /* API */\n has: (target, key) => {\n if (key === SYMBOL_STORE_UNTRACKED)\n return true;\n return (key in target);\n }\n};\n/* HELPERS */\nconst getNode = (value, key, parent, equals) => {\n if (isStore(value))\n return getNodeExisting(getTarget(value));\n const store = isFrozenLike(value, key, parent) ? value : new Proxy(value, STORE_TRAPS);\n const gettersAndSetters = getGettersAndSetters(value);\n const AI = { AO: parent, store };\n if (gettersAndSetters) {\n const { AT, AU } = gettersAndSetters;\n if (AT)\n AI.AT = AT;\n if (AU)\n AI.AU = AU;\n }\n if (equals === false) {\n AI.equals = nope;\n }\n else if (equals) {\n AI.equals = equals;\n }\n else if (parent?.equals) {\n AI.equals = parent.equals;\n }\n NODES.set(value, AI);\n return AI;\n};\nconst getNodeExisting = (value) => {\n const AI = NODES.get(value);\n if (!AI)\n throw new Error('Impossible');\n return AI;\n};\nconst getNodeFromStore = (store) => {\n return getNodeExisting(getTarget(store));\n};\nconst getNodeKeys = (AI) => {\n const observable = getNodeObservable(AI, 0, { equals: false });\n const keys = new StoreKeys(AI, observable);\n return keys;\n};\nconst getNodeValues = (AI) => {\n const observable = getNodeObservable(AI, 0, { equals: false });\n const values = new StoreValues(AI, observable);\n return values;\n};\nconst getNodeHas = (AI, key, value) => {\n const observable = getNodeObservable(AI, value);\n const has = new StoreHas(AI, key, observable);\n return has;\n};\nconst getNodeObservable = (AI, value, options) => {\n return new ObservableClass(value, options);\n};\nconst getNodeProperty = (AI, key, value) => {\n const observable = undefined;\n const propertyNode = isProxiable(value) ? NODES.get(value) || getNode(value, key, AI) : undefined;\n const property = new StoreProperty(AI, key, observable, propertyNode);\n AI.AJ || (AI.AJ = new StoreMap());\n AI.AJ.set(key, property);\n return property;\n};\nconst getGettersAndSetters = (value) => {\n if (isArray(value))\n return;\n let AT;\n let AU;\n const keys = Object.keys(value);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n const descriptor = Object.getOwnPropertyDescriptor(value, key);\n if (!descriptor)\n continue;\n const { get, set } = descriptor;\n if (get) {\n AT || (AT = new StoreMap());\n AT.set(key, get);\n }\n if (set) {\n AU || (AU = new StoreMap());\n AU.set(key, set);\n }\n if (get && !set) { // This ensures that settings throws without first reading the getter, very cheaply\n AU || (AU = new StoreMap());\n AU.set(key, throwNoSetterError);\n }\n }\n if (!AT && !AU)\n return;\n return { AT, AU };\n};\nconst getStore = (value, options) => {\n if (isStore(value))\n return value;\n const AI = NODES.get(value) || getNode(value, undefined, undefined, options?.equals);\n return AI.store;\n};\nconst getTarget = (value) => {\n if (isStore(value))\n return value[SYMBOL_STORE_TARGET];\n return value;\n};\nconst getUntracked = (value) => {\n if (!isObject(value))\n return value;\n if (isUntracked(value))\n return value;\n return new Proxy(value, STORE_UNTRACK_TRAPS);\n};\nconst isEqualDescriptor = (a, b, equals) => {\n return (!!a.configurable === !!b.configurable && !!a.enumerable === !!b.enumerable && !!a.writable === !!b.writable && equals(a.value, b.value) && a.get === b.get && a.set === b.set);\n};\nconst isFrozenLike = (value, key, parent) => {\n if (Object.isFrozen(value))\n return true;\n if (!parent || key === undefined)\n return false;\n const target = store.unwrap(parent.store);\n const descriptor = Reflect.getOwnPropertyDescriptor(target, key);\n if (descriptor?.configurable || descriptor?.writable)\n return false;\n return true;\n};\nconst isListenable = () => {\n return !!OBSERVER;\n};\nconst isProxiable = (value) => {\n if (value === null || typeof value !== 'object')\n return false;\n if (SYMBOL_STORE in value)\n return true;\n if (SYMBOL_STORE_UNTRACKED in value)\n return false;\n if (isArray(value))\n return true;\n const prototype = Object.getPrototypeOf(value);\n if (prototype === null)\n return true;\n return (Object.getPrototypeOf(prototype) === null);\n};\nconst isUntracked = (value) => {\n if (value === null || typeof value !== 'object')\n return false;\n return (SYMBOL_STORE_UNTRACKED in value);\n};\nconst throwNoSetterError = () => {\n throw new TypeError('Cannot set property value of #<Object> which has only a getter');\n};\n/* MAIN */\n//TODO: Maybe have the \"on\" method trigger immediately too like \"$.on\", or maybe the other way around, which seems more flexible\n//TODO: Explore converting target values back to numbers (the Proxy always receives strings) whenever possible, to save memory\n//TODO: Implement \"_onRoots\" better, perhaps provding string paths instead, which should be more powerful\nconst store = (value, options) => {\n if (!isObject(value))\n return value;\n if (isUntracked(value))\n return value;\n return getStore(value, options);\n};\n/* UTILITIES */\nstore.on = (target, listener) => {\n /* VARIABLES */\n const targets = isStore(target) ? [target] : castArray(target);\n const selectors = targets.filter(isFunction);\n const AM = targets.filter(isStore).map(getNodeFromStore);\n /* ON */\n StoreListenersRegular.AK += 1;\n const disposers = selectors.map(selector => {\n let inited = false;\n return effect(() => {\n if (inited) {\n StoreListenersRegular.AL.add(listener);\n StoreScheduler.F();\n }\n inited = true;\n selector();\n }, { suspense: false, sync: true });\n });\n AM.forEach(AI => {\n lazySetAdd(AI, 'AP', listener);\n });\n /* OFF */\n return () => {\n StoreListenersRegular.AK -= 1;\n disposers.forEach(disposer => {\n disposer();\n });\n AM.forEach(AI => {\n lazySetDelete(AI, 'AP', listener);\n });\n };\n};\nstore._onRoots = (target, listener) => {\n if (!isStore(target))\n return noop;\n const AI = getNodeFromStore(target);\n if (AI.AO)\n throw new Error('Only top-level stores are supported');\n /* ON */\n StoreListenersRoots.AK += 1;\n lazySetAdd(AI, 'AQ', listener);\n /* OFF */\n return () => {\n StoreListenersRoots.AK -= 1;\n lazySetDelete(AI, 'AQ', listener);\n };\n};\nstore.reconcile = (() => {\n //TODO: Support AT, AU and symbols (symbols could be supported with Reflect.ownKeys, but that's like 2x slower)\n const getType = (value) => {\n if (isArray(value))\n return 1;\n if (isProxiable(value))\n return 2;\n return 0;\n };\n const reconcileOuter = (prev, next) => {\n const uprev = getTarget(prev);\n const unext = getTarget(next);\n reconcileInner(prev, next);\n const prevType = getType(uprev);\n const nextType = getType(unext);\n if (prevType === 1 || nextType === 1) {\n prev.length = next.length;\n }\n return prev;\n };\n const reconcileInner = (prev, next) => {\n const uprev = getTarget(prev);\n const unext = getTarget(next);\n const prevKeys = Object.keys(uprev);\n const nextKeys = Object.keys(unext);\n for (let i = 0, l = nextKeys.length; i < l; i++) {\n const key = nextKeys[i];\n const prevValue = uprev[key];\n const nextValue = unext[key];\n if (!is(prevValue, nextValue)) {\n const prevType = getType(prevValue);\n const nextType = getType(nextValue);\n if (prevType && prevType === nextType) {\n reconcileInner(prev[key], nextValue);\n if (prevType === 1) {\n prev[key].length = nextValue.length;\n }\n }\n else {\n prev[key] = nextValue;\n }\n }\n else if (prevValue === undefined && !(key in uprev)) {\n prev[key] = undefined;\n }\n }\n for (let i = 0, l = prevKeys.length; i < l; i++) {\n const key = prevKeys[i];\n if (!(key in unext)) {\n delete prev[key];\n }\n }\n return prev;\n };\n const reconcile = (prev, next) => {\n return untrack(() => {\n return reconcileOuter(prev, next);\n });\n };\n return reconcile;\n})();\nstore.untrack = (value) => {\n return getUntracked(value);\n};\nstore.unwrap = (value) => {\n return getTarget(value);\n};\n/* EXPORT */\nexport default store;\n","/* IMPORT */\nimport { OBSERVABLE_FALSE } from '../constants.js';\nimport { OWNER } from '../context.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\n/* MAIN */\nconst suspended = () => {\n const suspense = OWNER.get(SYMBOL_SUSPENSE);\n if (!suspense)\n return OBSERVABLE_FALSE;\n const observable = (suspense.observable || (suspense.observable = new Observable(!!suspense.suspended)));\n return readable(observable);\n};\n/* EXPORT */\nexport default suspended;\n","/* IMPORT */\nimport Scheduler from '../objects/scheduler.async.js';\n/* MAIN */\nconst tick = () => {\n Scheduler.N();\n};\n/* EXPORT */\nexport default tick;\n","/* IMPORT */\nimport { OWNER } from '../context.js';\nimport memo from './memo.js';\nimport $ from './observable.js';\nimport resolve from './resolve.js';\n/* MAIN */\nconst tryCatch = (value, fn) => {\n const observable = $();\n return memo(() => {\n const error = observable();\n if (error) {\n const reset = () => observable(undefined);\n const options = { error, reset };\n return resolve(fn(options));\n }\n else {\n OWNER.S = observable;\n return resolve(value);\n }\n });\n};\n/* EXPORT */\nexport default tryCatch;\n","/* IMPORT */\nimport untrack from './untrack.js';\nimport { SYMBOL_UNTRACKED } from '../symbols.js';\nimport { isFunction } from '../utils.js';\nfunction untracked(fn) {\n const untracked = isFunction(fn) ? (...args) => untrack(() => fn(...args)) : () => fn;\n untracked[SYMBOL_UNTRACKED] = true;\n return untracked;\n}\n/* EXPORT */\nexport default untracked;\n","/* IMPORT */\nimport { OBSERVER, OWNER } from '../context.js';\n/* MAIN */\nconst _with = () => {\n const owner = OWNER;\n const observer = OBSERVER;\n return (fn) => {\n return owner.E(() => fn(), owner, observer);\n };\n};\n/* EXPORT */\nexport default _with;\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_UNCACHED, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from './oby.js';\n/* MAIN */\nconst CONTEXTS_DATA = new WeakMap();\nconst DIRECTIVES = {};\nconst SYMBOL_SUSPENSE = Symbol('Suspense');\nconst SYMBOL_SUSPENSE_COLLECTOR = Symbol('Suspense.Collector');\nconst SYMBOL_TEMPLATE_ACCESSOR = Symbol('Template.Accessor');\nconst SYMBOLS_DIRECTIVES = {};\n/* EXPORT */\nexport { SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_UNCACHED, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED };\nexport { CONTEXTS_DATA, DIRECTIVES, SYMBOL_SUSPENSE, SYMBOL_SUSPENSE_COLLECTOR, SYMBOL_TEMPLATE_ACCESSOR, SYMBOLS_DIRECTIVES };\n","/* IMPORT */\nimport { SYMBOL_UNTRACKED_UNWRAPPED } from '../constants.js';\n/* MAIN */\nconst wrapElement = (element) => {\n element[SYMBOL_UNTRACKED_UNWRAPPED] = true;\n return element;\n};\n/* EXPORT */\nexport default wrapElement;\n","/* IMPORT */\n/* MAIN */\nconst createComment = document.createComment.bind(document, '');\nconst createHTMLNode = document.createElement.bind(document);\nconst createSVGNode = document.createElementNS.bind(document, 'http://www.w3.org/2000/svg');\nconst createText = document.createTextNode.bind(document);\n/* EXPORT */\nexport { createComment, createHTMLNode, createSVGNode, createText };\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_TEMPLATE_ACCESSOR, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from '../constants.js';\n/* MAIN */\nconst { assign } = Object;\nconst castArray = (value) => {\n return isArray(value) ? value : [value];\n};\nconst castError = (exception) => {\n if (isError(exception))\n return exception;\n if (isString(exception))\n return new Error(exception);\n return new Error('Unknown error');\n};\nconst flatten = (arr) => {\n for (let i = 0, l = arr.length; i < l; i++) {\n if (!isArray(arr[i]))\n continue;\n return arr.flat(Infinity);\n }\n return arr;\n};\nconst indexOf = (() => {\n const _indexOf = Array.prototype.indexOf;\n return (arr, value) => {\n return _indexOf.call(arr, value);\n };\n})();\nconst { isArray } = Array;\nconst isBoolean = (value) => {\n return typeof value === 'boolean';\n};\nconst isComponent = (value) => {\n return isFunction(value) && (SYMBOL_UNTRACKED_UNWRAPPED in value);\n};\nconst isError = (value) => {\n return value instanceof Error;\n};\nconst isFalsy = (value) => {\n return !value;\n};\nconst isFunction = (value) => {\n return typeof value === 'function';\n};\nconst isFunctionReactive = (value) => {\n return !(SYMBOL_UNTRACKED in value || SYMBOL_UNTRACKED_UNWRAPPED in value || SYMBOL_OBSERVABLE_FROZEN in value || value[SYMBOL_OBSERVABLE_READABLE]?.parent?.disposed);\n};\nconst isNil = (value) => {\n return value === null || value === undefined;\n};\nconst isNode = (value) => {\n return value instanceof Node;\n};\nconst isObject = (value) => {\n return typeof value === 'object' && value !== null;\n};\nconst isPromise = (value) => {\n return value instanceof Promise;\n};\nconst isString = (value) => {\n return typeof value === 'string';\n};\nconst isSVG = (value) => {\n return !!value['isSVG'];\n};\nconst isSVGElement = (() => {\n const svgRe = /^(t(ext$|s)|s[vwy]|g)|^set|tad|ker|p(at|s)|s(to|c$|ca|k)|r(ec|cl)|ew|us|f($|e|s)|cu|n[ei]|l[ty]|[GOP]/; //URL: https://regex101.com/r/Ck4kFp/1\n const svgCache = {};\n return (element) => {\n const cached = svgCache[element];\n return (cached !== undefined) ? cached : (svgCache[element] = !element.includes('-') && svgRe.test(element));\n };\n})();\nconst isTemplateAccessor = (value) => {\n return isFunction(value) && (SYMBOL_TEMPLATE_ACCESSOR in value);\n};\nconst isTruthy = (value) => {\n return !!value;\n};\nconst isVoidChild = (value) => {\n return value === null || value === undefined || typeof value === 'boolean' || typeof value === 'symbol';\n};\nconst noop = () => {\n return;\n};\nconst once = (fn) => {\n let called = false;\n let result;\n return () => {\n if (!called) {\n called = true;\n result = fn();\n }\n return result;\n };\n};\n/* EXPORT */\nexport { assign, castArray, castError, flatten, indexOf, isArray, isBoolean, isComponent, isError, isFalsy, isFunction, isFunctionReactive, isNil, isNode, isObject, isPromise, isString, isSVG, isSVGElement, isTemplateAccessor, isTruthy, isVoidChild, noop, once };\n","/* IMPORT */\nimport isObservable from '../methods/is_observable.js';\nimport { isArray, isFunction } from '../utils/lang.js';\nfunction useResolved(values, callback, resolveFunction) {\n const isResolvable = (resolveFunction !== false && callback !== false) ? isFunction : isObservable;\n const resolve = (value) => isResolvable(value) ? value() : value;\n if (isArray(values)) {\n const resolved = values.map(resolve);\n if (isFunction(callback)) {\n return callback.apply(undefined, resolved);\n }\n else {\n return resolved;\n }\n }\n else {\n const resolved = resolve(values);\n if (isFunction(callback)) {\n return callback(resolved);\n }\n else {\n return resolved;\n }\n }\n}\n/* EXPORT */\nexport default useResolved;\n","/* IMPORT */\nimport useEffect from './use_effect.js';\nimport useResolved from './use_resolved.js';\nimport $$ from '../methods/SS.js';\nimport { castArray } from '../utils/lang.js';\nfunction useEventListener(target, event, handler, options) {\n return useEffect(() => {\n const fn = $$(handler, false);\n return useResolved([target, event, options], (target, event, options) => {\n const targets = castArray(target);\n targets.forEach(target => {\n target?.addEventListener(event, fn, options);\n });\n return () => {\n targets.forEach(target => {\n target?.removeEventListener(event, fn, options);\n });\n };\n });\n }, { sync: 'init' });\n}\n/* EXPORT */\nexport default useEventListener;\n","/* IMPORT */\nimport useCleanup from './use_cleanup.js';\nimport useEventListener from './use_event_listener.js';\nimport { castArray } from '../utils/lang.js';\n/* MAIN */\nconst useAbortController = (signals = []) => {\n signals = castArray(signals);\n const controller = new AbortController();\n const abort = controller.abort.bind(controller);\n const aborted = signals.some(signal => signal.aborted);\n if (aborted) {\n abort();\n }\n else {\n signals.forEach(signal => useEventListener(signal, 'abort', abort));\n useCleanup(abort);\n }\n return controller;\n};\n/* EXPORT */\nexport default useAbortController;\n","/* IMPORT */\nimport useAbortController from './use_abort_controller.js';\n/* MAIN */\nconst useAbortSignal = (signals = []) => {\n return useAbortController(signals).signal;\n};\n/* EXPORT */\nexport default useAbortSignal;\n","/* IMPORT */\nimport useEffect from './use_effect.js';\nimport useSuspended from './use_suspended.js';\nimport $$ from '../methods/SS.js';\nimport untrack from '../methods/untrack.js';\n/* MAIN */\nconst useScheduler = ({ loop, once, callback, cancel, schedule }) => {\n let executed = false;\n let suspended = useSuspended();\n let tickId;\n const work = (value) => {\n executed = true;\n if ($$(loop))\n tick();\n $$(callback, false)(value);\n };\n const tick = () => {\n tickId = untrack(() => schedule(work));\n };\n const dispose = () => {\n untrack(() => cancel(tickId));\n };\n useEffect(() => {\n if (once && executed)\n return;\n if (suspended())\n return;\n tick();\n return dispose;\n }, { suspense: false });\n return dispose;\n};\n/* EXPORT */\nexport default useScheduler;\n","/* IMPORT */\nimport useScheduler from './use_scheduler.js';\n/* MAIN */\nconst useAnimationFrame = (callback) => {\n return useScheduler({\n callback,\n once: true,\n cancel: cancelAnimationFrame,\n schedule: requestAnimationFrame\n });\n};\n/* EXPORT */\nexport default useAnimationFrame;\n","/* IMPORT */\nimport useScheduler from './use_scheduler.js';\n/* MAIN */\nconst useAnimationLoop = (callback) => {\n return useScheduler({\n callback,\n loop: true,\n cancel: cancelAnimationFrame,\n schedule: requestAnimationFrame\n });\n};\n/* EXPORT */\nexport default useAnimationLoop;\n","/* IMPORT */\nimport { SYMBOL_SUSPENSE, SYMBOL_SUSPENSE_COLLECTOR } from '../constants.js';\nimport useCleanup from '../hooks/use_cleanup.js';\nimport useMemo from '../hooks/use_memo.js';\nimport $ from '../methods/S.js';\nimport { context, resolve } from '../oby.js';\n/* MAIN */\nconst SuspenseContext = {\n create: () => {\n const count = $(0);\n const active = useMemo(() => !!count());\n const increment = (nr = 1) => count(prev => prev + nr);\n const decrement = (nr = -1) => queueMicrotask(() => count(prev => prev + nr));\n const data = { active, increment, decrement };\n const collector = context(SYMBOL_SUSPENSE_COLLECTOR);\n if (collector) {\n collector?.register(data);\n useCleanup(() => collector.unregister(data));\n }\n return data;\n },\n get: () => {\n return context(SYMBOL_SUSPENSE);\n },\n wrap: (fn) => {\n const data = SuspenseContext.create();\n return context({ [SYMBOL_SUSPENSE]: data }, () => {\n return resolve(() => fn(data));\n });\n }\n};\n/* EXPORT */\nexport default SuspenseContext;\n","/* IMPORT */\nimport SuspenseContext from './suspense.context.js';\nimport useCleanup from '../hooks/use_cleanup.js';\n/* MAIN */\nclass SuspenseManager {\n constructor() {\n /* VARIABLES */\n this.suspenses = new Map();\n /* API */\n this.change = (suspense, nr) => {\n const counter = this.suspenses.get(suspense) || 0;\n const counterNext = Math.max(0, counter + nr);\n if (counter === counterNext)\n return;\n if (counterNext) {\n this.suspenses.set(suspense, counterNext);\n }\n else {\n this.suspenses.delete(suspense);\n }\n if (nr > 0) {\n suspense.increment(nr);\n }\n else {\n suspense.decrement(nr);\n }\n };\n this.suspend = () => {\n const suspense = SuspenseContext.get();\n if (!suspense)\n return;\n this.change(suspense, 1);\n useCleanup(() => {\n this.change(suspense, -1);\n });\n };\n this.unsuspend = () => {\n this.suspenses.forEach((counter, suspense) => {\n this.change(suspense, -counter);\n });\n };\n }\n}\n;\n/* EXPORT */\nexport default SuspenseManager;\n","/* IMPORT */\nimport useEffect from './use_effect.js';\n/* HELPERS */\nconst options = {\n sync: 'init'\n};\n/* MAIN */\n// This function exists for convenience, and to avoid creating unnecessary options objects\nconst useRenderEffect = (fn) => {\n return useEffect(fn, options);\n};\n/* EXPORT */\nexport default useRenderEffect;\n","/* IMPORT */\nimport SuspenseManager from '../components/suspense.manager.js';\nimport useCheapDisposed from './use_cheap_disposed.js';\nimport useReadonly from './use_readonly.js';\nimport useRenderEffect from './use_render_effect.js';\nimport $ from '../methods/S.js';\nimport $$ from '../methods/SS.js';\nimport { assign, castError, isPromise } from '../utils/lang.js';\n/* MAIN */\n//TODO: Maybe port this to oby, as \"from\"\n//TODO: Option for returning the resource as a store, where also the returned value gets wrapped in a store\n//FIXME: SSR demo: toggling back and forth between /home and /loader is buggy, /loader gets loaded with no data, which is wrong\nconst useResource = (fetcher) => {\n const pending = $(true);\n const error = $();\n const value = $();\n const latest = $();\n const { suspend, unsuspend } = new SuspenseManager();\n const resourcePending = { pending: true, get value() { return void suspend(); }, get latest() { return latest() ?? void suspend(); } };\n const resourceRejected = { pending: false, get error() { return error(); }, get value() { throw error(); }, get latest() { throw error(); } };\n const resourceResolved = { pending: false, get value() { return value(); }, get latest() { return value(); } };\n const resourceFunction = { pending: () => pending(), error: () => error(), value: () => resource().value, latest: () => resource().latest };\n const resource = $(resourcePending);\n useRenderEffect(() => {\n const disposed = useCheapDisposed();\n const onPending = () => {\n pending(true);\n error(undefined);\n value(undefined);\n resource(resourcePending);\n };\n const onResolve = (result) => {\n if (disposed())\n return;\n pending(false);\n error(undefined);\n value(() => result);\n latest(() => result);\n resource(resourceResolved);\n };\n const onReject = (exception) => {\n if (disposed())\n return;\n pending(false);\n error(castError(exception));\n value(undefined);\n latest(undefined);\n resource(resourceRejected);\n };\n const onFinally = () => {\n if (disposed())\n return;\n unsuspend();\n };\n const fetch = () => {\n try {\n const value = $$(fetcher());\n if (isPromise(value)) {\n onPending();\n value.then(onResolve, onReject).finally(onFinally);\n }\n else {\n onResolve(value);\n onFinally();\n }\n }\n catch (error) {\n onReject(error);\n onFinally();\n }\n };\n fetch();\n });\n return assign(useReadonly(resource), resourceFunction);\n};\n/* EXPORT */\nexport default useResource;\n","/* IMPORT */\nimport useAbortSignal from './use_abort_signal.js';\nimport useResolved from './use_resolved.js';\nimport useResource from './use_resource.js';\n/* MAIN */\nconst useFetch = (request, init) => {\n return useResource(() => {\n return useResolved([request, init], (request, init = {}) => {\n const signal = useAbortSignal(init.signal || []);\n init.signal = signal;\n return fetch(request, init);\n });\n });\n};\n/* EXPORT */\nexport default useFetch;\n","/* IMPORT */\nimport useScheduler from './use_scheduler.js';\nimport $$ from '../methods/SS.js';\n/* MAIN */\nconst useIdleCallback = (callback, options) => {\n return useScheduler({\n callback,\n once: true,\n cancel: cancelIdleCallback,\n schedule: callback => requestIdleCallback(callback, $$(options))\n });\n};\n/* EXPORT */\nexport default useIdleCallback;\n","/* IMPORT */\nimport useScheduler from './use_scheduler.js';\nimport $$ from '../methods/SS.js';\n/* MAIN */\nconst useIdleLoop = (callback, options) => {\n return useScheduler({\n callback,\n loop: true,\n cancel: cancelIdleCallback,\n schedule: callback => requestIdleCallback(callback, $$(options))\n });\n};\n/* EXPORT */\nexport default useIdleLoop;\n","/* IMPORT */\nimport useScheduler from './use_scheduler.js';\nimport $$ from '../methods/SS.js';\n/* MAIN */\nconst useInterval = (callback, ms) => {\n return useScheduler({\n callback,\n cancel: clearInterval,\n schedule: callback => setInterval(callback, $$(ms))\n });\n};\n/* EXPORT */\nexport default useInterval;\n","/* IMPORT */\nimport useResource from './use_resource.js';\nimport $$ from '../methods/SS.js';\n/* MAIN */\nconst usePromise = (promise) => {\n return useResource(() => $$(promise));\n};\n/* EXPORT */\nexport default usePromise;\n","/* IMPORT */\nimport useScheduler from './use_scheduler.js';\nimport $$ from '../methods/SS.js';\n/* MAIN */\nconst useTimeout = (callback, ms) => {\n return useScheduler({\n callback,\n once: true,\n cancel: clearTimeout,\n schedule: callback => setTimeout(callback, $$(ms))\n });\n};\n/* EXPORT */\nexport default useTimeout;\n","/* IMPORT */\nimport { useCleanup } from './/index.js';\n/* MAIN */\nconst useCheapDisposed = () => {\n let disposed = false;\n const get = () => disposed;\n const set = () => disposed = true;\n useCleanup(set);\n return get;\n};\n/* EXPORT */\nexport default useCheapDisposed;\n","/* IMPORT */\nimport useCheapDisposed from './use_cheap_disposed.js';\nimport { with as _with } from '../oby.js';\n/* MAIN */\n//TODO: Maybe port this to oby\n//TODO: Maybe special-case this to use one shared mirotask per microtask\nconst useMicrotask = (fn) => {\n const disposed = useCheapDisposed();\n const runWithOwner = _with();\n queueMicrotask(() => {\n if (disposed())\n return;\n runWithOwner(fn);\n });\n};\n/* EXPORT */\nexport default useMicrotask;\n","/* IMPORT */\nimport { isString } from './lang.js';\n/* MAIN */\n// This function exists to optimize memory usage in some cases, where the classList API won't be touched without sacrificing performance\nconst classesToggle = (element, classes, force) => {\n const { className } = element;\n /* OPTIMIZED PATH */\n if (isString(className)) {\n if (!className) { // Optimized addition/deletion\n if (force) { // Optimized addition\n element.className = classes;\n return;\n }\n else { // Optimized deletion, nothing to do really\n return;\n }\n }\n else if (!force && className === classes) { // Optimized deletion\n element.className = '';\n return;\n }\n }\n /* REGULAR PATH */\n if (classes.includes(' ')) {\n classes.split(' ').forEach(cls => {\n if (!cls.length)\n return;\n element.classList.toggle(cls, !!force);\n });\n }\n else {\n element.classList.toggle(classes, !!force);\n }\n};\n/* EXPORT */\nexport { classesToggle };\n","/**\n * ISC License\n *\n * Copyright (c) 2020, Andrea Giammarchi, @WebReflection\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\n * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n/* MAIN */\n// This is just a slightly customized version of udomdiff: with types, no accessor function and support for diffing unwrapped nodes\nconst dummyNode = document.createComment('');\nconst beforeDummyWrapper = [dummyNode];\nconst afterDummyWrapper = [dummyNode];\nconst diff = (parent, before, after, nextSibling) => {\n if (before === after)\n return;\n if (before instanceof Node) {\n if (after instanceof Node) {\n if (before.parentNode === parent) { // Safety check, since setChildStatic may trigger this\n parent.replaceChild(after, before);\n return;\n }\n else {\n //TODO: Optimize this branch too\n }\n }\n beforeDummyWrapper[0] = before;\n before = beforeDummyWrapper;\n }\n if (after instanceof Node) {\n afterDummyWrapper[0] = after;\n after = afterDummyWrapper;\n }\n const bLength = after.length;\n let aEnd = before.length;\n let bEnd = bLength;\n let aStart = 0;\n let bStart = 0;\n let map = null;\n let removable;\n while (aStart < aEnd || bStart < bEnd) {\n // append head, tail, or nodes in between: fast path\n if (aEnd === aStart) {\n // we could be in a situation where the rest of nodes that\n // need to be added are not at the end, and in such case\n // the node to `insertBefore`, if the index is more than 0\n // must be retrieved, otherwise it's gonna be the first item.\n const node = bEnd < bLength ?\n (bStart ?\n (after[bStart - 1].nextSibling) :\n after[bEnd - bStart]) :\n nextSibling;\n if (bStart < bEnd) {\n // parent.insertBefore(after[bStart++], node);\n if (node) {\n node.before.apply(node, after.slice(bStart, bEnd));\n }\n else {\n parent.append.apply(parent, after.slice(bStart, bEnd));\n }\n bStart = bEnd;\n }\n }\n // remove head or tail: fast path\n else if (bEnd === bStart) {\n while (aStart < aEnd) {\n // remove the node only if it's unknown or not live\n if (!map || !map.has(before[aStart])) {\n removable = before[aStart];\n if (removable.parentNode === parent) { // Safety check, since setChildStatic may trigger this\n parent.removeChild(removable);\n }\n }\n aStart++;\n }\n }\n // same node: fast path\n else if (before[aStart] === after[bStart]) {\n aStart++;\n bStart++;\n }\n // same tail: fast path\n else if (before[aEnd - 1] === after[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n // The once here single last swap \"fast path\" has been removed in v1.1.0\n // https://github.com/WebReflection/udomdiff/blob/single-final-swap/esm/index.js#L69-L85\n // reverse swap: also fast path\n else if (before[aStart] === after[bEnd - 1] &&\n after[bStart] === before[aEnd - 1]) {\n // this is a \"shrink\" operation that could happen in these cases:\n // [1, 2, 3, 4, 5]\n // [1, 4, 3, 2, 5]\n // or asymmetric too\n // [1, 2, 3, 4, 5]\n // [1, 2, 3, 5, 6, 4]\n const node = before[--aEnd].nextSibling;\n parent.insertBefore(after[bStart++], before[aStart++].nextSibling);\n parent.insertBefore(after[--bEnd], node);\n // mark the future index as identical (yeah, it's dirty, but cheap 👍)\n // The main reason to do this, is that when a[aEnd] will be reached,\n // the loop will likely be on the fast path, as identical to b[bEnd].\n // In the best case scenario, the next loop will skip the tail,\n // but in the worst one, this node will be considered as already\n // processed, bailing out pretty quickly from the map index check\n before[aEnd] = after[bEnd];\n }\n // map based fallback, \"slow\" path\n else {\n // the map requires an O(bEnd - bStart) operation once\n // to store all future nodes indexes for later purposes.\n // In the worst case scenario, this is a full O(N) cost,\n // and such scenario happens at least when all nodes are different,\n // but also if both first and last items of the lists are different\n if (!map) {\n map = new Map;\n let i = bStart;\n while (i < bEnd)\n map.set(after[i], i++);\n }\n // if it's a future node, hence it needs some handling\n if (map.has(before[aStart])) {\n // grab the index of such node, 'cause it might have been processed\n const index = map.get(before[aStart]);\n // if it's not already processed, look on demand for the next LCS\n if (bStart < index && index < bEnd) {\n let i = aStart;\n // counts the amount of nodes that are the same in the future\n let sequence = 1;\n while (++i < aEnd && i < bEnd && map.get(before[i]) === (index + sequence))\n sequence++;\n // effort decision here: if the sequence is longer than replaces\n // needed to reach such sequence, which would brings again this loop\n // to the fast path, prepend the difference before a sequence,\n // and move only the future list index forward, so that aStart\n // and bStart will be aligned again, hence on the fast path.\n // An example considering aStart and bStart are both 0:\n // a: [1, 2, 3, 4]\n // b: [7, 1, 2, 3, 6]\n // this would place 7 before 1 and, from that time on, 1, 2, and 3\n // will be processed at zero cost\n if (sequence > (index - bStart)) {\n const node = before[aStart];\n if (bStart < index) {\n // parent.insertBefore(after[bStart++], node);\n if (node) {\n node.before.apply(node, after.slice(bStart, index));\n }\n else {\n parent.append.apply(parent, after.slice(bStart, index));\n }\n bStart = index;\n }\n }\n // if the effort wasn't good enough, fallback to a replace,\n // moving both source and target indexes forward, hoping that some\n // similar node will be found later on, to go back to the fast path\n else {\n parent.replaceChild(after[bStart++], before[aStart++]);\n }\n }\n // otherwise move the source forward, 'cause there's nothing to do\n else\n aStart++;\n }\n // this node has no meaning in the future list, so it's more than safe\n // to remove it, and check the next live node out instead, meaning\n // that only the live list index should be forwarded\n else {\n removable = before[aStart++];\n if (removable.parentNode === parent) { // Safety check, since setChildStatic may trigger this\n parent.removeChild(removable);\n }\n }\n }\n }\n beforeDummyWrapper[0] = dummyNode;\n afterDummyWrapper[0] = dummyNode;\n};\n/* EXPORT */\nexport default diff;\n","/* IMPORT */\n/* HELPERS */\nconst NOOP_CHILDREN = [];\n/* MAIN */\nconst FragmentUtils = {\n make: () => {\n return {\n values: undefined,\n length: 0\n };\n },\n makeWithNode: (node) => {\n return {\n values: node,\n length: 1\n };\n },\n makeWithFragment: (fragment) => {\n return {\n values: fragment,\n fragmented: true,\n length: 1\n };\n },\n getChildrenFragmented: (thiz, children = []) => {\n const { values, length } = thiz;\n if (!length)\n return children;\n if (values instanceof Array) {\n for (let i = 0, l = values.length; i < l; i++) {\n const value = values[i];\n if (value instanceof Node) {\n children.push(value);\n }\n else {\n FragmentUtils.getChildrenFragmented(value, children);\n }\n }\n }\n else {\n if (values instanceof Node) {\n children.push(values);\n }\n else {\n FragmentUtils.getChildrenFragmented(values, children);\n }\n }\n return children;\n },\n getChildren: (thiz) => {\n if (!thiz.length)\n return NOOP_CHILDREN;\n if (!thiz.fragmented)\n return thiz.values;\n if (thiz.length === 1)\n return FragmentUtils.getChildren(thiz.values);\n return FragmentUtils.getChildrenFragmented(thiz);\n },\n pushFragment: (thiz, fragment) => {\n FragmentUtils.pushValue(thiz, fragment);\n thiz.fragmented = true;\n },\n pushNode: (thiz, node) => {\n FragmentUtils.pushValue(thiz, node);\n },\n pushValue: (thiz, value) => {\n const { values, length } = thiz; //TSC\n if (length === 0) {\n thiz.values = value;\n }\n else if (length === 1) {\n thiz.values = [values, value];\n }\n else {\n values.push(value);\n }\n thiz.length += 1;\n },\n replaceWithNode: (thiz, node) => {\n thiz.values = node;\n delete thiz.fragmented;\n thiz.length = 1;\n },\n replaceWithFragment: (thiz, fragment) => {\n thiz.values = fragment.values;\n thiz.fragmented = fragment.fragmented;\n thiz.length = fragment.length;\n }\n};\n/* EXPORT */\nexport default FragmentUtils;\n","/* IMPORT */\nimport { SYMBOL_UNCACHED } from '../constants.js';\nimport isObservable from '../methods/is_observable.js';\nimport useRenderEffect from '../hooks/use_render_effect.js';\nimport $$ from '../methods/SS.js';\nimport { createText } from './creators.js';\nimport { isArray, isFunction, isFunctionReactive, isString } from './lang.js';\n/* MAIN */\nconst resolveChild = (value, setter, _dynamic = false) => {\n if (isFunction(value)) {\n if (!isFunctionReactive(value)) {\n resolveChild(value(), setter, _dynamic);\n }\n else {\n useRenderEffect(() => {\n resolveChild(value(), setter, true);\n });\n }\n }\n else if (isArray(value)) {\n const [values, hasObservables] = resolveArraysAndStatics(value);\n values[SYMBOL_UNCACHED] = value[SYMBOL_UNCACHED]; // Preserving this special symbol\n setter(values, hasObservables || _dynamic);\n }\n else {\n setter(value, _dynamic);\n }\n};\nconst resolveClass = (classes, resolved = {}) => {\n if (isString(classes)) {\n classes.split(/\\s+/g).filter(Boolean).filter(cls => {\n resolved[cls] = true;\n });\n }\n else if (isFunction(classes)) {\n resolveClass(classes(), resolved);\n }\n else if (isArray(classes)) {\n classes.forEach(cls => {\n resolveClass(cls, resolved); //TSC\n });\n }\n else if (classes) {\n for (const key in classes) {\n const value = classes[key];\n const isActive = !!$$(value);\n if (!isActive)\n continue;\n resolved[key] = true;\n }\n }\n return resolved;\n};\nconst resolveStyle = (styles, resolved = {}) => {\n if (isString(styles)) { //TODO: split into the individual styles, to be able to merge them with other styles\n return styles;\n }\n else if (isFunction(styles)) {\n return resolveStyle(styles(), resolved);\n }\n else if (isArray(styles)) {\n styles.forEach(style => {\n resolveStyle(style, resolved); //TSC\n });\n }\n else if (styles) {\n for (const key in styles) {\n const value = styles[key];\n resolved[key] = $$(value);\n }\n }\n return resolved;\n};\nconst resolveArraysAndStatics = (() => {\n // This function does 3 things:\n // 1. It deeply flattens the array, only if actually needed though (!)\n // 2. It resolves statics, it's important to resolve them soon enough or they will be re-created multiple times (!)\n // 3. It checks if we found any Observables along the way, avoiding looping over the array another time in the future\n const DUMMY_RESOLVED = [];\n const resolveArraysAndStaticsInner = (values, resolved, hasObservables) => {\n for (let i = 0, l = values.length; i < l; i++) {\n const value = values[i];\n const type = typeof value;\n if (type === 'string' || type === 'number' || type === 'bigint') { // Static\n if (resolved === DUMMY_RESOLVED)\n resolved = values.slice(0, i);\n resolved.push(createText(value));\n }\n else if (type === 'object' && isArray(value)) { // Array\n if (resolved === DUMMY_RESOLVED)\n resolved = values.slice(0, i);\n hasObservables = resolveArraysAndStaticsInner(value, resolved, hasObservables)[1];\n }\n else if (type === 'function' && isObservable(value)) { // Observable\n if (resolved !== DUMMY_RESOLVED)\n resolved.push(value);\n hasObservables = true;\n }\n else { // Something else\n if (resolved !== DUMMY_RESOLVED)\n resolved.push(value);\n }\n }\n if (resolved === DUMMY_RESOLVED)\n resolved = values;\n return [resolved, hasObservables];\n };\n return (values) => {\n return resolveArraysAndStaticsInner(values, DUMMY_RESOLVED, false);\n };\n})();\n/* EXPORT */\nexport { resolveChild, resolveClass, resolveStyle, resolveArraysAndStatics };\n","/* IMPORT */\nimport { DIRECTIVES, SYMBOLS_DIRECTIVES, SYMBOL_UNCACHED } from '../constants.js';\nimport useMicrotask from '../hooks/use_microtask.js';\nimport useRenderEffect from '../hooks/use_render_effect.js';\nimport isStore from '../methods/is_store.js';\nimport $$ from '../methods/SS.js';\nimport store from '../methods/store.js';\nimport untrack from '../methods/untrack.js';\nimport { context, with as _with } from '../oby.js';\nimport { SYMBOL_STORE_OBSERVABLE } from '../oby.js';\nimport { classesToggle } from './classlist.js';\nimport { createText, createComment } from './creators.js';\nimport diff from './diff.js';\nimport FragmentUtils from './fragment.js';\nimport { castArray, flatten, isArray, isBoolean, isFunction, isFunctionReactive, isNil, isString, isSVG, isTemplateAccessor } from './lang.js';\nimport { resolveChild, resolveClass, resolveStyle } from './resolvers.js';\n/* MAIN */\nconst setAttributeStatic = (() => {\n const attributesBoolean = new Set(['allowfullscreen', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'disabled', 'formnovalidate', 'hidden', 'indeterminate', 'ismap', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'seamless', 'selected']);\n const attributeCamelCasedRe = /e(r[HRWrv]|[Vawy])|Con|l(e[Tcs]|c)|s(eP|y)|a(t[rt]|u|v)|Of|Ex|f[XYa]|gt|hR|d[Pg]|t[TXYd]|[UZq]/; //URL: https://regex101.com/r/I8Wm4S/1\n const attributesCache = {};\n const uppercaseRe = /[A-Z]/g;\n const normalizeKeySvg = (key) => {\n return attributesCache[key] || (attributesCache[key] = attributeCamelCasedRe.test(key) ? key : key.replace(uppercaseRe, char => `-${char.toLowerCase()}`));\n };\n return (element, key, value) => {\n if (isSVG(element)) {\n key = (key === 'xlinkHref' || key === 'xlink:href') ? 'href' : normalizeKeySvg(key);\n if (isNil(value) || (value === false && attributesBoolean.has(key))) {\n element.removeAttribute(key);\n }\n else {\n element.setAttribute(key, String(value));\n }\n }\n else {\n if (isNil(value) || (value === false && attributesBoolean.has(key))) {\n element.removeAttribute(key);\n }\n else {\n value = (value === true) ? '' : String(value);\n element.setAttribute(key, value);\n }\n }\n };\n})();\nconst setAttribute = (element, key, value) => {\n if (isFunction(value) && isFunctionReactive(value)) {\n useRenderEffect(() => {\n setAttributeStatic(element, key, value());\n });\n }\n else {\n setAttributeStatic(element, key, $$(value));\n }\n};\nconst setChildReplacementFunction = (parent, fragment, child) => {\n useRenderEffect(() => {\n let valueNext = child();\n while (isFunction(valueNext)) {\n valueNext = valueNext();\n }\n setChildStatic(parent, fragment, false, valueNext, true);\n });\n};\nconst setChildReplacementText = (child, childPrev) => {\n if (childPrev.nodeType === 3) {\n childPrev.nodeValue = child;\n return childPrev;\n }\n else {\n const parent = childPrev.parentElement;\n if (!parent)\n throw new Error('Invalid child replacement');\n const textNode = createText(child);\n parent.replaceChild(textNode, childPrev);\n return textNode;\n }\n};\nconst setChildReplacement = (child, childPrev) => {\n const type = typeof child;\n if (type === 'string' || type === 'number' || type === 'bigint') {\n setChildReplacementText(String(child), childPrev);\n }\n else {\n const parent = childPrev.parentElement;\n if (!parent)\n throw new Error('Invalid child replacement');\n const fragment = FragmentUtils.makeWithNode(childPrev);\n if (type === 'function') {\n setChildReplacementFunction(parent, fragment, child); //TSC\n }\n else {\n setChild(parent, child, fragment);\n }\n }\n};\nconst setChildStatic = (parent, fragment, fragmentOnly, child, dynamic) => {\n if (!dynamic && child === undefined)\n return; // Ignoring static undefined children, avoiding inserting some useless placeholder nodes\n const prev = FragmentUtils.getChildren(fragment);\n const prevIsArray = (prev instanceof Array);\n const prevLength = prevIsArray ? prev.length : 1;\n const prevFirst = prevIsArray ? prev[0] : prev;\n const prevLast = prevIsArray ? prev[prevLength - 1] : prev;\n const prevSibling = prevLast?.nextSibling || null;\n if (prevLength === 0) { // Fast path for appending a node the first time\n const type = typeof child;\n if (type === 'string' || type === 'number' || type === 'bigint') {\n const textNode = createText(child);\n if (!fragmentOnly) {\n parent.appendChild(textNode);\n }\n FragmentUtils.replaceWithNode(fragment, textNode);\n return;\n }\n else if (type === 'object' && child !== null && typeof child.nodeType === 'number') { //TSC\n const node = child;\n if (!fragmentOnly) {\n parent.insertBefore(node, null);\n }\n FragmentUtils.replaceWithNode(fragment, node);\n return;\n }\n }\n if (prevLength === 1 && prevFirst.parentNode) { // Fast path for single text child replacing a mounted node\n const type = typeof child;\n if (type === 'string' || type === 'number' || type === 'bigint') {\n const node = setChildReplacementText(String(child), prevFirst); //TODO: maybe \"fragmentOnly\" should be passed on here, but it seems unnecessary\n FragmentUtils.replaceWithNode(fragment, node);\n return;\n }\n }\n const fragmentNext = FragmentUtils.make();\n const children = (Array.isArray(child) ? child : [child]); //TSC\n for (let i = 0, l = children.length; i < l; i++) {\n const child = children[i];\n const type = typeof child;\n if (type === 'string' || type === 'number' || type === 'bigint') {\n FragmentUtils.pushNode(fragmentNext, createText(child));\n }\n else if (type === 'object' && child !== null && typeof child.nodeType === 'number') {\n FragmentUtils.pushNode(fragmentNext, child);\n }\n else if (type === 'function') {\n const fragment = FragmentUtils.make();\n let childFragmentOnly = !fragmentOnly; // Avoiding mutating the DOM immediately, letting the parent handle it\n FragmentUtils.pushFragment(fragmentNext, fragment);\n resolveChild(child, (child, dynamic) => {\n const fragmentOnly = childFragmentOnly;\n childFragmentOnly = false;\n setChildStatic(parent, fragment, fragmentOnly, child, dynamic);\n });\n }\n }\n let next = FragmentUtils.getChildren(fragmentNext);\n let nextLength = fragmentNext.length;\n if (nextLength === 0 && prevLength === 1 && prevFirst.nodeType === 8) { // It's a placeholder already, no need to replace it\n return;\n }\n if (!fragmentOnly && (nextLength === 0 || (prevLength === 1 && prevFirst.nodeType === 8) || children[SYMBOL_UNCACHED])) { // Fast path for removing all children and/or replacing the placeholder\n const { childNodes } = parent;\n if (childNodes.length === prevLength) { // Maybe this fragment doesn't handle all children but only a range of them, checking for that here\n parent.textContent = '';\n if (nextLength === 0) { // Placeholder, to keep the right spot in the array of children\n const placeholder = (fragmentNext.placeholder || (fragmentNext.placeholder = fragment.placeholder || (fragment.placeholder = createComment())));\n FragmentUtils.pushNode(fragmentNext, placeholder);\n if (next !== fragmentNext.values) {\n next = placeholder;\n nextLength += 1;\n }\n }\n if (prevSibling) {\n if (next instanceof Array) {\n prevSibling.before.apply(prevSibling, next);\n }\n else {\n parent.insertBefore(next, prevSibling);\n }\n }\n else {\n if (next instanceof Array) {\n parent.append.apply(parent, next);\n }\n else {\n parent.append(next);\n }\n }\n FragmentUtils.replaceWithFragment(fragment, fragmentNext);\n return;\n }\n }\n if (nextLength === 0) { // Placeholder, to keep the right spot in the array of children\n const placeholder = (fragmentNext.placeholder || (fragmentNext.placeholder = fragment.placeholder || (fragment.placeholder = createComment())));\n FragmentUtils.pushNode(fragmentNext, placeholder);\n if (next !== fragmentNext.values) {\n next = placeholder;\n nextLength += 1;\n }\n }\n if (!fragmentOnly) {\n diff(parent, prev, next, prevSibling);\n }\n FragmentUtils.replaceWithFragment(fragment, fragmentNext);\n};\nconst setChild = (parent, child, fragment = FragmentUtils.make()) => {\n resolveChild(child, setChildStatic.bind(undefined, parent, fragment, false));\n};\nconst setClassStatic = classesToggle;\nconst setClass = (element, key, value) => {\n if (isFunction(value) && isFunctionReactive(value)) {\n useRenderEffect(() => {\n setClassStatic(element, key, value());\n });\n }\n else {\n setClassStatic(element, key, $$(value));\n }\n};\nconst setClassBooleanStatic = (element, value, key, keyPrev) => {\n if (keyPrev && keyPrev !== true) {\n setClassStatic(element, keyPrev, false);\n }\n if (key && key !== true) {\n setClassStatic(element, key, value);\n }\n};\nconst setClassBoolean = (element, value, key) => {\n if (isFunction(key) && isFunctionReactive(key)) {\n let keyPrev;\n useRenderEffect(() => {\n const keyNext = key();\n setClassBooleanStatic(element, value, keyNext, keyPrev);\n keyPrev = keyNext;\n });\n }\n else {\n setClassBooleanStatic(element, value, $$(key));\n }\n};\nconst setClassesStatic = (element, object, objectPrev) => {\n if (isString(object)) {\n if (isSVG(element)) {\n element.setAttribute('class', object);\n }\n else {\n element.className = object;\n }\n }\n else {\n if (objectPrev) {\n if (isString(objectPrev)) {\n if (objectPrev) {\n if (isSVG(element)) {\n element.setAttribute('class', '');\n }\n else {\n element.className = '';\n }\n }\n }\n else if (isArray(objectPrev)) {\n objectPrev = store.unwrap(objectPrev);\n for (let i = 0, l = objectPrev.length; i < l; i++) {\n if (!objectPrev[i])\n continue;\n setClassBoolean(element, false, objectPrev[i]);\n }\n }\n else {\n objectPrev = store.unwrap(objectPrev);\n for (const key in objectPrev) {\n if (object && key in object)\n continue;\n setClass(element, key, false);\n }\n }\n }\n if (isArray(object)) {\n if (isStore(object)) {\n for (let i = 0, l = object.length; i < l; i++) {\n const fn = untrack(() => isFunction(object[i]) ? object[i] : object[SYMBOL_STORE_OBSERVABLE](String(i))); //TSC\n setClassBoolean(element, true, fn);\n }\n }\n else {\n for (let i = 0, l = object.length; i < l; i++) {\n if (!object[i])\n continue;\n setClassBoolean(element, true, object[i]);\n }\n }\n }\n else {\n if (isStore(object)) {\n for (const key in object) {\n const fn = untrack(() => isFunction(object[key]) ? object[key] : object[SYMBOL_STORE_OBSERVABLE](key)); //TSC\n setClass(element, key, fn);\n }\n }\n else {\n for (const key in object) {\n setClass(element, key, object[key]);\n }\n }\n }\n }\n};\nconst setClasses = (element, object) => {\n if (isFunction(object) || isArray(object)) {\n let objectPrev;\n useRenderEffect(() => {\n const objectNext = resolveClass(object);\n setClassesStatic(element, objectNext, objectPrev);\n objectPrev = objectNext;\n });\n }\n else {\n setClassesStatic(element, object);\n }\n};\nconst setDirective = (element, directive, args) => {\n const symbol = SYMBOLS_DIRECTIVES[directive] || Symbol();\n const data = context(symbol) || DIRECTIVES[symbol];\n if (!data)\n throw new Error(`Directive \"${directive}\" not found`);\n const call = () => data.fn(element, ...castArray(args)); //TSC\n if (data.immediate) {\n call();\n }\n else {\n useMicrotask(call);\n }\n};\nconst setEventStatic = (() => {\n //TODO: Maybe delete event delegation\n //TODO: Maybe delegate more events: [onmousemove, onmouseout, onmouseover, onpointerdown, onpointermove, onpointerout, onpointerover, onpointerup, ontouchend, ontouchmove, ontouchstart]\n const delegatedEvents = {\n onauxclick: ['_onauxclick', false],\n onbeforeinput: ['_onbeforeinput', false],\n onclick: ['_onclick', false],\n ondblclick: ['_ondblclick', false],\n onfocusin: ['_onfocusin', false],\n onfocusout: ['_onfocusout', false],\n oninput: ['_oninput', false],\n onkeydown: ['_onkeydown', false],\n onkeyup: ['_onkeyup', false],\n onmousedown: ['_onmousedown', false],\n onmouseup: ['_onmouseup', false]\n };\n const delegate = (event) => {\n const key = `_${event}`;\n document.addEventListener(event.slice(2), event => {\n const targets = event.composedPath();\n let target = null;\n Object.defineProperty(event, 'currentTarget', {\n configurable: true,\n get() {\n return target;\n }\n });\n for (let i = 0, l = targets.length; i < l; i++) {\n target = targets[i];\n const handler = target[key];\n if (!handler)\n continue;\n handler(event);\n if (event.cancelBubble)\n break;\n }\n target = null;\n });\n };\n return (element, event, value) => {\n if (event.startsWith('onmiddleclick')) { // Special-cased synthetic event, somewhat ugly but very convenient\n const _value = value;\n event = `onauxclick${event.slice(13)}`;\n value = _value && ((event) => event['button'] === 1 && _value(event));\n }\n const delegated = delegatedEvents[event];\n if (delegated) {\n if (!delegated[1]) { // Not actually delegating yet\n delegated[1] = true;\n delegate(event);\n }\n element[delegated[0]] = value;\n }\n else if (event.endsWith('passive')) {\n const isCapture = event.endsWith('capturepassive');\n const type = event.slice(2, -7 - (isCapture ? 7 : 0));\n const key = `_${event}`;\n const valuePrev = element[key];\n if (valuePrev)\n element.removeEventListener(type, valuePrev, { capture: isCapture });\n if (value)\n element.addEventListener(type, value, { passive: true, capture: isCapture });\n element[key] = value;\n }\n else if (event.endsWith('capture')) {\n const type = event.slice(2, -7);\n const key = `_${event}`;\n const valuePrev = element[key];\n if (valuePrev)\n element.removeEventListener(type, valuePrev, { capture: true });\n if (value)\n element.addEventListener(type, value, { capture: true });\n element[key] = value;\n }\n else {\n element[event] = value;\n }\n };\n})();\nconst setEvent = (element, event, value) => {\n setEventStatic(element, event, value);\n};\nconst setHTMLStatic = (element, value) => {\n element.innerHTML = String(isNil(value) ? '' : value);\n};\nconst setHTML = (element, value) => {\n useRenderEffect(() => {\n setHTMLStatic(element, $$($$(value).__html));\n });\n};\nconst setPropertyStatic = (element, key, value) => {\n if (key === 'tabIndex' && isBoolean(value)) {\n value = value ? 0 : undefined;\n }\n if (key === 'value') {\n if (element.tagName === 'PROGRESS') {\n value ?? (value = null);\n }\n else if (element.tagName === 'SELECT' && !element['_$inited']) {\n element['_$inited'] = true;\n queueMicrotask(() => element[key] = value);\n }\n }\n try { // Trying setting the property\n element[key] = value;\n if (isNil(value)) {\n setAttributeStatic(element, key, null);\n }\n }\n catch { // If it fails, maybe because like HTMLInputElement.form there's only a getter, we try as an attribute instead //TODO: Figure out something better than this\n setAttributeStatic(element, key, value);\n }\n};\nconst setProperty = (element, key, value) => {\n if (isFunction(value) && isFunctionReactive(value)) {\n useRenderEffect(() => {\n setPropertyStatic(element, key, value());\n });\n }\n else {\n setPropertyStatic(element, key, $$(value));\n }\n};\nconst setRef = (element, value) => {\n if (isNil(value))\n return;\n const values = flatten(castArray(value)).filter(Boolean); //TODO: Maybe special-case this to be faster for non-array values, or 2-values arrays\n if (!values.length)\n return;\n useMicrotask(() => untrack(() => values.forEach(value => value?.(element))));\n};\nconst setStyleStatic = (() => {\n // From Preact: https://github.com/preactjs/preact/blob/e703a62b77c9de45e886d8a7f59bd0db658318f9/src/constants.js#L3\n // const propertyNonDimensionalRe = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\n // From this Preact issue: https://github.com/preactjs/preact/issues/2607\n const propertyNonDimensionalRe = /^(-|f[lo].*[^se]$|g.{5,}[^ps]$|z|o[pr]|(W.{5})?[lL]i.*(t|mp)$|an|(bo|s).{4}Im|sca|m.{6}[ds]|ta|c.*[st]$|wido|ini)/i;\n const propertyNonDimensionalCache = {};\n return (element, key, value) => {\n if (key.charCodeAt(0) === 45) { // /^-/\n if (isNil(value)) {\n element.style.removeProperty(key);\n }\n else {\n element.style.setProperty(key, String(value));\n }\n }\n else if (isNil(value)) {\n element.style[key] = null;\n }\n else {\n element.style[key] = (isString(value) || (propertyNonDimensionalCache[key] || (propertyNonDimensionalCache[key] = propertyNonDimensionalRe.test(key))) ? value : `${value}px`);\n }\n };\n})();\nconst setStyle = (element, key, value) => {\n if (isFunction(value) && isFunctionReactive(value)) {\n useRenderEffect(() => {\n setStyleStatic(element, key, value());\n });\n }\n else {\n setStyleStatic(element, key, $$(value));\n }\n};\nconst setStylesStatic = (element, object, objectPrev) => {\n if (isString(object)) {\n element.setAttribute('style', object);\n }\n else {\n if (objectPrev) {\n if (isString(objectPrev)) {\n if (objectPrev) {\n element.style.cssText = '';\n }\n }\n else {\n objectPrev = store.unwrap(objectPrev);\n for (const key in objectPrev) {\n if (object && key in object)\n continue;\n setStyleStatic(element, key, null);\n }\n }\n }\n if (isStore(object)) {\n for (const key in object) {\n const fn = untrack(() => isFunction(object[key]) ? object[key] : object[SYMBOL_STORE_OBSERVABLE](key)); //TSC\n setStyle(element, key, fn);\n }\n }\n else {\n for (const key in object) {\n setStyle(element, key, object[key]);\n }\n }\n }\n};\nconst setStyles = (element, object) => {\n if (isFunction(object) || isArray(object)) {\n let objectPrev;\n useRenderEffect(() => {\n const objectNext = resolveStyle(object);\n setStylesStatic(element, objectNext, objectPrev);\n objectPrev = objectNext;\n });\n }\n else {\n setStylesStatic(element, $$(object));\n }\n};\nconst setTemplateAccessor = (element, key, value) => {\n if (key === 'children') {\n const placeholder = createText(''); // Using a Text node rather than a Comment as the former may be what we actually want ultimately\n element.insertBefore(placeholder, null);\n value(element, 'setChildReplacement', undefined, placeholder);\n }\n else if (key === 'ref') {\n value(element, 'setRef');\n }\n else if (key === 'style') {\n value(element, 'setStyles');\n }\n else if (key === 'class') {\n if (!isSVG(element)) {\n element.className = ''; // Ensuring the attribute is present\n }\n value(element, 'setClasses');\n }\n else if (key === 'dangerouslySetInnerHTML') {\n value(element, 'setHTML');\n }\n else if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110) { // /^on/\n value(element, 'setEvent', key.toLowerCase());\n }\n else if (key.charCodeAt(0) === 117 && key.charCodeAt(3) === 58) { // /^u..:/\n value(element, 'setDirective', key.slice(4));\n }\n else if (key === 'innerHTML' || key === 'outerHTML' || key === 'textContent' || key === 'className') {\n // Forbidden props\n }\n else if (key in element && !isSVG(element)) {\n value(element, 'setProperty', key);\n }\n else {\n element.setAttribute(key, ''); // Ensuring the attribute is present\n value(element, 'setAttribute', key);\n }\n};\nconst setProp = (element, key, value) => {\n if (value === undefined)\n return; // Ignoring undefined props, for performance\n if (isTemplateAccessor(value)) {\n setTemplateAccessor(element, key, value);\n }\n else if (key === 'children') {\n setChild(element, value);\n }\n else if (key === 'ref') {\n setRef(element, value);\n }\n else if (key === 'style') {\n setStyles(element, value);\n }\n else if (key === 'class') {\n setClasses(element, value);\n }\n else if (key === 'dangerouslySetInnerHTML') {\n setHTML(element, value);\n }\n else if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110) { // /^on/\n setEvent(element, key.toLowerCase(), value);\n }\n else if (key.charCodeAt(0) === 117 && key.charCodeAt(3) === 58) { // /^u..:/\n setDirective(element, key.slice(4), value);\n }\n else if (key === 'innerHTML' || key === 'outerHTML' || key === 'textContent' || key === 'className') {\n // Forbidden props\n }\n else if (key in element && !isSVG(element)) {\n setProperty(element, key, value);\n }\n else {\n setAttribute(element, key, value);\n }\n};\nconst setProps = (element, object) => {\n for (const key in object) {\n setProp(element, key, object[key]);\n }\n};\n/* EXPORT */\nexport { setAttributeStatic, setAttribute, setChildReplacementFunction, setChildReplacementText, setChildReplacement, setChildStatic, setChild, setClassStatic, setClass, setClassBooleanStatic, setClassesStatic, setClasses, setEventStatic, setEvent, setHTMLStatic, setHTML, setPropertyStatic, setProperty, setRef, setStyleStatic, setStyle, setStylesStatic, setStyles, setTemplateAccessor, setProp, setProps };\n","/* IMPORT */\nimport untrack from './untrack.js';\nimport wrapElement from './wrap_element.js';\nimport { createHTMLNode, createSVGNode } from '../utils/creators.js';\nimport { isFunction, isNil, isNode, isString, isSVGElement, isVoidChild } from '../utils/lang.js';\nimport { setProps } from '../utils/setters.js';\n/* MAIN */\n// It's important to wrap components, so that they can be executed in the right order, from parent to child, rather than from child to parent in some cases\nconst createElement = (component, props, ..._children) => {\n const { children: __children, key, ref, ...rest } = (props || {}); //TSC\n const children = (_children.length === 1) ? _children[0] : (_children.length === 0) ? __children : _children;\n if (isFunction(component)) {\n const props = rest;\n if (!isNil(children))\n props.children = children;\n if (!isNil(ref))\n props.ref = ref;\n return wrapElement(() => {\n return untrack(() => component.call(component, props)); //TSC\n });\n }\n else if (isString(component)) {\n const props = rest;\n const isSVG = isSVGElement(component);\n const createNode = isSVG ? createSVGNode : createHTMLNode;\n if (!isVoidChild(children))\n props.children = children;\n if (!isNil(ref))\n props.ref = ref;\n return wrapElement(() => {\n const child = createNode(component); //TSC\n if (isSVG)\n child['isSVG'] = true;\n untrack(() => setProps(child, props));\n return child;\n });\n }\n else if (isNode(component)) {\n return wrapElement(() => component);\n }\n else {\n throw new Error('Invalid component');\n }\n};\n/* EXPORT */\nexport default createElement;\n","/* IMPORT */\nimport useMemo from '../hooks/use_memo.js';\nimport createElement from '../methods/create_element.js';\nimport resolve from '../methods/resolve.js';\nimport $$ from '../methods/SS.js';\n/* MAIN */\nconst Dynamic = ({ component, props, children }) => {\n return useMemo(() => {\n return resolve(createElement($$(component, false), $$(props), children));\n });\n};\n/* EXPORT */\nexport default Dynamic;\n","/* IMPORT */\nimport untrack from '../methods/untrack.js';\nimport { tryCatch } from '../oby.js';\nimport { isFunction } from '../utils/lang.js';\n/* MAIN */\nconst ErrorBoundary = ({ fallback, children }) => {\n return tryCatch(children, props => untrack(() => isFunction(fallback) ? fallback(props) : fallback));\n};\n/* EXPORT */\nexport default ErrorBoundary;\n","/* IMPORT */\nimport { for as _for } from '../oby.js';\nfunction For({ values, fallback, pooled, unkeyed, children }) {\n return _for(values, children, fallback, { pooled, unkeyed }); //TSC\n}\n/* EXPORT */\nexport default For;\n","/* IMPORT */\n/* MAIN */\nconst Fragment = ({ children }) => {\n return children;\n};\n/* EXPORT */\nexport default Fragment;\n","/* IMPORT */\nimport useMemo from './use_memo.js';\nimport $$ from '../methods/SS.js';\nimport { isNil } from '../utils/lang.js';\n/* MAIN */\n//TODO: Maybe port this to oby, as \"when\" or \"is\" or \"guarded\"\n//TODO: Optimize this, checking if the value is actually potentially reactive\nconst useGuarded = (value, guard) => {\n let valueLast;\n const guarded = useMemo(() => {\n const current = $$(value);\n if (!guard(current))\n return valueLast;\n return valueLast = current;\n });\n return () => {\n const current = guarded();\n if (isNil(current))\n throw new Error('The value never passed the type guard');\n return current;\n };\n};\n/* EXPORT */\nexport default useGuarded;\n","/* IMPORT */\nimport isObservable from '../methods/is_observable.js';\nimport useGuarded from '../hooks/use_guarded.js';\nimport useUntracked from '../hooks/use_untracked.js';\nimport { ternary } from '../oby.js';\nimport { isComponent, isFunction, isTruthy } from '../utils/lang.js';\n/* MAIN */\n//TODO: Support an is/guard prop, maybe\nconst If = ({ when, fallback, children }) => {\n if (isFunction(children) && !isObservable(children) && !isComponent(children)) { // Calling the children function with an (() => Truthy<T>)\n const truthy = useGuarded(when, isTruthy);\n return ternary(when, useUntracked(() => children(truthy)), fallback);\n }\n else { // Just passing the children along\n return ternary(when, children, fallback); //TSC\n }\n};\n/* EXPORT */\nexport default If;\n","/* IMPORT */\nimport useCleanup from '../hooks/use_cleanup.js';\nimport useMemo from '../hooks/use_memo.js';\nimport useResolved from '../hooks/use_resolved.js';\nimport useRoot from '../hooks/use_root.js';\nimport useSuspense from '../hooks/use_suspense.js';\nimport resolve from '../methods/resolve.js';\nimport $ from '../methods/S.js';\nimport { with as _with } from '../oby.js';\n/* HELPERS */\nconst cache = {};\nconst runWithSuperRoot = _with();\nlet lockId = 1;\n/* MAIN */\n//TODO: Support hot-swapping owner and context, to make the context JustWork™\nconst KeepAlive = ({ id, ttl, children }) => {\n return useMemo(() => {\n return useResolved([id, ttl], (id, ttl) => {\n const lock = lockId++;\n const item = cache[id] || (cache[id] = { id, lock });\n item.lock = lock;\n item.reset?.();\n item.suspended || (item.suspended = $(false));\n item.suspended(false);\n if (!item.dispose || !item.result) {\n runWithSuperRoot(() => {\n useRoot(dispose => {\n item.dispose = () => {\n delete cache[id];\n dispose();\n };\n useSuspense(item.suspended, () => {\n item.result = resolve(children);\n });\n });\n });\n }\n useCleanup(() => {\n const hasLock = () => lock === item.lock;\n if (!hasLock())\n return;\n item.suspended?.(true);\n if (!ttl || ttl <= 0 || ttl >= Infinity)\n return;\n const dispose = () => hasLock() && item.dispose?.();\n const timeoutId = setTimeout(dispose, ttl);\n const reset = () => clearTimeout(timeoutId);\n item.reset = reset;\n });\n return item.result;\n });\n });\n};\n/* EXPORT */\nexport default KeepAlive;\n","/* IMPORT */\nimport useRoot from '../hooks/use_root.js';\nimport useUntracked from '../hooks/use_untracked.js';\nimport { setChild } from '../utils/setters.js';\n/* MAIN */\nconst render = (child, parent) => {\n if (!parent || !(parent instanceof HTMLElement))\n throw new Error('Invalid parent node');\n parent.textContent = '';\n return useRoot(dispose => {\n setChild(parent, useUntracked(child));\n return () => {\n dispose();\n parent.textContent = '';\n };\n });\n};\n/* EXPORT */\nexport default render;\n","/* IMPORT */\nimport useBoolean from '../hooks/use_boolean.js';\nimport useRenderEffect from '../hooks/use_render_effect.js';\nimport render from '../methods/render.js';\nimport $$ from '../methods/SS.js';\nimport { createHTMLNode } from '../utils/creators.js';\nimport { assign } from '../utils/lang.js';\n/* MAIN */\nconst Portal = ({ when = true, mount, wrapper, children }) => {\n const portal = $$(wrapper) || createHTMLNode('div');\n if (!(portal instanceof HTMLElement))\n throw new Error('Invalid wrapper node');\n const condition = useBoolean(when);\n useRenderEffect(() => {\n if (!$$(condition))\n return;\n const parent = $$(mount) || document.body;\n if (!(parent instanceof Element))\n throw new Error('Invalid mount node');\n parent.insertBefore(portal, null);\n return () => {\n parent.removeChild(portal);\n };\n });\n useRenderEffect(() => {\n if (!$$(condition))\n return;\n return render(children, portal);\n });\n return assign(() => $$(condition) || children, { metadata: { portal } });\n};\n/* EXPORT */\nexport default Portal;\n","/* IMPORT */\nimport SuspenseContext from './suspense.context.js';\nimport useMemo from '../hooks/use_memo.js';\nimport useSuspense from '../hooks/use_suspense.js';\nimport resolve from '../methods/resolve.js';\nimport $$ from '../methods/SS.js';\nimport { suspense as _suspense, ternary } from '../oby.js';\n/* MAIN */\nconst Suspense = ({ when, fallback, children }) => {\n return SuspenseContext.wrap(suspense => {\n const condition = useMemo(() => !!$$(when) || suspense.active());\n const childrenSuspended = useSuspense(condition, () => resolve(children));\n return ternary(condition, fallback, childrenSuspended);\n });\n};\n/* EXPORT */\nexport default Suspense;\n","/* IMPORT */\nimport { switch as _switch } from '../oby.js';\nimport { assign, castArray } from '../utils/lang.js';\n/* MAIN */\n//TODO: Enforce children of Switch to be of type Switch.Case or Switch.Default\nconst Switch = ({ when, fallback, children }) => {\n const childrenWithValues = castArray(children); //TSC\n const values = childrenWithValues.map(child => child().metadata);\n return _switch(when, values, fallback); //TSC\n};\n/* UTILITIES */\nSwitch.Case = ({ when, children }) => {\n const metadata = { metadata: [when, children] };\n return assign(() => children, metadata);\n};\nSwitch.Default = ({ children }) => {\n const metadata = { metadata: [children] };\n return assign(() => children, metadata);\n};\n/* EXPORT */\nexport default Switch;\n","/* IMPORT */\nimport { ternary } from '../oby.js';\n/* MAIN */\nconst Ternary = ({ when, children }) => {\n return ternary(when, children[0], children[1]);\n};\n/* EXPORT */\nexport default Ternary;\n","/* IMPORT */\nimport './types.js';\nimport Fragment from '../components/fragment.js';\nimport createElement from '../methods/create_element.js';\n/* MAIN */\nconst jsx = (component, props) => {\n return createElement(component, props);\n};\n/* EXPORT */\nexport { jsx, jsx as jsxs, jsx as jsxDEV, Fragment };\n","/* IMPORT */\nimport { DIRECTIVES, SYMBOLS_DIRECTIVES } from '../constants.js';\nimport resolve from './resolve.js';\nimport { context } from '../oby.js';\n/* MAIN */\nconst createDirective = (name, fn, options) => {\n const immediate = !!options?.immediate;\n const data = { fn, immediate };\n const symbol = (SYMBOLS_DIRECTIVES[name] || (SYMBOLS_DIRECTIVES[name] = Symbol()));\n const Provider = ({ children }) => {\n return context({ [symbol]: data }, () => {\n return resolve(children);\n });\n };\n const ref = (...args) => {\n return (element) => {\n fn(element, ...args);\n };\n };\n const register = () => {\n if (symbol in DIRECTIVES)\n throw new Error('Directive \"name\" is already registered');\n DIRECTIVES[symbol] = data;\n };\n return { Provider, ref, register };\n};\n/* EXPORT */\nexport default createDirective;\n","/* IMPORT */\nimport useMemo from '../hooks/use_memo.js';\nimport $ from './S.js';\nimport resolve from './resolve.js';\nimport untrack from './untrack.js';\nimport { isFunction } from '../utils/lang.js';\n/* HELPERS */\nconst COMPONENT_RE = /^_?[A-Z][a-zA-Z0-9$_-]*$/;\nconst SYMBOL_AS = '__hmr_as__';\nconst SYMBOL_COLD_COMPONENT = Symbol('HMR.Cold');\nconst SYMBOL_HOT_COMPONENT = Symbol('HMR.Hot');\nconst SYMBOL_HOT_ID = Symbol('HMR.ID');\nconst SOURCES = new WeakMap();\n/* MAIN */\n//TODO: This seems excessively complicated, maybe it can be simplified somewhat?\n//TODO: Make this work better when a nested component is added/removed too\nconst hmr = (accept, component) => {\n if (accept) { // Making the component hot\n /* CHECK */\n const cached = component[SYMBOL_HOT_COMPONENT];\n if (cached)\n return cached; // Already hot\n const isProvider = !isFunction(component) && ('Provider' in component);\n if (isProvider)\n return component; // Context/Directive providers are not hot-reloadable\n /* HELPERS */\n const createHotComponent = (path) => {\n return (...args) => {\n return useMemo(() => {\n const component = path.reduce((component, key) => component[key], SOURCES.get(id())?.() || source());\n const result = resolve(untrack(() => component(...args)));\n return result;\n });\n };\n };\n const createHotComponentDeep = (component, path) => {\n const cached = component[SYMBOL_HOT_COMPONENT];\n if (cached)\n return cached;\n const hot = component[SYMBOL_HOT_COMPONENT] = createHotComponent(path);\n for (const key in component) {\n const value = component[key];\n if (isFunction(value) && COMPONENT_RE.test(key)) { // A component\n hot[key] = createHotComponentDeep(value, [...path, key]);\n }\n else { // Something else\n hot[key] = value;\n }\n }\n return hot;\n };\n const onAccept = (module) => {\n const hot = module[component[SYMBOL_AS]] || module[component.name] || module.default;\n if (!hot)\n return console.error(`[hmr] Failed to handle update for \"${component.name}\" component:\\n\\n`, component);\n const cold = hot[SYMBOL_COLD_COMPONENT] || hot;\n hot[SYMBOL_HOT_ID]?.(id());\n SOURCES.get(id())?.(() => cold);\n };\n /* MAIN */\n const id = $({});\n const source = $(component);\n SOURCES.set(id(), source);\n const cold = component[SYMBOL_COLD_COMPONENT] || component;\n const hot = createHotComponentDeep(component, []);\n cold[SYMBOL_HOT_COMPONENT] = hot;\n hot[SYMBOL_COLD_COMPONENT] = cold;\n hot[SYMBOL_HOT_COMPONENT] = hot;\n hot[SYMBOL_HOT_ID] = id;\n accept(onAccept);\n /* RETURN */\n return hot;\n }\n else { // Returning the component as is\n return component;\n }\n};\n/* EXPORT */\nexport default hmr;\n","var n=function(t,s,r,e){var u;s[0]=0;for(var h=1;h<s.length;h++){var p=s[h++],a=s[h]?(s[0]|=p?1:2,r[s[h++]]):s[++h];3===p?e[0]=a:4===p?e[1]=Object.assign(e[1]||{},a):5===p?(e[1]=e[1]||{})[s[++h]]=a:6===p?e[1][s[++h]]+=a+\"\":p?(u=t.apply(a,n(t,a,r,[\"\",null])),e.push(u),a[0]?s[0]|=2:(s[h-2]=0,s[h]=u)):e.push(a)}return e},t=new Map;export default function(s){var r=t.get(this);return r||(r=new Map,t.set(this,r)),(r=n(this,r.get(s)||(r.set(s,r=function(n){for(var t,s,r=1,e=\"\",u=\"\",h=[0],p=function(n){1===r&&(n||(e=e.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,e):3===r&&(n||e)?(h.push(3,n,e),r=2):2===r&&\"...\"===e&&n?h.push(4,n,0):2===r&&e&&!n?h.push(5,0,!0,e):r>=5&&((e||!n&&5===r)&&(h.push(r,0,e,s),r=6),n&&(h.push(r,n,0,s),r=6)),e=\"\"},a=0;a<n.length;a++){a&&(1===r&&p(),p(a));for(var l=0;l<n[a].length;l++)t=n[a][l],1===r?\"<\"===t?(p(),h=[h],r=3):e+=t:4===r?\"--\"===e&&\">\"===t?(r=1,e=\"\"):e=t+e[0]:u?t===u?u=\"\":e+=t:'\"'===t||\"'\"===t?u=t:\">\"===t?(p(),r=1):r&&(\"=\"===t?(r=5,s=e,e=\"\"):\"/\"===t&&(r<5||\">\"===n[a][l+1])?(p(),3===r&&(h=h[0]),r=h,(h=h[0]).push(2,0,r),r=0):\" \"===t||\"\\t\"===t||\"\\n\"===t||\"\\r\"===t?(p(),r=2):e+=t),3===r&&\"!--\"===e&&(r=4,h=h[0])}return p(),h}(s)),r),arguments,[])).length>1?r:r[0]}\n","/* IMPORT */\nimport htm from 'htm';\nimport createElement from './create_element.js';\nimport { assign } from '../utils/lang.js';\n/* HELPERS */\nconst registry = {};\nconst h = (type, props, ...children) => createElement(registry[type] || type, props, ...children);\nconst register = (components) => void assign(registry, components);\n/* MAIN */\nconst html = assign(htm.bind(h), { register });\n/* EXPORT */\nexport default html;\n","/* IMPORT */\nimport useMemo from '../hooks/use_memo.js';\nimport useResolved from '../hooks/use_resolved.js';\nimport useResource from '../hooks/use_resource.js';\nimport creatElement from './create_element.js';\nimport resolve from './resolve.js';\nimport { once } from '../utils/lang.js';\n/* MAIN */\nconst lazy = (fetcher) => {\n const fetcherOnce = once(fetcher);\n const component = (props) => {\n const resource = useResource(fetcherOnce);\n return useMemo(() => {\n return useResolved(resource, ({ pending, error, value }) => {\n if (pending)\n return;\n if (error)\n throw error;\n const component = ('default' in value) ? value.default : value;\n return resolve(creatElement(component, props));\n });\n });\n };\n component.preload = () => {\n return new Promise((resolve, reject) => {\n const resource = useResource(fetcherOnce);\n useResolved(resource, ({ pending, error }) => {\n if (pending)\n return;\n if (error)\n return reject(error);\n return resolve();\n });\n });\n };\n return component;\n};\n/* EXPORT */\nexport default lazy;\n","/* IMPORT */\nimport { SYMBOL_SUSPENSE_COLLECTOR } from '../constants.js';\nimport useMemo from '../hooks/use_memo.js';\nimport $ from '../methods/S.js';\nimport { context, resolve } from '../oby.js';\n/* MAIN */\n// Keeping track of all Suspense instances below it, needed in some cases\nconst SuspenseCollector = {\n create: () => {\n const parent = SuspenseCollector.get();\n const suspenses = $([]);\n const active = useMemo(() => suspenses().some(suspense => suspense.active()));\n const register = (suspense) => { parent?.register(suspense); suspenses(prev => [...prev, suspense]); };\n const unregister = (suspense) => { parent?.unregister(suspense); suspenses(prev => prev.filter(other => other !== suspense)); };\n const data = { suspenses, active, register, unregister };\n return data;\n },\n get: () => {\n return context(SYMBOL_SUSPENSE_COLLECTOR);\n },\n wrap: (fn) => {\n const data = SuspenseCollector.create();\n return context({ [SYMBOL_SUSPENSE_COLLECTOR]: data }, () => {\n return resolve(() => fn(data));\n });\n }\n};\n/* EXPORT */\nexport default SuspenseCollector;\n","/* IMPORT */\nimport Portal from '../components/portal.js';\nimport SuspenseCollector from '../components/suspense.collector.js';\nimport useEffect from '../hooks/use_effect.js';\nimport useRoot from '../hooks/use_root.js';\nimport $$ from './SS.js';\n/* MAIN */\n//TODO: Implement this properly, without relying on JSDOM or stuff like that\nconst renderToString = (child) => {\n return new Promise(resolve => {\n useRoot(dispose => {\n $$(SuspenseCollector.wrap(suspenses => {\n const { portal } = Portal({ children: child }).metadata;\n useEffect(() => {\n if (suspenses.active())\n return;\n resolve(portal.innerHTML);\n dispose();\n }, { suspense: false });\n }));\n });\n });\n};\n/* EXPORT */\nexport default renderToString;\n","/* IMPORT */\nimport { SYMBOL_TEMPLATE_ACCESSOR } from '../constants.js';\nimport wrapElement from './wrap_element.js';\nimport { assign, indexOf, isFunction, isString } from '../utils/lang.js';\nimport { setAttribute, setChildReplacement, setClasses, setEvent, setHTML, setProperty, setRef, setStyles } from '../utils/setters.js';\n/* MAIN */\n//TODO: Avoid using \"Function\" and \"eval\", while still keeping similar performance, if possible\n//TODO: Support complex children in the template function\n//TODO: Support argumentless calls on props, like props.foo.bar()\nconst template = (fn) => {\n const safePropertyRe = /^[a-z0-9-_]+$/i;\n const checkValidProperty = (property) => {\n if (isString(property) && safePropertyRe.test(property))\n return true;\n throw new Error(`Invalid property, only alphanumeric properties are allowed inside templates, received: \"${property}\"`);\n };\n const makeAccessor = (actionsWithNodes) => {\n return new Proxy({}, {\n get(target, prop) {\n checkValidProperty(prop);\n const accessor = (node, method, key, targetNode) => {\n if (key)\n checkValidProperty(key);\n actionsWithNodes.push([node, method, prop, key, targetNode]);\n };\n const metadata = { [SYMBOL_TEMPLATE_ACCESSOR]: true };\n return assign(accessor, metadata);\n }\n });\n };\n const makeActionsWithNodesAndTemplate = () => {\n const actionsWithNodes = [];\n const accessor = makeAccessor(actionsWithNodes);\n const component = fn(accessor);\n if (isFunction(component)) {\n const root = component();\n if (root instanceof Element) {\n return { actionsWithNodes, root };\n }\n }\n throw new Error('Invalid template, it must return a function that returns an Element');\n };\n const makeActionsWithPaths = (actionsWithNodes) => {\n const actionsWithPaths = [];\n for (let i = 0, l = actionsWithNodes.length; i < l; i++) {\n const [node, method, prop, key, targetNode] = actionsWithNodes[i];\n const nodePath = makeNodePath(node);\n const targetNodePath = targetNode ? makeNodePath(targetNode) : undefined;\n actionsWithPaths.push([nodePath, method, prop, key, targetNodePath]);\n }\n return actionsWithPaths;\n };\n const makeNodePath = (() => {\n let prevNode = null;\n let prevPath;\n return (node) => {\n if (node === prevNode)\n return prevPath; // Cache hit\n const path = [];\n let child = node;\n let parent = child.parentNode;\n while (parent) {\n const index = !child.previousSibling ? 0 : !child.nextSibling ? -0 : indexOf(parent.childNodes, child);\n path.push(index);\n child = parent;\n parent = parent.parentNode;\n }\n prevNode = node;\n prevPath = path;\n return path;\n };\n })();\n const makeNodePathProperties = (path) => {\n const properties = ['root'];\n const parts = path.slice().reverse();\n for (let i = 0, l = parts.length; i < l; i++) {\n const part = parts[i];\n if (Object.is(0, part)) {\n properties.push('firstChild');\n }\n else if (Object.is(-0, part)) {\n properties.push('lastChild');\n }\n else {\n properties.push('firstChild');\n for (let nsi = 0; nsi < part; nsi++) {\n properties.push('nextSibling');\n }\n }\n }\n return properties;\n };\n const makeReviverPaths = (actionsWithPaths) => {\n const paths = [];\n for (let i = 0, l = actionsWithPaths.length; i < l; i++) {\n const action = actionsWithPaths[i];\n const nodePath = action[0];\n const targetNodePath = action[4];\n paths.push(nodePath);\n if (targetNodePath) {\n paths.push(targetNodePath);\n }\n }\n return paths;\n };\n const makeReviverVariablesData = (paths, properties) => {\n const data = new Array(paths.length);\n for (let i = 0, l = paths.length; i < l; i++) {\n data[i] = {\n path: paths[i],\n properties: properties[i]\n };\n }\n return data;\n };\n const makeReviverVariables = (actionsWithPaths) => {\n const paths = makeReviverPaths(actionsWithPaths);\n const properties = paths.map(makeNodePathProperties);\n const data = makeReviverVariablesData(paths, properties);\n const assignments = [];\n const map = new Map();\n let variableId = 0;\n while (true) {\n const datum = data.find(datum => datum.properties.length > 1);\n if (!datum)\n break;\n const [current, next] = datum.properties;\n const variable = `$${variableId++}`;\n const assignment = `const ${variable} = ${current}.${next};`;\n assignments.push(assignment);\n for (let i = 0, l = data.length; i < l; i++) {\n const datum = data[i];\n const [otherCurrent, otherNext] = datum.properties;\n if (otherCurrent !== current || otherNext !== next)\n continue;\n datum.properties[0] = variable;\n datum.properties.splice(1, 1);\n }\n }\n for (let i = 0, l = data.length; i < l; i++) {\n const datum = data[i];\n map.set(datum.path, datum.properties[0]);\n }\n return { assignments, map };\n };\n const makeReviverActions = (actionsWithPaths, variables) => {\n const actions = [];\n for (let i = 0, l = actionsWithPaths.length; i < l; i++) { //TODO: Write this more cleanly, with a single case\n const [nodePath, method, prop, key, targetNodePath] = actionsWithPaths[i];\n if (targetNodePath) {\n actions.push(`this.${method} ( props[\"${prop}\"], ${variables.get(targetNodePath)} );`);\n }\n else if (key) {\n actions.push(`this.${method} ( ${variables.get(nodePath)}, \"${key}\", props[\"${prop}\"] );`);\n }\n else {\n actions.push(`this.${method} ( ${variables.get(nodePath)}, props[\"${prop}\"] );`);\n }\n }\n return actions;\n };\n const makeReviver = (actionsWithPaths) => {\n const { assignments, map } = makeReviverVariables(actionsWithPaths);\n const actions = makeReviverActions(actionsWithPaths, map);\n const fn = new Function('root', 'props', `${assignments.join('')}${actions.join('')}return root;`);\n const apis = { setAttribute, setChildReplacement, setClasses, setEvent, setHTML, setProperty, setRef, setStyles };\n const reviver = fn.bind(apis);\n return reviver;\n };\n const makeComponent = () => {\n const { actionsWithNodes, root } = makeActionsWithNodesAndTemplate();\n const actionsWithPaths = makeActionsWithPaths(actionsWithNodes);\n const reviver = makeReviver(actionsWithPaths);\n return (props) => {\n const clone = root.cloneNode(true);\n return wrapElement(reviver.bind(undefined, clone, props));\n };\n };\n return makeComponent();\n};\n/* EXPORT */\nexport default template;\n","/* IMPORT */\nimport { CONTEXTS_DATA } from '../constants.js';\nimport resolve from './resolve.js';\nimport { context } from '../oby.js';\nfunction createContext(defaultValue) {\n const symbol = Symbol();\n const Provider = ({ value, children }) => {\n return context({ [symbol]: value }, () => {\n return resolve(children);\n });\n };\n const Context = { Provider };\n CONTEXTS_DATA.set(Context, { symbol, defaultValue });\n return Context;\n}\n/* EXPORT */\nexport default createContext;\n","/* IMPORT */\nimport createElement from './create_element.js';\nimport { isArray, isObject } from '../utils/lang.js';\nfunction h(component, props, ...children) {\n if (children.length || (isObject(props) && !isArray(props))) {\n return createElement(component, props, ...children); //TSC\n }\n else {\n return createElement(component, null, props); //TSC\n }\n}\n/* EXPORT */\nexport default h;\n","/* IMPORT */\nimport { CONTEXTS_DATA } from '../constants.js';\nimport { context } from '../oby.js';\nimport { isNil } from '../utils/lang.js';\nfunction useContext(Context) {\n const { symbol, defaultValue } = CONTEXTS_DATA.get(Context) || { symbol: Symbol() };\n const valueContext = context(symbol);\n const value = isNil(valueContext) ? defaultValue : valueContext;\n return value;\n}\n/* EXPORT */\nexport default useContext;\n","import { html, render, $, isObservable } from \"voby\";\n\ncustomElements.define(\n \"neptune-reactive-root\",\n class extends HTMLElement {\n constructor() {\n super();\n this.c = () => {};\n }\n\n connectedCallback() {\n this.style.display = \"contents\";\n this.dispose?.();\n this.dispose = render(html`${this.c()}`, this);\n }\n\n disconnectedCallback() {\n this.dispose?.();\n }\n },\n);\n\nexport function ReactiveRoot({ children }) {\n const root = html`<neptune-reactive-root></neptune-reactive-root>`();\n root.c = () => children;\n\n return root;\n}\n\nexport function Switch(props) {\n let checked = props.checked ?? false;\n\n if (!props.onClick) {\n checked = $(!!checked);\n props.onClick = () => checked((c) => !c);\n }\n\n return html`\n <div>\n <input class=\"neptune-switch-checkbox\" type=\"checkbox\" checked=${checked} />\n <span onClick=${props.onClick} class=\"neptune-switch\"></span>\n </div>\n `;\n}\n\nexport function TextInput({ placeholder = \"\", type = \"text\", value = \"\", onEnter = () => {} }) {\n if (!isObservable(value)) value = $(value);\n\n return html`\n <input\n class=\"neptune-text-input\"\n value=${value}\n onKeyup=${(e) => {\n if (e.key != \"Enter\") return;\n onEnter(e);\n }}\n onInput=${(e) => value(e.target.value)}\n placeholder=${placeholder}\n type=${type} />\n `;\n}\n\nexport function Button({ onClick = () => {}, children }) {\n return html` <button class=\"neptune-button\" onClick=${onClick}>${children}</button> `;\n}\n\nexport function ReloadIcon() {\n return html`<svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"22\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99\" />\n </svg>`;\n}\n\nexport function TrashIcon() {\n return html`<svg\n style=\"width: 22px;\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke-width=\"1.5\"\n stroke=\"currentColor\">\n <path\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n d=\"M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0\"></path>\n </svg>`;\n}\n","// src/shared.ts\nvar patchTypes = [\"a\", \"b\", \"i\"];\nvar patchedFunctions;\nvar resetPatches = () => patchedFunctions = /* @__PURE__ */ new WeakMap();\nresetPatches();\n\n// src/hook.ts\nfunction hook_default(patchedFunc, origFunc, funcArgs, ctxt) {\n const patch = patchedFunctions.get(patchedFunc);\n if (!patch) return origFunc(...funcArgs);\n for (const hook of patch.b.values()) {\n const maybefuncArgs = hook.call(ctxt, funcArgs);\n if (Array.isArray(maybefuncArgs)) funcArgs = maybefuncArgs;\n }\n let workingRetVal = [...patch.i.values()].reduce(\n (prev, current) => (...args) => current.call(ctxt, args, prev),\n origFunc\n )(...funcArgs);\n for (const hook of patch.a.values())\n workingRetVal = hook.call(ctxt, funcArgs, workingRetVal) ?? workingRetVal;\n for (const cleanup of patch.c) cleanup();\n patch.c = [];\n return workingRetVal;\n}\n\n// src/unpatch.ts\nfunction unpatch(patchRef, hookId, type) {\n const patch = patchRef.deref();\n if (!patch || !patch[type].delete(hookId)) return false;\n const funcParent = patch.p.deref();\n if (funcParent && patchTypes.every((t) => patch[t].size === 0)) {\n const funcName = patch.n;\n patchedFunctions.delete(funcParent[funcName]);\n if (!Reflect.defineProperty(funcParent, funcName, {\n value: patch.o,\n writable: true,\n configurable: true\n }))\n funcParent[funcName] = patch.o;\n }\n return true;\n}\n\n// src/getPatchFunc.ts\nvar getPatchFunc_default = (patchType) => (funcName, funcParent, callback, oneTime = false) => {\n let origFunc = funcParent[funcName];\n if (typeof origFunc !== \"function\")\n throw new Error(\n `${funcName} is not a function in ${funcParent.constructor.name}`\n );\n let funcPatch = patchedFunctions.get(origFunc);\n if (!funcPatch) {\n funcPatch = {\n n: funcName,\n o: origFunc,\n p: new WeakRef(funcParent),\n c: [],\n b: /* @__PURE__ */ new Map(),\n i: /* @__PURE__ */ new Map(),\n a: /* @__PURE__ */ new Map()\n };\n const replaceProxy = new Proxy(origFunc, {\n apply: (_, ctxt, args) => runHook(ctxt, args, false),\n construct: (_, args) => runHook(origFunc, args, true),\n // @ts-expect-error this is manual minification. if you don't like it, kick rocks.\n get: (target, prop, receiver, resolvedProp) => (resolvedProp = Reflect.get(target, prop, receiver), (typeof resolvedProp)[0] == \"f\") ? resolvedProp.bind(origFunc) : resolvedProp\n });\n const runHook = (ctxt, args, construct) => hook_default(\n replaceProxy,\n (...args2) => construct ? Reflect.construct(origFunc, args2, ctxt) : origFunc.apply(ctxt, args2),\n args,\n ctxt\n );\n patchedFunctions.set(replaceProxy, funcPatch);\n if (!Reflect.defineProperty(funcParent, funcName, {\n value: replaceProxy,\n configurable: true,\n writable: true\n }))\n funcParent[funcName] = replaceProxy;\n }\n const hookId = Symbol();\n const funcPatchRef = new WeakRef(funcPatch);\n const unpatchThisPatch = () => unpatch(funcPatchRef, hookId, patchType);\n if (oneTime) funcPatch.c.push(unpatchThisPatch);\n funcPatch[patchType].set(hookId, callback);\n return unpatchThisPatch;\n};\n\n// src/index.ts\nvar before = getPatchFunc_default(\"b\");\nvar instead = getPatchFunc_default(\"i\");\nvar after = getPatchFunc_default(\"a\");\nexport {\n after,\n before,\n instead,\n resetPatches as unpatchAll\n};\n","function promisifyRequest(request) {\n return new Promise((resolve, reject) => {\n // @ts-ignore - file size hacks\n request.oncomplete = request.onsuccess = () => resolve(request.result);\n // @ts-ignore - file size hacks\n request.onabort = request.onerror = () => reject(request.error);\n });\n}\nfunction createStore(dbName, storeName) {\n const request = indexedDB.open(dbName);\n request.onupgradeneeded = () => request.result.createObjectStore(storeName);\n const dbp = promisifyRequest(request);\n return (txMode, callback) => dbp.then((db) => callback(db.transaction(storeName, txMode).objectStore(storeName)));\n}\nlet defaultGetStoreFunc;\nfunction defaultGetStore() {\n if (!defaultGetStoreFunc) {\n defaultGetStoreFunc = createStore('keyval-store', 'keyval');\n }\n return defaultGetStoreFunc;\n}\n/**\n * Get a value by its key.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction get(key, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => promisifyRequest(store.get(key)));\n}\n/**\n * Set a value with a key.\n *\n * @param key\n * @param value\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction set(key, value, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.put(value, key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Set multiple values at once. This is faster than calling set() multiple times.\n * It's also atomic – if one of the pairs can't be added, none will be added.\n *\n * @param entries Array of entries, where each entry is an array of `[key, value]`.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction setMany(entries, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n entries.forEach((entry) => store.put(entry[1], entry[0]));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Get multiple values by their keys\n *\n * @param keys\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction getMany(keys, customStore = defaultGetStore()) {\n return customStore('readonly', (store) => Promise.all(keys.map((key) => promisifyRequest(store.get(key)))));\n}\n/**\n * Update a value. This lets you see the old value and update it as an atomic operation.\n *\n * @param key\n * @param updater A callback that takes the old value and returns a new value.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction update(key, updater, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => \n // Need to create the promise manually.\n // If I try to chain promises, the transaction closes in browsers\n // that use a promise polyfill (IE10/11).\n new Promise((resolve, reject) => {\n store.get(key).onsuccess = function () {\n try {\n store.put(updater(this.result), key);\n resolve(promisifyRequest(store.transaction));\n }\n catch (err) {\n reject(err);\n }\n };\n }));\n}\n/**\n * Delete a particular key from the store.\n *\n * @param key\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction del(key, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.delete(key);\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Delete multiple keys at once.\n *\n * @param keys List of keys to delete.\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction delMany(keys, customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n keys.forEach((key) => store.delete(key));\n return promisifyRequest(store.transaction);\n });\n}\n/**\n * Clear all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction clear(customStore = defaultGetStore()) {\n return customStore('readwrite', (store) => {\n store.clear();\n return promisifyRequest(store.transaction);\n });\n}\nfunction eachCursor(store, callback) {\n store.openCursor().onsuccess = function () {\n if (!this.result)\n return;\n callback(this.result);\n this.result.continue();\n };\n return promisifyRequest(store.transaction);\n}\n/**\n * Get all keys in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction keys(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAllKeys) {\n return promisifyRequest(store.getAllKeys());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.key)).then(() => items);\n });\n}\n/**\n * Get all values in the store.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction values(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n if (store.getAll) {\n return promisifyRequest(store.getAll());\n }\n const items = [];\n return eachCursor(store, (cursor) => items.push(cursor.value)).then(() => items);\n });\n}\n/**\n * Get all entries in the store. Each entry is an array of `[key, value]`.\n *\n * @param customStore Method to get a custom store. Use with caution (see the docs).\n */\nfunction entries(customStore = defaultGetStore()) {\n return customStore('readonly', (store) => {\n // Fast path for modern browsers\n // (although, hopefully we'll get a simpler path some day)\n if (store.getAll && store.getAllKeys) {\n return Promise.all([\n promisifyRequest(store.getAllKeys()),\n promisifyRequest(store.getAll()),\n ]).then(([keys, values]) => keys.map((key, i) => [key, values[i]]));\n }\n const items = [];\n return customStore('readonly', (store) => eachCursor(store, (cursor) => items.push([cursor.key, cursor.value])).then(() => items));\n });\n}\n\nexport { clear, createStore, del, delMany, entries, get, getMany, keys, promisifyRequest, set, setMany, update, values };\n","import { createStore as createIdbStore, set as idbSet, get as idbGet } from \"idb-keyval\";\nimport { store } from \"voby\";\n\nexport function appendStyle(style) {\n const styleTag = document.createElement(\"style\");\n styleTag.innerHTML = style;\n\n // Forgive me, for I have sinned.\n if (document.head) {\n document.head.appendChild(styleTag);\n } else {\n document.addEventListener(\"DOMContentLoaded\", () => {\n document.head.appendChild(styleTag);\n });\n }\n\n return (newStyle) => {\n if (newStyle == undefined) return document.head.removeChild(styleTag);\n\n styleTag.innerHTML = newStyle;\n };\n}\n\nexport const neptuneIdbStore = createIdbStore(\"__NEPTUNE_IDB_STORAGE\", \"__NEPTUNE_IDB_STORAGE\");\n\n// store.on appears to not work upon isArray being true. This makes me a very sad toonlink.\nexport function createPersistentObject(id, isArray = false) {\n // This is fucking moronic. But fine, we'll do this dumb shit just for you.\n const persistentObject = store(isArray ? { value: [] } : {});\n\n store.on(persistentObject, () => {\n idbSet(id, store.unwrap(persistentObject), neptuneIdbStore);\n });\n\n return [\n isArray ? persistentObject.value : persistentObject,\n new Promise((res) =>\n idbGet(id, neptuneIdbStore).then((obj) => {\n store.reconcile(persistentObject, obj ?? (isArray ? { value: [] } : {}));\n res();\n }),\n ),\n ];\n}\n\nexport const parseManifest = (manifest) => {\n try {\n if (typeof manifest == \"string\")\n manifest = JSON.parse(manifest.slice(manifest.indexOf(\"/*\") + 2, manifest.indexOf(\"*/\")));\n } catch {\n throw \"Failed to parse manifest!\";\n }\n\n if (![\"name\", \"author\", \"description\"].every((i) => typeof manifest[i] === \"string\"))\n throw \"Manifest doesn't contain required properties!\";\n\n return manifest;\n};\n\nexport const getMediaURLFromID = (id, path = \"/1280x1280.jpg\") =>\n \"https://resources.tidal.com/images/\" + id.split(\"-\").join(\"/\") + path;\n\nexport function convertHexToRGB(h) {\n let r = 0;\n let g = 0;\n let b = 0;\n\n // 3 digits\n if (h.length === 4) {\n r = Number(\"0x\" + h[1] + h[1]);\n g = Number(\"0x\" + h[2] + h[2]);\n b = Number(\"0x\" + h[3] + h[3]);\n\n // 6 digits\n } else if (h.length === 7) {\n r = Number(\"0x\" + h[1] + h[2]);\n g = Number(\"0x\" + h[3] + h[4]);\n b = Number(\"0x\" + h[5] + h[6]);\n }\n\n return `${r}, ${g}, ${b}`;\n}\n\n// this impl can be changed when things (probably) break again, lol\nexport function pushVirtualRoute(route) {\n neptune.actions.router.push({\n pathname: `/not-found`,\n search: `?neptuneRoute=${route}`,\n replace: true,\n });\n}\n","/* es-module-lexer 1.6.0 */\nexport var ImportType;!function(A){A[A.Static=1]=\"Static\",A[A.Dynamic=2]=\"Dynamic\",A[A.ImportMeta=3]=\"ImportMeta\",A[A.StaticSourcePhase=4]=\"StaticSourcePhase\",A[A.DynamicSourcePhase=5]=\"DynamicSourcePhase\"}(ImportType||(ImportType={}));const A=1===new Uint8Array(new Uint16Array([1]).buffer)[0];export function parse(E,g=\"@\"){if(!C)return init.then((()=>parse(E)));const I=E.length+1,w=(C.__heap_base.value||C.__heap_base)+4*I-C.memory.buffer.byteLength;w>0&&C.memory.grow(Math.ceil(w/65536));const K=C.sa(I-1);if((A?B:Q)(E,new Uint16Array(C.memory.buffer,K,I)),!C.parse())throw Object.assign(new Error(`Parse error ${g}:${E.slice(0,C.e()).split(\"\\n\").length}:${C.e()-E.lastIndexOf(\"\\n\",C.e()-1)}`),{idx:C.e()});const o=[],D=[];for(;C.ri();){const A=C.is(),Q=C.ie(),B=C.it(),g=C.ai(),I=C.id(),w=C.ss(),K=C.se();let D;C.ip()&&(D=k(E.slice(-1===I?A-1:A,-1===I?Q+1:Q))),o.push({n:D,t:B,s:A,e:Q,ss:w,se:K,d:I,a:g})}for(;C.re();){const A=C.es(),Q=C.ee(),B=C.els(),g=C.ele(),I=E.slice(A,Q),w=I[0],K=B<0?void 0:E.slice(B,g),o=K?K[0]:\"\";D.push({s:A,e:Q,ls:B,le:g,n:'\"'===w||\"'\"===w?k(I):I,ln:'\"'===o||\"'\"===o?k(K):K})}function k(A){try{return(0,eval)(A)}catch(A){}}return[o,D,!!C.f(),!!C.ms()]}function Q(A,Q){const B=A.length;let C=0;for(;C<B;){const B=A.charCodeAt(C);Q[C++]=(255&B)<<8|B>>>8}}function B(A,Q){const B=A.length;let C=0;for(;C<B;)Q[C]=A.charCodeAt(C++)}let C;const E=()=>{return A=\"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\",\"undefined\"!=typeof Buffer?Buffer.from(A,\"base64\"):Uint8Array.from(atob(A),(A=>A.charCodeAt(0)));var A};export const init=WebAssembly.compile(E()).then(WebAssembly.instantiate).then((({exports:A})=>{C=A}));export const initSync=()=>{if(C)return;const A=new WebAssembly.Module(E());C=new WebAssembly.Instance(A).exports};","import { parse } from \"es-module-lexer\";\n\n// This needs support for the following to work \"fully\":\n// `export * from \"module\"`\n// For now, it's fine.\n\nasync function betterParse(src) {\n let [imports] = await parse(src);\n let exports = [];\n\n imports = imports.filter((imp) => {\n imp.declaration = src\n .slice(imp.ss, imp.se)\n .replace(/\\/\\*[\\w\\W]*?\\*\\//g, \"\"); // this removes the comments from the import\n imp.importClause = imp.declaration\n .slice(6, imp.declaration.lastIndexOf(\"from\"))\n .trim();\n\n if (imp.importClause[0] == \"(\") imp.isDynamic = true;\n if (imp.importClause[0] == '\"') imp.isSideEffectful = true;\n\n const namedImportOpener = imp.importClause.indexOf(\"{\");\n const namedImportCloser = imp.importClause.indexOf(\"}\") + 1;\n\n imp.namedImport = imp.importClause.slice(\n namedImportOpener,\n namedImportCloser\n );\n\n if (imp.namedImport != \"\") {\n imp.importClause =\n imp.importClause.slice(0, namedImportOpener) +\n imp.importClause.slice(namedImportCloser);\n\n imp.namedImports = imp.namedImport\n .slice(1, -1)\n .trim()\n .split(\",\")\n .filter((i) => i.trim() != \"\")\n .map((i) => {\n const split = i.trim().split(\" as \");\n\n if (!split[1]) split[1] = split[0];\n return split;\n })\n .reduce((obj, c) => {\n obj[c[0]] = c[1];\n\n return obj;\n }, {});\n }\n\n const commaIndex = imp.importClause.indexOf(\",\");\n\n if (imp.namedImport == \"\") {\n const namespace =\n commaIndex == -1\n ? imp.importClause\n : imp.importClause.slice(commaIndex + 1).trim();\n\n if (namespace[0] == \"*\")\n imp.namespace = namespace.slice(namespace.indexOf(\"as\") + 2).trim();\n }\n\n // If there's no named imports and there's no namespaces, the default export *is* the importClause\n if (imp.namedImport == \"\" && !imp.namespace) {\n imp.default = imp.importClause;\n } else if (commaIndex != -1) {\n // Otherwise, the default export *must* come before the comma\n imp.default = imp.importClause.slice(0, commaIndex);\n }\n\n if (imp.declaration.slice(0, 6) == \"import\") return true;\n\n imp.isExport = true;\n exports.push(imp);\n });\n\n return [imports, exports];\n}\n\nconst destructurifyImp = (obj) =>\n Object.entries(obj)\n .map(([k, v]) => `${k}:${v}`)\n .join();\n\nconst removeFromString = (string, start, end) =>\n string.slice(0, start) + string.slice(end);\n\nconst insertIntoString = (string, start, newString) =>\n string.slice(0, start) + newString + string.slice(start);\n\nfunction generateRandomString(length) {\n const characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n let result = \"\";\n\n for (let i = 0; i < length; i++) {\n const randomIndex = Math.floor(Math.random() * characters.length);\n result += characters.charAt(randomIndex);\n }\n\n return result;\n}\n\nexport default async function quartz(\n code,\n config = { plugins: [] },\n moduleId = false\n) {\n let generatedImports = \"\";\n\n for (const plugin of config.plugins)\n if (plugin.transform) code = plugin.transform({ code });\n\n const [imports, exports] = await betterParse(code);\n\n // I don't want to have to parse any of this shit more than once.\n let offset = 0;\n\n for (const exp of exports) {\n imports.push(exp);\n\n const startIndex = exp.ss + offset;\n const endIndex = exp.se + offset;\n\n const namespace = exp.namespace;\n if (namespace != undefined) {\n // Because of how `export * from \"module\"` works, we can't dynamically export things.\n // My proposal is that we have a $$$QUARTZ_DYNAMIC_EXPORTS object passed through,\n // we add a randomly generated namespace, and then we convert the export into reassigning $$$QUARTZ_DYNAMIC_EXPORTS.\n // We then spread the exports and the dynamic exports together and return that as the exports.\n\n if (namespace != \"\") {\n code = removeFromString(code, startIndex, endIndex);\n const newExport = `export { ${namespace} };`;\n code = insertIntoString(code, startIndex, newExport);\n\n offset -= endIndex - startIndex + newExport.length;\n }\n\n continue;\n }\n\n const fromIndex =\n startIndex + code.slice(startIndex, endIndex).lastIndexOf(\"from\");\n code = removeFromString(code, fromIndex, endIndex);\n offset -= endIndex - fromIndex;\n }\n\n let quartzStore = {\n async dynamicResolver(path) {\n for (const plugin of config.plugins) {\n if (!plugin.dynamicResolve) continue;\n\n const res = await plugin.dynamicResolve({\n config,\n name: path,\n moduleId,\n });\n\n if (res) return res;\n }\n },\n };\n\n for (const imp of imports) {\n if (imp.isDynamic) {\n // remove import line\n code = removeFromString(code, imp.ss + offset, imp.ss + 6 + offset);\n code =\n code.slice(0, imp.ss + offset) +\n \"$$$QUARTZ_DYNAMIC_RESOLVE\" +\n code.slice(imp.ss + offset);\n offset += 19; // changing to $$$QUARTZ_DYNAMIC_RESOLVE adds 19 chars\n\n continue;\n }\n\n if (!imp.isExport) {\n code = removeFromString(code, imp.ss + offset, imp.se + offset);\n\n offset -= imp.se + offset - (imp.ss + offset);\n }\n\n let id = (Math.random() + 1).toString(36).substring(7);\n\n let store = (quartzStore[id] = {});\n let accessor = `$$$QUARTZ_STORE[\"${id}\"]`;\n\n for (const plugin of config.plugins) {\n if (!plugin.resolve) continue;\n\n const generatedImport = await plugin.resolve({\n config,\n accessor,\n store,\n name: imp.n,\n moduleId,\n });\n\n if (!generatedImport) continue;\n\n const addImport = (name) =>\n (generatedImports += `const ${name} = ${generatedImport};`);\n\n if (imp.isSideEffectful) {\n generatedImports += `${generatedImport};`;\n } else {\n if (imp.default) addImport(`{default:${imp.default}}`);\n if (imp.namespace) addImport(imp.namespace);\n if (imp.namedImports) {\n addImport(\"{\" + destructurifyImp(imp.namedImports) + \"}\");\n }\n }\n\n break;\n }\n }\n\n // This appears to be the only way to share things between realms.\n const globalStoreID = \"QZ_\" + generateRandomString(7);\n globalThis[globalStoreID] = quartzStore;\n\n const mod = await import(\n `data:text/javascript;charset=UTF-8,${encodeURIComponent(\n `const $$$QUARTZ_STORE = globalThis[\"${globalStoreID}\"];const $$$QUARTZ_DYNAMIC_RESOLVE = $$$QUARTZ_STORE.dynamicResolver;` +\n generatedImports +\n code\n )}`\n );\n\n delete globalThis[globalStoreID];\n\n return mod;\n}","export default ({baseUrl = \"https://esm.sh/\", existingUrls = true} = {}) => {\n return {\n resolve({ name }) {\n if (name.startsWith(\".\") || name.startsWith(\"/\")) return; // local url\n\n // npm package\n if (!/^\\w+:/.test(name) && baseUrl) {\n name = baseUrl + name;\n }\n else if (!existingUrls) return;\n\n return `await import(\"${name}\")`;\n },\n };\n};\n","export const interceptors = {};\n\nexport default function intercept(types, cb, once = false) {\n if (typeof types == \"string\") types = [types];\n\n const uninterceptors = [];\n const unintercept = () => uninterceptors.forEach((u) => u());\n\n for (let type of types) {\n if (!interceptors[type]) interceptors[type] = [];\n\n const handleIntercept = once\n ? (...args) => {\n unintercept();\n\n return cb(...args);\n }\n : cb;\n interceptors[type].push(handleIntercept);\n\n uninterceptors.push(() =>\n interceptors[type].splice(interceptors[type].indexOf(handleIntercept), 1),\n );\n }\n\n return unintercept;\n}\n","import { store } from \"voby\";\nimport { createPersistentObject, neptuneIdbStore, parseManifest } from \"./utils.js\";\nimport { del } from \"idb-keyval\";\nimport quartz from \"@uwu/quartz\";\nimport urlImport from \"quartz-plugin-url-import\";\nimport { actions } from \"../handleExfiltrations.js\";\nimport intercept from \"./intercept.js\";\n\nexport const [pluginStore, pluginStoreReady] = createPersistentObject(\"NEW_NEPTUNE_PLUGINS\", true);\nexport const enabled = store({});\n\nexport const getPluginById = (id) => pluginStore.find((p) => p.id == id);\n\nexport async function disablePlugin(id) {\n getPluginById(id).enabled = false;\n const onUnload = enabled?.[id]?.onUnload;\n\n delete enabled[id];\n\n try {\n await onUnload?.();\n } catch (e) {\n console.error(\"Failed to completely clean up neptune plugin!\\n\", e);\n }\n}\n\nexport function togglePlugin(id) {\n return getPluginById(id).enabled ? disablePlugin(id) : enablePlugin(id);\n}\n\nexport async function enablePlugin(id) {\n const plugin = getPluginById(id);\n plugin.enabled = true;\n\n await runPlugin(plugin);\n}\n\nasync function runPlugin(plugin) {\n try {\n const [persistentStorage, persistentStorageReady] = createPersistentObject(\n plugin.id + \"_PERSISTENT_STORAGE\",\n );\n\n await persistentStorageReady;\n\n const unloadables = [];\n const pluginData = {\n id: plugin.id,\n manifest: plugin.manifest,\n storage: persistentStorage,\n addUnloadable(callback) {\n unloadables.push(callback);\n },\n };\n\n const { onUnload, Settings } = await quartz(plugin.code, {\n plugins: [\n {\n resolve({ name }) {\n if (!name.startsWith(\"@neptune\")) return;\n\n return `window${name\n .slice(1)\n .split(\"/\")\n .map((i) => `[${JSON.stringify(i)}]`)\n .join(\"\")}`;\n },\n },\n {\n resolve({ name, store, accessor }) {\n if (!name.startsWith(\"@plugin\")) return;\n\n if (!store.plugin) store.plugin = { ...pluginData, default: pluginData };\n\n return `${accessor}${name\n .slice(1)\n .split(\"/\")\n .map((i) => `[${JSON.stringify(i)}]`)\n .join(\"\")}`;\n },\n },\n urlImport(),\n ],\n });\n\n enabled[plugin.id] = {\n onUnload: () => {\n onUnload?.();\n for (const ul of unloadables) {\n ul();\n }\n },\n };\n if (Settings) enabled[plugin.id].Settings = Settings;\n } catch (e) {\n await disablePlugin(plugin.id);\n\n console.error(\"Failed to load neptune plugin!\\n\", e);\n }\n}\n\nexport async function installPlugin(id, code, manifest, enabled = true) {\n const plugin = {\n id,\n code,\n manifest,\n enabled,\n };\n\n pluginStore.unshift(plugin);\n\n if (enabled) await runPlugin(plugin);\n}\n\nexport async function removePlugin(id) {\n try {\n if (enabled[id]) await enabled[id].onUnload();\n } catch {\n console.log(\"[neptune] failed to unload plugin upon removal\");\n }\n\n pluginStore.splice(\n pluginStore.findIndex((p) => p.id == id),\n 1,\n );\n\n await del(id + \"_PERSISTENT_STORAGE\", neptuneIdbStore);\n}\n\n// This handles caching too!\nexport async function fetchPluginFromURL(url) {\n let parsedURL = url;\n\n if (!parsedURL.endsWith(\"/\")) parsedURL += \"/\";\n\n const manifest = parseManifest(\n await (await fetch(parsedURL + \"manifest.json\", { cache: \"no-store\" })).json(),\n );\n\n const plugin = getPluginById(url);\n let code = plugin?.code;\n\n if (plugin?.manifest?.hash != manifest.hash)\n code = await (\n await fetch(parsedURL + (manifest.main ?? \"index.js\"), { cache: \"no-store\" })\n ).text();\n\n return [\n code,\n {\n name: manifest.name,\n author: manifest.author,\n description: manifest.description,\n hash: manifest.hash,\n },\n ];\n}\n\nexport async function reloadPlugin(plugin) {\n let pluginWasEnabled = plugin.enabled;\n\n if (pluginWasEnabled) disablePlugin(plugin.id);\n\n if (plugin.hasOwnProperty(\"update\")) {\n try {\n const [code, manifest] = await fetchPluginFromURL(plugin.id);\n\n plugin.manifest = manifest;\n plugin.code = code;\n } catch {}\n }\n\n if (pluginWasEnabled) enablePlugin(plugin.id);\n}\n\nexport async function installPluginFromURL(url, enabled = true) {\n if (getPluginById(url))\n return actions.message.messageError({ message: \"Plugin is already imported!\" });\n\n try {\n const [code, manifest] = await fetchPluginFromURL(url);\n\n const plugin = {\n id: url,\n code,\n manifest,\n enabled,\n update: true,\n };\n\n pluginStore.unshift(plugin);\n\n if (enabled) runPlugin(plugin);\n } catch {\n actions.message.messageError({ message: \"Failed to import neptune plugin!\" });\n }\n}\n\n// Cleanup plugins on reload\naddEventListener(\"beforeunload\", () => {\n Object.values(enabled).forEach(p => p.onUnload());\n});\n\n// Load as early as we possibly can.\nintercept(\n \"session/RECEIVED_COUNTRY_CODE\",\n async () => {\n // We don't attempt to load plugins if CSP exists because loading every plugin will fail and automatically disable the plugin.\n if (document.querySelector(`[http-equiv=\"Content-Security-Policy\"]`) || window.require) return;\n\n for (const plugin of pluginStore) {\n if (plugin.update) {\n try {\n const [code, manifest] = await fetchPluginFromURL(plugin.id);\n\n plugin.manifest = manifest;\n plugin.code = code;\n } catch {\n console.log(\"[neptune] failed to update plugin\");\n }\n }\n\n // We do not currently account for plugin updates, but this will be handled once\n // remote plugin installation is handled.\n if (plugin.enabled) runPlugin(plugin);\n }\n },\n true,\n);\n","import { store } from \"voby\";\nimport { appendStyle, createPersistentObject, parseManifest } from \"./utils.js\";\n\nexport const [themesStore, themesStoreReady] = createPersistentObject(\"NEPTUNE_THEMES\", true);\n\nlet updateThemeStyle = appendStyle(\"\");\n\n// Not sure why this didn't work previously?\nstore.on(themesStore, reloadThemes)\n\nfunction reloadThemes() {\n updateThemeStyle(themesStore.filter(t => t.enabled).map((t) => `@import url(\"${t.url}\")`).join(\";\"));\n}\n\nexport function removeTheme(url) {\n themesStore.splice(\n themesStore.findIndex((t) => t.url == url),\n 1,\n );\n}\n\nexport function toggleTheme(url) {\n const theme = themesStore.find((t) => t.url == url);\n theme.enabled = !theme.enabled;\n}\n\nexport async function importTheme(url, enabled = true) {\n let manifest;\n let text;\n\n try {\n\ttext = await (await fetch(url)).text();\n } catch {\n\tthrow \"Failed to fetch theme!\";\n }\n\n try {\n manifest = parseManifest(text);\n } catch (e) {\n manifest = {\n\t\tname: url.split(\"/\").pop(),\n\t\tauthor: \"Unknown\",\n\t\tdescription: \"No description provided.\",\n\t}\n }\n\n themesStore.unshift({\n name: manifest.name,\n author: manifest.author,\n description: manifest.description,\n enabled,\n url,\n });\n}\n","// code source: https://github.com/KaiHax/kaihax/blob/master/src/patcher.ts\n\nconst observations = new Set();\nconst observer = new MutationObserver((records) => {\n // de-dupe to be sure\n const changedElems = new Set();\n\n for (const record of records) {\n changedElems.add(record.target);\n\n for (const e of record.removedNodes)\n if (e instanceof HTMLElement || e instanceof SVGElement) changedElems.add(e);\n }\n\n for (const elem of changedElems)\n for (const obs of observations) {\n if (elem.matches(obs[0])) obs[1](elem);\n\n elem\n .querySelectorAll(obs[0])\n .forEach(\n (e) => !obs[2] && (e instanceof HTMLElement || e instanceof SVGElement) && obs[1](e),\n );\n }\n});\n\nconst startObserving = () =>\n observer.observe(document.body, {\n subtree: true,\n childList: true,\n attributes: true,\n });\n\nconst stopObserving = () => observer.disconnect();\n\nexport function observe(sel, cb) {\n if (observations.size === 0) startObserving();\n const entry = [sel, cb, false];\n observations.add(entry);\n\n const unobs = () => {\n observations.delete(entry);\n if (observations.size === 0) stopObserving();\n };\n\n unobs.now = () => {\n entry[2] = true;\n unobs();\n };\n\n return unobs;\n}\nexport function unobserve() {\n observations.clear();\n stopObserving();\n}\n","import { ReactiveRoot } from \"../ui/components.js\";\nimport intercept from \"./intercept.js\";\nimport { observe } from \"./observe.js\";\n\nconst pageNotFoundSelector = `[class^=\"_pageNotFoundError_\"]`;\n\nconst replacePage = (page, component) => {\n page.style.display = \"none\";\n\n const neptunePage = document.createElement(\"div\");\n neptunePage.className = \"__NEPTUNE_PAGE\";\n\n page.insertAdjacentElement(\"afterend\", neptunePage);\n neptunePage.appendChild(ReactiveRoot({ children: component }));\n};\n\nintercept(\"router/NAVIGATED\", () => {\n for (const page of document.getElementsByClassName(\"__NEPTUNE_PAGE\"))\n page.parentElement.removeChild(page);\n});\n\nexport default function registerRoute(path, component) {\n return intercept(\"router/NAVIGATED\", ([payload]) => {\n if (payload.search != `?neptuneRoute=${path}`) return;\n\n const pageNotFound = document.querySelector(pageNotFoundSelector);\n if (pageNotFound) return replacePage(pageNotFound, component);\n\n const unob = observe(pageNotFoundSelector, (page) => {\n unob.now();\n replacePage(page, component);\n });\n });\n}\n","import registerRoute from \"./registerRoute.js\";\nimport intercept from \"./intercept.js\";\nimport { actions } from \"../handleExfiltrations.js\";\nfunction makeInactive(tab) {\n tab.classList.remove(Array.from(tab.classList).find((c) => c.startsWith(\"_activeItem_\")));\n}\n\nconst getTabs = () => document.querySelector(`.sidebarWrapper section[class^=\"_section_\"]`);\n\n// Automatically set tab to unchecked.\nintercept(\"ROUTER_LOCATION_CHANGED\", () => {\n for (const tab of document.getElementsByClassName(\"__NEPTUNE_TAB\")) tab.style.color = \"\";\n});\n\n/*\n This entire function abuses their router's 404 handling to insert our own tabs.\n Because 404s count towards router history, our tabs function perfectly fine even when using the back arrows!\n*/\nexport default function registerTab(name, path, component = () => {}) {\n const unobservers = [];\n\n const addTab = (tabs) => {\n const tab = tabs.children[0].cloneNode(true);\n makeInactive(tab);\n\n tab.querySelector(`[class^=\"_responsiveText_\"]`).textContent = name;\n\n tab.classList.add(\"__NEPTUNE_TAB\");\n\n tab.addEventListener(\"click\", (e) => {\n e.preventDefault();\n\n actions.router.push({\n pathname: `/neptune/${path}`,\n replace: true,\n });\n });\n\n const removeRouteHandler = registerRoute(path, () => {\n tab.style.color = \"var(--wave-color-solid-accent-fill)\";\n\n return component;\n });\n\n tabs.appendChild(tab);\n unobservers.push(removeRouteHandler, () => tabs.removeChild(tab));\n };\n\n const tabs = getTabs();\n\n if (!tabs) {\n // Instead of DOM observing we just intercept the first action that gets called after the UI shows. Maybe we can DOM observe later?\n unobservers.push(\n intercept(\n \"favorites/SET_FAVORITE_IDS\",\n () => {\n addTab(getTabs());\n },\n true,\n ),\n );\n } else addTab(tabs);\n\n return () => unobservers.forEach((u) => u());\n}\n","import intercept from \"./intercept.js\";\nimport { observe } from \"./observe.js\";\n\nexport default function hookContextMenu(menuType, name, handler) {\n return intercept(\"contextMenu/OPEN\", ([payload]) => {\n // TODO: Change this to a switch statement.\n\n if (payload?.type != menuType) return;\n\n const unob = observe(`[data-type=\"contextmenu-item\"]`, (elem) => {\n unob.now();\n\n const contextMenuItem = elem.cloneNode(true);\n const contextMenuLabel = contextMenuItem.querySelector(`[class^=\"_actionTextInner_\"]`);\n contextMenuLabel.innerText = name;\n\n const parentClasses = contextMenuLabel.parentElement.classList;\n\n contextMenuItem.innerHTML = \"\";\n\n const contextMenuWrapper = document.createElement(\"div\");\n contextMenuWrapper.setAttribute(\"tabindex\", \"0\");\n contextMenuWrapper.classList.add(...parentClasses);\n contextMenuWrapper.appendChild(contextMenuLabel);\n\n contextMenuItem.addEventListener(\"keyup\", (event) => {\n if (event.keyCode != 13) return;\n\n event.target.click();\n });\n\n contextMenuItem.appendChild(contextMenuWrapper);\n\n contextMenuItem.addEventListener(\"click\", (event) => {\n handler(event);\n });\n\n elem.parentElement.appendChild(contextMenuItem);\n });\n });\n}\n","import { ReactiveRoot } from \"../ui/components.js\";\nimport { actions } from \"../handleExfiltrations.js\";\nimport { observe } from \"./observe.js\";\n\nexport default function showModal(name, component) {\n actions.modal.showReleaseNotes();\n const unob = observe(`[class^=\"_modalHeader_\"]`, (header) => {\n unob.now();\n\n header.getElementsByTagName(\"h4\")[0].innerText = name;\n\n header.nextSibling.replaceChildren(\n ReactiveRoot({\n children: component,\n }),\n );\n });\n}\n","import * as voby from \"voby\";\nimport * as patcher from \"spitroast\";\nimport * as utils from \"./api/utils.js\";\nimport * as plugins from \"./api/plugins.js\";\nimport * as themes from \"./api/themes.js\";\nimport * as components from \"./ui/components.js\";\nimport intercept from \"./api/intercept.js\";\nimport { observe } from \"./api/observe.js\";\nimport registerTab from \"./api/registerTab.js\";\nimport registerRoute from \"./api/registerRoute.js\";\nimport hookContextMenu from \"./api/hookContextMenu.js\";\nimport showModal from \"./api/showModal.js\";\n// TODO: AWFUL VOMIT VOMIT KILL MURDER DIE KILL KILL DIE MURDER VOMIT\nimport { store } from \"./handleExfiltrations.js\";\n\nlet currentMediaItem = {};\n\ntry {\n const vibrantColorStyle = utils.appendStyle(\"\");\n\n intercept(\"playbackControls/MEDIA_PRODUCT_TRANSITION\", ([{ mediaProduct }]) => {\n Object.assign(\n currentMediaItem,\n store.getState().content.mediaItems[mediaProduct.productId],\n );\n const vibrantColor = currentMediaItem?.item?.album?.vibrantColor;\n\n if (!vibrantColor) return;\n\n vibrantColorStyle(`:root{--track-vibrant-color:${vibrantColor};--track-vibrant-color-rgb:${utils.convertHexToRGB(vibrantColor)}}`);\n });\n} catch {}\n\nexport default {\n patcher,\n utils,\n intercept,\n observe,\n registerTab,\n registerRoute,\n hookContextMenu,\n showModal,\n voby,\n plugins,\n themes,\n components,\n currentMediaItem,\n};\n","import windowObject from \"./windowObject.js\";\nimport * as patcher from \"spitroast\";\nimport { interceptors } from \"./api/intercept.js\";\nimport loadStyles from \"./styles.js\";\nimport quartz from \"@uwu/quartz\";\n\n// abandon all hope, ye who enter here\n\n// Main store exfiltration\nexport let store;\n\n// Built action handlers\nexport const actions = {};\nwindowObject.actions = actions;\n\n// Interceptors\nwindowObject.interceptors = interceptors;\n\n// Module cache\nconst moduleCache = {};\nwindowObject.moduleCache = moduleCache;\n\nfunction resolvePath(basePath, relativePath) {\n // If the relative path starts with '/', it's already an absolute path\n if (relativePath.startsWith(\"/\")) {\n return relativePath; // Return it as is\n }\n\n // Remove the base name (last part of the base path) to get the base directory\n const baseDir = basePath.replace(/\\/[^/]+$/, \"\");\n\n // Resolve the relative path against the base directory\n return resolvePathFromBase(baseDir, relativePath);\n}\n\nfunction resolvePathFromBase(baseDir, relativePath) {\n const stack = [];\n\n // Split the base directory into parts\n const baseParts = baseDir.split(\"/\").filter(Boolean);\n stack.push(...baseParts);\n\n // Split the relative path into parts\n const parts = relativePath.split(\"/\");\n\n for (let part of parts) {\n if (part === \"\" || part === \".\") {\n // Ignore empty or current directory ('.')\n continue;\n } else if (part === \"..\") {\n // Go up one directory if possible\n if (stack.length > 0) {\n stack.pop();\n }\n } else {\n // Otherwise, it's a valid directory/file, add it to the stack\n stack.push(part);\n }\n }\n\n // Join the parts to form the resolved path, ensuring it starts with '/'\n return \"/\" + stack.join(\"/\");\n}\n\n// promises bubble\nconst fetchScript = async (path) => (await fetch(path)).text();\n\nconst handleResolution = async ({ name, moduleId, config }) => {\n const path = resolvePath(moduleId, name);\n if (moduleCache[path]) return moduleCache[path];\n\n const data = await fetchScript(path);\n\n moduleCache[path] = await quartz(data, config, path);\n return moduleCache[path];\n};\n\nfunction findStoreFunctionName(bundleCode) {\n const errorMessageIndex = bundleCode.indexOf('Error(\"No global store set\")');\n\n if (errorMessageIndex === -1) {\n return null;\n }\n\n for (let charIdx = errorMessageIndex - 1; charIdx > 0; charIdx--) {\n if (bundleCode[charIdx] + bundleCode[charIdx + 1] != \"()\") continue;\n\n let strBuf = [];\n for (let nameIdx = charIdx - 1; nameIdx > 0; nameIdx--) {\n const char = bundleCode[nameIdx];\n\n if (char == \" \") return strBuf.reverse().join(\"\");\n strBuf.push(char);\n }\n }\n\n return null;\n}\n\nfunction findPrepareActionNameAndIdx(bundleCode) {\n const searchIdx = bundleCode.indexOf(`.payload,...\"meta\"in `);\n\n if (searchIdx === -1) {\n return null;\n }\n\n const sliced = bundleCode.slice(0, searchIdx);\n const funcIndex = sliced.lastIndexOf(\"{function\");\n\n let strBuf = [];\n for (let nameIdx = bundleCode.slice(0, funcIndex).lastIndexOf(\"(\") - 1; nameIdx > 0; nameIdx--) {\n const char = bundleCode[nameIdx];\n\n if (char == \" \")\n return {\n name: strBuf.reverse().join(\"\"),\n idx: nameIdx + 1,\n };\n\n strBuf.push(char);\n }\n}\n\nsetTimeout(async () => {\n for (const script of document.querySelectorAll(`script[type=\"neptune/quartz\"]`)) {\n const scriptPath = new URL(script.src).pathname;\n const scriptContent = await fetchScript(scriptPath);\n\n // For those reading this code:\n // 1. I'm sorry.\n // 2. quartz is a runtime-based ESM import transformation tool.\n // The reason I'm using it here is because I can have it take over the browser's native ESM import\n // functionality so I can hook the JS that runs on the page to do various things.\n // I have noticed that it seems slower than native browser imports, but it was the easiest solution for me personally.\n moduleCache[scriptPath] = await quartz(\n scriptContent,\n {\n plugins: [\n {\n dynamicResolve: handleResolution,\n async resolve({ name, moduleId, config, accessor, store }) {\n const exports = await handleResolution({ name, moduleId, config });\n\n store.exports = exports;\n\n return `${accessor}.exports`;\n },\n\n transform({ code }) {\n const getStoreFuncName = findStoreFunctionName(code);\n\n if (getStoreFuncName) code += `; export { ${getStoreFuncName} as hijackedGetStore };`;\n const actionData = findPrepareActionNameAndIdx(code);\n\n if (actionData) {\n const { name: prepareActionName, idx: prepareActionIdx } = actionData;\n\n // rename function declaration\n code =\n code.slice(0, prepareActionIdx) + \"$$$NEPTUNE_\" + code.slice(prepareActionIdx);\n\n code =\n code.slice(0, prepareActionIdx - 9) +\n `\nconst $$$NEPTUNE_PATCHED_TEMPOBJ = { patchedFunc: $$$NEPTUNE_${prepareActionName} };\nneptune.patcher.after(\"patchedFunc\", $$$NEPTUNE_PATCHED_TEMPOBJ, ([type], resp) => {\n if (!neptune.interceptors[type]) neptune.interceptors[type] = [];\n const [parent, child] = type\n .split(\"/\")\n .map((n) =>\n n.toUpperCase() == n\n ? n\n .toLowerCase()\n .replace(/_([a-z])/g, (_, i) => i.toUpperCase())\n : n,\n );\n\n const builtAction = (...args) => {\n const act = resp(...args);\n\n if (!(act.__proto__.toString() == \"[object Promise]\"))\n return neptune.store.dispatch(act);\n\n return new Promise(async (res, rej) => {\n try {\n res(neptune.store.dispatch(await act));\n } catch (e) {\n rej(e);\n }\n });\n };\n\n if (child) {\n if (!neptune.actions[parent]) neptune.actions[parent] = {};\n\n neptune.actions[parent][child] = builtAction;\n } else {\n neptune.actions[parent] = builtAction;\n }\n\n return new Proxy(resp, {\n apply(orig, ctxt, args) {\n let shouldDispatch = true;\n\n for (let interceptor of neptune.interceptors[type]) {\n try {\n const resp = interceptor(args);\n\n if (resp === true) shouldDispatch = false;\n } catch (e) {\n console.error(\"Failed to run interceptor!\\\\n\", e);\n }\n }\n\n return shouldDispatch\n ? orig.apply(ctxt, args)\n : { type: \"NOOP\" };\n },\n });\n});\nconst ${prepareActionName} = $$$NEPTUNE_PATCHED_TEMPOBJ.patchedFunc;\n`.trim() +\n code.slice(prepareActionIdx - 9);\n }\n\n return code;\n },\n },\n ],\n },\n scriptPath,\n );\n\n for (const module of Object.values(moduleCache)) {\n const { hijackedGetStore } = module;\n\n if (!hijackedGetStore) continue;\n\n store = hijackedGetStore();\n windowObject.store = store;\n }\n\n loadStyles();\n }\n}, 0);\n","import { Switch, TextInput, ReloadIcon, TrashIcon } from \"./components.js\";\nimport { actions } from \"../handleExfiltrations.js\";\nimport {\n pluginStore,\n togglePlugin,\n removePlugin,\n installPluginFromURL,\n installPlugin,\n reloadPlugin,\n enabled as enabledPlugins,\n} from \"../api/plugins.js\";\nimport showModal from \"../api/showModal.js\";\nimport { parseManifest } from \"../api/utils.js\";\nimport { $, For, If, html } from \"voby\";\n\nasync function importLocalPlugin() {\n const [fileHandle] = await showOpenFilePicker({\n types: [{ description: \"A neptune plugin file\", accept: { \"text/javascript\": [\".js\"] } }],\n });\n\n const file = await fileHandle.getFile();\n const content = await file.text();\n\n let manifest;\n try {\n manifest = parseManifest(content);\n\n if (![\"name\", \"author\", \"description\"].every((m) => typeof manifest[m] === \"string\"))\n throw \"invalid manifest\";\n } catch (e) {\n return actions.message.messageError({ message: e });\n }\n\n try {\n await installPlugin(\n manifest.name + \"-\" + (Math.random() + 1).toString(36).substring(7),\n content,\n {\n name: manifest.name,\n author: manifest.author,\n description: manifest.description,\n },\n );\n } catch {\n actions.message.messageError({ message: \"Failed to install plugin!\" });\n }\n}\n\nexport function PluginTab() {\n const pluginToImport = $(\"\");\n\n return html`\n <div style=\"display: flex; gap: 10px; flex-direction: column\">\n <div style=\"padding-top: 10px; display: flex; gap:10px\">\n <!-- This text input *needs* to be able to have an onEnter event. -->\n <${TextInput} value=${pluginToImport} onEnter=${() => {\n installPluginFromURL(pluginToImport());\n pluginToImport(\"\");\n }} placeholder=\"Import plugin from URL\" />\n <!-- This button will be used for importing from local files. -->\n <button onClick=${importLocalPlugin} class=\"neptune-round-button\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path><polyline points=\"17 8 12 3 7 8\"></polyline><line x1=\"12\" y1=\"3\" x2=\"12\" y2=\"15\"></line></svg>\n </button>\n </div>\n <${For} values=${() => pluginStore}>\n ${(plugin) => html`<${PluginCard} plugin=${plugin} />`}\n </${For}>\n </div>`;\n}\n\nfunction PluginCard({ plugin }) {\n return html`<div class=\"neptune-card\">\n <div class=\"neptune-card-content\">\n <div>\n <div style=\"display: flex; gap: 15px; align-items: center\">\n <button class=\"neptune-round-button\" onClick=${() => reloadPlugin(plugin)}>\n <${ReloadIcon} />\n </button>\n <div style=\"padding-top: 10px;padding-bottom: 10px\">\n <div>\n <span class=\"neptune-card-title\">${plugin.manifest.name}</span>\n <span> by </span>\n <span class=\"neptune-card-title\">${plugin.manifest.author}</span>\n </div>\n <div style=\"font-size: medium\">${plugin.manifest.description}</div>\n </div>\n </div>\n </div>\n <div style=\"margin-top: auto; margin-bottom: auto; display: flex\">\n <div style=\"display: flex; justify-content: center; align-items: center; gap: 6px\">\n <${If} when=${() => enabledPlugins?.[plugin.id]?.Settings}>\n <button style=\"display: grid; place-items: center; padding: 0px\" onClick=${() =>\n showModal(plugin.manifest.name, enabledPlugins[plugin.id].Settings)}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" style=\"width: 22px\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.324.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 011.37.49l1.296 2.247a1.125 1.125 0 01-.26 1.431l-1.003.827c-.293.24-.438.613-.431.992a6.759 6.759 0 010 .255c-.007.378.138.75.43.99l1.005.828c.424.35.534.954.26 1.43l-1.298 2.247a1.125 1.125 0 01-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.57 6.57 0 01-.22.128c-.331.183-.581.495-.644.869l-.213 1.28c-.09.543-.56.941-1.11.941h-2.594c-.55 0-1.02-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 01-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 01-1.369-.49l-1.297-2.247a1.125 1.125 0 01.26-1.431l1.004-.827c.292-.24.437-.613.43-.992a6.932 6.932 0 010-.255c.007-.378-.138-.75-.43-.99l-1.004-.828a1.125 1.125 0 01-.26-1.43l1.297-2.247a1.125 1.125 0 011.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.087.22-.128.332-.183.582-.495.644-.869l.214-1.281z\"></path>\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"></path>\n </svg>\n </button>\n </${If}>\n <button style=\"display: grid; place-items: center; padding: 0px\" onClick=${() =>\n removePlugin(plugin.id)}>\n <${TrashIcon} />\n </button>\n </div>\n <${Switch}\n checked=${() => plugin.enabled}\n onClick=${() => {\n togglePlugin(plugin.id);\n }} />\n </div>\n </div>\n </div>`;\n}\n","import { $, For, html, useCleanup } from \"voby\";\nimport { TextInput, Switch, TrashIcon } from \"./components\";\nimport { themesStore, toggleTheme, removeTheme, importTheme } from \"../api/themes\";\nimport { actions } from \"../handleExfiltrations.js\";\nimport { appendStyle } from \"../api/utils.js\";\n\nexport function ThemesTab() {\n const themeToImport = $(\"\");\n\n return html`\n <div style=\"margin-top: 10px; display: flex; gap: 10px; flex-direction: column\">\n <${TextInput} onEnter=${() => {\n importTheme(themeToImport(), false).catch((e) => actions.message.messageError({ message: e }));\n themeToImport(\"\");\n }} value=${themeToImport} placeholder=\"Import theme from URL\" />\n <${For} values=${() => themesStore}>\n ${(theme) => html`<${ThemeCard} theme=${theme} />`}\n </${For}>\n </div>`;\n}\n\nfunction ThemeCard({ theme}) {\n // TODO: i have no fucking clue why this needs a try catch to not implode in on itself lmfao\n useCleanup(() => { try { removeStyle() } catch {} });\n\n let removeStyle = () => {};\n\n return html`<div class=\"neptune-card\">\n <div class=\"neptune-card-content\">\n <div style=\"padding-top: 10px; padding-bottom: 10px\">\n <div>\n <span class=\"neptune-card-title\">${theme.name}</span>\n <span> by </span>\n <span class=\"neptune-card-title\">${theme.author}</span>\n </div>\n <div style=\"font-size: medium\">${theme.description}</div>\n </div>\n <div style=\"margin-top: auto; margin-bottom: auto; display: flex\">\n <button onClick=${() => removeTheme(theme.url)}>\n <${TrashIcon} />\n </button>\n <div onmouseover=${() => {\n try {\n removeStyle();\n } catch {}\n removeStyle = appendStyle(`@import url(\"${theme.url}\");`)\n }}\n \n onmouseout=${() => removeStyle()}\n >\n <${Switch} checked=${() => theme.enabled} onClick=${() => toggleTheme(theme.url)} />\n </div>\n </div>\n </div>\n </div>`\n}","import { appendStyle } from \"./api/utils.js\";\n\nexport default function loadStyles() {\n appendStyle(`\n .__NEPTUNE_PAGE {\n margin: 0px auto;\n max-width: 870px;\n width: calc(100% - var(--defaultPadding)*2);\n }\n\n .neptune-card {\n background-color: var(--wave-color-solid-base-brighter, var(--wave-color-opacity-contrast-fill-ultra-thick));\n border: 1px solid var(--wave-color-opacity-contrast-fill-ultra-thin);\n border-radius: 12px;\n min-height: 70px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n }\n\n .neptune-card-content {\n display: flex;\n justify-content: space-between;\n padding: 0 15px 0px 15px;\n }\n \n .neptune-active-tab {\n color: var(--wave-color-solid-accent-fill);\n box-shadow: 0px 2px var(--wave-color-solid-accent-fill);\n }\n \n .neptune-card-title {\n font-weight: 600;\n font-size: medium;\n }\n\n .neptune-switch-checkbox {\n cursor: pointer;\n margin-left: 0.8rem;\n opacity: 0;\n position: absolute;\n z-index: 1;\n }\n\n .neptune-switch {\n cursor: pointer;\n background-color: var(--wave-color-opacity-contrast-fill-ultra-thin);\n border-radius: 28px;\n display: block;\n height: 28px;\n margin-left: 0.8rem;\n min-width: 48px;\n position: relative;\n transition: background-color .25s ease,border-color .25s ease;\n -webkit-user-select: none;\n user-select: none;\n }\n\n .neptune-switch:after {\n background-color: var(--wave-color-solid-contrast-fill);\n border-radius: 50%;\n box-shadow: 0 1px 2px rgb(0 0 0 / 30%);\n content: \"\";\n display: block;\n height: 24px;\n left: 2px;\n position: absolute;\n top: 2px;\n transition: all .25s ease;\n width: 24px;\n }\n\n .neptune-switch-checkbox:checked + .neptune-switch:after {\n left: calc(100% - 0.1em);\n transform: translateX(-100%);\n }\n\n .neptune-switch-checkbox:checked + .neptune-switch {\n background-color: var(--wave-color-solid-accent-fill);\n border-color: var(--wave-color-solid-accent-fill);\n }\n\n .neptune-text-input {\n background: transparent;\n border: 0;\n border-bottom: 1px solid var(--wave-color-opacity-contrast-fill-ultra-thin);\n color: var(--wave-color-opacity-contrast-fill-thick);\n display: block;\n width: 100%;\n height: 40px;\n box-sizing: border-box;\n }\n\n .neptune-text-input:not([readonly]):focus {\n border-bottom-color: var(--wave-color-solid-accent-fill);\n color: var(--wave-color-solid-contrast-fill);\n }\n\n .neptune-button {\n align-items: center;\n background-color: var(--wave-color-solid-contrast-fill);\n border-radius: 12px;\n display: inline-flex;\n height: 48px;\n justify-content: center;\n line-height: 49px;\n min-height: 48px;\n min-width: 0;\n overflow: hidden;\n padding: 0 24px;\n text-align: center;\n text-overflow: ellipsis;\n transition: background .35s ease;\n white-space: nowrap;\n }\n\n .neptune-round-button {\n color: var(--wave-color-opacity-contrast-fill-thick);\n background-color: var(--wave-color-solid-base-brighter);\n border: 1px solid var(--wave-color-opacity-contrast-fill-ultra-thin);\n transition: background-color 0.35s ease 0s;\n transition-property: background-color;\n transition-duration: 0.35s;\n transition-timing-function: ease;\n transition-delay: 0s;\n position: relative;\n border-radius: 100%;\n min-height: 40px;\n min-width: 40px;\n display: grid;\n place-items: center;\n }\n\n .neptune-round-button:active {\n background-color: rgba(255, 255, 255, 0.2);\n }\n`);\n}\n","import { $, html } from \"voby\";\nimport { PluginTab } from \"./pluginsTab.js\";\nimport { ThemesTab } from \"./themesTab.js\";\nimport registerRoute from \"../api/registerRoute.js\";\nimport hookContextMenu from \"../api/hookContextMenu.js\";\nimport { pushVirtualRoute } from \"../api/utils.js\";\n\nlet selectedTab = $(0);\nconst tabs = [\n {\n name: \"Plugins\",\n component: PluginTab,\n },\n {\n name: \"Themes\",\n component: ThemesTab,\n },\n {\n name: \"Addon Store\",\n component: () => html`[WIP]`,\n },\n];\n\nfunction TabButton({ className = \"\", onClick = () => {}, children }) {\n return html`<button\n onClick=${onClick}\n style=\"font-weight: 500; font-size: 1.14286rem; padding-bottom: 6px\"\n class=\"${className}\">\n ${children}\n </button>`;\n}\n\nregisterRoute(\n \"settings\",\n html`<div style=\"width: 675px\">\n <div>\n <div style=\"display: flex; gap: 25px; padding-bottom: 10px\">\n ${tabs.map(\n (tab, idx) =>\n html`<${TabButton} onClick=${() => selectedTab(idx)} className=${() =>\n idx == selectedTab() ? \"neptune-active-tab\" : \"\"}>${tab.name}</${TabButton}>`,\n )}\n </div>\n <div>${() => tabs[selectedTab()].component}</div>\n </div>\n </div>`,\n);\n\nhookContextMenu(\"USER_PROFILE\", \"neptune settings\", () => pushVirtualRoute(\"settings\"));\n","import \"./ui/settings.js\";\nimport \"./handleExfiltrations.js\";\nimport windowObject from \"./windowObject.js\";\n\n// Updater 3\nif (NeptuneNative.VITE_ACTIVE != true) {\n (async () => {\n const fsScope = NeptuneNative.createEvalScope(`\n const fs = require(\"fs\");\n const path = require(\"path\");\n \n var neptuneExports = {\n updateFile(name, contents) {\n fs.writeFileSync(path.join(process.resourcesPath, \"app\", name), contents);\n }\n }\n `);\n \n const updateFile = NeptuneNative.getNativeValue(fsScope, \"updateFile\");\n \n const indexFetch = await fetch(\n \"https://raw.githubusercontent.com/uwu/neptune/master/injector/index.js\",\n );\n const preloadFetch = await fetch(\n \"https://raw.githubusercontent.com/uwu/neptune/master/injector/preload.js\",\n );\n\n if (!(indexFetch.ok || preloadFetch.ok)) return;\n\n updateFile(\"index.js\", await indexFetch.text())\n updateFile(\"preload.js\", await preloadFetch.text())\n\n alert(\"neptune has been updated. Please restart TIDAL.\");\n })()\n}\n\n// Restore the console\nfor (let key in console) {\n const orig = console[key];\n\n Object.defineProperty(console, key, {\n set() {\n return true;\n },\n get() {\n return orig;\n },\n });\n}\n\n// Force properties to be writable for patching\nconst originalDefineProperty = Object.defineProperty;\n\nObject.defineProperty = function (...args) {\n args[2].configurable = true;\n\n try {\n return originalDefineProperty.apply(this, args);\n } catch {}\n};\n\nObject.freeze = (arg) => arg;\n\n// If the app fails to load for any reason we simply reload the page.\n// setTimeout(() => {\n// if (!windowObject.store) window.location.reload();\n// }, 7000);\n\nwindow.neptune = windowObject;\n"],"names":["IS_BROWSER","globalThis","CDATASection","toString","match","isServer$1","SYMBOL_CACHED","Symbol","SYMBOL_OBSERVABLE","SYMBOL_OBSERVABLE_BOOLEAN","SYMBOL_OBSERVABLE_FROZEN","SYMBOL_OBSERVABLE_READABLE","SYMBOL_OBSERVABLE_WRITABLE","SYMBOL_STORE","SYMBOL_STORE_KEYS","SYMBOL_STORE_OBSERVABLE","SYMBOL_STORE_TARGET","SYMBOL_STORE_VALUES","SYMBOL_STORE_UNTRACKED","SYMBOL_SUSPENSE","SYMBOL_UNCACHED","SYMBOL_UNTRACKED","SYMBOL_UNTRACKED_UNWRAPPED","is","Object","isArray","Array","isFunction","value","isObject","noop","nope","frozenFunction","arguments","length","Error","this","readableFunction","get","writableFunction","fn","C","set","frozen","bind","readable","writable","OBSERVABLE_FALSE","OBSERVABLE_TRUE","UNAVAILABLE","Proxy","UNINITIALIZED","lazyArrayEach","arr","i","l","lazyArrayEachRight","lazyArrayPush","obj","key","push","lazySetAdd","Set","add","s","lazySetDelete","delete","undefined","lazySetEach","onCleanup","cleanup","call","onDispose","owner","Q","Owner$1","constructor","disposed","B","S","D","K","T","U","error","silent","parent","catch","deep","symbol","context","E","observer","ownerPrev","OWNER","observerPrev","OBSERVER","setOwner","setObserver","castError","SuperRoot$1","Owner","super","BATCH","SUPER_OWNER","SuperRoot","setBatch","M","resolve","batch$1","async","Promise","r","isObservableBoolean$1","isObservableFrozen$1","isUntracked$2","SchedulerSync","A1","A2","N","queue","F","ObservableClass","options","equals","A","L","Scheduler","I","J","has","sync","Math","max","ObservablesArray","P","R","observablesLength","empty","observable","index","indexOf","ObservablesSet","size","sizePrev","Observer$1","H","run","Memo$1","Observer","Observable","G","statusPrev","memo$1","isObservableFrozen","isUntracked","memo","Memo","boolean$1","isObservableBoolean","boolean","cleanup$1","Context$1","symbolOrContext","Context","disposed$1","Scheduler$1","A3","queueMicrotask","finally","effect","Effect$1","suspense","init","suspended","effect$1","Effect","resolved","Root$1","V","A0","DUMMY_INDEX","Root","CacheKeyed$1","A5","Map","A6","A7","A8","A9","forEach","mapped","AA","O","values","map","AB","results","resultsCached","resultsUncached","cached","MappedRoot","from","isObservable$1","getFunction","isObservable","Suspense$3","SYMBOL_SUSPENSE$1","A4","force","suspendedPrev","suspendedNext","notifyOwner","notifyObserver","notifySuspense","notifyRoot","root","suspense$1","when","Suspense","condition","CacheUnkeyed$1","pooled","AC","AD","poolable","cacheNext","leftovers","outer","isDuplicate","entries","pop","$index","$value","isStore$1","untrack","_for","fallback","isStore","isUnkeyed","unkeyed","CacheUnkeyed","CacheKeyed","next","prev","array","a","b","valueA","valueB","isEqual","warmup$1","_switch","warmup","ternary$1","valueTrue","valueFalse","isBatching$1","SchedulerAsync","isObservableWritable$1","target$1","readonly$1","isObservableWritable","target","root$1","DisposableMap","SelectedObservable","AE","AF","AG","selector$1","sourceValue","selectedValue","valuePrev","valueNext","selected","StoreMap","AH","StoreCleanable","listen","StoreKeys","keys","StoreValues","StoreHas","StoreProperty","AI","AJ","StoreListenersRegular","AK","AL","AM","AN","traversed","traverse","AO","AP","listener","StoreScheduler","reset","StoreListenersRoots","rootsSet","store","AQ","AR","current","flushRegular","flushRoots","AS","isBatching","setTimeout","NODES","WeakMap","SPECIAL_SYMBOLS","UNREACTIVE_KEYS","STORE_TRAPS","isListenable","getNodeExisting","getNodeKeys","getNodeValues","String","getter","AT","property","getNodeProperty","getNodeObservable","listenable","proxiable","isProxiable","prototype","apply","getTarget","setter","AU","targetIsArray","hadProperty","lengthPrev","lengthNext","getNode","Number","deleteProperty","_force","Reflect","defineProperty","descriptor","descriptorPrev","getOwnPropertyDescriptor","isEqualDescriptor","enumerable","getNodeHas","ownKeys","STORE_UNTRACK_TRAPS","isFrozenLike","gettersAndSetters","getGettersAndSetters","getNodeFromStore","propertyNode","throwNoSetterError","configurable","isFrozen","unwrap","getPrototypeOf","TypeError","getStore","on","targets","selectors","filter","disposers","selector","inited","disposer","_onRoots","reconcile","getType","reconcileInner","uprev","unext","prevKeys","nextKeys","prevValue","nextValue","prevType","nextType","reconcileOuter","getUntracked","store$2","suspended$1","tick$1","tryCatch$1","$","untracked","args","_with$1","CONTEXTS_DATA","DIRECTIVES","SYMBOL_SUSPENSE_COLLECTOR","SYMBOL_TEMPLATE_ACCESSOR","SYMBOLS_DIRECTIVES","wrapElement$1","element","createComment","document","createHTMLNode","createElement","createSVGNode","createElementNS","createText","createTextNode","assign","castArray","_indexOf","isError","isFunctionReactive","isNil","isString","isSVG","isSVGElement","svgRe","svgCache","includes","test","isTruthy","useResolved","callback","resolveFunction","isResolvable","useEventListener","event","handler","useEffect","$$","addEventListener","removeEventListener","useAbortController$1","signals","controller","AbortController","abort","some","signal","aborted","useCleanup","useAbortSignal$1","useAbortController","useScheduler$1","loop","once","cancel","schedule","tickId","executed","useSuspended","work","tick","dispose","useAnimationFrame$1","useScheduler","cancelAnimationFrame","requestAnimationFrame","useAnimationLoop$1","SuspenseContext","create","count","data","active","useMemo","increment","nr","decrement","collector","register","unregister","wrap","SuspenseContext$1","SuspenseManager$1","suspenses","change","counter","counterNext","suspend","unsuspend","useRenderEffect$1","useResource$1","fetcher","pending","latest","SuspenseManager","resourcePending","resourceRejected","resourceResolved","resourceFunction","resource","useRenderEffect","useCheapDisposed","onPending","onResolve","result","onReject","exception","onFinally","isPromise","then","fetch","useReadonly","useFetch$1","request","useResource","useAbortSignal","useIdleCallback$1","cancelIdleCallback","requestIdleCallback","useIdleLoop$1","useInterval$1","ms","clearInterval","setInterval","usePromise$1","promise","useTimeout$1","clearTimeout","useCheapDisposed$1","useMicrotask$1","runWithOwner","_with","dummyNode","beforeDummyWrapper","afterDummyWrapper","diff$1","before","after","nextSibling","Node","parentNode","replaceChild","bLength","removable","aEnd","bEnd","aStart","bStart","node","slice","append","removeChild","insertBefore","sequence","NOOP_CHILDREN","FragmentUtils","make","makeWithNode","makeWithFragment","fragment","fragmented","getChildrenFragmented","thiz","children","getChildren","pushFragment","pushValue","pushNode","replaceWithNode","replaceWithFragment","FragmentUtils$1","resolveChild","_dynamic","hasObservables","resolveArraysAndStatics","resolveClass","classes","split","Boolean","cls","resolveStyle","styles","style","DUMMY_RESOLVED","resolveArraysAndStaticsInner","type","setAttributeStatic","attributesBoolean","attributeCamelCasedRe","attributesCache","uppercaseRe","replace","char","toLowerCase","normalizeKeySvg","removeAttribute","setAttribute","setChildReplacementText","child","childPrev","nodeType","nodeValue","parentElement","textNode","setChildReplacement","setChildStatic","setChildReplacementFunction","setChild","fragmentOnly","dynamic","prevIsArray","prevLength","prevFirst","prevLast","prevSibling","appendChild","fragmentNext","childFragmentOnly","nextLength","childNodes","textContent","placeholder","diff","setClassStatic","className","classList","toggle","setClass","setClassBooleanStatic","keyPrev","setClassBoolean","keyNext","setClassesStatic","object","objectPrev","setClasses","objectNext","setEventStatic","delegatedEvents","onauxclick","onbeforeinput","onclick","ondblclick","onfocusin","onfocusout","oninput","onkeydown","onkeyup","onmousedown","onmouseup","startsWith","_value","delegated","composedPath","cancelBubble","delegate","endsWith","isCapture","capture","passive","setEvent","setHTML","innerHTML","setHTMLStatic","__html","setPropertyStatic","isBoolean","tagName","setProperty","setRef","flat","Infinity","flatten","useMicrotask","setStyleStatic","propertyNonDimensionalRe","propertyNonDimensionalCache","charCodeAt","removeProperty","setStyle","setStylesStatic","cssText","setStyles","setProp","isTemplateAccessor","setTemplateAccessor","directive","immediate","setDirective","creatElement","component","props","_children","__children","ref","rest","wrapElement","createNode","setProps","isNode","Dynamic$1","ErrorBoundary$1","tryCatch","For","Fragment$1","useGuarded$1","guard","valueLast","guarded","If$1","ternary","truthy","useGuarded","useUntracked","cache","runWithSuperRoot","lockId","KeepAlive$1","id","ttl","lock","item","useRoot","useSuspense","hasLock","timeoutId","render$1","HTMLElement","Portal$1","mount","wrapper","portal","useBoolean","body","Element","render","metadata","Suspense$1","childrenSuspended","Switch","Switch$1","Case","Default","Switch$2","Ternary$1","jsx","createDirective$1","name","Provider","COMPONENT_RE","SYMBOL_COLD_COMPONENT","SYMBOL_HOT_COMPONENT","SYMBOL_HOT_ID","SOURCES","hmr$1","accept","createHotComponent","path","reduce","source","createHotComponentDeep","hot","onAccept","module","default","console","cold","n","t","e","u","h","p","registry","html","components","html$1","lazy$1","fetcherOnce","called","preload","reject","SuspenseCollector","other","SuspenseCollector$1","renderToString$1","Portal","template$1","safePropertyRe","checkValidProperty","makeActionsWithNodesAndTemplate","actionsWithNodes","accessor","prop","method","targetNode","makeAccessor","makeNodePath","prevPath","prevNode","previousSibling","makeNodePathProperties","properties","parts","reverse","part","nsi","makeReviverVariables","actionsWithPaths","paths","action","nodePath","targetNodePath","makeReviverPaths","makeReviverVariablesData","assignments","variableId","datum","find","variable","assignment","otherCurrent","otherNext","splice","makeActionsWithPaths","reviver","actions","variables","makeReviverActions","Function","join","apis","makeReviver","clone","cloneNode","makeComponent","defaultValue","valueContext","ReactiveRoot","c","checked","onClick","TextInput","onEnter","ReloadIcon","TrashIcon","customElements","define","connectedCallback","display","disconnectedCallback","patchedFunctions","patchTypes","resetPatches","getPatchFunc_default","patchType","funcName","funcParent","oneTime","origFunc","funcPatch","o","WeakRef","replaceProxy","_","ctxt","runHook","construct","receiver","resolvedProp","patchedFunc","funcArgs","patch","hook","maybefuncArgs","workingRetVal","hook_default","args2","hookId","funcPatchRef","unpatchThisPatch","patchRef","deref","every","unpatch","instead","promisifyRequest","oncomplete","onsuccess","onabort","onerror","createStore","dbName","storeName","indexedDB","open","onupgradeneeded","createObjectStore","dbp","txMode","db","transaction","objectStore","defaultGetStoreFunc","defaultGetStore","appendStyle","styleTag","head","newStyle","neptuneIdbStore","createIdbStore","createPersistentObject","persistentObject","customStore","put","idbSet","res","idbGet","parseManifest","manifest","JSON","parse","convertHexToRGB","g","pushVirtualRoute","route","neptune","router","pathname","search","ImportType","Static","Dynamic","ImportMeta","StaticSourcePhase","DynamicSourcePhase","Uint8Array","Uint16Array","buffer","w","__heap_base","memory","byteLength","grow","ceil","sa","lastIndexOf","idx","ri","ie","it","ai","ss","se","ip","k","d","re","es","ee","els","ele","ls","le","ln","eval","f","WebAssembly","compile","Buffer","atob","instantiate","exports","betterParse","src","imports","imp","declaration","importClause","trim","isDynamic","isSideEffectful","namedImportOpener","namedImportCloser","namedImport","namedImports","commaIndex","namespace","isExport","removeFromString","string","start","end","quartz","code","config","plugins","moduleId","generatedImports","plugin","transform","offset","exp","startIndex","endIndex","newExport","newString","fromIndex","quartzStore","dynamicResolver","dynamicResolve","random","substring","generatedImport","addImport","v","globalStoreID","characters","randomIndex","floor","charAt","generateRandomString","mod","import","encodeURIComponent","urlImport","baseUrl","existingUrls","interceptors","intercept","types","cb","uninterceptors","unintercept","handleIntercept","pluginStore","pluginStoreReady","enabled","getPluginById","disablePlugin","onUnload","togglePlugin","enablePlugin","runPlugin","persistentStorage","persistentStorageReady","unloadables","pluginData","storage","addUnloadable","Settings","stringify","ul","installPlugin","unshift","removePlugin","log","findIndex","del","fetchPluginFromURL","url","parsedURL","json","hash","main","text","author","description","reloadPlugin","pluginWasEnabled","hasOwnProperty","installPluginFromURL","message","messageError","update","querySelector","window","require","themesStore","themesStoreReady","updateThemeStyle","removeTheme","toggleTheme","theme","importTheme","observations","MutationObserver","records","changedElems","record","removedNodes","SVGElement","elem","obs","matches","querySelectorAll","observe","sel","subtree","childList","attributes","entry","unobs","disconnect","now","pageNotFoundSelector","replacePage","page","neptunePage","insertAdjacentElement","registerRoute","payload","pageNotFound","unob","getElementsByClassName","getTabs","hookContextMenu","menuType","contextMenuItem","contextMenuLabel","innerText","parentClasses","contextMenuWrapper","keyCode","click","showModal","modal","showReleaseNotes","header","getElementsByTagName","replaceChildren","tab","color","currentMediaItem","vibrantColorStyle","utils.appendStyle","mediaProduct","getState","content","mediaItems","productId","vibrantColor","album","utils.convertHexToRGB","windowObject","patcher","utils","registerTab","unobservers","addTab","tabs","remove","makeInactive","preventDefault","removeRouteHandler","voby","themes","moduleCache","resolvePath","basePath","relativePath","baseDir","stack","baseParts","resolvePathFromBase","fetchScript","handleResolution","findStoreFunctionName","bundleCode","errorMessageIndex","charIdx","strBuf","nameIdx","findPrepareActionNameAndIdx","searchIdx","funcIndex","importLocalPlugin","fileHandle","showOpenFilePicker","file","getFile","m","PluginCard","If","enabledPlugins","ThemeCard","removeStyle","script","scriptPath","URL","scriptContent","getStoreFuncName","actionData","prepareActionName","prepareActionIdx","hijackedGetStore","selectedTab","pluginToImport","themeToImport","TabButton","NeptuneNative","VITE_ACTIVE","fsScope","createEvalScope","updateFile","getNativeValue","indexFetch","preloadFetch","ok","alert","orig","originalDefineProperty","freeze","arg"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,108,109,111,112,113]}