{"version":3,"file":"render_to_string-CoO3rHSR.cjs","sources":["../../soby/dist/methods/batch.js","../../soby/dist/methods/is_observable_boolean.js","../../soby/dist/methods/is_observable_frozen.js","../../soby/dist/methods/is_untracked.js","../../soby/dist/objects/memo.js","../../soby/dist/methods/memo.js","../../soby/dist/methods/boolean.js","../../soby/dist/methods/disposed.js","../../soby/dist/methods/resolve.js","../../soby/dist/methods/for.cache.keyed.js","../../soby/dist/objects/suspense.js","../../soby/dist/methods/suspense.js","../../soby/dist/methods/for.cache.unkeyed.js","../../soby/dist/methods/for.js","../../soby/dist/methods/warmup.js","../../soby/dist/methods/switch.js","../../soby/dist/methods/ternary.js","../../soby/dist/methods/observable.js","../../soby/dist/methods/is_observable_writable.js","../../soby/dist/methods/target.js","../../soby/dist/methods/readonly.js","../../soby/dist/methods/selector.js","../../soby/dist/methods/suspended.js","../../soby/dist/methods/tick.js","../../soby/dist/methods/try_catch.js","../../soby/dist/methods/untracked.js","../src/utils/mark.ts","../src/hooks/use_attached.ts","../src/hooks/use_resolved.ts","../src/hooks/use_event_listener.ts","../src/hooks/use_abort_controller.ts","../src/hooks/use_abort_signal.ts","../src/hooks/use_scheduler.ts","../src/hooks/use_animation_frame.ts","../src/hooks/use_animation_loop.ts","../src/hooks/use_context.ts","../src/components/suspense.context.ts","../src/components/suspense.manager.ts","../src/hooks/use_resource.ts","../src/hooks/use_fetch.ts","../src/hooks/use_idle_callback.ts","../src/hooks/use_idle_loop.ts","../src/hooks/use_interval.ts","../src/hooks/use_promise.ts","../src/hooks/use_timeout.ts","../src/hooks/use_mounted.ts","../src/hooks/use_mounted_context.ts","../src/components/error_boundary.ts","../src/components/for.ts","../src/hooks/use_guarded.ts","../src/components/if.ts","../src/components/suspense.ts","../src/components/switch.ts","../src/components/ternary.ts","../src/utils/stylesheets.ts","../src/methods/assign.ts","../src/methods/is_jsx_prop.ts","../src/methods/make.ts","../src/methods/defaults.ts","../src/methods/custom_element.ts","../src/methods/create_context.tsx","../src/methods/create_directive.ts","../src/methods/hmr.ts","../../node_modules/.pnpm/htm@3.1.1/node_modules/htm/dist/htm.module.js","../src/methods/render_to_string.ts"],"sourcesContent":["/* IMPORT */\nimport { setBatch } from '../context.js';\nimport { noop } from '../utils.js';\n/* HELPERS */\nlet counter = 0;\nlet resolve = noop;\n/* MAIN */\nconst batch = async (fn, stack) => {\n    if (!counter) {\n        setBatch(new Promise(r => resolve = r));\n    }\n    try {\n        counter += 1;\n        return await fn();\n    }\n    finally {\n        counter -= 1;\n        if (!counter) {\n            setBatch(undefined);\n            resolve(stack);\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 */\nimport { DIRTY_MAYBE_YES, UNAVAILABLE, UNINITIALIZED } from '../constants.js';\nimport Observable from './observable.js';\nimport Observer from './observer.js';\nimport { callStack, Stack } from '../methods/debugger.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        const { stack } = options ?? { stack: callStack('Memo init') };\n        if (options?.sync === true) {\n            this.sync = true;\n            this.update(stack);\n        }\n    }\n    /* API */\n    run(stack) {\n        const result = super.refresh(this.fn, stack);\n        if (!this.disposed && this.observables.empty()) {\n            this.disposed = true;\n        }\n        if (result !== UNAVAILABLE) {\n            this.observable.set(result);\n        }\n    }\n    stale(status, stack) {\n        const statusPrev = this.status;\n        if (statusPrev >= status)\n            return;\n        this.status = status;\n        if (statusPrev === DIRTY_MAYBE_YES)\n            return;\n        this.observable.stale(DIRTY_MAYBE_YES, stack);\n    }\n}\n/* EXPORT */\nexport default Memo;\n","import 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';\nimport { callStack } from './debugger.js';\n/* IMPORT */\n/* MAIN */\n/**\n * Creates a memoized computed value that automatically tracks its dependencies.\n *\n * Unlike React's useMemo, this function does NOT require a dependency array.\n * Dependencies are automatically tracked when accessed within the memo function\n * using the `$()` syntax.\n *\n * @example\n * ```typescript\n * // ✅ Correct Woby/Soby pattern - no dependency array needed\n * const doubled = memo(() => {\n *   return $(count) * 2 // Automatically tracks 'count' as a dependency\n * })\n *\n * // ❌ React pattern - DO NOT use dependency arrays in Woby/Soby\n * const doubled = memo(() => {\n *   return $(count) * 2\n * }, [count]) // This array will be ignored!\n * ```\n *\n * @param fn - The function to compute the memoized value. Dependencies are automatically tracked\n *             when observables are accessed using `$()` within this function.\n * @param options - Optional memo options (NOT a dependencies array)\n * @returns An observable readonly value that updates when its dependencies change\n *\n * @see {@link effect} for creating side effects\n * @see {@link $} for accessing observable values\n */\nconst memo = (fn, options) => {\n    const stack = options?.stack ?? callStack();\n    if (isObservableFrozen(fn)) {\n        return fn;\n    }\n    else if (isUntracked(fn)) {\n        return frozen(fn(stack));\n    }\n    else {\n        const memo = new Memo(fn, options);\n        const observable = readable(memo.observable, stack);\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 cleanup from './cleanup.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\n/* MAIN */\nconst disposed = (stack) => {\n    const observable = new Observable(false);\n    const toggle = () => observable.set(true);\n    // Register the cleanup in the current context\n    // This ensures that when the context is disposed/re-run, the observable is updated\n    cleanup(toggle);\n    return readable(observable);\n};\n/* EXPORT */\nexport default disposed;\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 '../objects/superroot.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';\nimport { callStack } from './debugger.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.cache = new Map();\n        this.bool = false; // The bool is flipped with each iteration, the roots that don't have the updated one are disposed, it's like a cheap counter basically\n        this.prevCount = 0; // Number of previous items\n        this.reuseCount = 0; // Number of previous items that got reused\n        this.nextCount = 0; // Number of next items\n        /* API */\n        this.cleanup = () => {\n            if (!this.prevCount)\n                return; // There was nothing before, no need to cleanup\n            if (this.prevCount === this.reuseCount)\n                return; // All the previous items were reused, no need to cleanup\n            const { cache, bool } = this;\n            if (!cache.size)\n                return; // Nothing to dispose of\n            if (this.nextCount) { // Regular cleanup\n                cache.forEach((mapped, value) => {\n                    if (mapped.bool === bool)\n                        return;\n                    mapped.dispose(true);\n                    cache.delete(value);\n                });\n            }\n            else { // There is nothing after, disposing quickly\n                this.cache.forEach(mapped => {\n                    mapped.dispose(true);\n                });\n                this.cache = new Map();\n            }\n        };\n        this.dispose = () => {\n            if (this.suspense) {\n                lazySetDelete(this.parent, 'roots', this.roots);\n            }\n            this.prevCount = this.cache.size;\n            this.reuseCount = 0;\n            this.nextCount = 0;\n            this.cleanup();\n        };\n        this.before = () => {\n            this.bool = !this.bool;\n            this.reuseCount = 0;\n            this.nextCount = 0;\n        };\n        this.after = (values) => {\n            this.nextCount = values.length;\n            this.cleanup();\n            this.prevCount = this.nextCount;\n            this.reuseCount = 0;\n        };\n        this.map = (values) => {\n            this.before();\n            const { cache, bool, fn, fnWithIndex } = 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 reuseCount = 0;\n            const stack = callStack();\n            for (let i = 0, l = values.length; i < l; i++) {\n                const value = values[i];\n                const cached = cache.get(value);\n                if (cached && cached.bool !== bool) {\n                    resultsUncached = false;\n                    reuseCount += 1;\n                    cached.bool = bool;\n                    cached.index?.set(i);\n                    results[i] = cached.result; //TSC\n                }\n                else {\n                    resultsCached = false;\n                    const mapped = new MappedRoot(false);\n                    if (cached) {\n                        cleanup(() => mapped.dispose(true));\n                    }\n                    mapped.wrap(() => {\n                        let index = DUMMY_INDEX;\n                        if (fnWithIndex) {\n                            mapped.index = new Observable(i);\n                            index = readable(mapped.index, stack);\n                        }\n                        const result = results[i] = resolve(fn(value, index));\n                        mapped.bool = bool;\n                        mapped.result = result;\n                        if (!cached) {\n                            cache.set(value, mapped);\n                        }\n                    }, undefined, undefined, stack);\n                }\n            }\n            this.reuseCount = reuseCount;\n            this.after(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.roots = () => {\n            return Array.from(this.cache.values());\n        };\n        this.fn = fn;\n        this.fnWithIndex = (fn.length > 1);\n        if (this.suspense) {\n            lazySetAdd(this.parent, 'roots', this.roots);\n        }\n    }\n}\n/* EXPORT */\nexport default CacheKeyed;\n","/* IMPORT */\nimport { OWNER } from './superroot.js';\nimport { DIRTY_MAYBE_YES, DIRTY_YES } from '../constants.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';\nimport { callStack, Stack } from '../methods/debugger.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, 'suspenses', this);\n        this.suspended = (OWNER.get(SYMBOL_SUSPENSE)?.suspended || 0);\n    }\n    /* API */\n    toggle(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        const stack = callStack();\n        this.observable?.set(!!suspendedNext);\n        const notifyOwner = (owner) => {\n            lazyArrayEach(owner.contexts, notifyOwner);\n            lazyArrayEach(owner.observers, notifyObserver);\n            lazyArrayEach(owner.suspenses, notifySuspense);\n            lazySetEach(owner.roots, notifyRoot);\n        };\n        const notifyObserver = (observer) => {\n            if (observer instanceof Effect) {\n                if (observer.status === DIRTY_MAYBE_YES || observer.status === DIRTY_YES) {\n                    if (observer.init) {\n                        observer.update(stack);\n                    }\n                    else {\n                        observer.schedule(stack);\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.toggle(force);\n        };\n        notifyOwner(this);\n    }\n    wrap(fn, owner, observer, stack) {\n        return super.wrap(fn, this, undefined, stack);\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';\nimport { Stack } from './debugger.js';\n/* MAIN */\nconst suspense = (when, fn, stack) => {\n    const suspense = new Suspense();\n    const condition = boolean(when);\n    const toggle = () => suspense.toggle(get(condition));\n    effect(toggle, { sync: true, stack: stack });\n    return suspense.wrap(fn, undefined, undefined, stack);\n};\n/* EXPORT */\nexport default suspense;\n","/* IMPORT */\nimport { OWNER } from '../objects/superroot.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';\nimport { callStack } from './debugger.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.cache = new Map();\n        this.pool = [];\n        this.poolMaxSize = 0;\n        /* API */\n        this.cleanup = () => {\n            let pooled = 0;\n            let poolable = Math.max(0, this.pooled ? this.poolMaxSize - this.pool.length : 0);\n            // const stack = callStack()\n            this.cache.forEach(mapped => {\n                if (poolable > 0 && pooled++ < poolable) {\n                    mapped.suspended?.set(true);\n                    this.pool.push(mapped);\n                }\n                else {\n                    mapped.dispose(true);\n                }\n            });\n        };\n        this.dispose = () => {\n            if (this.suspense) {\n                lazySetDelete(this.parent, 'roots', this.roots);\n            }\n            this.cache.forEach(mapped => {\n                mapped.dispose(true);\n            });\n            this.pool.forEach(mapped => {\n                mapped.dispose(true);\n            });\n        };\n        this.map = (values) => {\n            const { cache, fn, fnWithIndex } = this;\n            const cacheNext = new Map();\n            const results = new Array(values.length);\n            const pool = this.pool;\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            const stack = callStack();\n            if (cache.size) {\n                for (let i = 0, l = values.length; i < l; i++) {\n                    const value = values[i];\n                    const cached = cache.get(value);\n                    if (cached) {\n                        resultsUncached = false;\n                        cache.delete(value);\n                        cacheNext.set(value, cached);\n                        cached.index?.set(i);\n                        results[i] = cached.result; //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 cache.entries()) {\n                        cache.delete(key);\n                        cacheNext.set(value, mapped);\n                        mapped.index?.set(index);\n                        mapped.value?.set(value);\n                        results[index] = mapped.result; //TSC\n                        continue outer;\n                    }\n                }\n                resultsCached = false;\n                let mapped;\n                if (pooled && pool.length) {\n                    mapped = pool.pop(); //TSC\n                    mapped.index?.set(index);\n                    mapped.value?.set(value);\n                    mapped.suspended?.set(false);\n                    results[index] = mapped.result; //TSC\n                }\n                else {\n                    mapped = new MappedRoot(false);\n                    mapped.wrap(() => {\n                        let $index = DUMMY_INDEX;\n                        if (fnWithIndex) {\n                            mapped.index = new Observable(index);\n                            $index = readable(mapped.index, stack);\n                        }\n                        const observable = mapped.value = new Observable(value);\n                        const suspended = pooled ? new Observable(false) : undefined;\n                        if (suspended)\n                            suspended.stack = stack;\n                        const $value = memo(() => get(observable.get())); //TSC\n                        const result = results[index] = suspended ? suspense(() => suspended.get(), () => resolve(fn($value, $index)), stack) : resolve(fn($value, $index));\n                        mapped.value = observable;\n                        mapped.result = result;\n                        mapped.suspended = suspended;\n                    }, undefined, undefined, stack);\n                }\n                if (isDuplicate) { // Expensive, not reusable\n                    cleanup(() => mapped.dispose(true));\n                }\n                else { // Cheap, reusable\n                    cacheNext.set(value, mapped);\n                }\n            }\n            this.poolMaxSize = Math.max(this.poolMaxSize, results.length);\n            this.cleanup();\n            this.cache = 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.roots = () => {\n            return [...this.cache.values(), ...this.pool.values()];\n        };\n        this.fn = fn;\n        this.fnWithIndex = (fn.length > 1);\n        this.pooled = pooled;\n        if (this.suspense) {\n            lazySetAdd(this.parent, 'roots', this.roots);\n        }\n    }\n}\n/* EXPORT */\nexport default CacheUnkeyed;\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';\nimport { callStack } from './debugger.js';\nfunction _for(values, fn, fallback = [], options) {\n    const stack = callStack();\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 { dispose, map } = options?.unkeyed ? new CacheUnkeyed(fn, !!options.pooled) : new CacheKeyed(fn); //TSC\n        cleanup(dispose);\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            stack\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            stack\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 { writable } from '../objects/callable.js';\nimport ObservableClass from '../objects/observable.js';\nimport { callStack } from './debugger.js';\nfunction observable(value, options) {\n    const stack = callStack();\n    return writable(new ObservableClass(value, options), stack);\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, stack) => {\n    if (isObservableWritable(observable)) {\n        return readable(target(observable), stack);\n    }\n    else {\n        return observable;\n    }\n};\n/* EXPORT */\nexport default readonly;\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 */\nconst isEqualForSelector = (a, b) => {\n    // Treat 0 and -0 as equal for selector purposes\n    if ((a === 0 || is(a, -0)) && (b === 0 || is(b, -0)))\n        return true;\n    return is(a, b);\n};\nimport { callStack, Stack } from './debugger.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.count = 1;\n    }\n    /* API */\n    call() {\n        if (this.selecteds.disposed)\n            return;\n        this.count -= 1;\n        if (this.count)\n            return;\n        this.selecteds.delete(this.source);\n    }\n}\n/* MAIN */\nconst selector = (source) => {\n    /* NORMALIZING SOURCE */\n    source = warmup(memo(source));\n    /* FROZEN SOURCE */\n    if (isObservableFrozen(source)) {\n        const sourceValue = untrack(source);\n        return (value) => {\n            return (isEqualForSelector(value, sourceValue)) ? OBSERVABLE_TRUE : OBSERVABLE_FALSE;\n        };\n    }\n    /* SELECTEDS */\n    let selecteds = new DisposableMap();\n    let selectedValue = untrack(source);\n    const stack = callStack();\n    effect((stack) => {\n        const valuePrev = selectedValue;\n        const valueNext = source();\n        if (isEqualForSelector(valuePrev, valueNext))\n            return;\n        selectedValue = valueNext;\n        selecteds.get(valuePrev)?.set(false);\n        selecteds.get(valueNext)?.set(true);\n    }, { suspense: false, sync: true, stack });\n    /* CLEANUP ALL */\n    const cleanupAll = () => {\n        selecteds.disposed = true;\n    };\n    cleanup(cleanupAll);\n    /* SELECTOR */\n    return (value) => {\n        /* INIT */\n        let selected = selecteds.get(value);\n        if (selected) {\n            selected.count += 1;\n        }\n        else {\n            const isSelected = isEqualForSelector(value, selectedValue);\n            selected = new SelectedObservable(isSelected);\n            selected.selecteds = selecteds;\n            selected.source = value;\n            selecteds.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 { OBSERVABLE_FALSE } from '../constants.js';\nimport { OWNER } from '../objects/superroot.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\n/* MAIN */\nconst suspended = (stack) => {\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, stack);\n};\n/* EXPORT */\nexport default suspended;\n","/* IMPORT */\nimport Scheduler from '../objects/scheduler.async.js';\nimport { Stack } from './debugger.js';\n/* MAIN */\nconst tick = (stack) => {\n    Scheduler.flush(stack);\n};\n/* EXPORT */\nexport default tick;\n","/* IMPORT */\nimport { OWNER } from '../objects/superroot.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((stack) => {\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.errorHandler = 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 { ObservableMaybe } from \"../types\"\r\nimport { jsx } from \"../jsx-runtime\"\r\nimport { DEBUGGER } from \"soby\"\r\n\r\nexport const mark = (msg: string, ref: ObservableMaybe<Node | null>) => DEBUGGER.verboseComment ?\r\n    jsx('comment', { ref, data: msg }) : jsx('text', { ref })","/**\n * Custom Element Implementation for Woby Framework\n * \n * This module provides functionality to create custom HTML elements with reactive properties\n * that integrate seamlessly with the Woby framework's observable system. Custom elements\n * created with this API can be used both in JSX/TSX and directly in HTML.\n * \n * Features:\n * - Automatic attribute to prop mapping\n * - Type conversion for observable props\n * - Nested property support (e.g., 'nested$prop$value' or 'nested.prop.value' in HTML, 'nested$prop$value' in JSX)\n * - Style property support (e.g., 'style$font-size' or 'style.font-size' in HTML, 'style$font-size' in JSX)\n * - Automatic kebab-case to camelCase conversion for all property names\n * - Automatic exclusion of properties with { toHtml: () => undefined } from HTML attributes\n * - Shadow DOM encapsulation with optional stylesheet adoption\n * - Context support for custom elements\n * - Custom serialization using toHtml and fromHtml options\n * \n * Style Encapsulation Options:\n * - ignoreStyle: Set to true to prevent adoption of global stylesheets in shadow DOM\n * \n * @module customElement\n */\n\nimport { $, $$, } from \"../methods/soby\"\nimport { isObservable } from \"soby\"\nimport { useEffect } from \"../hooks\"\nimport { ObservableMaybe } from \"../types\"\nimport { mark } from \"../utils/mark\"\n\nexport const useAttached = (ref?: ObservableMaybe<Node | null>, match?: (parent: Node | null) => boolean) => {\n    const isGiven = !!ref\n\n    if (!ref)\n        ref = $<Node>()\n\n    const parent = $<Node | null>(null)\n\n    const fn = () => {\n        if (!$$(ref)) return\n\n        const updateParent = () => {\n            let currentParent: Node | null = $$(ref)?.parentNode || null\n\n            // If match function is provided, traverse up until match or root\n            if (match) {\n                while (currentParent) {\n                    if (match(currentParent)) {\n                        parent(currentParent)\n                        return !!currentParent\n                    }\n                    // traversed through assignedSlot 1st, \n                    currentParent = (currentParent as HTMLElement).assignedSlot ?? currentParent.parentNode ?? (currentParent as ShadowRoot).host\n                }\n                // If no match found, parent remains null\n                parent(null)\n                return false\n            } else {\n                // Default behavior: return immediate parent\n                parent(currentParent)\n                return !!currentParent\n            }\n        }\n\n        // Initial parent check\n        if (updateParent()) return\n\n        const callback: MutationCallback = (mutationsList, observer) => {\n            if (mutationsList[0]?.type === 'childList') {\n                // Check nodes that were added\n                if (updateParent()) {\n                    observer.disconnect()\n                    return\n                }\n            }\n            // Cleanup observer on unmount\n            // return () => observer.disconnect()\n        }\n\n        const observer = new MutationObserver(callback)\n\n        // 5. Configuration options\n        const config: MutationObserverInit = {\n            childList: true, // Crucial: Watch for children being added/removed\n            subtree: true    // Optional: Watch all descendants, not just direct children\n        }\n\n        // 6. Start observing\n        observer.observe(document, config)\n\n        return () => observer.disconnect()\n    }\n\n    if (isObservable(ref))\n        useEffect(fn)\n    else\n        fn()\n\n    // Return the reference node\n    return {\n        parent,\n        mount: isGiven ? undefined : mark('attached', ref),\n        ref\n    }\n}\n\n\n// export const isLightDom = (node: Node) =>\n//     useMemo(() => $$(useAttached(node, (parent): parent is Element => !!parent && 'shadowRoot' in parent).parent))\nexport const useLightDom = (ref?: ObservableMaybe<Node | null>) => {\n    // const { parent, mount, ref: r } = useAttached(ref, (parent): parent is Element => (!!(parent as Element).shadowRoot && !!parent.parentElement?.assignedSlot))\n    const { parent, mount, ref: r } = useAttached(ref, (parent): parent is Element => !!(parent as Element).assignedSlot)\n    // const lightDom = useMemo(() => $$(parent)?.parentElement)\n\n    // // Observable to track if slot is assigned\n    // const slotAssigned = $<boolean>(false)\n\n    // // Effect to observe shadow root and slot changes\n    // useEffect(() => {\n    //     const lightDomElement = $$(lightDom)\n    //     if (!lightDomElement?.parentElement) return\n\n    //     const parentElement = lightDomElement.parentElement\n    //     let shadowRoot: ShadowRoot | null = null\n\n    //     // Function to check if shadow root is ready\n    //     const checkShadowRoot = () => {\n    //         shadowRoot = parentElement.shadowRoot\n    //         if (shadowRoot) {\n    //             // Shadow root is ready, now observe for slots\n    //             observeSlots()\n    //             return true\n    //         }\n    //         return false\n    //     }\n\n    //     // Function to observe slots\n    //     const observeSlots = () => {\n    //         if (!shadowRoot) return\n\n    //         // Check if there are already slots\n    //         const slots = Array.from(shadowRoot.querySelectorAll('slot'))\n    //         if (slots.length > 0) {\n    //             // Slots exist, start listening to slot change events\n    //             listenToSlotChanges(slots)\n    //             return\n    //         }\n\n    //         // No slots yet, observe for when they are added\n    //         const slotObserver = new MutationObserver((mutations) => {\n    //             for (const mutation of mutations) {\n    //                 if (mutation.type === 'childList') {\n    //                     mutation.addedNodes.forEach((node) => {\n    //                         if (node.nodeName === 'SLOT') {\n    //                             // Slot added, start listening to slot change events\n    //                             slotObserver.disconnect()\n    //                             listenToSlotChanges([node as HTMLSlotElement])\n    //                         }\n    //                     })\n    //                 }\n    //             }\n    //         })\n\n    //         slotObserver.observe(shadowRoot, { childList: true, subtree: true })\n\n    //         // Cleanup slot observer\n    //         return () => slotObserver.disconnect()\n    //     }\n\n    //     // Function to listen to slot change events\n    //     const listenToSlotChanges = (slots: Node[]) => {\n    //         const slotElements: HTMLSlotElement[] = []\n    //         for (const slot of slots) {\n    //             if (slot instanceof HTMLSlotElement) {\n    //                 slotElements.push(slot)\n    //                 // Add event listener for slot change\n    //                 slot.addEventListener('slotchange', () => {\n    //                     // Update slot assigned observable\n    //                     slotAssigned(true)\n    //                 })\n    //             }\n    //         }\n\n    //         // // Initial check for assigned nodes\n    //         // for (const slot of slotElements) {\n    //         //     if (slot.assignedNodes().length > 0) {\n    //         //         slotAssigned(true)\n    //         //         break\n    //         //     }\n    //         // }\n    //     }\n\n    //     // Check if shadow root is already ready\n    //     if (!checkShadowRoot()) {\n    //         // Shadow root not ready yet, observe for when it becomes available\n    //         const shadowObserver = new MutationObserver(() => {\n    //             if (checkShadowRoot()) {\n    //                 shadowObserver.disconnect()\n    //             }\n    //         })\n\n    //         shadowObserver.observe(parentElement, { attributes: true })\n\n    //         // Cleanup shadow observer\n    //         return () => shadowObserver.disconnect()\n    //     }\n    // })\n\n    return { lightDom: parent, mount, ref: r }\n}","\r\n\r\nimport { isObservable } from '../methods/soby'\r\nimport { isArray, isFunction } from '../utils/lang'\r\nimport type { FN, ObservableReadonly } from '../types'\r\n\r\n/* HELPERS */\r\n\r\ntype F<T> = T extends () => infer U ? U : T\r\ntype O<T> = T extends ObservableReadonly<infer U> ? U : T\r\n\r\n\r\n//TODO: Maybe port this to soby, as \"resolved\"\r\n\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8, T9>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8, T9], resolveFunction?: true): [F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>, F<T7>, F<T8>, F<T9>]\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8], resolveFunction?: true): [F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>, F<T7>, F<T8>]\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7>(value: readonly [T1, T2, T3, T4, T5, T6, T7], resolveFunction?: true): [F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>, F<T7>]\r\nexport function useResolved<T1, T2, T3, T4, T5, T6>(value: readonly [T1, T2, T3, T4, T5, T6], resolveFunction?: true): [F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>]\r\nexport function useResolved<T1, T2, T3, T4, T5>(value: readonly [T1, T2, T3, T4, T5], resolveFunction?: true): [F<T1>, F<T2>, F<T3>, F<T4>, F<T5>]\r\nexport function useResolved<T1, T2, T3, T4>(value: readonly [T1, T2, T3, T4], resolveFunction?: true): [F<T1>, F<T2>, F<T3>, F<T4>]\r\nexport function useResolved<T1, T2, T3>(value: readonly [T1, T2, T3], resolveFunction?: true): [F<T1>, F<T2>, F<T3>]\r\nexport function useResolved<T1, T2>(value: readonly [T1, T2], resolveFunction?: true): [F<T1>, F<T2>]\r\nexport function useResolved<T1>(value: readonly [T1], resolveFunction?: true): [F<T1>]\r\nexport function useResolved(value: readonly [], resolveFunction?: true): []\r\n\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8, T9>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8, T9], resolveFunction: false): [O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>, O<T7>, O<T8>, O<T9>]\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8], resolveFunction: false): [O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>, O<T7>, O<T8>]\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7>(value: readonly [T1, T2, T3, T4, T5, T6, T7], resolveFunction: false): [O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>, O<T7>]\r\nexport function useResolved<T1, T2, T3, T4, T5, T6>(value: readonly [T1, T2, T3, T4, T5, T6], resolveFunction: false): [O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>]\r\nexport function useResolved<T1, T2, T3, T4, T5>(value: readonly [T1, T2, T3, T4, T5], resolveFunction: false): [O<T1>, O<T2>, O<T3>, O<T4>, O<T5>]\r\nexport function useResolved<T1, T2, T3, T4>(value: readonly [T1, T2, T3, T4], resolveFunction: false): [O<T1>, O<T2>, O<T3>, O<T4>]\r\nexport function useResolved<T1, T2, T3>(value: readonly [T1, T2, T3], resolveFunction: false): [O<T1>, O<T2>, O<T3>]\r\nexport function useResolved<T1, T2>(value: readonly [T1, T2], resolveFunction: false): [O<T1>, O<T2>]\r\nexport function useResolved<T1>(value: readonly [T1], resolveFunction: false): [O<T1>]\r\nexport function useResolved(value: readonly [], resolveFunction: false): []\r\n\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8, T9], callback: FN<[F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>, F<T7>, F<T8>, F<T9>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8, R>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8], callback: FN<[F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>, F<T7>, F<T8>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, R>(value: readonly [T1, T2, T3, T4, T5, T6, T7], callback: FN<[F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>, F<T7>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, R>(value: readonly [T1, T2, T3, T4, T5, T6], callback: FN<[F<T1>, F<T2>, F<T3>, F<T4>, F<T5>, F<T6>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, T3, T4, T5, R>(value: readonly [T1, T2, T3, T4, T5], callback: FN<[F<T1>, F<T2>, F<T3>, F<T4>, F<T5>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, T3, T4, R>(value: readonly [T1, T2, T3, T4], callback: FN<[F<T1>, F<T2>, F<T3>, F<T4>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, T3, R>(value: readonly [T1, T2, T3], callback: FN<[F<T1>, F<T2>, F<T3>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, T2, R>(value: readonly [T1, T2], callback: FN<[F<T1>, F<T2>], R>, resolveFunction?: true): R\r\nexport function useResolved<T1, R>(value: readonly [T1], callback: FN<[F<T1>], R>, resolveFunction?: true): R\r\nexport function useResolved<R>(value: readonly [], callback: FN<[], R>, resolveFunction?: true): R\r\n\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8, T9, R>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8, T9], callback: FN<[O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>, O<T7>, O<T8>, O<T9>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, T8, R>(value: readonly [T1, T2, T3, T4, T5, T6, T7, T8], callback: FN<[O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>, O<T7>, O<T8>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, T7, R>(value: readonly [T1, T2, T3, T4, T5, T6, T7], callback: FN<[O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>, O<T7>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, T3, T4, T5, T6, R>(value: readonly [T1, T2, T3, T4, T5, T6], callback: FN<[O<T1>, O<T2>, O<T3>, O<T4>, O<T5>, O<T6>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, T3, T4, T5, R>(value: readonly [T1, T2, T3, T4, T5], callback: FN<[O<T1>, O<T2>, O<T3>, O<T4>, O<T5>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, T3, T4, R>(value: readonly [T1, T2, T3, T4], callback: FN<[O<T1>, O<T2>, O<T3>, O<T4>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, T3, R>(value: readonly [T1, T2, T3], callback: FN<[O<T1>, O<T2>, O<T3>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, T2, R>(value: readonly [T1, T2], callback: FN<[O<T1>, O<T2>], R>, resolveFunction: false): R\r\nexport function useResolved<T1, R>(value: readonly [T1], callback: FN<[O<T1>], R>, resolveFunction: false): R\r\nexport function useResolved<R>(value: readonly [], callback: FN<[], R>, resolveFunction: false): R\r\n\r\nexport function useResolved<T>(value: T, resolveFunction?: true): F<T>\r\nexport function useResolved<T>(value: T, resolveFunction: false): O<T>\r\n\r\nexport function useResolved<T, R>(value: T, callback: FN<[F<T>], R>, resolveFunction?: true): R\r\nexport function useResolved<T, R>(value: T, callback: FN<[O<T>], R>, resolveFunction: false): R\r\n\r\nexport function useResolved(values: any, callback: any, resolveFunction?: boolean) {\r\n\r\n  const isResolvable = (resolveFunction !== false && callback !== false) ? isFunction : isObservable\r\n  const resolve = (value: any) => isResolvable(value) ? value() : value\r\n\r\n  if (isArray(values)) {\r\n\r\n    const resolved = values.map(resolve)\r\n\r\n    if (isFunction(callback)) {\r\n\r\n      return callback.apply(undefined, resolved)\r\n\r\n    } else {\r\n\r\n      return resolved\r\n\r\n    }\r\n\r\n  } else {\r\n\r\n    const resolved = resolve(values)\r\n\r\n    if (isFunction(callback)) {\r\n\r\n      return callback(resolved)\r\n\r\n    } else {\r\n\r\n      return resolved\r\n\r\n    }\r\n\r\n  }\r\n\r\n}\r\n","\r\n\r\nimport { useEffect } from '../hooks/soby'\r\nimport { useResolved } from '../hooks/use_resolved'\r\nimport { $$ } from '../methods/soby'\r\nimport { castArray } from '../utils/lang'\r\nimport type { ArrayMaybe, Disposer, FN, FunctionMaybe, ObservableMaybe } from '../types'\r\n\r\n\r\nexport function useEventListener<T extends Window, U extends keyof WindowEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[WindowEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends Document, U extends keyof DocumentEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[DocumentEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends HTMLBodyElement, U extends keyof HTMLBodyElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[HTMLBodyElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends HTMLFrameSetElement, U extends keyof HTMLFrameSetElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[HTMLFrameSetElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends HTMLMediaElement, U extends keyof HTMLMediaElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[HTMLMediaElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends HTMLVideoElement, U extends keyof HTMLVideoElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[HTMLVideoElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends HTMLElement, U extends keyof HTMLElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[HTMLElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SVGSVGElement, U extends keyof SVGSVGElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[SVGSVGElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SVGElement, U extends keyof SVGElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[SVGElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MathMLElement, U extends keyof MathMLElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MathMLElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends Element, U extends keyof ElementEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[ElementEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends AbortSignal, U extends keyof AbortSignalEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[AbortSignalEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends AbstractWorker, U extends keyof AbstractWorkerEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[AbstractWorkerEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends Animation, U extends keyof AnimationEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[AnimationEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends BroadcastChannel, U extends keyof BroadcastChannelEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[BroadcastChannelEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends CSSAnimation, U extends keyof AnimationEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[AnimationEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends CSSTransition, U extends keyof AnimationEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[AnimationEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends FileReader, U extends keyof FileReaderEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[FileReaderEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends IDBDatabase, U extends keyof IDBDatabaseEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[IDBDatabaseEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends IDBOpenDBRequest, U extends keyof IDBOpenDBRequestEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[IDBOpenDBRequestEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends IDBRequest, U extends keyof IDBRequestEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[IDBRequestEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends IDBTransaction, U extends keyof IDBTransactionEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[IDBTransactionEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaDevices, U extends keyof MediaDevicesEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaDevicesEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaKeySession, U extends keyof MediaKeySessionEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaKeySessionEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaQueryList, U extends keyof MediaQueryListEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaQueryListEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaRecorder, U extends keyof MediaRecorderEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaRecorderEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaSource, U extends keyof MediaSourceEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaSourceEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaStream, U extends keyof MediaStreamEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaStreamEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MediaStreamTrack, U extends keyof MediaStreamTrackEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MediaStreamTrackEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends MessagePort, U extends keyof MessagePortEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[MessagePortEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends Notification, U extends keyof NotificationEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[NotificationEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends PaymentRequest, U extends keyof PaymentRequestEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[PaymentRequestEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends Performance, U extends keyof PerformanceEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[PerformanceEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends PermissionStatus, U extends keyof PermissionStatusEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[PermissionStatusEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends PictureInPictureWindow, U extends keyof PictureInPictureWindowEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[PictureInPictureWindowEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends RemotePlayback, U extends keyof RemotePlaybackEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[RemotePlaybackEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends ScreenOrientation, U extends keyof ScreenOrientationEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[ScreenOrientationEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends ServiceWorker, U extends keyof ServiceWorkerEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[ServiceWorkerEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends ServiceWorkerContainer, U extends keyof ServiceWorkerContainerEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[ServiceWorkerContainerEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends ServiceWorkerRegistration, U extends keyof ServiceWorkerRegistrationEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[ServiceWorkerRegistrationEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends ShadowRoot, U extends keyof ShadowRootEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[ShadowRootEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SharedWorker, U extends keyof AbstractWorkerEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[AbstractWorkerEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SourceBuffer, U extends keyof SourceBufferEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[SourceBufferEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SourceBufferList, U extends keyof SourceBufferListEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[SourceBufferListEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SpeechSynthesis, U extends keyof SpeechSynthesisEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[SpeechSynthesisEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends SpeechSynthesisUtterance, U extends keyof SpeechSynthesisUtteranceEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[SpeechSynthesisUtteranceEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends VisualViewport, U extends keyof VisualViewportEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[VisualViewportEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends WebSocket, U extends keyof WebSocketEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[WebSocketEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends Worker, U extends keyof WorkerEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[WorkerEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends XMLDocument, U extends keyof DocumentEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[DocumentEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends XMLHttpRequest, U extends keyof XMLHttpRequestEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[XMLHttpRequestEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends XMLHttpRequestEventTarget, U extends keyof XMLHttpRequestEventTargetEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[XMLHttpRequestEventTargetEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends XMLHttpRequestUpload, U extends keyof XMLHttpRequestEventTargetEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[XMLHttpRequestEventTargetEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends EventSource, U extends keyof EventSourceEventMap>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<U>, handler: ObservableMaybe<FN<[EventSourceEventMap[U]], void>>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer\r\nexport function useEventListener<T extends EventTarget>(target: FunctionMaybe<ArrayMaybe<T | undefined>>, event: FunctionMaybe<string>, handler: ObservableMaybe<EventListener>, options?: FunctionMaybe<true | AddEventListenerOptions>): Disposer {\r\n\r\n  const stack = new Error()\r\n\r\n  return useEffect((stack) => {\r\n\r\n    const fn = $$(handler, false)\r\n\r\n    return useResolved([target, event, options], (target, event, options) => {\r\n\r\n      const targets = castArray(target)\r\n\r\n      targets.forEach(target => {\r\n\r\n        target?.addEventListener(event, fn, options)\r\n\r\n      })\r\n\r\n      return (stack): void => {\r\n\r\n        targets.forEach(target => {\r\n\r\n          target?.removeEventListener(event, fn, options)\r\n\r\n        })\r\n\r\n      }\r\n\r\n    })\r\n\r\n  }, { sync: 'init', stack })\r\n\r\n}","\r\n\r\nimport { useCleanup } from '../hooks/soby'\r\nimport { useEventListener } from '../hooks/use_event_listener'\r\nimport { castArray } from '../utils/lang'\r\nimport type { ArrayMaybe } from '../types'\r\n\r\n\r\nexport const useAbortController = (signals: ArrayMaybe<AbortSignal> = []): AbortController => {\r\n\r\n  signals = castArray(signals)\r\n\r\n  const controller = new AbortController()\r\n  const abort = controller.abort.bind(controller)\r\n  const aborted = signals.some(signal => signal.aborted)\r\n\r\n  if (aborted) {\r\n\r\n    abort()\r\n\r\n  } else {\r\n\r\n    signals.forEach(signal => useEventListener(signal, 'abort', abort))\r\n\r\n    useCleanup(abort)\r\n\r\n  }\r\n\r\n  return controller\r\n\r\n}\r\n","\r\n\r\nimport { useAbortController } from '../hooks/use_abort_controller'\r\nimport type { ArrayMaybe } from '../types'\r\n\r\n\r\nexport const useAbortSignal = (signals: ArrayMaybe<AbortSignal> = []): AbortSignal => {\r\n\r\n  return useAbortController(signals).signal\r\n\r\n}\r\n","\r\n\r\nimport { useEffect } from '../hooks/soby'\r\nimport { useSuspended } from '../hooks/soby'\r\nimport { $$ } from '../methods/soby'\r\nimport { untrack } from '../methods/soby'\r\nimport type { Disposer, FN, FunctionMaybe, ObservableMaybe } from '../types'\r\nimport { Stack } from '../soby'\r\n\r\n\r\nexport const useScheduler = <T, U>({ loop, once, callback, cancel, schedule, stack }: { loop?: FunctionMaybe<boolean>, once?: boolean, callback: ObservableMaybe<FN<[U]>>, cancel: FN<[T]>, schedule: ((callback: FN<[U]>) => T), stack: Stack }): Disposer => {\r\n\r\n  let executed = false\r\n  let suspended = useSuspended(stack)\r\n  let tickId: T\r\n\r\n  const work = (value: U): void => {\r\n\r\n    executed = true\r\n\r\n    if ($$(loop)) tick()\r\n\r\n    $$(callback, false)(value)\r\n\r\n  }\r\n\r\n  const tick = (): void => {\r\n\r\n    tickId = untrack(() => schedule(work))\r\n\r\n  }\r\n\r\n  const dispose = (): void => {\r\n\r\n    untrack(() => cancel(tickId))\r\n\r\n  }\r\n\r\n  useEffect(() => {\r\n\r\n    if (once && executed) return\r\n\r\n    if (suspended()) return\r\n\r\n    tick()\r\n\r\n    return dispose\r\n\r\n  }, { suspense: false, stack: stack })\r\n\r\n  return dispose\r\n\r\n}","\r\n\r\nimport { useScheduler } from '../hooks/use_scheduler'\r\nimport type { Disposer, ObservableMaybe } from '../types'\r\n\r\n\r\nexport const useAnimationFrame = (callback: ObservableMaybe<FrameRequestCallback>): Disposer => {\r\n  const stack = new Error()\r\n\r\n  return useScheduler({\r\n    callback,\r\n    once: true,\r\n    cancel: cancelAnimationFrame,\r\n    schedule: requestAnimationFrame,\r\n    stack\r\n  })\r\n\r\n}\r\n","\r\n\r\nimport { useScheduler } from '../hooks/use_scheduler'\r\nimport type { Disposer, ObservableMaybe } from '../types'\r\n\r\n\r\nexport const useAnimationLoop = (callback: ObservableMaybe<FrameRequestCallback>): Disposer => {\r\n  const stack = new Error()\r\n\r\n  return useScheduler({\r\n    callback,\r\n    loop: true,\r\n    cancel: cancelAnimationFrame,\r\n    schedule: requestAnimationFrame,\r\n    stack\r\n  })\r\n\r\n}\r\n","/**\r\n * useContext Hook for Woby Framework\r\n * \r\n * This hook provides access to context values within functional components.\r\n * It works with contexts created by createContext and supports both default and undefined values.\r\n * \r\n * @module useContext\r\n */\r\n\r\nimport { CONTEXTS_DATA } from '../constants'\r\nimport { context } from '../soby'\r\nimport { isNil } from '../utils/lang'\r\nimport type { Context, ContextWithDefault } from '../types'\r\n// import { webComponentMap } from '../methods/create_context'\r\n\r\n/**\r\n * Accesses the current value of a context\r\n * \r\n * This hook returns the current context value for the specified context.\r\n * It must be called within a functional component or a custom hook.\r\n * \r\n * The hook will first try to get the context value from the nearest Provider component\r\n * above it in the tree. If there is no Provider above it, it will return the defaultValue\r\n * if one was provided to createContext, otherwise it returns undefined.\r\n * \r\n * @template T - The type of the context value\r\n * @param Context - The context object created by createContext\r\n * @returns The current context value\r\n * \r\n * @example\r\n * ```tsx\r\n * // Create a context\r\n * const ThemeContext = createContext('light')\r\n * \r\n * // Use the context in a component\r\n * const ThemedButton = () => {\r\n *   const theme = useContext(ThemeContext)\r\n *   return <button className={`theme-${theme}`}>Click me</button>\r\n * }\r\n * \r\n * // Provide a value for the context\r\n * const App = () => (\r\n *   <ThemeContext.Provider value=\"dark\">\r\n *     <ThemedButton />\r\n *   </ThemeContext.Provider>\r\n * )\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Context with undefined default\r\n * const UserContext = createContext<User | undefined>(undefined)\r\n * \r\n * const UserProfile = () => {\r\n *   const user = useContext(UserContext)\r\n *   if (!user) return <div>Please log in</div>\r\n *   return <div>Welcome, {user.name}!</div>\r\n * }\r\n * ```\r\n */\r\nexport function useContext<T>(Context: ContextWithDefault<T>): T\r\nexport function useContext<T>(Context: Context<T>): T | undefined\r\nexport function useContext<T>(Context: ContextWithDefault<T> | Context<T>): T | undefined {\r\n\r\n  // First try to get context from webComponentMap (for custom elements)\r\n  const { symbol, defaultValue } = CONTEXTS_DATA.get(Context) || { symbol: Symbol() }\r\n\r\n  // if (webComponentMap[symbol] !== undefined) {\r\n  //   return isNil(webComponentMap[symbol]) ? defaultValue : webComponentMap[symbol]\r\n  // }\r\n\r\n  // Fall back to Soby's context system (for JSX components)\r\n  const valueContext = context(symbol)\r\n  const value = isNil(valueContext) ? defaultValue : valueContext\r\n\r\n  return value\r\n\r\n}\r\n","\r\n/* IMPORT */\r\n\r\nimport { SYMBOL_SUSPENSE, SYMBOL_SUSPENSE_COLLECTOR } from '../constants'\r\nimport { useCleanup } from '../hooks/soby'\r\nimport { useMemo } from '../hooks/soby'\r\nimport { $ } from '../methods/soby'\r\nimport { context, resolve } from '../soby'\r\nimport type { SuspenseCollectorData, SuspenseData } from '../types'\r\n\r\n/* MAIN */\r\n\r\nexport const SuspenseContext = {\r\n\r\n  create: (): SuspenseData => {\r\n\r\n    const count = $(0)\r\n    const active = useMemo(() => !!count())\r\n    const increment = (nr: number = 1) => count(prev => prev + nr)\r\n    const decrement = (nr: number = -1) => queueMicrotask(() => count(prev => prev + nr))\r\n    const data = { active, increment, decrement }\r\n\r\n    const collector = context<SuspenseCollectorData>(SYMBOL_SUSPENSE_COLLECTOR)\r\n\r\n    if (collector) {\r\n\r\n      collector?.register(data)\r\n\r\n      useCleanup(() => collector.unregister(data))\r\n\r\n    }\r\n\r\n    return data\r\n\r\n  },\r\n\r\n  get: (): SuspenseData | undefined => {\r\n\r\n    return context<SuspenseData>(SYMBOL_SUSPENSE)\r\n\r\n  },\r\n\r\n  wrap: <T>(fn: (data: SuspenseData) => T) => {\r\n\r\n    const data = SuspenseContext.create()\r\n\r\n    return context({ [SYMBOL_SUSPENSE]: data }, () => {\r\n\r\n      return resolve(() => fn(data))\r\n\r\n    })\r\n\r\n  }\r\n\r\n}","import { SuspenseContext } from '../components/suspense.context'\r\nimport { useCleanup } from '../hooks/soby'\r\nimport type { SuspenseData } from '../types'\r\n\r\nexport class SuspenseManager {\r\n\r\n  /* VARIABLES */\r\n\r\n  private suspenses = new Map<SuspenseData, number>();\r\n\r\n  /* API */\r\n\r\n  change = (suspense: SuspenseData, nr: number): void => {\r\n\r\n    const counter = this.suspenses.get(suspense) || 0\r\n    const counterNext = Math.max(0, counter + nr)\r\n\r\n    if (counter === counterNext) return\r\n\r\n    if (counterNext) {\r\n\r\n      this.suspenses.set(suspense, counterNext)\r\n\r\n    } else {\r\n\r\n      this.suspenses.delete(suspense)\r\n\r\n    }\r\n\r\n    if (nr > 0) {\r\n\r\n      suspense.increment(nr)\r\n\r\n    } else {\r\n\r\n      suspense.decrement(nr)\r\n\r\n    }\r\n\r\n  };\r\n\r\n  suspend = (): void => {\r\n\r\n    const suspense = SuspenseContext.get()\r\n\r\n    if (!suspense) return\r\n\r\n    this.change(suspense, 1)\r\n\r\n    useCleanup(() => {\r\n\r\n      this.change(suspense, -1)\r\n\r\n    })\r\n\r\n  };\r\n\r\n  unsuspend = (): void => {\r\n\r\n    this.suspenses.forEach((counter, suspense) => {\r\n\r\n      this.change(suspense, - counter)\r\n\r\n    })\r\n\r\n  };\r\n\r\n}","\r\n/* IMPORT */\r\n\r\nimport { SuspenseManager } from '../components/suspense.manager'\r\nimport { useCheapDisposed } from '../hooks/use_cheap_disposed'\r\nimport { useReadonly } from '../hooks/soby'\r\nimport { useRenderEffect } from '../hooks/use_render_effect'\r\nimport { $ } from '../methods/soby'\r\nimport { $$ } from '../methods/soby'\r\nimport { assign, castError, isPromise } from '../utils/lang'\r\nimport type { ObservableMaybe, PromiseMaybe, ResourceStaticPending, ResourceStaticRejected, ResourceStaticResolved, ResourceStatic, ResourceFunction, Resource } from '../types'\r\n\r\n/* MAIN */\r\n\r\n//TODO: Maybe port this to soby, as \"from\"\r\n//TODO: Option for returning the resource as a store, where also the returned value gets wrapped in a store\r\n//FIXME: SSR demo: toggling back and forth between /home and /loader is buggy, /loader gets loaded with no data, which is wrong\r\n\r\nexport const useResource = <T>(fetcher: (() => ObservableMaybe<PromiseMaybe<T>>)): Resource<T> => {\r\n\r\n  const pending = $(true)\r\n  const error = $<Error>()\r\n  const value = $<T>()\r\n  const latest = $<T>()\r\n\r\n  const { suspend, unsuspend } = new SuspenseManager()\r\n  //@ts-ignore\r\n  const resourcePending: ResourceStaticPending<T> = { pending: true, get value(): undefined { return void suspend() }, get latest(): T | undefined { return latest() ?? void suspend() } }\r\n  const resourceRejected: ResourceStaticRejected = { pending: false, get error(): Error { return error()! }, get value(): never { throw error()! }, get latest(): never { throw error()! } }\r\n  const resourceResolved: ResourceStaticResolved<T> = { pending: false, get value(): T { return value()! }, get latest(): T { return value()! } }\r\n  const resourceFunction: ResourceFunction<T> = { pending: () => pending(), error: () => error(), value: () => resource().value, latest: () => resource().latest }\r\n  const resource = $<ResourceStatic<T>>(resourcePending)\r\n\r\n  const stack = new Error()\r\n\r\n  useRenderEffect(() => {\r\n\r\n    const disposed = useCheapDisposed()\r\n\r\n    const onPending = (): void => {\r\n\r\n      pending(true)\r\n      error(undefined)\r\n      value(undefined)\r\n      resource(resourcePending)\r\n\r\n    }\r\n\r\n    const onResolve = (result: T): void => {\r\n\r\n      if (disposed()) return\r\n\r\n      pending(false)\r\n      error(undefined)\r\n      value(() => result)\r\n      latest(() => result)\r\n      resource(resourceResolved)\r\n\r\n    }\r\n\r\n    const onReject = (exception: unknown): void => {\r\n\r\n      if (disposed()) return\r\n\r\n      pending(false)\r\n      error(castError(exception))\r\n      value(undefined)\r\n      latest(undefined)\r\n      resource(resourceRejected)\r\n\r\n    }\r\n\r\n    const fetch = (): void => {\r\n\r\n      try {\r\n\r\n        const value = $$(fetcher())\r\n\r\n        if (isPromise(value)) {\r\n\r\n          onPending()\r\n\r\n          value.then(onResolve, onReject)\r\n          value.then(unsuspend, unsuspend)\r\n\r\n        } else {\r\n\r\n          onResolve(value)\r\n\r\n        }\r\n\r\n      } catch (error: unknown) {\r\n\r\n        onReject(error)\r\n\r\n      }\r\n\r\n    }\r\n\r\n    fetch()\r\n  }, stack)\r\n\r\n  return assign(useReadonly(resource, stack), resourceFunction)\r\n\r\n}\r\n","\r\n\r\nimport { useAbortSignal } from '../hooks/use_abort_signal'\r\nimport { useResolved } from '../hooks/use_resolved'\r\nimport { useResource } from '../hooks/use_resource'\r\nimport type { FunctionMaybe, Resource } from '../types'\r\n\r\n\r\nexport const useFetch = (request: FunctionMaybe<RequestInfo>, init?: FunctionMaybe<RequestInit>): Resource<Response> => {\r\n\r\n  return useResource(() => {\r\n\r\n    return useResolved([request, init], (request, init = {}) => {\r\n\r\n      const signal = useAbortSignal(init.signal || [])\r\n\r\n      init.signal = signal\r\n\r\n      return fetch(request, init)\r\n\r\n    })\r\n\r\n  })\r\n\r\n}\r\n","\r\n\r\nimport { useScheduler } from '../hooks/use_scheduler'\r\nimport { $$ } from '../methods/soby'\r\nimport type { Disposer, FunctionMaybe, ObservableMaybe } from '../types'\r\n\r\n\r\nexport const useIdleCallback = (callback: ObservableMaybe<IdleRequestCallback>, options?: FunctionMaybe<IdleRequestOptions>): Disposer => {\r\n\r\n  const stack = new Error()\r\n\r\n  return useScheduler({\r\n    callback,\r\n    once: true,\r\n    cancel: cancelIdleCallback,\r\n    schedule: callback => requestIdleCallback(callback, $$(options)),\r\n    stack\r\n  })\r\n\r\n}\r\n","\r\n\r\nimport { useScheduler } from '../hooks/use_scheduler'\r\nimport { $$ } from '../methods/soby'\r\nimport type { Disposer, FunctionMaybe, ObservableMaybe } from '../types'\r\n\r\n\r\nexport const useIdleLoop = (callback: ObservableMaybe<IdleRequestCallback>, options?: FunctionMaybe<IdleRequestOptions>): Disposer => {\r\n\r\n  const stack = new Error()\r\n\r\n  return useScheduler({\r\n    callback,\r\n    loop: true,\r\n    cancel: cancelIdleCallback,\r\n    schedule: callback => requestIdleCallback(callback, $$(options)),\r\n    stack\r\n  })\r\n\r\n}","\r\n\r\nimport { useScheduler } from '../hooks/use_scheduler'\r\nimport { $$ } from '../methods/soby'\r\nimport type { Callback, Disposer, FunctionMaybe, ObservableMaybe } from '../types'\r\n\r\n\r\nexport const useInterval = (callback: ObservableMaybe<Callback>, ms?: FunctionMaybe<number>): Disposer => {\r\n\r\n  const stack = new Error()\r\n\r\n  return useScheduler({\r\n    callback,\r\n    cancel: clearInterval,\r\n    schedule: callback => setInterval(callback, $$(ms)),\r\n    stack\r\n  })\r\n\r\n}\r\n","\r\nimport { useResource } from '../hooks/use_resource'\r\nimport { $$ } from '../methods/soby'\r\nimport type { FunctionMaybe, Resource } from '../types'\r\n\r\n\r\nexport const usePromise = <T>(promise: FunctionMaybe<Promise<T>>): Resource<T> => {\r\n\r\n  return useResource(() => $$(promise))\r\n\r\n}","\r\n\r\nimport { useScheduler } from '../hooks/use_scheduler'\r\nimport { $$ } from '../methods/soby'\r\nimport type { Callback, Disposer, FunctionMaybe, ObservableMaybe } from '../types'\r\n\r\n\r\nexport const useTimeout = (callback: ObservableMaybe<Callback>, ms?: FunctionMaybe<number>): Disposer => {\r\n\r\n  const stack = new Error()\r\n\r\n  return useScheduler({\r\n    callback,\r\n    once: true,\r\n    cancel: clearTimeout,\r\n    schedule: callback => setTimeout(callback, $$(ms)),\r\n    stack\r\n  })\r\n\r\n}\r\n","/**\r\n * useMounted Hook\r\n * \r\n * A hook that provides a ref and a mounted state for components. This hook is useful\r\n * for tracking when a component is mounted in the DOM and getting a reference to the DOM element.\r\n * \r\n * The hook returns an object with:\r\n * - ref: An observable reference to the DOM element (uses external ref if provided, otherwise creates a new one)\r\n * - isMounted: A memoized observable boolean indicating if the element is mounted\r\n * - mount: A comment node used for debugging mount operations (only when no external ref is provided)\r\n * \r\n * @module useMounted\r\n */\r\n\r\nimport { Observable } from '../soby'\r\nimport { $ } from '../methods/soby'\r\nimport { $$ } from '../methods/soby'\r\nimport { useMemo } from './soby'\r\nimport { mark } from '../utils/mark'\r\n\r\n/**\r\n * useMounted Hook\r\n * \r\n * Provides a ref and a mounted state for components. \r\n * - If an external ref is provided, it will be used\r\n * - If no ref is provided, a new one will be created internally\r\n * - The mount property provides a comment node for debugging (only when no external ref is provided)\r\n * \r\n * @template T - The type of HTMLElement\r\n * @param ref - Optional existing observable ref to use\r\n * @returns Object containing ref, isMounted, and mount properties\r\n * \r\n * @example\r\n * ```tsx\r\n * // Using internally created ref\r\n * const { ref, isMounted } = useMounted<HTMLDivElement>()\r\n * \r\n * useEffect(() => {\r\n *   if ($$(isMounted)) {\r\n *     console.log('Component is mounted')\r\n *   }\r\n * })\r\n * \r\n * return <div ref={ref}>Hello World</div>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Using externally provided ref\r\n * const myRef = $<HTMLDivElement>()\r\n * const { isMounted } = useMounted(myRef)\r\n * \r\n * return <div ref={myRef}>Hello World</div>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // With debugging enabled and internal ref, a comment node will be created to track mount\r\n * const { ref, isMounted, mount } = useMounted<HTMLDivElement>()\r\n * \r\n * return (\r\n *   <>\r\n *     {mount}\r\n *     <div ref={ref}>Hello World</div>\r\n *   </>\r\n * )\r\n * ```\r\n */\r\nexport function useMounted<T extends HTMLElement>(ref?: Observable<T>) {\r\n  // If a ref is provided externally, use it; otherwise create a new one\r\n  const given = !!ref\r\n  const internalRef = ref ?? $<T>()\r\n\r\n  // isMounted is true when the ref is attached to a DOM element\r\n  const isMounted = useMemo(() => !!$$(internalRef))\r\n\r\n  // Only create a mount point (comment node) for debugging when no external ref is provided\r\n  const mount = !given ? mark('mount', internalRef) : undefined\r\n\r\n  // Return the appropriate ref based on whether one was provided\r\n  return {\r\n    ref: internalRef,\r\n    isMounted,\r\n    mount: mount\r\n  }\r\n}\r\n","/**\r\n * useMountedContext Hook\r\n * \r\n * A specialized hook that provides context values for components with enhanced support \r\n * for custom elements. This hook works in both JSX/TSX components and custom elements \r\n * defined in HTML, providing seamless context access across both paradigms.\r\n * \r\n * For custom elements, it attempts to retrieve context from the parent element's \r\n * context property by traversing the DOM tree. For JSX/TSX components, it falls back \r\n * to the standard useContext hook.\r\n * \r\n * @module useMountedContext\r\n */\r\n\r\nimport { $$ } from '../methods/soby'\r\nimport { useMemo } from './soby'\r\nimport { Context, ContextWithDefault } from '../types'\r\nimport type { ObservableMaybe } from '../types'\r\nimport { useAttached } from './use_attached'\r\nimport { Observable } from 'soby'\r\n\r\n/**\r\n * useMountedContext Hook\r\n * \r\n * Provides context values for components with support for both JSX/TSX and custom elements.\r\n * When used without a ref parameter, it returns both a ref and the context value.\r\n * When used with a ref parameter, it returns only the context value.\r\n * \r\n * For custom elements, it attempts to retrieve context from the parent element's context property.\r\n * For JSX/TSX components, it falls back to the standard useContext hook.\r\n * \r\n * @template T - The type of the context value\r\n * @template E - The type of HTMLElement\r\n * @param Context - The context object created with createContext\r\n * @param ref - Optional existing observable ref to use\r\n * @returns When used with destructuring as [context, mount], returns a tuple with the context value and a mounting placeholder comment element\r\n * \r\n * @example\r\n * ```tsx\r\n * // Usage without ref (returns both ref and context)\r\n * const CounterContext = createContext<number>(0)\r\n * const { ref, context } = useMountedContext(CounterContext)\r\n * \r\n * return <div ref={ref}>Context value: {context}</div>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Usage with existing ref (returns only context)\r\n * const CounterContext = createContext<number>(0)\r\n * const myRef = $<HTMLDivElement>()\r\n * const context = useMountedContext(CounterContext, myRef)\r\n * \r\n * return <div ref={myRef}>Context value: {context}</div>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Usage in custom elements for rendering only (mount is auto taken care of)\r\n * const CounterContext = createContext<number>(0)\r\n * const context = useMountedContext(CounterContext) //direct use\r\n * \r\n * return <span>(Context Value = <b>{context}</b>)</span>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Usage in custom elements with manual mounting (required when processing context value)\r\n * const CounterContext = createContext<number>(0)\r\n * const [context, m] = useMountedContext(CounterContext)\r\n * // Must put in {m} mounting component manually to receive context\r\n * return <span>(Processed Context Value = <b>{useMemo(() => $$($$(context)) + ' Processed')}</b>){m}</span>\r\n * ```\r\n * \r\n * @example\r\n * ```html\r\n * <!-- Usage in HTML custom elements -->\r\n * <counter-context-provider value=\"42\">\r\n *   <counter-display><!-- This child can access parent's context --></counter-display>\r\n * </counter-context-provider>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Custom element implementation using useMountedContext\r\n * const CounterDisplay = defaults(() => ({}), () => {\r\n *   const [context, mount] = useMountedContext(CounterContext)\r\n *   return <div>{mount}Count: {context}</div>\r\n * })\r\n * \r\n * customElement('counter-display', CounterDisplay)\r\n * ```\r\n */\r\nexport function useMountedContext<T, E extends HTMLElement>(ctx: ContextWithDefault<T> | Context<T>, ref?: ObservableMaybe<Node>) {\r\n  const { parent: provider, ref: rf, mount } = useAttached(ref, p => (p as Element).tagName === 'CONTEXT-PROVIDER' && !!p?.[ctx.symbol])\r\n\r\n  const context = useMemo(() => {\r\n    if (!$$(provider)) return\r\n    return $$(provider)?.[ctx.symbol]\r\n  })\r\n  Object.defineProperties(context, {\r\n    length: {\r\n      value: 2,\r\n      writable: false,\r\n      enumerable: false,\r\n      configurable: false\r\n    }\r\n  })\r\n\r\n  return Object.assign([context, mount], context, { mount, ref: rf, context }) //as JSX.Child //& Observable<T> & { mount: typeof mount, ref: Observable<Node> }\r\n  // return { mount, ref: rf, context }\r\n}\r\n\r\n","\r\n\r\nimport { untrack } from '../methods/soby'\r\nimport { tryCatch } from 'soby'\r\nimport { isFunction } from '../utils/lang'\r\nimport type { Callback, Child, FN, ObservableReadonly } from '../types'\r\n\r\n\r\nexport const ErrorBoundary = ({ fallback, children }: { fallback: Child | FN<[{ error: Error, reset: Callback }], Child>, children: Child }): ObservableReadonly<Child> => {\r\n\r\n  return tryCatch(children, props => {\r\n    const error = props.error instanceof Error ? props.error : new Error(String(props.error ?? 'Unknown error'))\r\n    const newProps = { error, reset: props.reset }\r\n    return untrack(() => isFunction(fallback) ? fallback(newProps) : fallback)\r\n  })\r\n\r\n}\r\n","\r\n\r\nimport { for as _for } from '../soby'\r\nimport type { Child, FunctionMaybe, Indexed, ObservableReadonly } from '../types'\r\n\r\n\r\nexport function For<T>({ values, fallback, unkeyed, children }: { values: FunctionMaybe<readonly T[]>, fallback?: Child, unkeyed?: false, children: ((value: T, index: FunctionMaybe<number>) => Child) }): ObservableReadonly<Child>\r\nexport function For<T>({ values, fallback, unkeyed, children }: { values: FunctionMaybe<readonly T[]>, fallback?: Child, unkeyed: true, children: ((value: Indexed<T>, index: FunctionMaybe<number>) => Child) }): ObservableReadonly<Child>\r\nexport function For<T>({ values, fallback, unkeyed, children }: { values: FunctionMaybe<readonly T[]>, fallback?: Child, unkeyed?: boolean, children: ((value: T | Indexed<T>, index: FunctionMaybe<number>) => Child) }): ObservableReadonly<Child> {\r\n\r\n    return _for(values, children, fallback, { unkeyed } as any) //TSC\r\n\r\n}","\r\nimport { useMemo } from '../hooks/soby'\r\nimport { $$ } from '../methods/soby'\r\nimport { isNil } from '../utils/lang'\r\nimport type { FunctionMaybe } from '../types'\r\n\r\n\r\n//TODO: Maybe port this to soby, as \"when\" or \"is\" or \"guarded\"\r\n//TODO: Optimize this, checking if the value is actually potentially reactive\r\n\r\nexport const useGuarded = <T, U extends T>(value: FunctionMaybe<T>, guard: ((value: T) => value is U)): (() => U) => {\r\n\r\n  let valueLast: U | undefined\r\n\r\n  const guarded = useMemo(() => {\r\n\r\n    const current = $$(value)\r\n\r\n    if (!guard(current)) return valueLast\r\n\r\n    return valueLast = current\r\n\r\n  })\r\n\r\n  return (): U => {\r\n\r\n    const current = guarded()\r\n\r\n    if (isNil(current)) throw new Error('The value never passed the type guard')\r\n\r\n    return current\r\n\r\n  }\r\n\r\n}\r\n\r\n\r\n","\r\n\r\nimport { isObservable } from '../methods/soby'\r\nimport { useGuarded } from '../hooks/use_guarded'\r\nimport { useUntracked } from '../hooks/soby'\r\nimport { ternary } from '../soby'\r\nimport { isComponent, isFunction, isTruthy } from '../utils/lang'\r\nimport type { Child, FunctionMaybe, ObservableReadonly, Truthy } from '../types'\r\n\r\n\r\n//TODO: Support an is/guard prop, maybe\r\n\r\nexport const If = <T>({ when, fallback, children }: { when: FunctionMaybe<T>, fallback?: Child, children: Child | ((value: (() => Truthy<T>)) => Child) }): ObservableReadonly<Child> => {\r\n\r\n  if (isFunction(children) && !isObservable(children as any) && !isComponent(children)) { // Calling the children function with an (() => Truthy<T>)\r\n\r\n    const truthy = useGuarded(when, isTruthy)\r\n\r\n    return ternary(when, useUntracked(() => (children as Function)(truthy)), fallback)\r\n\r\n  } else { // Just passing the children along\r\n\r\n    return ternary(when, children as Child, fallback) //TSC\r\n\r\n  }\r\n\r\n}\r\n","\r\n\r\nimport { SuspenseContext } from '../components/suspense.context'\r\nimport { useMemo } from '../hooks/soby'\r\nimport { useSuspense } from '../hooks/soby'\r\nimport { resolve } from '../methods/soby'\r\nimport { $$ } from '../methods/soby'\r\nimport { suspense as _suspense, ternary } from '../soby'\r\nimport type { Child, FunctionMaybe, ObservableReadonly } from '../types'\r\n\r\n\r\nexport const Suspense = ({ when, fallback, children }: { when?: FunctionMaybe<unknown>, fallback?: Child, children?: Child }): ObservableReadonly<Child> => {\r\n\r\n  return SuspenseContext.wrap(suspense => {\r\n\r\n    const condition = useMemo(() => !!$$(when) || suspense.active())\r\n\r\n    const stack = new Error()\r\n    const childrenSuspended =\r\n      useSuspense(condition, () => resolve(children), stack)\r\n\r\n    return ternary(condition, fallback, childrenSuspended)\r\n\r\n  })\r\n\r\n}","\r\n\r\nimport { switch as _switch } from '../soby'\r\nimport { assign, castArray } from '../utils/lang'\r\nimport type { Child, ChildWithMetadata, FunctionMaybe, ObservableReadonly } from '../types'\r\n\r\n/* MAIN */\r\n\r\n//TODO: Enforce children of Switch to be of type Switch.Case or Switch.Default\r\n\r\nexport const Switch = <T>({ when, fallback, children }: { when: FunctionMaybe<T>, fallback?: Child, children: Child }): ObservableReadonly<Child> => {\r\n\r\n  const childrenWithValues = castArray(children) as (() => ChildWithMetadata<[T, Child] | [Child]>)[] //TSC\r\n  const values = childrenWithValues.map(child => child().metadata)\r\n\r\n  return _switch(when, values as any, fallback) //TSC\r\n\r\n}\r\n\r\n/* UTILITIES */\r\n\r\nSwitch.Case = <T>({ when, children }: { when: T, children: Child }): ChildWithMetadata<[T, Child]> => {\r\n\r\n  const metadata: { metadata: [T, Child] } = { metadata: [when, children] }\r\n\r\n  return assign(() => children, metadata)\r\n\r\n}\r\n\r\nSwitch.Default = ({ children }: { children: Child }): ChildWithMetadata<[Child]> => {\r\n\r\n  const metadata: { metadata: [Child] } = { metadata: [children] }\r\n\r\n  return assign(() => children, metadata)\r\n\r\n}","import { ternary } from '../soby'\r\nimport type { Child, FunctionMaybe, ObservableReadonly } from '../types'\r\n\r\nexport const Ternary = ({ when, children }: { when: FunctionMaybe<unknown>, children: [Child, Child] }): ObservableReadonly<Child> => {\r\n\r\n  return ternary(when, children[0], children[1])\r\n\r\n}","/**\r\n * Stylesheet utility functions for the Woby framework\r\n * \r\n * This module provides utility functions for working with stylesheets in the browser,\r\n * including converting document stylesheets to constructed stylesheets with caching\r\n * and observing stylesheet changes.\r\n * \r\n * @module stylesheetUtils\r\n */\r\n\r\n// Cache for converted stylesheets\r\nlet cachedConstructedSheets: CSSStyleSheet[] | null = null\r\nlet stylesheetObserver: MutationObserver | null = null\r\n\r\n/**\r\n * Converts all document stylesheets to constructed stylesheets with caching\r\n * \r\n * This function converts all stylesheets in the document to CSSStyleSheet objects\r\n * that can be used in shadow DOM. It caches the results for performance and\r\n * automatically invalidates the cache when stylesheets change.\r\n * \r\n * @returns Array of CSSStyleSheet objects representing all stylesheets in the document\r\n * \r\n * @example\r\n * ```typescript\r\n * const stylesheets = convertAllDocumentStylesToConstructed()\r\n * shadowRoot.adoptedStyleSheets = stylesheets\r\n * ```\r\n */\r\nexport function convertAllDocumentStylesToConstructed(): CSSStyleSheet[] {\r\n    // Return cached result if available\r\n    if (cachedConstructedSheets) {\r\n        return cachedConstructedSheets\r\n    }\r\n\r\n    const constructedSheets: CSSStyleSheet[] = []\r\n    // Use traditional for loop to avoid TypeScript issues with StyleSheetList iteration\r\n    // StyleSheetList doesn't always have proper iterator support in all environments\r\n    for (let i = 0; i < document.styleSheets.length; i++) {\r\n        const sheet = document.styleSheets[i]\r\n        try {\r\n            const newSheet = new CSSStyleSheet()\r\n            let allRules = ''\r\n            for (let j = 0; j < sheet.cssRules.length; j++) {\r\n                const rule = sheet.cssRules[j]\r\n                allRules += rule.cssText\r\n            }\r\n            newSheet.replaceSync(allRules)\r\n            constructedSheets.push(newSheet)\r\n        } catch (e) {\r\n            // This will catch any stylesheets that are cross-origin or\r\n            // have other access restrictions.\r\n            console.warn(\"Could not copy stylesheet:\", e)\r\n        }\r\n    }\r\n\r\n    // Cache the result\r\n    cachedConstructedSheets = constructedSheets\r\n    return constructedSheets\r\n}\r\n\r\n/**\r\n * Initializes stylesheet observation to automatically invalidate cache when stylesheets change\r\n * \r\n * This function sets up a MutationObserver to watch for changes to the document that\r\n * might affect stylesheets. When changes are detected, the stylesheet cache is cleared\r\n * to ensure styles are up-to-date.\r\n * \r\n * @example\r\n * ```typescript\r\n * observeStylesheetChanges()\r\n * const stylesheets = convertAllDocumentStylesToConstructed() // Will be cached\r\n * // When stylesheets change, cache is automatically cleared\r\n * ```\r\n */\r\nexport function observeStylesheetChanges(): void {\r\n    if (stylesheetObserver) {\r\n        return // Already observing\r\n    }\r\n\r\n    stylesheetObserver = new MutationObserver(() => {\r\n        // Clear cache when stylesheets change\r\n        cachedConstructedSheets = null\r\n    })\r\n\r\n    // Observe changes to the document head where stylesheets are typically added/removed\r\n    stylesheetObserver.observe(document.head, {\r\n        childList: true,\r\n        subtree: true\r\n    })\r\n\r\n    // Also observe the document for style/link elements\r\n    stylesheetObserver.observe(document, {\r\n        childList: true,\r\n        subtree: true\r\n    })\r\n}\r\n\r\n/**\r\n * Stops observing stylesheet changes and cleans up resources\r\n * \r\n * This function disconnects the MutationObserver and clears the stylesheet cache.\r\n * It should be called when the functionality is no longer needed to prevent memory leaks.\r\n * \r\n * @example\r\n * ```typescript\r\n * unobserveStylesheetChanges() // Clean up resources\r\n * ```\r\n */\r\nexport function unobserveStylesheetChanges(): void {\r\n    if (stylesheetObserver) {\r\n        stylesheetObserver.disconnect()\r\n        stylesheetObserver = null\r\n    }\r\n    cachedConstructedSheets = null\r\n}","\r\nimport { $, $$, isObservable } from './soby'\r\nimport { useEffect } from '../hooks/soby'\r\nimport type { Observant } from '../types'\r\nimport { isArray, isFunction } from '../utils'\r\n\r\n/**\r\n * Options for the assignObject function\r\n */\r\nexport type AssignOptions<T = unknown> = {\r\n    /**\r\n     * If true, assign by reference.\r\n     * If false, perform a deep assign by value.\r\n     * \r\n     * @default true - assign by ref\r\n     */\r\n    copyByRef?: boolean,\r\n\r\n    /** Copy methods:\r\n     * @property all - assign all properties.\r\n     * @property new - assign only new properties that exist in source but not in target.\r\n     * @property old - assign only properties that exist in target but not in source.\r\n     * @property empty - assign properties where target[key] is undefined, null, '', 0, NaN, or []\r\n     */\r\n    condition?: 'new' | 'old' | 'all' | 'empty',\r\n\r\n    /** If false, convert target[key] to observable\r\n     *  If true, keep target[key] as non observable\r\n     * \r\n     * @default false\r\n     */\r\n    keepTargetNoObservable?: boolean,\r\n\r\n    /**\r\n     * Track source[key] by using useEffect if isObserable(source[key])\r\n     * @default false\r\n     */\r\n    track?: boolean,\r\n\r\n    /**\r\n     * Array of keys that should be merged rather than replaced.\r\n     * When specified, these keys will have their values merged using the mv() function\r\n     * which combines strings or objects rather than completely replacing them.\r\n     * \r\n     * @default [] - no keys are merged by default\r\n     */\r\n    merge?: Array<keyof T>\r\n\r\n    /**\r\n     * If true, copy options from source[key][SYMBOL_OBSERVABLE_WRITABLE].options \r\n     * to target[key] when both are observables.\r\n     * \r\n     * @default false\r\n     */\r\n    copyOptions?: boolean\r\n}\r\n\r\n/**\r\n * Merge two values, combining strings or objects.\r\n * For strings, concatenates with a space and trims.\r\n * For objects, merges properties.\r\n * For other types, returns the source value.\r\n * \r\n * @param target - The target value\r\n * @param source - The source value\r\n * @returns The merged value\r\n */\r\nfunction mv<T>(target: T, source: T): T {\r\n    const targetValue = target\r\n    const sourceValue = source\r\n\r\n    if (typeof targetValue === 'string' && typeof sourceValue === 'string')\r\n        return `${targetValue} ${sourceValue}`.trim() as any\r\n    else if (typeof targetValue === 'object' && typeof sourceValue === 'object')\r\n        return { ...targetValue, ...sourceValue } as any\r\n\r\n    return source // Return the modified target for further chaining if necessary\r\n}\r\n\r\n/**\r\n * Set the value of a target observable from a source value.\r\n * If merge is true, uses the merge function to combine values.\r\n * \r\n * @param target - The target observable\r\n * @param source - The source value\r\n * @param merge - Whether to merge values\r\n */\r\nconst set = <T,>(target: T, source: T, merge: boolean) => {\r\n    if (merge)\r\n        // Merge values if key is in mergeKeys\r\n        (target as any)(mv($$(target), $$(source))) // Use mergeValues properly\r\n    else\r\n        (target as any)($$(source))\r\n}\r\n\r\n// /**\r\n//  * Copy options from source observable to target observable.\r\n//  * \r\n//  * @param target - The target observable\r\n//  * @param source - The source observable\r\n//  * @param copyOptions - Whether to copy options\r\n//  */\r\n// const mergeObservableOptions = <T,>(target: T, source: T, copyOptions: boolean) => {\r\n//     // Check if we should copy options and both target and source are observables with SYMBOL_OBSERVABLE_WRITABLE\r\n//     if (copyOptions && isObservable(target) && isObservable(source) &&\r\n//         source[SYMBOL_OBSERVABLE_WRITABLE] &&\r\n//         target[SYMBOL_OBSERVABLE_WRITABLE]) {\r\n\r\n//         // Copy options from source to target\r\n//         const sourceOptions = source[SYMBOL_OBSERVABLE_WRITABLE].options\r\n//         if (sourceOptions) {\r\n//             target[SYMBOL_OBSERVABLE_WRITABLE].options = { ...sourceOptions, ...target[SYMBOL_OBSERVABLE_WRITABLE].options }\r\n//         }\r\n//     }\r\n// }\r\n\r\n/**\r\n * Check if a value is a plain object.\r\n * \r\n * @param obj - The object to check\r\n * @returns True if the value is a plain object\r\n */\r\nconst isObject = (obj: {}) => {\r\n    if (obj == undefined) return false\r\n    if (obj.constructor.name == \"Object\") {\r\n        return true\r\n    }\r\n    else {\r\n        return false\r\n    }\r\n}\r\n\r\n/**\r\n * Copy by value or reference, depending on the option.\r\n * This function provides advanced object merging capabilities with support for:\r\n * - Observable-aware assignment\r\n * - Function preservation (functions are never converted to observables)\r\n * - Deep copying vs reference copying\r\n * - Conditional assignment (new, old, all, empty)\r\n * - Tracking source observables for automatic updates\r\n * - Merging specific keys rather than replacing them\r\n * - Copying observable options from source to target\r\n * \r\n * Functions are treated specially in this function:\r\n * - Functions are never converted to observables, regardless of options\r\n * - Functions are assigned by reference directly\r\n * - This behavior ensures that callback functions and methods work correctly\r\n * \r\n * @template T - The type of the target object\r\n * @template S - The type of the source object\r\n * @template O - The type of the options object\r\n * \r\n * @param target - The target object to assign to\r\n * @param source - The source object to assign from\r\n * @param options - Options for the assignment\r\n * \r\n * @returns The modified target object\r\n * \r\n * @example\r\n * ```typescript\r\n * // Basic usage\r\n * const target = { a: 1, b: $(2) }\r\n * const source = { b: 3, c: 4 }\r\n * assign(target, source)\r\n * // Result: { a: 1, b: 3, c: 4 } where b is now an observable\r\n * \r\n * // Function handling - functions are never converted to observables\r\n * const target1 = { onClick: () => console.log('target') }\r\n * const source1 = { onClick: () => console.log('source'), onHover: () => console.log('hover') }\r\n * assign(target1, source1)\r\n * // Result: { onClick: () => console.log('source'), onHover: () => console.log('hover') }\r\n * // Note: onClick is directly assigned as a function, not converted to an observable\r\n * \r\n * // Copy by reference (default)\r\n * const target2 = { a: $(1) }\r\n * const source2 = { a: 2 }\r\n * assign(target2, source2)\r\n * // target2.a is updated to 2, but it's still the same observable\r\n * \r\n * // Copy by value\r\n * const target3 = { a: $(1) }\r\n * const source3 = { a: 2 }\r\n * assign(target3, source3, { copyByRef: false })\r\n * // target3.a is replaced with a new observable containing 2\r\n * \r\n * // Conditional assignment\r\n * const target4 = { a: 1, b: 2 }\r\n * const source4 = { b: 3, c: 4 }\r\n * assign(target4, source4, { condition: 'new' })\r\n * // Only assigns new properties: { a: 1, b: 2, c: 4 }\r\n * \r\n * // Merge specific keys\r\n * const target5 = { style: 'red', class: 'btn' }\r\n * const source5 = { style: 'bold', id: 'button' }\r\n * assign(target5, source5, { merge: ['style'] })\r\n * // Merges style property: { style: 'red bold', class: 'btn', id: 'button' }\r\n * \r\n * // Track source observables\r\n * const target6 = { a: $(1) }\r\n * const source6 = { a: $(2) }\r\n * assign(target6, source6, { track: true })\r\n * // Automatically updates target6.a when source6.a changes\r\n * \r\n * // Copy observable options\r\n * const target7 = { a: $(1, { equals: (a, b) => a === b }) }\r\n * const source7 = { a: $(2, { equals: (a, b) => Object.is(a, b) }) }\r\n * assign(target7, source7, { copyOptions: true })\r\n * // Copies the equals function from source7.a to target7.a\r\n * ```\r\n */\r\nexport const assign = <T, S, O extends AssignOptions<T>>(target: T, source: S, options?: O):\r\n    O['condition'] extends 'old'\r\n    ? (O['keepTargetNoObservable'] extends true ? T : Observant<T>)\r\n    : (O['keepTargetNoObservable'] extends true ? T & S : Observant<T & S>) => {\r\n\r\n    if (!source) return target as any\r\n\r\n    const { condition: method = 'all', copyByRef = true, keepTargetNoObservable = false, track = false, merge = [], copyOptions = false } = options ?? {}\r\n    const m = merge.reduce((acc, item) => (acc[item] = true, acc), {} as Record<keyof T, true>)\r\n\r\n    // Get the keys based on the selected method\r\n    const keys = (() => {\r\n        switch (method) {\r\n            case 'new':\r\n                return Object.keys(source).filter(key => !(key in (target as any)))\r\n            case 'old':\r\n                return Object.keys(target).filter(key => key in (source as any))\r\n            case 'empty':\r\n                return Object.keys(source).filter(key => {\r\n                    const targetValue = target[key]\r\n                    const sourceValue = source[key]\r\n                    const isTargetEmpty = (\r\n                        targetValue === undefined ||\r\n                        targetValue === null ||\r\n                        targetValue === 0 ||\r\n                        isNaN(targetValue) ||\r\n                        targetValue === '' ||\r\n                        (isArray(targetValue) && targetValue.length === 0)\r\n                    )\r\n                    const isSourceNonEmpty = !(\r\n                        sourceValue === undefined ||\r\n                        sourceValue === null ||\r\n                        sourceValue === 0 ||\r\n                        isNaN(sourceValue) ||\r\n                        sourceValue === '' ||\r\n                        (isArray(sourceValue) && sourceValue.length === 0)\r\n                    )\r\n                    return isTargetEmpty && isSourceNonEmpty\r\n                })\r\n            default:\r\n                return Object.keys(source)\r\n        }\r\n    })() as any\r\n\r\n    keys.forEach((key) => {\r\n        if (copyByRef) {\r\n            // Shallow copy by reference\r\n            if (isObservable(target[key])) {\r\n                // Update observable by reference\r\n                set(target[key], source[key], m[key])\r\n\r\n                // // Copy options if requested\r\n                // mergeObservableOptions(target[key], source[key], copyOptions)\r\n\r\n                if (track && isObservable(source[key]))\r\n                    useEffect(() => {\r\n                        set(target[key], source[key], m[key])\r\n                        // mergeObservableOptions(target[key], source[key], copyOptions)\r\n                    })\r\n            } else {\r\n                // Direct reference assignment/override\r\n                const temp = $$(target[key])\r\n                target[key] = isObservable(source[key]) || isFunction(source[key]) ? source[key] : $(source[key])\r\n\r\n                // Copy options if requested\r\n                // mergeObservableOptions(target[key], source[key], copyOptions)\r\n\r\n                if (m[key as keyof T])\r\n                    (target[key] as any)(mv(temp, $$(source[key])))\r\n            }\r\n        } else {\r\n            // Deep copy by value, non primitive\r\n            if (typeof $$(source[key]) === \"object\" && isObject($$(source[key]))) {\r\n                if (isObservable(target[key])) {\r\n                    if (typeof $$(target[key]) === 'object')\r\n                        // Deep copy for observable objects recursively, object to object assignment\r\n                        assign<T, S, O>($$(target[key]) as T, $$(source[key]), options) //this is merging, string checked\r\n                    else //target is empty, copy an cloned object\r\n                    {\r\n                        //target is primitive, then make an object\r\n                        (target[key] as any)(assign<T, S, O>({} as T, $$(source[key]), options))\r\n                        if (track && isObservable(source[key]))\r\n                            useEffect(() => { (target[key] as any)(assign<T, S, O>({} as T, $$(source[key]), options)) })\r\n                    }\r\n\r\n                    // Copy options\r\n                    // mergeObservableOptions(target[key], source[key], copyOptions)\r\n                } else {\r\n                    // Assign or initialize nondobservable nested objects\r\n                    const temp = target[key]\r\n                    target[key] = keepTargetNoObservable\r\n                        ? assign(m[key] ? temp : {}, $$(source[key]), options as any)\r\n                        : $(assign(m[key] ? temp : {}, $$(source[key]), options as any))\r\n\r\n                    if (track && isObservable(target[key]) && isObservable(source[key]))\r\n                        useEffect(() => { (target[key] as any)(assign(m[key] ? temp : {}, $$(source[key]), options as any)) })\r\n\r\n                    // Copy options\r\n                    // mergeObservableOptions(target[key], source[key], copyOptions)\r\n                }\r\n            } else { //primitive\r\n                if (isObservable(target[key])) {\r\n                    set(target[key], source[key], m[key])\r\n\r\n                    const temp = $$(target[key])\r\n\r\n                    if (track && isObservable(source[key]))\r\n                        useEffect(() => (target[key] as any)(m[key] ? mv(temp, $$(source[key])) : $$(source[key])))\r\n\r\n                    // Copy options\r\n                    // mergeObservableOptions(target[key], source[key], copyOptions)\r\n                }\r\n                else {\r\n                    const temp = target[key]\r\n\r\n                    target[key] = keepTargetNoObservable ? source[key] :\r\n                        (target[key] = isObservable(source[key]) || isFunction(source[key]) ? source[key] : $(source[key]))\r\n\r\n                    if (m[key as keyof T])\r\n                        (target[key] as any)(mv(temp, $$(source[key])))\r\n\r\n                    if (track && isObservable(target[key]) && isObservable(source[key]))\r\n                        if (target[key] !== source[key])\r\n                            useEffect(() => (target[key] as any)(m[key] ? mv(temp, $$(source[key])) : $$(source[key])))\r\n\r\n                    // Copy options\r\n                    // mergeObservableOptions(target[key], source[key], copyOptions)\r\n                }\r\n            }\r\n        }\r\n    })\r\n\r\n    return target as any\r\n}\r\n\r\n// export const copyOptions = (target: any, source: any) => {\r\n//     Object.keys(source)\r\n//         .filter((key) => key in target)\r\n//         .forEach((key) => {\r\n//             if (isObservable(target[key]) && isObservable(source[key]))\r\n//                 mergeObservableOptions(target[key], source[key], true)\r\n//         })\r\n// }","import { SYMBOL_JSX } from '../constants'\r\n\r\nexport const isJsxProp = <T>(props: T): props is T & { [SYMBOL_JSX]: true } => props && props[SYMBOL_JSX]","import { Observant } from \"../types\"\r\nimport { $, isObservable } from \"./soby\"\r\n\r\n/**\r\n * Make every properties Observable\r\n * \r\n * This function takes an object and converts all of its properties to observables.\r\n * Functions are left unchanged to preserve their behavior.\r\n * \r\n * @template T - The type of the input object\r\n * @param obj - The object to convert\r\n * @param options - Configuration options\r\n * @param options.inplace - Whether to modify the original object (true) or create a new one (false, default)\r\n * @param options.convertFunction - Whether to convert functions to observables (false, default)\r\n * @returns An object with the same keys as the input, but with all non-function values converted to observables\r\n * \r\n * @example\r\n * ```typescript\r\n * const obj = { name: 'John', age: 30, greet() { return `Hello, ${this.name}` } }\r\n * const observableObj = make(obj, { inplace: false, convertFunction: false })\r\n * // observableObj.name() returns 'John'\r\n * // observableObj.age() returns 30\r\n * // observableObj.greet() still works as a function\r\n * ```\r\n */\r\nexport const make = <T,>(obj: T, options: { inplace?: boolean, convertFunction?: boolean } = { inplace: false, convertFunction: false }): Observant<T> => {\r\n    const { inplace = false, convertFunction = false } = options\r\n    const o = inplace ? obj : { ...obj }\r\n    Object.keys(o).forEach((k) => {\r\n        // If already an observable, ignore\r\n        if (isObservable(o[k])) return\r\n\r\n        // If a function and convertFunction is false, ignore\r\n        if (typeof o[k] === \"function\" && !convertFunction) return\r\n\r\n        // If object/primitive or function (when convertFunction is true), make it observable\r\n        if (convertFunction || typeof o[k] !== \"function\") {\r\n            o[k] = $(o[k])\r\n        }\r\n    })\r\n    return o as any\r\n}","/**\r\n * Defaults Implementation for Woby Framework\r\n * \r\n * This module provides functionality to attach default props to functional components.\r\n * \r\n * @module defaults\r\n */\r\n\r\nimport { isObservable, Observable } from \"soby\"\r\nimport { SYMBOL_DEFAULT, SYMBOL_JSX } from \"../constants\"\r\nimport { assign } from './assign'\r\nimport { $, ObservableMaybe, Observant } from \"..\"\r\nimport { isJsxProp } from \"./is_jsx_prop\"\r\nimport { make } from \"./make\"\r\n\r\n/**\r\n * Props for controlling stylesheet encapsulation in custom elements\r\n * \r\n * @property ignoreStyle - If true, prevents adoption of stylesheets in shadow DOM\r\n */\r\nexport interface StyleEncapsulationProps {\r\n    /**\r\n     * If true, prevents adoption of stylesheets in shadow DOM\r\n     * @default false\r\n     */\r\n    ignoreStyle?: boolean\r\n}\r\n\r\n/**\r\n * Merge function component props with custom element props\r\n * \r\n * This specialized merge function handles the merging of props between\r\n * JSX function components and custom elements. It uses the assign function\r\n * with a 'new' condition to only assign properties that exist in the source\r\n * but not in the target, preserving the intended behavior for component props.\r\n * \r\n * @template T - The type of the target object (typically component props)\r\n * @template S - The type of the source object (typically default props)\r\n * \r\n * @param target - The target object (component props) to merge into\r\n * @param source - The source object (default props) to merge from\r\n * @returns The merged object with props properly combined\r\n * \r\n * @throws {Error} If neither target nor source is a JSX element or custom element\r\n * \r\n * @example\r\n * ```tsx\r\n * // Used internally by the defaults() function\r\n * const mergedProps = merge(componentProps, defaultProps)\r\n * ```\r\n */\r\nconst merge = <T, S>(\r\n    target: T,\r\n    source: S\r\n) => {\r\n    // If source is a JSX element, assign target properties to it\r\n    // if (isJsxProp(source))\r\n    //     return assign(source, target, { condition: 'new' })\r\n    // // If target is a JSX element, assign source properties to it\r\n    // else if (isJsxProp(target))\r\n    //     return assign(target, source, { condition: 'new' })\r\n    // // For regular objects, merge them with target taking precedence\r\n    // else\r\n    // copyOptions(target, source)\r\n    return assign(target, source, { condition: 'new' })\r\n}\r\n\r\nexport type CustomElementChildren = ObservableMaybe<JSX.Children | HTMLSlotElement> | undefined\r\n/**\r\n * Attaches default props to a functional component\r\n * \r\n * This function allows you to attach default props to a functional component,\r\n * making it easier to create reusable components with sensible defaults.\r\n * \r\n * @template P - Component props type\r\n * @template T - Component function type\r\n * \r\n * @param defs - Function that returns the default props\r\n * @param component - The functional component to attach defaults to\r\n * @returns The component with defaults attached\r\n * \r\n * @example\r\n * ```tsx\r\n * interface CounterProps {\r\n *   value?: Observable<number>\r\n *   increment?: () => void\r\n *   decrement?: () => void\r\n * }\r\n * \r\n * // Using named function\r\n * function def() {\r\n *   return {\r\n *     value: $(0),\r\n *     increment: () => {},\r\n *     decrement: () => {}\r\n *   }\r\n * }\r\n * \r\n * const Counter = defaults(def, (props: CounterProps) => {\r\n *   const { value, increment, decrement } = props\r\n *   return (\r\n *     <div>\r\n *       <p>{value}</p>\r\n *       <button onClick={increment}>+</button>\r\n *       <button onClick={decrement}>-</button>\r\n *     </div>\r\n *   )\r\n * })\r\n * \r\n * // Using inline function\r\n * const CounterInline = defaults(() => ({\r\n *   value: $(0),\r\n *   increment: () => {},\r\n *   decrement: () => {}\r\n * }), (props: CounterProps) => {\r\n *   const { value, increment, decrement } = props\r\n *   return (\r\n *     <div>\r\n *       <p>{value}</p>\r\n *       <button onClick={increment}>+</button>\r\n *       <button onClick={decrement}>-</button>\r\n *     </div>\r\n *   )\r\n * })\r\n * \r\n * // Using style encapsulation options\r\n * const CounterNoStyles = defaults(() => ({\r\n *   value: $(0),\r\n *   increment: () => {},\r\n *   decrement: () => {},\r\n *   ignoreStyle: true // Prevent adoption of global stylesheets\r\n * }), (props: CounterProps) => {\r\n *   const { value, increment, decrement } = props\r\n *   return (\r\n *     <div>\r\n *       <p>{value}</p>\r\n *       <button onClick={increment}>+</button>\r\n *       <button onClick={decrement}>-</button>\r\n *     </div>\r\n *   )\r\n * })\r\n * ```\r\n */\r\nexport const defaults = <P extends Record<string, any>>(\r\n    defs: () => P,\r\n    component: ((props: P & { children?: CustomElementChildren } & StyleEncapsulationProps) => JSX.Element)\r\n): ((props: Partial<P> & { children?: CustomElementChildren } & StyleEncapsulationProps) => JSX.Element) /* & { [SYMBOL_DEFAULT]: () => P } */ => {\r\n    const defFactory = () => {\r\n        const d: P & { children?: CustomElementChildren } & StyleEncapsulationProps = defs() as P & { children?: CustomElementChildren } & StyleEncapsulationProps\r\n        if (d.children !== undefined && !isObservable(d.children))\r\n            d.children = $(d.children)\r\n        if (!d.children)\r\n            d.children = $()\r\n        return d\r\n    }\r\n    // const compFactory = Object.assign((props: Observant<P>) => component(merge(props, defFactory()) as unknown as P),\r\n    const compFactory = Object.assign((props: P & { children?: CustomElementChildren } & StyleEncapsulationProps) => component(isJsxProp(props) ? merge(make(props, { inplace: true, convertFunction: false }), defFactory()) as any : props),\r\n        {\r\n            [SYMBOL_DEFAULT]: defFactory\r\n        })\r\n\r\n    return compFactory as any /// ((props: Partial<P>) => JSX.Element)\r\n}\r\n\r\n// const a = defaults(() => ({ name: 'aa' }), (_props) => _props.children)","/**\r\n * Custom Element Implementation for Woby Framework\r\n * \r\n * This module provides functionality to create custom HTML elements with reactive properties\r\n * that integrate seamlessly with the Woby framework's observable system. Custom elements\r\n * created with this API can be used both in JSX/TSX and directly in HTML.\r\n * \r\n * Features:\r\n * - Automatic attribute to prop mapping\r\n * - Type conversion for observable props\r\n * - Nested property support (e.g., 'nested$prop$value' or 'nested.prop.value' in HTML, 'nested$prop$value' in JSX)\r\n * - Style property support (e.g., 'style$font-size' or 'style.font-size' in HTML, 'style$font-size' in JSX)\r\n * - Automatic kebab-case to camelCase conversion for all property names\r\n * - Automatic exclusion of properties with { toHtml: () => undefined } from HTML attributes\r\n * - Shadow DOM encapsulation with optional stylesheet adoption\r\n * - Context support for custom elements\r\n * - Custom serialization using toHtml and fromHtml options\r\n * \r\n * Style Encapsulation Options:\r\n * - ignoreStyle: Set to true to prevent adoption of global stylesheets in shadow DOM\r\n * \r\n * @module customElement\r\n */\r\n\r\nimport { $, $$, isObservable } from \"./soby\"\r\nimport { SYMBOL_DEFAULT } from '../constants'\r\nimport { setChild, setProp, } from \"../utils/setters\"\r\nimport { createElement } from \"./create_element\"\r\nimport { FragmentUtils } from \"../utils/fragment\"\r\nimport { callStack, isObservableWritable, Observable, SYMBOL_OBSERVABLE_WRITABLE } from \"soby\"\r\nimport type { ObservableOptions } from \"soby\"\r\nimport { isObject, isPureFunction } from \"../utils\"\r\nimport { useEffect } from \"../hooks\"\r\nimport { isJsx } from \"../jsx-runtime\"\r\nimport { camelToKebabCase, kebabToCamelCase } from \"../utils/string\"\r\nimport { normalizePropertyPath } from \"../utils/nested\"\r\n// Import stylesheet utilities\r\nimport { convertAllDocumentStylesToConstructed, observeStylesheetChanges } from \"../utils/stylesheets\"\r\nimport { ObservableMaybe } from \"../types\"\r\nimport { useLightDom } from \"../hooks/use_attached\"\r\nimport { mark } from \"../utils/mark\"\r\n\r\n\r\n/**\r\n * ElementAttributes type helper\r\n * \r\n * Simplified type to prevent excessive type instantiation depth when working with custom elements.\r\n * Combines HTML attributes with component-specific props.\r\n * \r\n * @template T - Component function type\r\n */\r\nexport type ElementAttributesPattern<P> =\r\n    | (keyof P extends string ? keyof P : never)\r\n    | (keyof JSX.HTMLAttributes<HTMLElement> extends string ? keyof JSX.HTMLAttributes<HTMLElement> : never)\r\n    | `style.${keyof JSX.StyleProperties extends string ? keyof JSX.StyleProperties : never}`\r\n    | `style$${keyof JSX.StyleProperties extends string ? keyof JSX.StyleProperties : never}`\r\n\r\nexport type ExtractProps<T> = T extends (props: infer P) => any ? P : never\r\n\r\nexport type ElementAttributes1<T extends (...args: any) => any> =\r\n    // {} | { children?: JSX.Child } | \r\n    (T extends (props: infer P) => any\r\n        ? Partial<(JSX.HTMLAttributes<HTMLElement> & ElementAttributesPattern<P>)>\r\n        : Partial<JSX.HTMLAttributes<HTMLElement>>)\r\n\r\nexport type ElementAttributes<T extends (...args: any) => any> =\r\n    Partial<JSX.HTMLAttributes<HTMLElement>> &\r\n    Partial<Record<ElementAttributesPattern<ExtractProps<T>>, any>>\r\n\r\n// export type ElementAttributes<T extends (props: P) => any, P> =\r\n//     Partial<(JSX.HTMLAttributes<HTMLElement> & ElementAttributesPattern<P>)>\r\n\r\n// Initialize stylesheet observation at module level (run once)\r\n// This ensures we only have one observer watching for stylesheet changes\r\n// but each custom element can get the latest cached stylesheets\r\nobserveStylesheetChanges()\r\n\r\n/**\r\n * ElementAttributePattern type\r\n * \r\n * Defines the pattern for allowed attributes in custom elements.\r\n * Supports wildcards, style properties, and component-specific props.\r\n * In HTML, use dot notation (e.g., style.color, nested.prop.value)\r\n * In JSX, use dash notation (e.g., style-color, nested-prop-value)\r\n * All kebab-case attribute names are automatically converted to camelCase property names.\r\n * \r\n * @template P - Component props type\r\n */\r\ntype ElementAttributePattern<P> =\r\n    | (keyof P extends string ? keyof P : never)\r\n    | (keyof JSX.HTMLAttributes<HTMLElement> extends string ? keyof JSX.HTMLAttributes<HTMLElement> : never)\r\n    | '*'\r\n    | `style.${keyof JSX.StyleProperties extends string ? keyof JSX.StyleProperties : never}`\r\n    | `style.*`\r\n\r\n/**\r\n * Sets observable values with appropriate type conversion\r\n * \r\n * Handles setting values on observables without automatic type conversion.\r\n * All casting must be done manually in the component function since HTML attributes are strings only.\r\n * \r\n * Supports custom serialization using toHtml and fromHtml options:\r\n * - toHtml: Function to convert observable value to string for HTML attributes\r\n * - fromHtml: Function to convert string from HTML attributes back to observable value\r\n * \r\n * To hide a property from HTML attributes, use { toHtml: () => undefined }\r\n * \r\n * @param obj - The object containing the property to set\r\n* @param key - The property key to set\r\n* @param value - The string value to set on the property\r\n*/\r\nconst setObservableValue = (obj: any, key: string, value: string) => {\r\n    if (isObservable(obj[key])) {\r\n        if (!isObservableWritable(obj[key])) return\r\n        // Cast value according to observable options type\r\n        const observable = obj[key] as Observable<any>\r\n        const options = (observable[SYMBOL_OBSERVABLE_WRITABLE]).options as ObservableOptions<any> | undefined\r\n        const { type, fromHtml } = options ?? {}\r\n        if (type) {\r\n            switch (type) {\r\n                case 'number':\r\n                    obj[key](fromHtml ? fromHtml(value) : Number(value))\r\n                    break\r\n                case 'boolean':\r\n                    // Handle various boolean representations\r\n                    if (fromHtml) {\r\n                        obj[key](fromHtml(value))\r\n                    } else {\r\n                        const lowerValue = value?.toLowerCase()\r\n                        obj[key](lowerValue === 'true' || lowerValue === '1' || lowerValue === '')\r\n                    }\r\n                    break\r\n                case 'bigint':\r\n                    if (fromHtml) {\r\n                        obj[key](fromHtml(value))\r\n                    } else {\r\n                        try {\r\n                            obj[key](BigInt(value))\r\n                        } catch (e) {\r\n                            // If parsing fails, fallback to string\r\n                            obj[key](value)\r\n                        }\r\n                    }\r\n                    break\r\n                case 'object':\r\n                    if (fromHtml) {\r\n                        obj[key](fromHtml(value))\r\n                    } else {\r\n                        try {\r\n                            obj[key](JSON.parse(value))\r\n                        } catch (e) {\r\n                            // If parsing fails, fallback to string\r\n                            obj[key](value)\r\n                        }\r\n                    }\r\n                    break\r\n                case 'function':\r\n                    // For function types, we can't really convert from string\r\n                    // This would typically be handled by the component itself\r\n                    obj[key](fromHtml ? fromHtml(value) : value)\r\n                    break\r\n                case 'symbol':\r\n                    // For symbol types, create a symbol from the string\r\n                    obj[key](fromHtml ? fromHtml(value) : Symbol(value))\r\n                    break\r\n                case 'undefined':\r\n                    obj[key](fromHtml ? fromHtml(value) : undefined)\r\n                    break\r\n                default:\r\n                    // For constructor types or other custom types, treat as string\r\n                    // since HTML attributes are always strings and we can't instantiate\r\n                    // arbitrary constructors from strings\r\n                    obj[key](fromHtml ? fromHtml(value) : value)\r\n                    break\r\n            }\r\n        } else {\r\n            obj[key](fromHtml ? fromHtml(value) : value)\r\n        }\r\n    } else {\r\n        obj[key] = value\r\n    }\r\n}\r\n\r\n/**\r\n * Sets nested properties on an element\r\n * \r\n * Handles setting properties that may be nested objects or style properties.\r\n * Style properties are converted from kebab-case to camelCase and set on the element's style.\r\n * Nested properties are created in the element's props object.\r\n * \r\n * @param obj - The HTMLElement to set properties on\r\n * @param path - The property path (e.g., 'style.font-size' or 'nested.prop.value')\r\n * @param value - The value to set\r\n */\r\nconst setNestedProperty = (obj: HTMLElement, path: string, value: any) => {\r\n    // For style properties, handle them specially\r\n    if (path.startsWith('style.')) {\r\n        const styleProperty = kebabToCamelCase(path.slice(6)) // Remove 'style.' prefix and convert to camelCase\r\n        if (obj.style) {\r\n            obj.style[styleProperty as any] = value\r\n        }\r\n        return\r\n    }\r\n\r\n    // For other properties with dots, create nested structure\r\n    if (path.includes('.')) {\r\n        const keys = path.split('.').map(key => kebabToCamelCase(key)) // Convert all keys to camelCase\r\n        const lastKey = keys.pop()\r\n\r\n        // Navigate to the nested object\r\n        let target = obj as any\r\n        for (let i = 0; i < keys.length; i++) {\r\n            const key = keys[i]\r\n            // For the first key, try target.props[key] if target[key] doesn't exist\r\n            if (i === 0 && !(key in target)) {\r\n                // Only create in target.props, not directly on target\r\n                if (!target.props) {\r\n                    target.props = {}\r\n                }\r\n                if (!(key in target.props) || typeof target.props[key] !== 'object' || target.props[key] === null) {\r\n                    target.props[key] = {}\r\n                }\r\n                target = target.props[key]\r\n            } else if (!(key in target) || typeof target[key] !== 'object' || target[key] === null) {\r\n                target[key] = {}\r\n                target = target[key]\r\n            } else {\r\n                target = target[key]\r\n            }\r\n        }\r\n\r\n        // Set the final property using the observable value setter\r\n        if (lastKey) {\r\n            setObservableValue(target, lastKey, value)\r\n        }\r\n        return\r\n    }\r\n\r\n    // For simple properties, convert to camelCase and set them using the observable value setter\r\n    setObservableValue((obj as any), kebabToCamelCase(path), value)\r\n}\r\n\r\n/**\r\n * Gets nested properties from an element\r\n * \r\n * Retrieves values from nested property paths, handling style properties and nested objects.\r\n * Style properties are converted from kebab-case to camelCase when accessing.\r\n * \r\n * @param obj - The object to get properties from\r\n * @param path - The property path (e.g., 'style.font-size' or 'nested.prop.value')\r\n * @returns The value at the specified path, or undefined if not found\r\n */\r\nconst getNestedProperty = (obj: any, path: string) => {\r\n    // For style properties, handle them specially\r\n    if (path.startsWith('style.')) {\r\n        const styleProperty = kebabToCamelCase(path.slice(6)) // Remove 'style.' prefix and convert to camelCase\r\n        if (obj.style) {\r\n            return obj.style[styleProperty as any]\r\n        }\r\n        return undefined\r\n    }\r\n\r\n    // For other properties with dots, navigate nested structure\r\n    if (path.includes('.')) {\r\n        const keys = path.split('.').map(key => kebabToCamelCase(key)) // Convert all keys to camelCase\r\n        let target = obj\r\n\r\n        for (let i = 0; i < keys.length; i++) {\r\n            const key = keys[i]\r\n            // For the first key, try target.props[key] if target[key] doesn't exist\r\n            if (i === 0 && !(key in target) && target.props && key in target.props) {\r\n                target = target.props[key]\r\n            } else if (!(key in target)) {\r\n                return undefined\r\n            } else {\r\n                target = target[key]\r\n            }\r\n        }\r\n\r\n        return target\r\n    }\r\n\r\n    // For simple properties, convert to camelCase and get them directly\r\n    return (obj as any)[kebabToCamelCase(path)]\r\n}\r\n\r\nexport const useAttached = (ref?: ObservableMaybe<Node | null>, match?: (parent: Node | null) => boolean) => {\r\n    const isGiven = ref !== undefined\r\n\r\n    if (!ref)\r\n        ref = $<Node>()\r\n\r\n    const parent = $<Node | null>(null)\r\n\r\n    useEffect(() => {\r\n        if (!$$(ref)) return\r\n\r\n        const updateParent = () => {\r\n            let currentParent: Node | null = $$(ref).parentNode\r\n\r\n            // If match function is provided, traverse up until match or root\r\n            if (match) {\r\n                while (currentParent) {\r\n                    if (match(currentParent)) {\r\n                        parent(currentParent)\r\n                        return\r\n                    }\r\n                    currentParent = currentParent.parentNode\r\n                }\r\n                // If no match found, parent remains null\r\n                parent(null)\r\n            } else {\r\n                // Default behavior: return immediate parent\r\n                parent(currentParent)\r\n            }\r\n        }\r\n\r\n        // Initial parent check\r\n        updateParent()\r\n\r\n        // Create a MutationObserver to watch for parent changes\r\n        const observer = new MutationObserver(() => {\r\n            updateParent()\r\n        })\r\n\r\n        // Start observing the parent element changes\r\n        observer.observe($$(ref).getRootNode() as Node, { subtree: true, childList: true })\r\n\r\n        // Cleanup observer on unmount\r\n        return () => observer.disconnect()\r\n    })\r\n\r\n    // Return the reference node\r\n    return {\r\n        parent,\r\n        mount: isGiven ? undefined : mark('attach', ref),\r\n        ref\r\n    }\r\n}\r\n\r\n\r\nconst isLightDom = (node: Node): boolean => {\r\n    let current: Node | null = node?.parentNode\r\n    while (current) {\r\n        if ((current as Element)?.shadowRoot) {\r\n            return true\r\n        }\r\n        current = current.parentNode\r\n    }\r\n    return false\r\n}\r\n/**\r\n * Creates a custom HTML element with reactive properties\r\n * \r\n * Defines a custom element that integrates with the Woby framework's observable system.\r\n * The element can observe attribute changes and update corresponding props automatically.\r\n * All props defined in the component's defaults are automatically observed as attributes.\r\n * \r\n * Requirements:\r\n * - Component must have default props defined using the `defaults` helper\r\n * - Component props that are observables will be updated with type conversion\r\n * - Component can be used in both JSX/TSX and HTML\r\n * \r\n * @template P - Component props type\r\n * @param tagName - The HTML tag name for the custom element (must contain a hyphen)\r\n * @param component - The component function that renders the element's content\r\n * @returns The custom element class\r\n * \r\n * @example\r\n * ```tsx\r\n * // Define a component with default props\r\n * const Counter = defaults(() => ({\r\n *   value: $(0, { type: 'number' } as const),\r\n *   title: $('Counter')\r\n * }), ({ value, title }: { value: Observable<number>, title: Observable<string> }) => (\r\n *   <div>\r\n *     <h1>{title}</h1>\r\n *     <p>Count: {value}</p>\r\n *     <button onClick={() => value(prev => prev + 1)}>+</button>\r\n *   </div>\r\n * ))\r\n * \r\n * // Register as a custom element\r\n * customElement('counter-element', Counter)\r\n * \r\n * // Usage in JSX:\r\n * // <counter-element value={5} title=\"My Counter\" style$font-size=\"red\"></counter-element>\r\n * \r\n * // Usage in HTML:\r\n * // <counter-element value=\"5\" title=\"My Counter\" style$font-size=\"red\"></counter-element>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Component with nested properties\r\n * const UserCard = defaults(() => ({\r\n *   user: {\r\n *     name: $('John'),\r\n *     details: {\r\n *       age: $(30, { type: 'number' } as const)\r\n *     }\r\n *   }\r\n * }), ({ user }: { user: { name: Observable<string>, details: { age: Observable<number> } } }) => (\r\n *   <div>\r\n *     <h2>{user.name}</h2>\r\n *     <p>Age: {user.details.age}</p>\r\n *   </div>\r\n * ))\r\n * \r\n * customElement('user-card', UserCard)\r\n * \r\n * // Usage with nested attributes:\r\n * // <user-card user$name=\"Jane\" user$details$age=\"25\"></user-card> (both HTML and JSX)\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Component with custom serialization\r\n * const DateComponent = defaults(() => ({\r\n *   date: $(new Date(), { \r\n *     toHtml: o => o.toISOString(), \r\n *     fromHtml: o => new Date(o) \r\n *   })\r\n * }), ({ date }: { date: Observable<Date> }) => (\r\n *   <div>Date: {() => $$(date).toString()}</div>\r\n * ))\r\n * \r\n * customElement('date-component', DateComponent)\r\n * \r\n * // Usage:\r\n * // <date-component date=\"2023-01-01T00:00:00.000Z\"></date-component>\r\n * ```\r\n * \r\n * @example\r\n * ```tsx\r\n * // Component with hidden functions\r\n * const Counter = defaults(() => {\r\n *   const value = $(0, { type: 'number' } as const)\r\n *   return {\r\n *     value,\r\n *     increment: $([() => { value($$(value) + 10) }], { toHtml: o => undefined }) // Hide from HTML attributes\r\n *   }\r\n * }), ({ value, increment }: { value: Observable<number>, increment: Observable<(() => void)[]> }) => (\r\n *   <div>\r\n *     <p>Count: {value}</p>\r\n *     <button onClick={() => increment[0]()}>+</button>\r\n *   </div>\r\n * ))\r\n * \r\n * customElement('counter-element', Counter)\r\n * ```\r\n */\r\nexport const customElement = <P extends { children?: Observable<JSX.Child> }>(tagName: string, component: JSX.Component<P>) => {\r\n    const defaultPropsFn = (component as any)[SYMBOL_DEFAULT]\r\n    if (!defaultPropsFn) {\r\n        console.error(`Component ${tagName} is missing default props. Please use the 'defaults' helper function to provide default props.`)\r\n    }\r\n\r\n    /**\r\n     * Custom Element Class\r\n     * \r\n     * Extends HTMLElement to create a custom element with reactive properties.\r\n     */\r\n    const C = class extends HTMLElement {\r\n        /** Reference to the children component function */\r\n        //rename it to function component\r\n        static __component__ = component;\r\n\r\n        //obaserable attributes is deps on props\r\n        static observedAttributes: string[] = []\r\n\r\n        /** Component props */\r\n        public props: P\r\n        public propDict: Record<string, string>\r\n        childs: Node[] = []\r\n        public slots: HTMLSlotElement\r\n        public placeHolder: Comment\r\n\r\n        constructor(props?: P) {\r\n            super()\r\n            this.props = !!props ? props : defaultPropsFn() || {} as P\r\n            C.observedAttributes = Object.keys(this.props)\r\n\r\n            if (!isJsx(this.props)) {\r\n                const shadowRoot = this.attachShadow({ mode: 'open', serializable: true })\r\n                if (!($$(this.props.children) instanceof HTMLSlotElement)) {\r\n                    this.slots = document.createElement('slot')\r\n                    // this.slots.onslotchange = () => {\r\n                    //     console.log('slotchange', this.slots.assignedElements())\r\n                    // }\r\n                    this.props.children(this.slots)\r\n                }\r\n\r\n                // console.log('isLightDom', isLightDom(this), [this])\r\n                // if (isLightDom(this)) {\r\n                //     const { lightDom } = useLightDom(this)\r\n                //     useEffect(() => {\r\n                //         console.log('lightDom parent', $$(lightDom), /* ($$(lp) as Element).assignedSlot, */ this, [component])\r\n                //     })\r\n                // }\r\n                // Check if stylesheet encapsulation should be ignored\r\n                const ignoreStyle = (this.props as any).ignoreStyle === true\r\n\r\n                // Only adopt stylesheets if not explicitly disabled\r\n                if (!ignoreStyle) {\r\n                    // Get the latest cached stylesheets\r\n                    // The stylesheet observation is initialized once at the module level\r\n                    const allSheets = convertAllDocumentStylesToConstructed()\r\n\r\n                    // Adopt all the retrieved stylesheets\r\n                    shadowRoot.adoptedStyleSheets = allSheets\r\n                }\r\n\r\n                // this.placeHolder = document.createComment('')\r\n                // shadowRoot.append(this.placeHolder/* , this.slots */)\r\n                // render(createElement(component, this.props), shadowRoot) \r\n\r\n                //creating the child in tsx\r\n                setChild(shadowRoot, createElement(component, this.props), FragmentUtils.make(), callStack('Custom element'))\r\n            }\r\n            else {\r\n                //never happen\r\n                setChild(this, createElement(component, this.props), FragmentUtils.make(), callStack('Custom element'))\r\n            }\r\n\r\n            if (!this.propDict) {\r\n                this.propDict = {}\r\n\r\n                Object.keys(this.props).forEach((k) => {\r\n                    const c = camelToKebabCase(k)\r\n                    this.propDict[c] = k\r\n                    this.propDict[k] = c\r\n                })\r\n            }\r\n        }\r\n\r\n        /**\r\n         * Called when the element is added to the document\r\n         * \r\n         * Sets up attribute observation and initializes the element.\r\n         */\r\n        connectedCallback() {\r\n            // ------------ not working for <my-comp> in TSX files------------\r\n            const { observedAttributes } = C\r\n            const { props: p } = this\r\n            const aKeys = Object.keys(p).filter(k => /* !isPureFunction(p[k]) && !isObject(p[k]) && */ k !== 'children' && isObservable(p[k]))\r\n            const rKeys = Object.keys(p).filter(k => isPureFunction(p[k]) || isObject(p[k]))\r\n\r\n            // this.props.children(this.slots/* .assignedNodes() */)\r\n            // setChildReplacement(jsx(children, this.props), this.placeHolder, callStack('connectedCallback'))\r\n\r\n            rKeys.forEach(k => this.removeAttribute(k))\r\n\r\n            // props -> attr (1st)\r\n            for (const k of aKeys as any)\r\n                if (!this.attributes[this.propDict[k]] || isJsx(p))\r\n                    setProp(this, this.propDict[k], p[k], callStack('connectedCallback'))\r\n            // ------------\r\n\r\n            // attr -> props (1st)\r\n            for (const attr of this.attributes as any)\r\n                this.attributeChangedCallback1(attr.name, undefined, attr.value)\r\n\r\n            // // props -> attr(1st)\r\n            // aKeys.forEach((k) => {\r\n            //     if (!this.attributes[k])\r\n            //         this.setAttribute(k, JSON.stringify($$(this.props[k])))\r\n            //     // setAttribute(this, k, this.props[k], callStack('init connected'))\r\n            // })\r\n\r\n            const observer = new MutationObserver(mutations => {\r\n                mutations.forEach(m => {\r\n                    if (m.type === 'attributes') {\r\n                        const name = m.attributeName\r\n                        const newValue = this.getAttribute(name)\r\n                        const oldValue = m.oldValue\r\n                        // attr -> props (on change)\r\n                        this.attributeChangedCallback1(name, oldValue, newValue)\r\n                    }\r\n                })\r\n            })\r\n\r\n            observer.observe(this, { attributes: true, attributeOldValue: true })\r\n        }\r\n\r\n        /**\r\n         * Called when the element is removed from the document\r\n         * \r\n         * Cleans up observers and resources.\r\n         */\r\n        disconnectedCallback() {\r\n            // Note: We don't unobserve stylesheet changes at the module level\r\n            // since stylesheet observation is shared across all custom elements\r\n            // and only initialized once\r\n        }\r\n\r\n        /**\r\n         * Called when an observed attribute changes\r\n         * \r\n         * Updates the corresponding prop and handles nested properties.\r\n         * \r\n         * @param name - The name of the changed attribute\r\n         * @param oldValue - The previous value of the attribute\r\n         * @param newValue - The new value of the attribute\r\n         */\r\n        attributeChangedCallback1(name, oldValue, newValue) {\r\n            if (oldValue === newValue) return\r\n\r\n            if (newValue === '[object Object]') return //TSX's <my-comp obj={{}}> obj is raw object literal but not $()\r\n\r\n            const { props } = this\r\n            // if (!matchesWildcard(name, C.observedAttributes)) return\r\n\r\n            // Check if this is a nested property (contains $ or .)\r\n            if (name.includes('$') || name.includes('.')) {\r\n                // Normalize the property path using the utility function\r\n                const normalizedPath = normalizePropertyPath(name)\r\n\r\n                // Handle nested properties (including style properties)\r\n                setNestedProperty(this, normalizedPath, newValue)\r\n\r\n                // Also update any observable in the nested path\r\n                // Note: We need to convert the attribute name to the property name for the propDict lookup\r\n                const propName = kebabToCamelCase(name.replace(/\\$/g, '.').replace(/\\./g, '.'))\r\n                setObservableValue(props, propName, newValue)\r\n            } else {\r\n                // Handle flat properties (existing behavior)\r\n                // Convert kebab-case attribute name to camelCase property name\r\n                const propName = kebabToCamelCase(name)\r\n                setObservableValue(this.props, propName, newValue)\r\n            }\r\n        }\r\n    }\r\n\r\n    const ec = customElements.get(tagName)\r\n    if (!!ec)\r\n        console.warn(`Element ${tagName} already exists. (ignore this in dev env), use ec.__component__ to find target component`)\r\n    else\r\n        customElements.define(tagName, C)\r\n\r\n    return C\r\n}\r\n","import { useEffect } from '../hooks'\r\nimport { CONTEXTS_DATA, } from '../constants'\r\nimport { $, $$ } from './soby'\r\nimport { context, ObservableOptions, resolve } from '../soby'\r\nimport type { Child, Context, ContextWithDefault, ObservableMaybe } from '../types'\r\nimport { } from '../soby'\r\nimport { defaults } from './defaults'\r\nimport { customElement, ElementAttributes } from './custom_element'\r\nimport { jsx } from '../jsx-runtime'\r\n\r\n// const serializer = { toHtml: (o) => o + '', fromHtml: o => o } as ObservableOptions\r\nconst hidden = { toHtml: o => undefined } as ObservableOptions\r\n\r\n// Define the props interface explicitly to help with type generation\r\ninterface ContextProviderProps {\r\n  value?: ObservableMaybe<any>\r\n  children?: ObservableMaybe<Child>\r\n  symbol?: ObservableMaybe<Symbol>\r\n}\r\n\r\nconst ContextProvider = defaults(\r\n  (): ContextProviderProps => ({\r\n    value: $(undefined),\r\n    children: $(undefined),\r\n    symbol: $<Symbol>(undefined)\r\n  }),\r\n  ({ children }: ContextProviderProps) => {\r\n    return children\r\n  }\r\n)\r\n\r\ncustomElement('context-provider', ContextProvider)\r\n\r\ndeclare module '../index' {\r\n  namespace JSX {\r\n    interface IntrinsicElements {\r\n      'context-provider': ElementAttributes<typeof ContextProvider>\r\n    }\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * Context API for Woby Framework\r\n *\r\n * This module provides the createContext function which creates a context object that can be used\r\n * to pass data through the component tree without having to pass props down manually at every level.\r\n * It supports both JSX components and custom elements with special context handling.\r\n *\r\n * @module createContext\r\n */\r\n/**\r\n * Creates a context object that can be used to pass data through the component tree\r\n * without having to pass props down manually at every level.\r\n *\r\n * The context object has a Provider component that allows consuming components to subscribe\r\n * to context changes. The Provider component accepts a `value` prop that will be passed to\r\n * all components that are descendants of the Provider.\r\n *\r\n * @template T - The type of the context value\r\n * @param defaultValue - The default value for the context when no Provider is found\r\n * @returns A context object with a Provider component and a symbol for internal use\r\n *\r\n * @example\r\n * ```tsx\r\n * // Create a context with a default value\r\n * const ThemeContext = createContext('light')\r\n *\r\n * // Create a context without a default value\r\n * const UserContext = createContext<User | undefined>(undefined)\r\n  *\r\n  * // Use the Provider to pass a value down the tree\r\n * const App = () => (\r\n  *   <ThemeContext.Provider value=\"dark\">\r\n    *     <Toolbar />\r\n    *   </ThemeContext.Provider>\r\n  * )\r\n  *\r\n  * // Consume the context value in a component\r\n * const ThemedButton = () => {\r\n *   const theme = useContext(ThemeContext)\r\n  *   return <button className={theme}>Themed Button</button>\r\n * }\r\n  * ```\r\n  *\r\n  * @example\r\n  * ```tsx\r\n  * // Using context with custom elements\r\n  * const ValueContext = createContext(0)\r\n  *\r\n  * // Provider works with both JSX and custom elements\r\n  * customElement('value-display', ({value}: {value: Observable<number> }) => {\r\n *   const context = useContext(ValueContext)\r\n    *   return <div>Value: {value}, Context: {context}</div>\r\n * })\r\n    *\r\n    * // In JSX:\r\n    * // <ValueContext.Provider value={42}>\r\n      * //   <value-display></value-display>\r\n      * // </ValueContext.Provider>\r\n    * ```\r\n    */\r\nexport function createContext<T>(defaultValue: T): ContextWithDefault<T>\r\nexport function createContext<T>(defaultValue?: T): Context<T>\r\nexport function createContext<T>(defaultValue?: T): ContextWithDefault<T> | Context<T> {\r\n\r\n  const symbol = Symbol()\r\n\r\n  const Provider = ({ value, children }: { value: T, children: Child }): Child => {\r\n    return context({ [symbol]: value }, () => {\r\n      const ref = $<Comment>()\r\n\r\n      useEffect(() => {\r\n        if (!$$(ref)) return\r\n        $$(ref)[symbol] = value\r\n        return () => delete $$(ref)[symbol]\r\n      })\r\n\r\n      return jsx('context-provider', {\r\n        ref,\r\n        value,\r\n        symbol: $(symbol, hidden),\r\n        children: resolve(children) //must resolve, for non dom\r\n      })\r\n    })\r\n  }\r\n\r\n  const Context = { Provider, symbol }\r\n\r\n  CONTEXTS_DATA.set(Context as any, { symbol, defaultValue })\r\n\r\n  return Context\r\n\r\n}","\r\n\r\nimport { DIRECTIVES, SYMBOLS_DIRECTIVES } from '../constants'\r\n// import { JSX } from '../jsx/types';\r\nimport { resolve } from '../methods/soby'\r\nimport { context } from '../soby'\r\nimport type { Child, DirectiveFunction, Directive, DirectiveData, DirectiveOptions, ExtractArray } from '../types'\r\n\r\n\r\nexport const createDirective = <T extends keyof JSX.Directives>(name: T, fn: DirectiveFunction<ExtractArray<JSX.Directives[T]>>, options?: DirectiveOptions): Directive<ExtractArray<JSX.Directives[T]>> => {\r\n\r\n  const immediate = !!options?.immediate\r\n  const data: DirectiveData<ExtractArray<JSX.Directives[T]>> = { fn, immediate }\r\n  const symbol = (SYMBOLS_DIRECTIVES[name] ||= Symbol())\r\n\r\n  const Provider = ({ children }: { children: Child }): Child => {\r\n\r\n    return context({ [symbol]: data }, () => {\r\n\r\n      return resolve(children)\r\n\r\n    })\r\n\r\n  }\r\n\r\n  const ref = (...args: ExtractArray<JSX.Directives[T]>) => {\r\n\r\n    return (element: Element): void => {\r\n\r\n      fn(element, ...args)\r\n\r\n    }\r\n\r\n  }\r\n\r\n  const register = (): void => {\r\n\r\n    if (symbol in DIRECTIVES) throw new Error('Directive \"name\" is already registered')\r\n\r\n    DIRECTIVES[symbol] = data\r\n\r\n  }\r\n\r\n  return { Provider, ref, register }\r\n\r\n}","\r\n\r\nimport { useMemo } from '../hooks/soby'\r\nimport { $ } from '../methods/soby'\r\nimport { resolve } from '../methods/soby'\r\nimport { untrack } from '../methods/soby'\r\nimport { isFunction } from '../utils/lang'\r\nimport type { Observable, ObservableReadonly } from '../types'\r\n\r\n/* HELPERS */\r\n\r\nconst COMPONENT_RE = /^_?[A-Z][a-zA-Z0-9$_-]*$/\r\nconst SYMBOL_AS = '__hmr_as__'\r\nconst SYMBOL_COLD_COMPONENT = Symbol('HMR.Cold')\r\nconst SYMBOL_HOT_COMPONENT = Symbol('HMR.Hot')\r\nconst SYMBOL_HOT_ID = Symbol('HMR.ID')\r\nconst SOURCES = new WeakMap<{}, Observable<any>>()\r\n\r\n\r\n//TODO: This seems excessively complicated, maybe it can be simplified somewhat?\r\n//TODO: Make this work better when a nested component is added/removed too\r\n\r\nexport const hmr = <T extends Function>(accept: Function | undefined, component: T): T => {\r\n\r\n  if (accept) { // Making the component hot\r\n\r\n    /* CHECK */\r\n\r\n    const cached = component[SYMBOL_HOT_COMPONENT]\r\n\r\n    if (cached) return cached // Already hot\r\n\r\n    const isProvider = !isFunction(component) && ('Provider' in component)\r\n\r\n    if (isProvider) return component // Context/Directive providers are not hot-reloadable\r\n\r\n    /* HELPERS */\r\n\r\n    const createHotComponent = (path: string[]): any => {\r\n\r\n      return <A extends unknown[], R>(...args: A): ObservableReadonly<R> => {\r\n\r\n        return useMemo((stack) => {\r\n\r\n          const component = path.reduce((component, key) => component[key], SOURCES.get(id(stack))?.() || source())\r\n          const result = resolve(untrack(() => component(...args)))\r\n\r\n          return result\r\n\r\n        })\r\n\r\n      }\r\n\r\n    }\r\n\r\n    const createHotComponentDeep = <T extends Function>(component: T, path: string[]): T => {\r\n\r\n      const cached = component[SYMBOL_HOT_COMPONENT]\r\n\r\n      if (cached) return cached\r\n\r\n      const hot = component[SYMBOL_HOT_COMPONENT] = createHotComponent(path)\r\n\r\n      for (const key in component) {\r\n\r\n        const value = component[key]\r\n\r\n        if (isFunction(value) && COMPONENT_RE.test(key)) { // A component\r\n\r\n          hot[key] = createHotComponentDeep(value, [...path, key])\r\n\r\n        } else { // Something else\r\n\r\n          hot[key] = value\r\n\r\n        }\r\n\r\n      }\r\n\r\n      return hot\r\n\r\n    }\r\n\r\n    const onAccept = (module: { default: T }): void => {\r\n\r\n      const hot = module[component[SYMBOL_AS]] || module[component.name] || module.default\r\n\r\n      if (!hot) return console.error(`[hmr] Failed to handle update for \"${component.name}\" component:\\n\\n`, component)\r\n\r\n      const cold = hot[SYMBOL_COLD_COMPONENT] || hot\r\n\r\n      hot[SYMBOL_HOT_ID]?.(id())\r\n      SOURCES.get(id())?.(() => cold)\r\n\r\n    }\r\n\r\n\r\n    const id = $({})\r\n    const source = $(component)\r\n\r\n    const stack = new Error()\r\n\r\n    SOURCES.set(id(stack), source)\r\n\r\n    const cold = component[SYMBOL_COLD_COMPONENT] || component\r\n    const hot = createHotComponentDeep(component, [])\r\n\r\n    cold[SYMBOL_HOT_COMPONENT] = hot\r\n    hot[SYMBOL_COLD_COMPONENT] = cold\r\n    hot[SYMBOL_HOT_COMPONENT] = hot\r\n    hot[SYMBOL_HOT_ID] = id\r\n\r\n    accept(onAccept)\r\n\r\n    /* RETURN */\r\n\r\n    return hot\r\n\r\n  } else { // Returning the component as is\r\n\r\n    return component\r\n\r\n  }\r\n\r\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","\r\nimport { FragmentUtils } from '../utils/fragment'\r\nimport type { Child } from '../types'\r\nimport { setChild } from '../utils/setters'\r\nimport { isArray } from '../utils/lang'\r\n\r\nexport const renderToString = (child: Child): string => {\r\n    // Create a container for SSR\r\n    const container = { children: '' }\r\n    const stack = new Error()\r\n\r\n    // Use a fragment for the root\r\n    const fragment = FragmentUtils.make()\r\n\r\n    // Set the child content\r\n    setChild(container as any, child, fragment, stack)\r\n\r\n    // Get the rendered content\r\n    const children = FragmentUtils.getChildren(fragment)\r\n    if (isArray(children)) {\r\n        return children.map(node => {\r\n            if (typeof node === 'object' && node !== null) {\r\n                if ('outerHTML' in node) {\r\n                    return node.outerHTML\r\n                } else if ('textContent' in node) {\r\n                    return node.textContent\r\n                }\r\n            }\r\n            return String(node)\r\n        }).join('')\r\n    } else {\r\n        if (typeof children === 'object' && children !== null) {\r\n            if ('outerHTML' in children) {\r\n                return children.outerHTML as string\r\n            } else if ('textContent' in children) {\r\n                return children.textContent\r\n            }\r\n        }\r\n        return String(children)\r\n    }\r\n}\r\n\r\n"],"names":["resolve","noop","setBatch","isFunction","SYMBOL_OBSERVABLE_BOOLEAN","SYMBOL_OBSERVABLE_FROZEN","SYMBOL_OBSERVABLE_READABLE","SYMBOL_UNTRACKED","SYMBOL_UNTRACKED_UNWRAPPED","Observer","Observable","UNINITIALIZED","callStack","UNAVAILABLE","DIRTY_MAYBE_YES","frozen","memo","observable","readable","boolean","cleanup","SYMBOL_OBSERVABLE","DUMMY_INDEX","Root","OWNER","SYMBOL_SUSPENSE","lazySetDelete","fn","MappedRoot","SYMBOL_CACHED","SYMBOL_UNCACHED","lazySetAdd","Owner","lazyArrayPush","lazyArrayEach","lazySetEach","Effect","DIRTY_YES","root","suspense","Suspense","get","effect","pooled","mapped","suspended","isArray","isStore","untrack","isObservable","SYMBOL_STORE_VALUES","isEqual","is","writable","ObservableClass","SYMBOL_OBSERVABLE_WRITABLE","OBSERVABLE_TRUE","OBSERVABLE_FALSE","stack","Scheduler","$","untracked","DEBUGGER","jsx","match","$$","observer","useEffect","parent","target","event","options","castArray","useCleanup","useSuspended","tick","CONTEXTS_DATA","context","isNil","useMemo","SYMBOL_SUSPENSE_COLLECTOR","counter","useRenderEffect","disposed","useCheapDisposed","castError","fetch","value","isPromise","error","assign","useReadonly","request","init","callback","isComponent","isTruthy","useUntracked","useSuspense","merge","SYMBOL_JSX","SYMBOL_DEFAULT","kebabToCamelCase","isJsx","setChild","createElement","FragmentUtils","camelToKebabCase","isPureFunction","isObject","setProp","normalizePropertyPath","SYMBOLS_DIRECTIVES","DIRECTIVES","component","cached","hot","module","cold","t","n","s","r"],"mappings":"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","x_google_ignoreList":[63]}