{"version":3,"file":"woby.umd.cjs","sources":["../src/methods/is_server.ts","../../soby/dist/methods/debugger.js","../../soby/dist/context.js","../../soby/dist/utils.js","../../soby/dist/methods/batch.js","../../soby/dist/symbols.js","../../soby/dist/methods/is_observable_boolean.js","../../soby/dist/methods/is_observable_frozen.js","../../soby/dist/methods/is_untracked.js","../../soby/dist/methods/deep_resolve.js","../../soby/dist/objects/callable.js","../../soby/dist/constants.js","../../soby/dist/objects/scheduler.sync.js","../../soby/dist/objects/observable.js","../../soby/dist/lazy.js","../../soby/dist/objects/owner.js","../../soby/dist/objects/superroot.js","../../soby/dist/objects/observables.js","../../soby/dist/objects/observer.js","../../soby/dist/objects/memo.js","../../soby/dist/methods/memo.js","../../soby/dist/methods/boolean.js","../../soby/dist/methods/cleanup.js","../../soby/dist/objects/context.js","../../soby/dist/methods/context.js","../../soby/dist/methods/disposed.js","../../soby/dist/objects/scheduler.async.js","../../soby/dist/objects/effect.js","../../soby/dist/methods/effect.js","../../soby/dist/methods/resolve.js","../../soby/dist/objects/root.js","../../soby/dist/methods/for.cache.keyed.js","../../soby/dist/methods/is_observable.js","../../soby/dist/methods/get.js","../../soby/dist/objects/suspense.js","../../soby/dist/methods/suspense.js","../../soby/dist/methods/for.cache.unkeyed.js","../../soby/dist/methods/is_store.js","../../soby/dist/methods/untrack.js","../../soby/dist/methods/for.js","../../soby/dist/methods/warmup.js","../../soby/dist/methods/switch.js","../../soby/dist/methods/ternary.js","../../soby/dist/methods/is_batching.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/root.js","../../soby/dist/methods/selector.js","../../soby/dist/methods/store.js","../../soby/dist/methods/suspended.js","../../soby/dist/methods/tick.js","../../soby/dist/methods/try_catch.js","../../soby/dist/methods/untracked.js","../../soby/dist/methods/with.js","../src/constants.ts","../src/methods/wrap_element.ts","../src/components/ssr.obj.ts","../src/utils/creators.ts","../src/utils/lang.ts","../src/components/fragment.ts","../src/methods/wrap_clone_element.ts","../src/jsx/runtime.ts","../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_render_effect.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/hooks/use_cheap_disposed.ts","../src/hooks/use_microtask.ts","../src/utils/classlist.ts","../src/utils/diff.ts","../src/utils/fragment.ts","../src/utils/resolvers.ts","../src/utils/string.ts","../src/utils/nested.ts","../src/utils/setters.ts","../src/methods/create_element.ts","../src/components/dynamic.ts","../src/components/error_boundary.ts","../src/components/for.ts","../src/hooks/use_guarded.ts","../src/components/if.ts","../src/components/keep_alive.ts","../src/methods/render.ts","../src/components/portal.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/clone_element.ts","../src/methods/h.ts","../src/methods/hmr.ts","../../node_modules/.pnpm/htm@3.1.1/node_modules/htm/dist/htm.module.js","../src/methods/html.ts","../src/methods/lazy.ts","../src/methods/render_to_string.ts","../src/methods/template.ts","../src/methods/clone.ts","../src/html/html-boolean.ts","../src/html/html-number.ts","../src/html/html-date.ts","../src/html/html-bigint.ts","../src/html/html-object.ts","../src/html/html-length.ts","../src/html/html-box.ts","../src/html/html-color.ts","../src/html/html-style.ts","../src/html/html-string.ts","../src/html/html-function.ts","../src/html/html-class.ts","../src/html/html-child.ts","../src/index.ts"],"sourcesContent":["\r\n/* HELPERS */\r\n\r\nconst IS_BROWSER = !!globalThis.CDATASection?.toString?.().match(/^\\s*function\\s+CDATASection\\s*\\(\\s*\\)\\s*\\{\\s*\\[native code\\]\\s*\\}\\s*$/)\r\n\r\n\r\nexport const isServer = (): boolean => {\r\n\r\n  return !IS_BROWSER\r\n\r\n}\r\n","/**\n * Global debugger configuration object.\n * Used to enable various debugging features in the soby library.\n */\nexport const DEBUGGER = {\n    /** Enable debug mode for detailed logging */\n    debug: false,\n    /** Enable test mode */\n    test: false,\n    /** Enable verbose comment debugging */\n    verboseComment: false,\n    /** Enable context comment debugging */\n    contextComment: false,\n};\nexport class Stack extends Error {\n    constructor(message = '', startIndex = 0) {\n        super(message);\n        this.name = \"Stack\"; // Change the error class name\n        Object.setPrototypeOf(this, Stack.prototype); // Ensure correct prototype chain\n        if (this.stack) {\n            const stackLines = this.stack.split('\\n');\n            const header = stackLines[0]; // usually \"Stack: message\"\n            const body = stackLines.slice(1 + startIndex); // drop frames before `startIndex`\n            this.stack = [header, ...body].join('\\n');\n        }\n    }\n}\nexport const callStack = (msg) => {\n    if (!DEBUGGER.debug)\n        return undefined;\n    return new Stack(msg ?? 'Call Stack');\n};\n","/* IMPORT */\nimport { Stack } from './methods/debugger.js';\n/* MAIN - READ */\n// This module relies on live-binding of exported variables to avoid a bunch of property accesses\nlet BATCH;\nlet OBSERVER;\n/* MAIN - WRITE */\n// Unfortunately live-bounded exports can't just be overridden, so we need these functions\nconst setBatch = (value) => BATCH = value;\nconst setObserver = (value) => OBSERVER = value;\n/* EXPORT */\nexport { BATCH, OBSERVER /* , OWNER, SUPER_OWNER */ };\nexport { setBatch, setObserver /* , setOwner */ };\n","/* MAIN */\nimport { Stack } from './methods/debugger.js';\nconst castArray = (value) => {\n    return isArray(value) ? value : [value];\n};\nconst castError = (error) => {\n    if (error instanceof Error)\n        return error;\n    if (typeof error === 'string')\n        return new Error(error);\n    return new Error('Unknown error');\n};\nconst { is } = Object;\nconst { isArray } = Array;\nconst isEqual = (a, b) => {\n    if (a.length !== b.length)\n        return false;\n    for (let i = 0, l = a.length; i < l; i++) {\n        const valueA = a[i];\n        const valueB = b[i];\n        if (!is(valueA, valueB))\n            return false;\n    }\n    return true;\n};\nconst isFunction = (value) => {\n    return typeof value === 'function';\n};\nconst isObject = (value) => {\n    return (value !== null) && (typeof value === 'object');\n};\nconst isSymbol = (value) => {\n    return typeof value === 'symbol';\n};\nconst noop = (stack, dispose) => {\n    return;\n};\nconst nope = () => {\n    return false;\n};\n/* EXPORT */\nexport { castArray, castError, is, isArray, isEqual, isFunction, isObject, isSymbol, noop, nope };\n","/* IMPORT */\nimport { 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","/* MAIN */\nconst SYMBOL_CACHED = Symbol('Cached');\nconst SYMBOL_OBSERVABLE = Symbol('Observable');\nconst SYMBOL_OBSERVABLE_BOOLEAN = Symbol('Observable.Boolean');\nconst SYMBOL_OBSERVABLE_FROZEN = Symbol('Observable.Frozen');\nconst SYMBOL_OBSERVABLE_READABLE = Symbol('Observable.Readable');\nconst SYMBOL_OBSERVABLE_WRITABLE = Symbol('Observable.Writable');\nconst SYMBOL_STORE = Symbol('Store');\nconst SYMBOL_STORE_KEYS = Symbol('Store.Keys');\nconst SYMBOL_STORE_OBSERVABLE = Symbol('Store.Observable');\nconst SYMBOL_STORE_TARGET = Symbol('Store.Target');\nconst SYMBOL_STORE_VALUES = Symbol('Store.Values');\nconst SYMBOL_STORE_UNTRACKED = Symbol('Store.Untracked');\nconst SYMBOL_SUSPENSE = Symbol('Suspense');\nconst SYMBOL_UNCACHED = Symbol('Uncached');\nconst SYMBOL_UNTRACKED = Symbol('Untracked');\nconst SYMBOL_UNTRACKED_UNWRAPPED = Symbol('Untracked.Unwrapped');\n/* EXPORT */\nexport { SYMBOL_CACHED, SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_BOOLEAN, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_OBSERVABLE_WRITABLE, SYMBOL_STORE, SYMBOL_STORE_KEYS, SYMBOL_STORE_OBSERVABLE, SYMBOL_STORE_TARGET, SYMBOL_STORE_VALUES, SYMBOL_STORE_UNTRACKED, SYMBOL_SUSPENSE, SYMBOL_UNCACHED, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED };\n","/* 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 { isFunction } from '../utils.js';\nexport function deepResolve(value) {\n    if (isFunction(value)) {\n        return deepResolve(value());\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] = deepResolve(value[i]);\n        }\n        return resolved;\n    }\n    else {\n        return value;\n    }\n}\n","/* IMPORT */\nimport { SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_OBSERVABLE_WRITABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\nimport { deepResolve } from '../methods/deep_resolve.js';\n/* MAIN - FUNCTIONS */\nfunction frozenFunction() {\n    if (arguments.length) {\n        throw new Error('A readonly Observable can not be updated');\n    }\n    else {\n        return this;\n    }\n}\nfunction readableFunction() {\n    if (arguments.length) {\n        throw new Error('A readonly Observable can not be updated');\n    }\n    else {\n        return this.get();\n    }\n}\nfunction writableFunction(fn) {\n    if (arguments.length) {\n        if (isFunction(fn)) {\n            return this.update(fn);\n        }\n        else {\n            return this.set(fn); //TSC\n        }\n    }\n    else {\n        return this.get();\n    }\n}\n/* MAIN - GENERATORS */\nconst frozen = (value) => {\n    // value.stack = stack\n    const fn = frozenFunction.bind(value); //TSC\n    fn[SYMBOL_OBSERVABLE] = true;\n    fn[SYMBOL_OBSERVABLE_FROZEN] = true;\n    return fn;\n};\nconst readable = (value, stack) => {\n    //TODO: Make a frozen one instead if disposed\n    value.stack = stack;\n    const fn = readableFunction.bind(value); //TSC\n    fn.valueOf = () => deepResolve(fn);\n    fn.toString = () => fn.valueOf().toString();\n    fn[SYMBOL_OBSERVABLE] = true;\n    fn[SYMBOL_OBSERVABLE_READABLE] = value;\n    return fn;\n};\n/**\n * Creates a writable observable function with enhanced type information.\n * The returned function can be used as both a getter and setter for the observable value.\n *\n * @param value - The observable instance to wrap\n * @param stack - Optional debugging stack trace\n * @returns A function that acts as both getter and setter with proper type annotations\n */\nconst writable = (value, stack) => {\n    value.stack = stack;\n    const fn = writableFunction.bind(value); //TSC\n    fn.valueOf = () => deepResolve(fn);\n    fn.toString = () => fn.valueOf().toString();\n    fn[SYMBOL_OBSERVABLE] = true;\n    fn[SYMBOL_OBSERVABLE_WRITABLE] = value;\n    return fn;\n};\n/* EXPORT */\nexport { frozen, readable, writable };\n","/* IMPORT */\nimport { frozen } from './objects/callable.js';\n/* MAIN */\nconst DIRTY_NO = 0; // The observer is not dirty, for sure\nconst DIRTY_MAYBE_NO = 1; // The observer is not dirty, possibly\nconst DIRTY_MAYBE_YES = 2; // The observer is dirty, possibly\nconst DIRTY_YES = 3; // The observer is dirty, for sure\nconst OBSERVABLE_FALSE = frozen(false);\nconst OBSERVABLE_TRUE = frozen(true);\nconst UNAVAILABLE = new Proxy({}, new Proxy({}, { get() { throw new Error('Unavailable value'); } })); //TSC\nconst UNINITIALIZED = function () { }; //TSC\n/* EXPORT */\nexport { DIRTY_NO, DIRTY_MAYBE_NO, DIRTY_MAYBE_YES, DIRTY_YES };\nexport { OBSERVABLE_FALSE, OBSERVABLE_TRUE };\nexport { UNAVAILABLE, UNINITIALIZED };\n","/* IMPORT */\nimport { Stack } from '../methods/debugger.js';\n/* MAIN */\n// This ensures that there's only one flushing of the queue happening at the same time\nclass Scheduler {\n    constructor() {\n        /* VARIABLES */\n        this.waiting = [];\n        this.counter = 0;\n        this.locked = false;\n        /* QUEING API */\n        this.flush = () => {\n            if (this.locked)\n                return;\n            if (this.counter)\n                return;\n            if (!this.waiting.length)\n                return;\n            try {\n                this.locked = true;\n                while (true) {\n                    const queue = this.waiting;\n                    if (!queue.length)\n                        break;\n                    this.waiting = [];\n                    for (let i = 0, l = queue.length; i < l; i++) {\n                        queue[i][0].update(queue[i][1]);\n                    }\n                }\n            }\n            finally {\n                this.locked = false;\n            }\n        };\n        this.wrap = (fn) => {\n            this.counter += 1;\n            fn();\n            this.counter -= 1;\n            this.flush();\n        };\n        /* SCHEDULING API */\n        this.schedule = (observer, stack) => {\n            this.waiting.push([observer, stack]);\n        };\n    }\n}\n/* EXPORT */\nexport default new Scheduler();\n","/* IMPORT */\nimport { DIRTY_MAYBE_NO, DIRTY_YES, UNINITIALIZED } from '../constants.js';\nimport { OBSERVER } from '../context.js';\nimport Scheduler from './scheduler.sync.js';\nimport { is, nope } from '../utils.js';\nimport { callStack, Stack } from '../methods/debugger.js';\n/* MAIN */\nclass Observable {\n    /* CONSTRUCTOR */\n    constructor(value, options, parent) {\n        this.observers = new Set();\n        this.value = value;\n        this.options = options;\n        if (parent) {\n            this.parent = parent;\n        }\n        if (options?.equals !== undefined) {\n            this.equals = options.equals || nope;\n        }\n    }\n    /* API */\n    get() {\n        if (!this.parent?.disposed) {\n            this.parent?.update(this.stack);\n            OBSERVER?.observables.link(this);\n        }\n        return this.value;\n    }\n    set(value) {\n        // Type checking based on options.type\n        if (this.options?.type !== undefined) {\n            const expectedType = this.options.type;\n            // Handle string literal types and constructor types\n            if (typeof expectedType === 'string' || typeof expectedType === 'function') {\n                // Use a more type-safe approach for checking types\n                try {\n                    // Handle string types - both string literal and String constructor\n                    if (expectedType === 'string' || expectedType === String) {\n                        if (typeof value !== 'string') {\n                            throw new TypeError(`Expected value of type 'string', but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle number types - both string literal and Number constructor\n                    else if (expectedType === 'number' || expectedType === Number) {\n                        if (typeof value !== 'number') {\n                            throw new TypeError(`Expected value of type 'number', but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle boolean types - both string literal and Boolean constructor\n                    // Enhanced to support HTML boolean behavior\n                    else if (expectedType === 'boolean' || expectedType === Boolean) {\n                        // For boolean types, we allow boolean, string, or undefined values\n                        // and convert them using HTML boolean rules\n                        if (typeof value !== 'boolean' && typeof value !== 'string' && value !== undefined) {\n                            throw new TypeError(`Expected value of type 'boolean', 'string', or 'undefined' for boolean, but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle function types - both string literal and Function constructor\n                    // For functions, we check if the value is an array and the first element is a function\n                    else if (expectedType === 'function' || expectedType === Function) {\n                        // Check if value is an array with a function as the first element (React-like convention)\n                        if (Array.isArray(value) && typeof value[0] === 'function') {\n                            // This is valid - function stored in array\n                        }\n                        // Also allow direct function values for backward compatibility\n                        else if (typeof value === 'function') {\n                            // This is valid - direct function\n                        }\n                        else {\n                            throw new TypeError(`Expected value of type 'function' (as [fn] array or direct function), but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle object types - both string literal and Object constructor\n                    else if (expectedType === 'object' || expectedType === Object) {\n                        if (typeof value !== 'object' || value === null) {\n                            throw new TypeError(`Expected value of type 'object', but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle symbol types - both string literal and Symbol constructor\n                    else if (expectedType === 'symbol' || expectedType === Symbol) {\n                        if (typeof value !== 'symbol') {\n                            throw new TypeError(`Expected value of type 'symbol', but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle bigint types - both string literal and BigInt constructor\n                    else if (expectedType === 'bigint' || expectedType === BigInt) {\n                        if (typeof value !== 'bigint') {\n                            throw new TypeError(`Expected value of type 'bigint', but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle undefined types - both string literal and custom handling\n                    else if (expectedType === 'undefined') {\n                        if (value !== undefined) {\n                            throw new TypeError(`Expected value of type 'undefined', but received '${typeof value}'`);\n                        }\n                    }\n                    // Handle custom constructor types (excluding built-in types)\n                    else if (typeof expectedType === 'function') {\n                        // Check if it's one of the built-in primitive types by name\n                        const constructorName = expectedType.name;\n                        // Only handle custom constructors that are not built-in types\n                        // We need to make sure we don't handle built-in constructors here\n                        // since they should have been handled above\n                        const isBuiltInConstructor = constructorName === 'String' ||\n                            constructorName === 'Number' ||\n                            constructorName === 'Boolean' ||\n                            constructorName === 'Function' ||\n                            constructorName === 'Object' ||\n                            constructorName === 'Symbol' ||\n                            constructorName === 'BigInt';\n                        if (constructorName && !isBuiltInConstructor) {\n                            // This should be a custom constructor\n                            if (!(value instanceof expectedType)) {\n                                throw new TypeError(`Expected value to be instance of '${constructorName}', but received '${typeof value}'`);\n                            }\n                        }\n                    }\n                }\n                catch (e) {\n                    // Only catch non-TypeError exceptions to avoid swallowing intentional type errors\n                    if (!(e instanceof TypeError)) {\n                        // If there's any issue with the type checking, we skip it to avoid runtime errors\n                        // This is a safety measure for edge cases\n                    }\n                    else {\n                        // Re-throw TypeError exceptions as they are intentional\n                        throw e;\n                    }\n                }\n            }\n            // Handle generic T type - this is for TypeScript's compile-time type checking\n            // At runtime, we can't validate generic types, so we skip validation\n        }\n        const equals = this.equals || is;\n        const fresh = (this.value === UNINITIALIZED) || !equals(value, this.value);\n        if (!fresh)\n            return value;\n        this.value = value;\n        this.stack = callStack();\n        Scheduler.counter += 1;\n        this.stale(DIRTY_YES, this.stack);\n        Scheduler.counter -= 1;\n        Scheduler.flush();\n        return value;\n    }\n    stale(status, stack) {\n        for (const observer of this.observers) {\n            if (observer.status !== DIRTY_MAYBE_NO || observer.observables.has(this)) { // Maybe this is a potential future dependency we haven't re-read yet\n                if (observer.sync) {\n                    observer.status = Math.max(observer.status, status);\n                    Scheduler.schedule(observer, stack);\n                }\n                else {\n                    observer.stale(status, stack);\n                }\n            }\n        }\n    }\n    update(fn, stack) {\n        const value = fn(this.value);\n        return this.set(value);\n    }\n}\n/* EXPORT */\nexport default Observable;\n","/* IMPORT */\n/* MAIN */\nconst lazyArrayEach = (arr, fn) => {\n    if (arr instanceof Array) {\n        for (let i = 0, l = arr.length; i < l; i++) {\n            fn(arr[i]);\n        }\n    }\n    else if (arr) {\n        fn(arr);\n    }\n};\nconst lazyArrayEachRight = (arr, fn) => {\n    if (arr instanceof Array) {\n        for (let i = arr.length - 1; i >= 0; i--) {\n            fn(arr[i]);\n        }\n    }\n    else if (arr) {\n        fn(arr);\n    }\n};\nconst lazyArrayPush = (obj, key, value) => {\n    const arr = obj[key];\n    if (arr instanceof Array) {\n        arr.push(value);\n    }\n    else if (arr) {\n        obj[key] = [arr, value];\n    }\n    else {\n        obj[key] = value;\n    }\n};\nconst lazySetAdd = (obj, key, value) => {\n    const set = obj[key];\n    if (set instanceof Set) {\n        set.add(value);\n    }\n    else if (set) {\n        if (value !== set) {\n            const s = new Set();\n            s.add(set);\n            s.add(value);\n            obj[key] = s;\n        }\n    }\n    else {\n        obj[key] = value;\n    }\n};\nconst lazySetDelete = (obj, key, value) => {\n    const set = obj[key];\n    if (set instanceof Set) {\n        set.delete(value);\n    }\n    else if (set === value) {\n        obj[key] = undefined;\n    }\n};\nconst lazySetEach = (set, fn) => {\n    if (set instanceof Set) {\n        for (const value of set) {\n            fn(value);\n        }\n    }\n    else if (set) {\n        fn(set);\n    }\n};\n/* EXPORT */\nexport { lazyArrayEach, lazyArrayEachRight, lazyArrayPush };\nexport { lazySetAdd, lazySetDelete, lazySetEach };\n","/* IMPORT */\nimport { UNAVAILABLE } from '../constants.js';\nimport { OBSERVER, setObserver } from '../context.js';\nimport { lazyArrayEachRight } from '../lazy.js';\nimport { castError } from '../utils.js';\nimport { callStack, Stack } from '../methods/debugger.js';\nimport { OWNER, setOwner } from './superroot.js';\n/* HELPERS */\nconst onCleanup = (cleanup) => cleanup.call(cleanup, callStack());\nconst onDispose = (owner) => owner.dispose(true);\n/* MAIN */\n//TODO: Throw when registering stuff after disposing, maybe\nclass Owner {\n    constructor() {\n        /* VARIABLES */\n        this.disposed = false;\n        this.cleanups = undefined;\n        this.errorHandler = undefined;\n        this.contexts = undefined;\n        this.observers = undefined;\n        this.roots = undefined;\n        this.suspenses = undefined;\n    }\n    /* API */\n    catch(error, silent) {\n        const { errorHandler } = this;\n        if (errorHandler) {\n            errorHandler(error); //TODO: This assumes that the error handler won't throw immediately, which we know, but Owner shouldn't know\n            return true;\n        }\n        else {\n            if (this.parent?.catch(error, true))\n                return true;\n            if (silent)\n                return false;\n            // console.error ( error.stack ); // <-- Log \"error.stack\" to better understand where the error happened\n            throw error;\n        }\n    }\n    dispose(deep) {\n        lazyArrayEachRight(this.contexts, onDispose);\n        lazyArrayEachRight(this.observers, onDispose);\n        lazyArrayEachRight(this.suspenses, onDispose);\n        lazyArrayEachRight(this.cleanups, onCleanup);\n        this.cleanups = undefined;\n        this.disposed = deep;\n        this.errorHandler = undefined;\n        this.observers = undefined;\n        this.suspenses = undefined;\n    }\n    get(symbol) {\n        return this.context?.[symbol];\n    }\n    wrap(fn, owner, observer, stack) {\n        const ownerPrev = OWNER;\n        const observerPrev = OBSERVER;\n        setOwner(owner);\n        setObserver(observer);\n        try {\n            return fn(stack);\n        }\n        catch (error) {\n            this.catch(castError(error), false); // Bubbling the error up\n            return UNAVAILABLE; // Returning a value that is the least likely to cause bugs\n        }\n        finally {\n            setOwner(ownerPrev);\n            setObserver(observerPrev);\n        }\n    }\n}\n/* EXPORT */\nexport default Owner;\n","/* IMPORT */\nimport Owner from './owner.js';\n/* MAIN */\nclass SuperRoot extends Owner {\n    constructor() {\n        /* VARIABLES */\n        super(...arguments);\n        this.context = {};\n    }\n}\n//move here to fix circle deps\nexport let SUPER_OWNER = new SuperRoot();\nexport let OWNER = SUPER_OWNER;\nexport const setOwner = (value) => OWNER = value;\nexport default SuperRoot;\n","/* IMPORT */\nimport { Stack } from '../methods/debugger.js';\n/* MAIN */\n// Dedicated data structures for managing observables efficiently\n// We use an array if the list is small enough, as that's faster than a Set, and only switch to Sets after that\nclass ObservablesArray {\n    /* CONSTRUCTOR */\n    constructor(observer) {\n        this.observer = observer;\n        this.observables = [];\n        this.observablesIndex = 0;\n    }\n    /* API */\n    dispose(deep) {\n        if (deep) {\n            const { observer, observables } = this;\n            for (let i = 0; i < observables.length; i++) {\n                observables[i].observers.delete(observer);\n            }\n        }\n        this.observablesIndex = 0;\n    }\n    postdispose() {\n        const { observer, observables, observablesIndex } = this;\n        const observablesLength = observables.length;\n        if (observablesIndex < observablesLength) {\n            for (let i = observablesIndex; i < observablesLength; i++) {\n                observables[i].observers.delete(observer);\n            }\n            observables.length = observablesIndex;\n        }\n    }\n    empty() {\n        return !this.observables.length;\n    }\n    has(observable) {\n        const index = this.observables.indexOf(observable);\n        return index >= 0 && index < this.observablesIndex;\n    }\n    link(observable) {\n        const { observer, observables, observablesIndex } = this;\n        const observablesLength = observables.length;\n        if (observablesLength > 0) {\n            if (observables[observablesIndex] === observable) {\n                this.observablesIndex += 1;\n                return;\n            }\n            const index = observables.indexOf(observable);\n            if (index >= 0 && index < observablesIndex) {\n                return;\n            }\n            if (observablesIndex < observablesLength - 1) {\n                this.postdispose();\n            }\n            else if (observablesIndex === observablesLength - 1) {\n                observables[observablesIndex].observers.delete(observer);\n            }\n        }\n        observable.observers.add(observer);\n        observables[this.observablesIndex++] = observable;\n        if (observablesIndex === 128) { // Switching to a Set, as indexOf checks may get artbirarily expensive otherwise\n            observer.observables = new ObservablesSet(observer, observables);\n        }\n    }\n    update(stack) {\n        const { observables } = this;\n        for (let i = 0, l = observables.length; i < l; i++) {\n            observables[i].parent?.update(stack);\n        }\n    }\n}\nclass ObservablesSet {\n    /* CONSTRUCTOR */\n    constructor(observer, observables) {\n        this.observer = observer;\n        this.observables = new Set(observables);\n    }\n    /* API */\n    dispose(deep) {\n        for (const observable of this.observables) {\n            observable.observers.delete(this.observer);\n        }\n    }\n    postdispose() {\n        return;\n    }\n    empty() {\n        return !this.observables.size;\n    }\n    has(observable) {\n        return this.observables.has(observable);\n    }\n    link(observable) {\n        const { observer, observables } = this;\n        const sizePrev = observables.size;\n        observable.observers.add(observer);\n        const sizeNext = observables.size;\n        if (sizePrev === sizeNext)\n            return; // Cheaper than Set.has+Set.add\n        observables.add(observable);\n    }\n    update(stack) {\n        for (const observable of this.observables) {\n            observable.parent?.update(stack);\n        }\n    }\n}\n/* EXPORT */\nexport { ObservablesArray, ObservablesSet };\n","/* IMPORT */\nimport { DIRTY_NO, DIRTY_MAYBE_NO, DIRTY_MAYBE_YES, DIRTY_YES } from '../constants.js';\nimport { OWNER, SUPER_OWNER } from './superroot.js';\nimport { lazyArrayPush } from '../lazy.js';\nimport { ObservablesArray, ObservablesSet } from './observables.js';\nimport Owner from './owner.js';\nimport { Stack } from '../methods/debugger.js';\n/* MAIN */\nclass Observer extends Owner {\n    /* CONSTRUCTOR */\n    constructor() {\n        super();\n        /* VARIABLES */\n        this.parent = OWNER;\n        this.context = OWNER.context;\n        this.status = DIRTY_YES;\n        this.observables = new ObservablesArray(this);\n        if (OWNER !== SUPER_OWNER) {\n            lazyArrayPush(this.parent, 'observers', this);\n        }\n    }\n    /* API */\n    dispose(deep) {\n        this.observables.dispose(deep);\n        super.dispose(deep);\n    }\n    refresh(fn, stack) {\n        this.dispose(false);\n        this.status = DIRTY_MAYBE_NO; // Resetting the trip flag, we didn't re-execute just yet\n        try {\n            return this.wrap(fn, this, this, stack);\n        }\n        finally {\n            this.observables.postdispose();\n        }\n    }\n    run(stack) {\n        throw new Error('Abstract method');\n    }\n    stale(status, stack) {\n        throw new Error('Abstract method');\n    }\n    update(stack) {\n        if (this.disposed)\n            return; // Disposed, it shouldn't be updated again\n        if (this.status === DIRTY_MAYBE_YES) { // Maybe we are dirty, let's check with our observables, to be sure\n            this.observables.update(stack);\n        }\n        if (this.status === DIRTY_YES) { // We are dirty, let's refresh\n            this.status = DIRTY_MAYBE_NO; // Trip flag, to be able to tell if we caused ourselves to be dirty again\n            this.run(stack);\n            if (this.status === DIRTY_MAYBE_NO) { // Not dirty anymore\n                this.status = DIRTY_NO;\n            }\n            else { // Maybe we are still dirty, let's check again\n                this.update(stack);\n            }\n        }\n        else { // Not dirty\n            this.status = DIRTY_NO;\n        }\n    }\n}\n/* EXPORT */\nexport default Observer;\n","/* IMPORT */\nimport { DIRTY_MAYBE_YES, UNAVAILABLE, UNINITIALIZED } from '../constants.js';\nimport Observable from './observable.js';\nimport Observer from './observer.js';\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 { OWNER } from '../objects/superroot.js';\nimport { lazyArrayPush } from '../lazy.js';\n/* MAIN */\nconst cleanup = (fn) => {\n    lazyArrayPush(OWNER, 'cleanups', fn);\n};\n/* EXPORT */\nexport default cleanup;\n","/* IMPORT */\nimport { OWNER } from './superroot.js';\nimport { lazyArrayPush } from '../lazy.js';\nimport Owner from './owner.js';\nimport { Stack } from '../methods/debugger.js';\n/* MAIN */\nclass Context extends Owner {\n    /* CONSTRUCTOR */\n    constructor(context) {\n        super();\n        /* VARIABLES */\n        this.parent = OWNER;\n        this.context = { ...OWNER.context, ...context };\n        lazyArrayPush(this.parent, 'contexts', this);\n    }\n    /* API */\n    wrap(fn, owner, observer, stack) {\n        return super.wrap(fn, this, undefined, stack);\n    }\n}\n/* EXPORT */\nexport default Context;\n","/* IMPORT */\nimport { OWNER } from '../objects/superroot.js';\nimport Context from '../objects/context.js';\nimport { isSymbol, noop } from '../utils.js';\nimport { callStack } from './debugger.js';\nfunction context(symbolOrContext, fn) {\n    if (isSymbol(symbolOrContext)) {\n        return OWNER.context[symbolOrContext];\n    }\n    else {\n        const stack = callStack();\n        return new Context(symbolOrContext).wrap(fn || noop, undefined, undefined, stack);\n    }\n}\n/* EXPORT */\nexport default context;\n","/* IMPORT */\nimport cleanup from './cleanup.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\n/* MAIN */\nconst disposed = (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 { BATCH } from '../context.js';\nimport { Stack } from '../methods/debugger.js';\n/* MAIN */\n// Using 2 microtasks to give a chance to things using 1 microtask (like refs in Voby) to run first\nclass Scheduler {\n    constructor() {\n        /* VARIABLES */\n        this.waiting = [];\n        this.locked = false;\n        this.queued = false;\n        /* QUEUING API */\n        this.flush = (stack) => {\n            if (this.locked)\n                return;\n            if (!this.waiting.length)\n                return;\n            try {\n                this.locked = true;\n                while (true) {\n                    const queue = this.waiting;\n                    if (!queue.length)\n                        break;\n                    this.waiting = [];\n                    for (let i = 0, l = queue.length; i < l; i++) {\n                        queue[i][0].update(queue[i][1]);\n                    }\n                }\n            }\n            finally {\n                this.locked = false;\n            }\n        };\n        this.queue = (stack) => {\n            if (this.queued)\n                return;\n            this.queued = true;\n            this.resolve(stack);\n        };\n        this.resolve = (stack) => {\n            queueMicrotask(() => {\n                queueMicrotask(() => {\n                    if (BATCH) {\n                        BATCH.finally(() => this.resolve(stack));\n                    }\n                    else {\n                        this.queued = false;\n                        this.flush(stack);\n                    }\n                });\n            });\n        };\n        /* SCHEDULING API */\n        this.schedule = (effect, stack) => {\n            this.waiting.push([effect, stack]);\n            this.queue(stack);\n        };\n    }\n}\n/* EXPORT */\nexport default new Scheduler();\n","/* IMPORT */\nimport { lazyArrayPush } from '../lazy.js';\nimport Observer from './observer.js';\nimport Scheduler from './scheduler.async.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\nimport { callStack, Stack } from '../methods/debugger.js';\n/* MAIN */\nclass Effect extends Observer {\n    /* CONSTRUCTOR */\n    constructor(fn, options) {\n        super();\n        this.fn = fn;\n        if (options?.suspense !== false) {\n            const suspense = this.get(SYMBOL_SUSPENSE);\n            if (suspense) {\n                this.suspense = suspense;\n            }\n        }\n        if (options?.sync === true) {\n            this.sync = true;\n        }\n        const { stack } = options ?? { stack: callStack('Effect init') };\n        if (options?.sync === 'init') {\n            this.init = true;\n            this.update(stack);\n        }\n        else {\n            this.schedule(stack);\n        }\n    }\n    /* API */\n    run(stack) {\n        const result = super.refresh(this.fn, stack);\n        if (isFunction(result)) {\n            lazyArrayPush(this, 'cleanups', result);\n        }\n    }\n    schedule(stack) {\n        if (this.suspense?.suspended)\n            return;\n        if (this.sync) {\n            this.update(stack);\n        }\n        else {\n            Scheduler.schedule(this, stack);\n        }\n    }\n    stale(status, stack) {\n        const statusPrev = this.status;\n        if (statusPrev >= status)\n            return;\n        this.status = status;\n        if (!this.sync || (statusPrev !== 2 && statusPrev !== 3)) { // It isn't currently executing, so let's schedule it\n            this.schedule(stack);\n        }\n    }\n    update(stack) {\n        if (this.suspense?.suspended)\n            return;\n        super.update(stack);\n    }\n}\n/* EXPORT */\nexport default Effect;\n","import Effect from '../objects/effect.js';\nimport { Stack } from './debugger.js';\n/* IMPORT */\n/* MAIN */\n/**\n * Creates an effect that automatically tracks its dependencies.\n *\n * Unlike React's useEffect, this function does NOT require a dependency array.\n * Dependencies are automatically tracked when accessed within the effect function\n * using the `$()` syntax.\n *\n * @example\n * ```typescript\n * // ✅ Correct Woby/Soby pattern - no dependency array needed\n * useEffect(() => {\n *   console.log($(count)) // Automatically tracks 'count' as a dependency\n * })\n *\n * // ❌ React pattern - DO NOT use dependency arrays in Woby/Soby\n * useEffect(() => {\n *   console.log($(count))\n * }, [count]) // This array will be ignored!\n * ```\n *\n * @param fn - The effect function to run. Dependencies are automatically tracked\n *             when observables are accessed using `$()` within this function.\n * @param options - Optional effect options (NOT a dependencies array)\n * @returns A dispose function to clean up the effect\n *\n * @see {@link memo} for creating memoized computed values\n * @see {@link $} for accessing observable values\n */\nconst effect = (fn, options) => {\n    const effect = new Effect(fn, options);\n    const dispose = (stack) => effect.dispose(true);\n    return dispose;\n};\n/* EXPORT */\nexport default effect;\n","/* IMPORT */\nimport memo from './memo.js';\nimport { frozen } from '../objects/callable.js';\nimport { SYMBOL_OBSERVABLE, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from '../symbols.js';\nimport { isFunction } from '../utils.js';\nfunction resolve(value) {\n    if (isFunction(value)) {\n        if (SYMBOL_UNTRACKED_UNWRAPPED in value) {\n            return resolve(value());\n        }\n        else if (SYMBOL_UNTRACKED in value) {\n            return frozen(resolve(value()));\n        }\n        else if (SYMBOL_OBSERVABLE in value) {\n            return value;\n        }\n        else {\n            return memo(() => resolve(value()));\n        }\n    }\n    if (value instanceof Array) {\n        const resolved = new Array(value.length);\n        for (let i = 0, l = resolved.length; i < l; i++) {\n            resolved[i] = resolve(value[i]);\n        }\n        return resolved;\n    }\n    else {\n        return value;\n    }\n}\n/* EXPORT */\nexport default resolve;\n","/* IMPORT */\nimport { OWNER } from './superroot.js';\nimport { lazySetAdd, lazySetDelete } from '../lazy.js';\nimport Owner from './owner.js';\nimport { SYMBOL_SUSPENSE } from '../symbols.js';\nimport { Stack } from '../methods/debugger.js';\n/* MAIN */\nclass Root extends Owner {\n    /* CONSTRUCTOR */\n    constructor(register) {\n        super();\n        /* VARIABLES */\n        this.parent = OWNER;\n        this.context = OWNER.context;\n        if (register) {\n            const suspense = this.get(SYMBOL_SUSPENSE);\n            if (suspense) {\n                this.registered = true;\n                lazySetAdd(this.parent, 'roots', this);\n            }\n        }\n    }\n    /* API */\n    dispose(deep) {\n        if (this.registered) {\n            lazySetDelete(this.parent, 'roots', this);\n        }\n        super.dispose(deep);\n    }\n    wrap(fn, owner, observer, stack) {\n        const dispose = (disposeStack) => this.dispose(true);\n        // Create a wrapper that accepts the stack parameter from Owner.wrap and passes both stack and dispose to the original function\n        const wrapper = (callStack) => fn(callStack, dispose);\n        return super.wrap(wrapper, this, undefined, stack);\n    }\n}\n/* EXPORT */\nexport default Root;\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 { SYMBOL_OBSERVABLE } from '../symbols.js';\nimport { isFunction } from '../utils.js';\n/* MAIN */\nconst isObservable = (value) => {\n    return isFunction(value) && (SYMBOL_OBSERVABLE in value);\n};\n/* EXPORT */\nexport default isObservable;\n","/* IMPORT */\nimport isObservable from './is_observable.js';\nimport { isFunction } from '../utils.js';\nfunction get(value, getFunction = true) {\n    const is = getFunction ? isFunction : isObservable;\n    if (is(value)) {\n        return value();\n    }\n    else {\n        return value;\n    }\n}\n/* EXPORT */\nexport default get;\n","/* IMPORT */\nimport { 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 { SYMBOL_STORE } from '../symbols.js';\nimport { isObject } from '../utils.js';\n/* MAIN */\nconst isStore = (value) => {\n    return isObject(value) && (SYMBOL_STORE in value);\n};\n/* EXPORT */\nexport default isStore;\n","/* IMPORT */\nimport { OBSERVER, setObserver } from '../context.js';\nimport { isFunction } from '../utils.js';\nfunction untrack(fn) {\n    if (isFunction(fn)) {\n        const observerPrev = OBSERVER;\n        if (observerPrev) {\n            try {\n                setObserver(undefined);\n                return fn();\n            }\n            finally {\n                setObserver(observerPrev);\n            }\n        }\n        else {\n            return fn();\n        }\n    }\n    else {\n        return fn;\n    }\n}\n/* EXPORT */\nexport default untrack;\n","/* IMPORT */\nimport cleanup from './cleanup.js';\nimport CacheKeyed from './for.cache.keyed.js';\nimport CacheUnkeyed from './for.cache.unkeyed.js';\nimport get from './get.js';\nimport isObservable from './is_observable.js';\nimport isStore from './is_store.js';\nimport memo from './memo.js';\nimport resolve from './resolve.js';\nimport untrack from './untrack.js';\nimport { frozen } from '../objects/callable.js';\nimport { SYMBOL_CACHED, SYMBOL_STORE_VALUES } from '../symbols.js';\nimport { isArray, isEqual } from '../utils.js';\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 { BATCH } from '../context.js';\nimport SchedulerAsync from '../objects/scheduler.async.js';\nimport SchedulerSync from '../objects/scheduler.sync.js';\n/* MAIN */\nconst isBatching = () => {\n    return !!BATCH || SchedulerAsync.queued || SchedulerAsync.locked || SchedulerSync.locked;\n};\n/* EXPORT */\nexport default isBatching;\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 Root from '../objects/root.js';\nimport { callStack } from './debugger.js';\n/* MAIN */\nconst root = (fn) => {\n    const stack = callStack();\n    return new Root(true).wrap(fn, undefined, undefined, stack);\n};\n/* EXPORT */\nexport default root;\n","/* IMPORT */\nimport { OBSERVABLE_FALSE, OBSERVABLE_TRUE } from '../constants.js';\nimport cleanup from './cleanup.js';\nimport effect from './effect.js';\nimport isObservableFrozen from './is_observable_frozen.js';\nimport memo from './memo.js';\nimport untrack from './untrack.js';\nimport warmup from './warmup.js';\nimport { readable } from '../objects/callable.js';\nimport Observable from '../objects/observable.js';\nimport { is } from '../utils.js';\n/* HELPERS */\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 { BATCH, OBSERVER } from '../context.js';\nimport { lazySetAdd, lazySetDelete, lazySetEach } from '../lazy.js';\nimport cleanup from './cleanup.js';\nimport effect from './effect.js';\nimport isBatching from './is_batching.js';\nimport isStore from './is_store.js';\nimport untrack from './untrack.js';\nimport { readable } from '../objects/callable.js';\nimport ObservableClass from '../objects/observable.js';\nimport { SYMBOL_STORE, SYMBOL_STORE_KEYS, SYMBOL_STORE_OBSERVABLE, SYMBOL_STORE_TARGET, SYMBOL_STORE_VALUES, SYMBOL_STORE_UNTRACKED } from '../symbols.js';\nimport { castArray, is, isArray, isFunction, isObject, noop, nope } from '../utils.js';\nimport { callStack, Stack } from './debugger.js';\n/* CLASSES */\nclass StoreMap extends Map {\n    insert(key, value) {\n        super.set(key, value);\n        return value;\n    }\n}\nclass StoreCleanable {\n    constructor() {\n        this.count = 0;\n    }\n    listen() {\n        this.count += 1;\n        cleanup(this);\n    }\n    call() {\n        this.count -= 1;\n        if (this.count)\n            return;\n        this.dispose();\n    }\n    dispose() { }\n}\nclass StoreKeys extends StoreCleanable {\n    constructor(parent, observable) {\n        super();\n        this.parent = parent;\n        this.observable = observable;\n    }\n    dispose() {\n        this.parent.keys = undefined;\n    }\n}\nclass StoreValues extends StoreCleanable {\n    constructor(parent, observable) {\n        super();\n        this.parent = parent;\n        this.observable = observable;\n    }\n    dispose() {\n        this.parent.values = undefined;\n    }\n}\nclass StoreHas extends StoreCleanable {\n    constructor(parent, key, observable) {\n        super();\n        this.parent = parent;\n        this.key = key;\n        this.observable = observable;\n    }\n    dispose() {\n        this.parent.has?.delete(this.key);\n    }\n}\nclass StoreProperty extends StoreCleanable {\n    constructor(parent, key, observable, node) {\n        super();\n        this.parent = parent;\n        this.key = key;\n        this.observable = observable;\n        this.node = node;\n    }\n    dispose() {\n        this.parent.properties?.delete(this.key);\n    }\n}\nconst StoreListenersRegular = {\n    /* VARIABLES */\n    active: 0,\n    listeners: new Set(),\n    nodes: new Set(),\n    /* API */\n    prepare: (stack) => {\n        const { listeners, nodes } = StoreListenersRegular;\n        const traversed = new Set();\n        const traverse = (node) => {\n            if (traversed.has(node))\n                return;\n            traversed.add(node);\n            lazySetEach(node.parents, traverse);\n            lazySetEach(node.listenersRegular, listener => {\n                listeners.add(listener);\n            });\n        };\n        nodes.forEach(traverse);\n        return () => {\n            listeners.forEach(listener => {\n                listener(stack);\n            });\n        };\n    },\n    register: (node, stack) => {\n        StoreListenersRegular.nodes.add(node);\n        StoreScheduler.schedule(stack);\n    },\n    reset: () => {\n        StoreListenersRegular.listeners = new Set();\n        StoreListenersRegular.nodes = new Set();\n    }\n};\nconst StoreListenersRoots = {\n    /* VARIABLES */\n    active: 0,\n    nodes: new Map(),\n    /* API */\n    prepare: () => {\n        const { nodes } = StoreListenersRoots;\n        return () => {\n            nodes.forEach((rootsSet, store) => {\n                const roots = Array.from(rootsSet);\n                lazySetEach(store.listenersRoots, listener => {\n                    listener(roots);\n                });\n            });\n        };\n    },\n    register: (store, root, stack) => {\n        const roots = StoreListenersRoots.nodes.get(store) || new Set();\n        roots.add(root);\n        StoreListenersRoots.nodes.set(store, roots);\n        StoreScheduler.schedule(stack);\n    },\n    registerWith: (current, parent, key, stack) => {\n        if (!parent.parents) {\n            const root = current?.store || untrack(() => parent.store[key]);\n            StoreListenersRoots.register(parent, root, stack);\n        }\n        else {\n            const traversed = new Set();\n            const traverse = (node) => {\n                if (traversed.has(node))\n                    return;\n                traversed.add(node);\n                lazySetEach(node.parents, parent => {\n                    if (!parent.parents) {\n                        StoreListenersRoots.register(parent, node.store, stack);\n                    }\n                    traverse(parent);\n                });\n            };\n            traverse(current || parent);\n        }\n    },\n    reset: () => {\n        StoreListenersRoots.nodes = new Map();\n    }\n};\nconst StoreScheduler = {\n    /* VARIABLES */\n    active: false,\n    /* API */\n    flush: (stack) => {\n        const flushRegular = StoreListenersRegular.prepare(stack);\n        const flushRoots = StoreListenersRoots.prepare();\n        StoreScheduler.reset();\n        flushRegular(stack);\n        flushRoots(stack);\n    },\n    flushIfNotBatching: (stack) => {\n        if (isBatching()) {\n            if (BATCH) {\n                BATCH.finally(() => StoreScheduler.flushIfNotBatching(stack));\n            }\n            else {\n                setTimeout(StoreScheduler.flushIfNotBatching, 0);\n            }\n        }\n        else {\n            StoreScheduler.flush(stack);\n        }\n    },\n    reset: () => {\n        StoreScheduler.active = false;\n        StoreListenersRegular.reset();\n        StoreListenersRoots.reset();\n    },\n    schedule: (stack) => {\n        if (StoreScheduler.active)\n            return;\n        StoreScheduler.active = true;\n        queueMicrotask(() => StoreScheduler.flushIfNotBatching(stack));\n    }\n};\n/* CONSTANTS */\nconst NODES = new WeakMap();\nconst SPECIAL_SYMBOLS = new Set([SYMBOL_STORE, SYMBOL_STORE_KEYS, SYMBOL_STORE_OBSERVABLE, SYMBOL_STORE_TARGET, SYMBOL_STORE_VALUES]);\nconst UNREACTIVE_KEYS = new Set(['__proto__', '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'prototype', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toSource', 'toString', 'valueOf']);\nconst STORE_TRAPS = {\n    /* API */\n    get: (target, key) => {\n        const stack = callStack('store.get');\n        if (SPECIAL_SYMBOLS.has(key)) {\n            if (key === SYMBOL_STORE)\n                return true;\n            if (key === SYMBOL_STORE_TARGET)\n                return target;\n            if (key === SYMBOL_STORE_KEYS) {\n                if (isListenable()) {\n                    const node = getNodeExisting(target);\n                    node.keys || (node.keys = getNodeKeys(node));\n                    node.keys.listen();\n                    node.keys.observable.stack = stack;\n                    node.keys.observable.get();\n                }\n                return;\n            }\n            if (key === SYMBOL_STORE_VALUES) {\n                if (isListenable()) {\n                    const node = getNodeExisting(target);\n                    node.values || (node.values = getNodeValues(node));\n                    node.values.listen();\n                    node.values.observable.stack = stack;\n                    node.values.observable.get();\n                }\n                return;\n            }\n            if (key === SYMBOL_STORE_OBSERVABLE) {\n                return (key) => {\n                    key = (typeof key === 'number') ? String(key) : key;\n                    const node = getNodeExisting(target);\n                    const getter = node.getters?.get(key);\n                    if (getter)\n                        return getter.bind(node.store);\n                    node.properties || (node.properties = new StoreMap());\n                    const value = target[key];\n                    const property = node.properties.get(key) || node.properties.insert(key, getNodeProperty(node, key, value));\n                    const options = node.equals ? { equals: node.equals } : undefined;\n                    property.observable || (property.observable = getNodeObservable(node, value, options));\n                    const observable = readable(property.observable, stack);\n                    return observable;\n                };\n            }\n        }\n        if (UNREACTIVE_KEYS.has(key))\n            return target[key];\n        const node = getNodeExisting(target);\n        const getter = node.getters?.get(key);\n        const value = getter || target[key];\n        node.properties || (node.properties = new StoreMap());\n        const listenable = isListenable();\n        const proxiable = isProxiable(value);\n        const property = listenable || proxiable ? node.properties.get(key) || node.properties.insert(key, getNodeProperty(node, key, value)) : undefined;\n        if (property?.node) {\n            lazySetAdd(property.node, 'parents', node);\n        }\n        if (property && listenable) {\n            const options = node.equals ? { equals: node.equals } : undefined;\n            property.listen();\n            property.observable || (property.observable = getNodeObservable(node, value, options));\n            property.observable.stack = stack;\n            property.observable.get();\n        }\n        if (getter) {\n            return getter.call(node.store);\n        }\n        else {\n            if (typeof value === 'function' && value === Array.prototype[key]) {\n                return function () {\n                    return value.apply(node.store, arguments);\n                };\n            }\n            return property?.node?.store || value;\n        }\n    },\n    set: (target, key, value, stack) => {\n        value = getTarget(value);\n        const node = getNodeExisting(target);\n        const setter = node.setters?.get(key);\n        if (setter) {\n            setter.call(node.store, value);\n        }\n        else {\n            const targetIsArray = isArray(target);\n            const valuePrev = target[key];\n            const hadProperty = !!valuePrev || (key in target);\n            const equals = node.equals || is;\n            if (hadProperty && equals(value, valuePrev) && (key !== 'length' || !targetIsArray))\n                return true; // Array.prototype.length is special, it gets updated before this trap is called, we need to special-case it...\n            const lengthPrev = targetIsArray && target['length'];\n            target[key] = value;\n            const lengthNext = targetIsArray && target['length'];\n            if (targetIsArray && key !== 'length' && lengthPrev !== lengthNext) { // Inferring updating the length property, since it happens implicitly\n                node.properties?.get('length')?.observable?.set(lengthNext);\n            }\n            node.values?.observable.set(0);\n            if (!hadProperty) {\n                node.keys?.observable.set(0);\n                node.has?.get(key)?.observable.set(true);\n            }\n            const property = node.properties?.get(key);\n            if (property?.node) {\n                lazySetDelete(property.node, 'parents', node);\n            }\n            if (property) {\n                property.observable?.set(value);\n                property.node = isProxiable(value) ? NODES.get(value) || getNode(value, key, node) : undefined;\n            }\n            if (property?.node) {\n                lazySetAdd(property.node, 'parents', node);\n            }\n            if (StoreListenersRoots.active) {\n                StoreListenersRoots.registerWith(property?.node, node, key, stack);\n            }\n            if (StoreListenersRegular.active) {\n                StoreListenersRegular.register(node, stack);\n            }\n            if (targetIsArray && key === 'length') { // Inferring deleting keys, since it happens implicitly\n                const lengthPrev = Number(valuePrev);\n                const lengthNext = Number(value);\n                for (let i = lengthNext; i < lengthPrev; i++) {\n                    if (i in target)\n                        continue;\n                    STORE_TRAPS.deleteProperty(target, `${i}`, true);\n                }\n            }\n        }\n        return true;\n    },\n    deleteProperty: (target, key, _force) => {\n        const hasProperty = (key in target);\n        if (!_force && !hasProperty)\n            return true;\n        const deleted = Reflect.deleteProperty(target, key);\n        if (!deleted)\n            return false;\n        const node = getNodeExisting(target);\n        const stack = callStack();\n        node.getters?.delete(key);\n        node.setters?.delete(key);\n        node.keys?.observable.set(0);\n        node.values?.observable.set(0);\n        node.has?.get(key)?.observable.set(false);\n        const property = node.properties?.get(key);\n        if (StoreListenersRoots.active) {\n            StoreListenersRoots.registerWith(property?.node, node, key, stack);\n        }\n        if (property?.node) {\n            lazySetDelete(property.node, 'parents', node);\n        }\n        if (property) {\n            property.observable?.set(undefined);\n            property.node = undefined;\n        }\n        if (StoreListenersRegular.active) {\n            StoreListenersRegular.register(node, stack);\n        }\n        return true;\n    },\n    defineProperty: (target, key, descriptor) => {\n        const node = getNodeExisting(target);\n        const equals = node.equals || is;\n        const hadProperty = (key in target);\n        const descriptorPrev = Reflect.getOwnPropertyDescriptor(target, key);\n        const stack = callStack();\n        if ('value' in descriptor && isStore(descriptor.value)) {\n            descriptor = { ...descriptor, value: getTarget(descriptor.value) };\n        }\n        if (descriptorPrev && isEqualDescriptor(descriptorPrev, descriptor, equals))\n            return true;\n        const defined = Reflect.defineProperty(target, key, descriptor);\n        if (!defined)\n            return false;\n        if (!descriptor.get) {\n            node.getters?.delete(key);\n        }\n        else if (descriptor.get) {\n            node.getters || (node.getters = new StoreMap());\n            node.getters.set(key, descriptor.get);\n        }\n        if (!descriptor.set) {\n            node.setters?.delete(key);\n        }\n        else if (descriptor.set) {\n            node.setters || (node.setters = new StoreMap());\n            node.setters.set(key, descriptor.set);\n        }\n        if (hadProperty !== !!descriptor.enumerable) {\n            node.keys?.observable.set(0);\n        }\n        node.has?.get(key)?.observable.set(true);\n        const property = node.properties?.get(key);\n        if (StoreListenersRoots.active) {\n            StoreListenersRoots.registerWith(property?.node, node, key, stack);\n        }\n        if (property?.node) {\n            lazySetDelete(property.node, 'parents', node);\n        }\n        if (property) {\n            if ('get' in descriptor) {\n                property.observable?.set(descriptor.get);\n                property.node = undefined;\n            }\n            else {\n                const value = descriptor.value;\n                property.observable?.set(value);\n                property.node = isProxiable(value) ? NODES.get(value) || getNode(value, key, node) : undefined;\n            }\n        }\n        if (property?.node) {\n            lazySetAdd(property.node, 'parents', node);\n        }\n        if (StoreListenersRoots.active) {\n            StoreListenersRoots.registerWith(property?.node, node, key, stack);\n        }\n        if (StoreListenersRegular.active) {\n            StoreListenersRegular.register(node, stack);\n        }\n        return true;\n    },\n    has: (target, key) => {\n        if (key === SYMBOL_STORE)\n            return true;\n        if (key === SYMBOL_STORE_TARGET)\n            return true;\n        const value = (key in target);\n        if (isListenable()) {\n            const node = getNodeExisting(target);\n            node.has || (node.has = new StoreMap());\n            const has = node.has.get(key) || node.has.insert(key, getNodeHas(node, key, value));\n            has.listen();\n            has.observable.stack = callStack('store.has');\n            has.observable.get();\n        }\n        return value;\n    },\n    ownKeys: (target) => {\n        const keys = Reflect.ownKeys(target);\n        if (isListenable()) {\n            const node = getNodeExisting(target);\n            node.keys || (node.keys = getNodeKeys(node));\n            node.keys.listen();\n            node.keys.observable.stack = callStack('store.ownKeys');\n            node.keys.observable.get();\n        }\n        return keys;\n    }\n};\nconst STORE_UNTRACK_TRAPS = {\n    /* API */\n    has: (target, key) => {\n        if (key === SYMBOL_STORE_UNTRACKED)\n            return true;\n        return (key in target);\n    }\n};\n/* HELPERS */\nconst getNode = (value, key, parent, equals) => {\n    if (isStore(value))\n        return getNodeExisting(getTarget(value));\n    const store = isFrozenLike(value, key, parent) ? value : new Proxy(value, STORE_TRAPS);\n    const gettersAndSetters = getGettersAndSetters(value);\n    const node = { parents: parent, store };\n    if (gettersAndSetters) {\n        const { getters, setters } = gettersAndSetters;\n        if (getters)\n            node.getters = getters;\n        if (setters)\n            node.setters = setters;\n    }\n    if (equals === false) {\n        node.equals = nope;\n    }\n    else if (equals) {\n        node.equals = equals;\n    }\n    else if (parent?.equals) {\n        node.equals = parent.equals;\n    }\n    NODES.set(value, node);\n    return node;\n};\nconst getNodeExisting = (value) => {\n    const node = NODES.get(value);\n    if (!node)\n        throw new Error('Impossible');\n    return node;\n};\nconst getNodeFromStore = (store) => {\n    return getNodeExisting(getTarget(store));\n};\nconst getNodeKeys = (node) => {\n    const observable = getNodeObservable(node, 0, { equals: false });\n    const keys = new StoreKeys(node, observable);\n    return keys;\n};\nconst getNodeValues = (node) => {\n    const observable = getNodeObservable(node, 0, { equals: false });\n    const values = new StoreValues(node, observable);\n    return values;\n};\nconst getNodeHas = (node, key, value) => {\n    const observable = getNodeObservable(node, value);\n    const has = new StoreHas(node, key, observable);\n    return has;\n};\nconst getNodeObservable = (node, value, options) => {\n    return new ObservableClass(value, options);\n};\nconst getNodeProperty = (node, key, value) => {\n    const observable = undefined;\n    const propertyNode = isProxiable(value) ? NODES.get(value) || getNode(value, key, node) : undefined;\n    const property = new StoreProperty(node, key, observable, propertyNode);\n    node.properties || (node.properties = new StoreMap());\n    node.properties.set(key, property);\n    return property;\n};\nconst getGettersAndSetters = (value) => {\n    if (isArray(value))\n        return;\n    let getters;\n    let setters;\n    const keys = Object.keys(value);\n    for (let i = 0, l = keys.length; i < l; i++) {\n        const key = keys[i];\n        const descriptor = Object.getOwnPropertyDescriptor(value, key);\n        if (!descriptor)\n            continue;\n        const { get, set } = descriptor;\n        if (get) {\n            getters || (getters = new StoreMap());\n            getters.set(key, get);\n        }\n        if (set) {\n            setters || (setters = new StoreMap());\n            setters.set(key, set);\n        }\n        if (get && !set) { // This ensures that settings throws without first reading the getter, very cheaply\n            setters || (setters = new StoreMap());\n            setters.set(key, throwNoSetterError);\n        }\n    }\n    if (!getters && !setters)\n        return;\n    return { getters, setters };\n};\nconst getStore = (value, options) => {\n    if (isStore(value))\n        return value;\n    const node = NODES.get(value) || getNode(value, undefined, undefined, options?.equals);\n    return node.store;\n};\nconst getTarget = (value) => {\n    if (isStore(value))\n        return value[SYMBOL_STORE_TARGET];\n    return value;\n};\nconst getUntracked = (value) => {\n    if (!isObject(value))\n        return value;\n    if (isUntracked(value))\n        return value;\n    return new Proxy(value, STORE_UNTRACK_TRAPS);\n};\nconst isEqualDescriptor = (a, b, equals) => {\n    return (!!a.configurable === !!b.configurable && !!a.enumerable === !!b.enumerable && !!a.writable === !!b.writable && equals(a.value, b.value) && a.get === b.get && a.set === b.set);\n};\nconst isFrozenLike = (value, key, parent) => {\n    if (Object.isFrozen(value))\n        return true;\n    if (!parent || key === undefined)\n        return false;\n    const target = store.unwrap(parent.store);\n    const descriptor = Reflect.getOwnPropertyDescriptor(target, key);\n    if (descriptor?.configurable || descriptor?.writable)\n        return false;\n    return true;\n};\nconst isListenable = () => {\n    return !!OBSERVER;\n};\nconst isProxiable = (value) => {\n    if (value === null || typeof value !== 'object')\n        return false;\n    if (SYMBOL_STORE in value)\n        return true;\n    if (SYMBOL_STORE_UNTRACKED in value)\n        return false;\n    if (isArray(value))\n        return true;\n    const prototype = Object.getPrototypeOf(value);\n    if (prototype === null)\n        return true;\n    return (Object.getPrototypeOf(prototype) === null);\n};\nconst isUntracked = (value) => {\n    if (value === null || typeof value !== 'object')\n        return false;\n    return (SYMBOL_STORE_UNTRACKED in value);\n};\nconst throwNoSetterError = () => {\n    throw new TypeError('Cannot set property value of #<Object> which has only a getter');\n};\n/* MAIN */\n//TODO: Maybe have the \"on\" method trigger immediately too like \"$.on\", or maybe the other way around, which seems more flexible\n//TODO: Explore converting target values back to numbers (the Proxy always receives strings) whenever possible, to save memory\n//TODO: Implement \"_onRoots\" better, perhaps provding string paths instead, which should be more powerful\nconst store = (value, options) => {\n    if (!isObject(value))\n        return value;\n    if (isUntracked(value))\n        return value;\n    return getStore(value, options);\n};\n/* UTILITIES */\nstore.on = (target, listener) => {\n    /* VARIABLES */\n    const targets = isStore(target) ? [target] : castArray(target);\n    const selectors = targets.filter(isFunction);\n    const nodes = targets.filter(isStore).map(getNodeFromStore);\n    /* ON */\n    StoreListenersRegular.active += 1;\n    const stack = callStack();\n    const disposers = selectors.map(selector => {\n        let inited = false;\n        return effect((stack) => {\n            if (inited) {\n                StoreListenersRegular.listeners.add(listener);\n                StoreScheduler.schedule(stack);\n            }\n            inited = true;\n            selector();\n        }, { suspense: false, sync: true, stack });\n    });\n    nodes.forEach(node => {\n        lazySetAdd(node, 'listenersRegular', listener);\n    });\n    /* OFF */\n    return (stack) => {\n        StoreListenersRegular.active -= 1;\n        disposers.forEach(disposer => {\n            disposer(stack);\n        });\n        nodes.forEach(node => {\n            lazySetDelete(node, 'listenersRegular', listener);\n        });\n    };\n};\nstore._onRoots = (target, listener) => {\n    if (!isStore(target))\n        return noop;\n    const node = getNodeFromStore(target);\n    if (node.parents)\n        throw new Error('Only top-level stores are supported');\n    /* ON */\n    StoreListenersRoots.active += 1;\n    lazySetAdd(node, 'listenersRoots', listener);\n    /* OFF */\n    return () => {\n        StoreListenersRoots.active -= 1;\n        lazySetDelete(node, 'listenersRoots', listener);\n    };\n};\nstore.reconcile = (() => {\n    //TODO: Support getters, setters and symbols (symbols could be supported with Reflect.ownKeys, but that's like 2x slower)\n    const getType = (value) => {\n        if (isArray(value))\n            return 1;\n        if (isProxiable(value))\n            return 2;\n        return 0;\n    };\n    const reconcileOuter = (prev, next) => {\n        const uprev = getTarget(prev);\n        const unext = getTarget(next);\n        reconcileInner(prev, next);\n        const prevType = getType(uprev);\n        const nextType = getType(unext);\n        if (prevType === 1 || nextType === 1) {\n            prev.length = next.length;\n        }\n        return prev;\n    };\n    const reconcileInner = (prev, next) => {\n        const uprev = getTarget(prev);\n        const unext = getTarget(next);\n        const prevKeys = Object.keys(uprev);\n        const nextKeys = Object.keys(unext);\n        for (let i = 0, l = nextKeys.length; i < l; i++) {\n            const key = nextKeys[i];\n            const prevValue = uprev[key];\n            const nextValue = unext[key];\n            if (!is(prevValue, nextValue)) {\n                const prevType = getType(prevValue);\n                const nextType = getType(nextValue);\n                if (prevType && prevType === nextType) {\n                    reconcileInner(prev[key], nextValue);\n                    if (prevType === 1) {\n                        prev[key].length = nextValue.length;\n                    }\n                }\n                else {\n                    prev[key] = nextValue;\n                }\n            }\n            else if (prevValue === undefined && !(key in uprev)) {\n                prev[key] = undefined;\n            }\n        }\n        for (let i = 0, l = prevKeys.length; i < l; i++) {\n            const key = prevKeys[i];\n            if (!(key in unext)) {\n                delete prev[key];\n            }\n        }\n        return prev;\n    };\n    const reconcile = (prev, next) => {\n        return untrack(() => {\n            return reconcileOuter(prev, next);\n        });\n    };\n    return reconcile;\n})();\nstore.untrack = (value) => {\n    return getUntracked(value);\n};\nstore.unwrap = (value) => {\n    return getTarget(value);\n};\n/* EXPORT */\nexport default store;\n","/* IMPORT */\nimport { OBSERVABLE_FALSE } from '../constants.js';\nimport { OWNER } from '../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 */\nimport { OWNER } from '../objects/superroot.js';\nimport { OBSERVER } from '../context.js';\n/* MAIN */\nconst _with = () => {\n    const owner = OWNER;\n    const observer = OBSERVER;\n    return (fn, stack) => {\n        return owner.wrap(() => fn(), owner, observer, stack);\n    };\n};\n/* EXPORT */\nexport default _with;\n","export const isSSR = typeof window === 'undefined' || typeof document === 'undefined' || typeof customElements === 'undefined'\r\n\r\nexport { SYMBOL_OBSERVABLE, SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_OBSERVABLE_WRITABLE, SYMBOL_UNCACHED, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from 'soby'\r\nimport type { ContextData, Context, DirectiveData } from './types'\r\n\r\nexport const CONTEXTS_DATA = new WeakMap<Context<any>, ContextData<any>>()\r\n\r\nexport const DIRECTIVES: Record<symbol, DirectiveData<any>> = {}\r\n\r\nexport const SYMBOL_SUSPENSE = Symbol('Suspense')\r\n\r\nexport const SYMBOL_SUSPENSE_COLLECTOR = Symbol('Suspense.Collector')\r\n\r\nexport const SYMBOL_TEMPLATE_ACCESSOR = Symbol('Template.Accessor')\r\n\r\nexport const SYMBOLS_DIRECTIVES: Record<string, symbol> = {}\r\n\r\nexport const SYMBOL_CLONE = Symbol('CloneElement')\r\n\r\n// export const SYMBOL_DOM = Symbol('DOM')\r\n\r\n/** This symbol is indicated that the element is created through jsx/jsxDEV\r\n *  not customElement\r\n */\r\nexport const SYMBOL_JSX = Symbol('Jsx')\r\n\r\n/** This symbol is used to store default props factory for components */\r\nexport const SYMBOL_DEFAULT = Symbol('Default')\r\n","import { SYMBOL_UNTRACKED_UNWRAPPED } from '../constants'\r\nimport { DEBUGGER, Stack } from 'soby'\r\nexport const SYMBOL_STACK = Symbol('STACK')\r\n\r\nexport interface StackTaggedFunction extends Function {\r\n  [SYMBOL_STACK]?: Stack\r\n}\r\n\r\n\r\nexport const wrapElement = <T extends Function>(element: T): T & StackTaggedFunction => {\r\n\r\n  element[SYMBOL_UNTRACKED_UNWRAPPED] = true\r\n  if (DEBUGGER.test)\r\n    element[SYMBOL_STACK] = new Stack(\"createElement\")\r\n\r\n  return element\r\n\r\n}","/**\r\n * SSR Custom Element Implementation for Woby Framework\r\n * \r\n * This module provides a mock implementation of custom elements for server-side rendering\r\n * environments where browser APIs like customElements, window, and document are not available.\r\n * \r\n * @module customElement.ssr\r\n */\r\n\r\nimport $ from \"soby\"\r\nimport type { Component, Child } from \"../types\"\r\nimport { isSSR } from \"../constants\"\r\n\r\n// Type definitions for DOM APIs\r\ntype EventListener = (evt: Event) => void\r\ntype EventListenerObject = {\r\n    handleEvent(object: Event): void\r\n}\r\ntype EventListenerOrEventListenerObject = EventListener | EventListenerObject\r\ntype AddEventListenerOptions = boolean | {\r\n    capture?: boolean\r\n    once?: boolean\r\n    passive?: boolean\r\n}\r\n\r\n// Simplified NodeList implementation for SSR\r\nclass SimpleNodeList {\r\n    private nodes: any[]\r\n\r\n    constructor(nodes: any[] = []) {\r\n        this.nodes = nodes\r\n    }\r\n\r\n    get length() {\r\n        return this.nodes.length\r\n    }\r\n\r\n    item(index: number) {\r\n        return this.nodes[index] || null\r\n    }\r\n\r\n    [Symbol.iterator]() {\r\n        return this.nodes[Symbol.iterator]()\r\n    }\r\n}\r\n\r\n// Type definitions for MutationObserver\r\ninterface MutationObserverInit {\r\n    childList?: boolean\r\n    attributes?: boolean\r\n    characterData?: boolean\r\n    subtree?: boolean\r\n    attributeOldValue?: boolean\r\n    characterDataOldValue?: boolean\r\n    attributeFilter?: string[]\r\n}\r\n\r\ninterface MutationRecord {\r\n    type: string\r\n    target: any\r\n    addedNodes: SimpleNodeList\r\n    removedNodes: SimpleNodeList\r\n    previousSibling: any | null\r\n    nextSibling: any | null\r\n    attributeName: string | null\r\n    attributeNamespace: string | null\r\n    oldValue: string | null\r\n}\r\n\r\ntype MutationCallback = (mutations: MutationRecord[], observer: MutationObserver) => void\r\n\r\n// Base class with shared methods for all node types\r\nexport class BaseNode {\r\n    nodeType: number\r\n    attributes: Record<string, string>\r\n    childNodes: any[]\r\n    parentNode: any | null\r\n    // Array for tracking mutations\r\n    _mutations: MutationRecord[]\r\n    // List of observers watching this node\r\n    _observers: Array<{ observer: MutationObserver, options: MutationObserverInit }> = []\r\n\r\n    constructor(nodeType: number) {\r\n        this.nodeType = nodeType\r\n        this.attributes = {}\r\n        this.childNodes = []\r\n        this.parentNode = null\r\n        // Initialize mutations array\r\n        this._mutations = []\r\n    }\r\n\r\n    appendChild(child: any) {\r\n        const previousSibling = this.childNodes.length > 0 ? this.childNodes[this.childNodes.length - 1] : null\r\n\r\n        // Set the parent node\r\n        if (child) {\r\n            child.parentNode = this\r\n        }\r\n\r\n        this.childNodes.push(child)\r\n\r\n        // Notify observers of childList mutation\r\n        this._notifyMutation({\r\n            type: 'childList',\r\n            target: this,\r\n            addedNodes: new SimpleNodeList([child]),\r\n            removedNodes: new SimpleNodeList([]),\r\n            previousSibling,\r\n            nextSibling: null,\r\n            attributeName: null,\r\n            attributeNamespace: null,\r\n            oldValue: null\r\n        })\r\n\r\n        return child\r\n    }\r\n\r\n    // append(...nodes: any[]) {\r\n    //     nodes.forEach(node => {\r\n    //         // Handle string nodes by converting them to TextNode\r\n    //         if (typeof node === 'string') {\r\n    //             const textNode = new TextNode(node)\r\n    //             this.appendChild(textNode)\r\n    //         } else {\r\n    //             this.appendChild(node)\r\n    //         }\r\n    //     })\r\n    // }\r\n\r\n    insertBefore(newNode: any, referenceNode: any) {\r\n        if (referenceNode === null) {\r\n            return this.appendChild(newNode)\r\n        }\r\n\r\n        const index = this.childNodes.indexOf(referenceNode)\r\n        if (index === -1) {\r\n            throw new Error('Reference node not found')\r\n        }\r\n\r\n        const previousSibling = index > 0 ? this.childNodes[index - 1] : null\r\n        const nextSibling = referenceNode\r\n\r\n        // Set the parent node\r\n        if (newNode) {\r\n            newNode.parentNode = this\r\n        }\r\n\r\n        this.childNodes.splice(index, 0, newNode)\r\n\r\n        // Notify observers of childList mutation\r\n        this._notifyMutation({\r\n            type: 'childList',\r\n            target: this,\r\n            addedNodes: new SimpleNodeList([newNode]),\r\n            removedNodes: new SimpleNodeList([]),\r\n            previousSibling,\r\n            nextSibling,\r\n            attributeName: null,\r\n            attributeNamespace: null,\r\n            oldValue: null\r\n        })\r\n\r\n        return newNode\r\n    }\r\n\r\n    removeChild(child: any) {\r\n        const index = this.childNodes.indexOf(child)\r\n        if (index === -1) {\r\n            throw new Error('Child node not found')\r\n        }\r\n\r\n        const previousSibling = index > 0 ? this.childNodes[index - 1] : null\r\n        const nextSibling = index < this.childNodes.length - 1 ? this.childNodes[index + 1] : null\r\n\r\n        // Remove the parent node reference\r\n        if (child) {\r\n            child.parentNode = null\r\n        }\r\n\r\n        this.childNodes.splice(index, 1)\r\n\r\n        // Notify observers of childList mutation\r\n        this._notifyMutation({\r\n            type: 'childList',\r\n            target: this,\r\n            addedNodes: new SimpleNodeList([]),\r\n            removedNodes: new SimpleNodeList([child]),\r\n            previousSibling,\r\n            nextSibling,\r\n            attributeName: null,\r\n            attributeNamespace: null,\r\n            oldValue: null\r\n        })\r\n\r\n        return child\r\n    }\r\n\r\n    setAttribute(name: string, value: any) {\r\n        const oldValue = this.attributes[name]\r\n        const newValue = String(value)\r\n\r\n        this.attributes[name] = newValue\r\n\r\n        // Notify observers of attribute mutation\r\n        this._notifyMutation({\r\n            type: 'attributes',\r\n            target: this,\r\n            addedNodes: new SimpleNodeList([]),\r\n            removedNodes: new SimpleNodeList([]),\r\n            previousSibling: null,\r\n            nextSibling: null,\r\n            attributeName: name,\r\n            attributeNamespace: null,\r\n            oldValue: oldValue !== undefined ? oldValue : null\r\n        })\r\n    }\r\n\r\n    removeAttribute(name: string) {\r\n        const oldValue = this.attributes[name]\r\n\r\n        if (oldValue !== undefined) {\r\n            delete this.attributes[name]\r\n\r\n            // Notify observers of attribute mutation\r\n            this._notifyMutation({\r\n                type: 'attributes',\r\n                target: this,\r\n                addedNodes: new SimpleNodeList([]),\r\n                removedNodes: new SimpleNodeList([]),\r\n                previousSibling: null,\r\n                nextSibling: null,\r\n                attributeName: name,\r\n                attributeNamespace: null,\r\n                oldValue\r\n            })\r\n        }\r\n    }\r\n\r\n    // Internal method to notify observers of mutations\r\n    _notifyMutation(mutation: MutationRecord) {\r\n        this._mutations.push(mutation)\r\n        // Notify all registered observers\r\n        this._observers.forEach(({ observer, options }) => {\r\n            const filteredMutations = observer['_filterMutations']([mutation], options)\r\n            if (filteredMutations.length > 0) {\r\n                observer['callback'](filteredMutations, observer)\r\n            }\r\n        })\r\n    }\r\n\r\n    // Method for MutationObserver to register itself\r\n    _addObserver(observer: MutationObserver, options: MutationObserverInit) {\r\n        this._observers.push({ observer, options })\r\n    }\r\n\r\n    // Method for MutationObserver to unregister itself\r\n    _removeObserver(observer: MutationObserver) {\r\n        const index = this._observers.findIndex(item => item.observer === observer)\r\n        if (index !== -1) {\r\n            this._observers.splice(index, 1)\r\n        }\r\n    }\r\n}\r\n\r\n// Mock MutationObserver for SSR environment\r\nexport class MutationObserver {\r\n    private callback: MutationCallback\r\n    private observedElements: Map<BaseNode, MutationObserverInit> = new Map()\r\n    private pendingMutations: MutationRecord[] = []\r\n\r\n    constructor(callback: MutationCallback) {\r\n        this.callback = callback\r\n    }\r\n\r\n    observe(target: BaseNode, options?: MutationObserverInit): void {\r\n        this.observedElements.set(target, options || {})\r\n\r\n        // Register this observer with the target\r\n        target._addObserver(this, options || {})\r\n    }\r\n\r\n    disconnect(): void {\r\n        // Unregister this observer from all targets\r\n        this.observedElements.forEach((options, target) => {\r\n            target._removeObserver(this)\r\n        })\r\n        this.observedElements.clear()\r\n        this.pendingMutations = []\r\n    }\r\n\r\n    takeRecords(): MutationRecord[] {\r\n        const records = [...this.pendingMutations]\r\n        this.pendingMutations = []\r\n        return records\r\n    }\r\n\r\n    // Helper method to filter mutations based on observer options\r\n    private _filterMutations(mutations: MutationRecord[], options: MutationObserverInit): MutationRecord[] {\r\n        return mutations.filter(mutation => {\r\n            if (mutation.type === 'childList' && options.childList) {\r\n                return true\r\n            }\r\n            if (mutation.type === 'attributes' && options.attributes) {\r\n                // If attributeFilter is specified, check if the attribute is in the filter\r\n                if (options.attributeFilter && mutation.attributeName) {\r\n                    return options.attributeFilter.includes(mutation.attributeName)\r\n                }\r\n                return true\r\n            }\r\n            return false\r\n        })\r\n    }\r\n\r\n    // Helper method to simulate mutations for testing\r\n    static simulateMutation(target: BaseNode, record: MutationRecord): void {\r\n        if (target._mutations) {\r\n            target._mutations.push(record)\r\n        }\r\n    }\r\n}\r\n\r\n// Simple dictionary to store custom element definitions in SSR environment\r\nconst customElementsRegistry: Map<string, CustomElementConstructor> = new Map()\r\n\r\n// Mock customElements object for SSR\r\nexport const customElements = {\r\n    define: (tagName: string, component: CustomElementConstructor) => {\r\n        customElementsRegistry.set(tagName, component)\r\n    },\r\n\r\n    get: (tagName: string) => {\r\n        return customElementsRegistry.get(tagName)\r\n    },\r\n\r\n    whenDefined: async (tagName: string) => {\r\n        // In SSR, we just return a resolved promise since all components are already defined\r\n        return Promise.resolve()\r\n    }\r\n}\r\n\r\nexport class ElementNode extends BaseNode {\r\n    tagName: string\r\n    style: any\r\n    className: string\r\n    constructor(tag: string) {\r\n        super(1)\r\n        this.tagName = tag.toUpperCase()\r\n        this.style = {}\r\n        this.className = ''\r\n    }\r\n    append(...nodes: any[]) {\r\n        nodes.forEach(node => this.appendChild(node))\r\n    }\r\n    before(...nodes: any[]) {\r\n        if (this.parentNode) {\r\n            nodes.forEach(node => this.parentNode!.insertBefore(node, this))\r\n        }\r\n    }\r\n    set textContent(value: string) {\r\n        this.childNodes = []\r\n    }\r\n    get innerHTML() {\r\n        return this.childNodes.map((child: any) => {\r\n            if (typeof child === 'object' && child !== null) {\r\n                if ('outerHTML' in child) return child.outerHTML\r\n                if ('textContent' in child) return child.textContent\r\n            }\r\n            return String(child)\r\n        }).join('')\r\n    }\r\n    get outerHTML() {\r\n        const attrs = Object.entries(this.attributes).map(([name, value]) => `${name}=\"${value}\"`).join(' ')\r\n        const attrStr = attrs ? ` ${attrs}` : ''\r\n        const children = this.childNodes.map((child: any) => {\r\n            if (typeof child === 'object' && child !== null) {\r\n                if ('outerHTML' in child) return child.outerHTML\r\n                if ('textContent' in child) return child.textContent\r\n            }\r\n            return String(child)\r\n        }).join('')\r\n        return `<${this.tagName}${attrStr}>${children}</${this.tagName}>`\r\n    }\r\n}\r\n\r\nclass DocumentNode extends BaseNode {\r\n    head: ElementNode\r\n    body: ElementNode\r\n    styleSheets: any[]\r\n    _eventListeners: Map<string, Array<{ listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions }>>\r\n\r\n    constructor() {\r\n        super(9)\r\n        this.head = new ElementNode('head')\r\n        this.body = new ElementNode('body')\r\n        this.styleSheets = []\r\n        this._eventListeners = new Map()\r\n    }\r\n\r\n    // Add SSR creator methods\r\n    createComment(content: string = '') {\r\n        return new CommentNode(content)\r\n    }\r\n\r\n    createElement(tagName: string) {\r\n        return new ElementNode(tagName)\r\n    }\r\n\r\n    createElementNS(namespaceURI: string, qualifiedName: string) {\r\n        class SVGNode extends BaseNode {\r\n            tagName: string\r\n            isSVG: boolean\r\n            style: any\r\n\r\n            constructor() {\r\n                super(1)\r\n                this.tagName = qualifiedName.toUpperCase()\r\n                this.isSVG = true\r\n                this.style = {}\r\n            }\r\n\r\n            // Getter for outerHTML\r\n            get outerHTML() {\r\n                // Build attributes string\r\n                const attrs = Object.entries(this.attributes)\r\n                    .map(([name, value]) => `${name}=\"${value}\"`)\r\n                    .join(' ')\r\n                const attrStr = attrs ? ` ${attrs}` : ''\r\n\r\n                // Build children string\r\n                const children = this.childNodes.map((child: any) => {\r\n                    if (typeof child === 'object' && child !== null) {\r\n                        if ('outerHTML' in child) {\r\n                            return child.outerHTML\r\n                        } else if ('textContent' in child) {\r\n                            return child.textContent\r\n                        }\r\n                    }\r\n                    return String(child)\r\n                }).join('')\r\n\r\n                return `<${this.tagName}${attrStr}>${children}</${this.tagName}>`\r\n            }\r\n        }\r\n\r\n        return new SVGNode()\r\n    }\r\n\r\n    createTextNode(text: string) {\r\n        return new TextNode(text)\r\n    }\r\n\r\n    createDocumentFragment() {\r\n        class DocumentFragmentNode extends BaseNode {\r\n            constructor() {\r\n                super(11)\r\n            }\r\n        }\r\n\r\n        return new DocumentFragmentNode()\r\n    }\r\n\r\n    addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions) {\r\n        if (!this._eventListeners.has(type)) this._eventListeners.set(type, [])\r\n        this._eventListeners.get(type)!.push({ listener, options })\r\n    }\r\n\r\n    removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions) {\r\n        if (this._eventListeners.has(type)) {\r\n            const listeners = this._eventListeners.get(type)!\r\n            const index = listeners.findIndex(item => item.listener === listener)\r\n            if (index !== -1) listeners.splice(index, 1)\r\n        }\r\n    }\r\n\r\n    _getEventListeners(type: string) {\r\n        return this._eventListeners.get(type) || []\r\n    }\r\n}\r\n\r\nexport const document = new DocumentNode()\r\nexport const HTMLElement = ElementNode as any\r\nexport class TextNode extends BaseNode {\r\n    textContent: string\r\n    constructor(text: string) {\r\n        super(3)\r\n        this.textContent = String(text)\r\n    }\r\n}\r\nexport class CommentNode extends BaseNode {\r\n    textContent: string\r\n    constructor(content: string) {\r\n        super(8)\r\n        this.textContent = String(content)\r\n    }\r\n}\r\n\r\n\r\n\r\nif (isSSR) {\r\n    globalThis.customElements = customElements as any\r\n    globalThis.document = document as any\r\n    globalThis.MutationObserver = MutationObserver as any\r\n    globalThis.HTMLElement = HTMLElement as any\r\n    globalThis.Element = HTMLElement as any\r\n    globalThis.Node = BaseNode as any\r\n    globalThis.Text = TextNode as any\r\n    globalThis.Comment = CommentNode as any\r\n}\r\n","import type { ComponentIntrinsicElement, FN } from '../types'\r\nimport { document as doc } from '../components/ssr.obj'\r\ndeclare const via\r\n\r\nfunction getCreators() {\r\n    // Browser environment\r\n    if (typeof via !== 'undefined') {\r\n        const document = via.document\r\n        // Check if document exists and has the required methods before trying to use them\r\n        if (typeof document !== 'undefined' && document !== null &&\r\n            typeof document.createComment === 'function' &&\r\n            typeof document.createElement === 'function' &&\r\n            typeof document.createTextNode === 'function' &&\r\n            typeof document.createDocumentFragment === 'function') {\r\n            return {\r\n                createComment: document.createComment as any as FN<[any], Comment>,\r\n                createHTMLNode: document.createElement as any as FN<[ComponentIntrinsicElement], HTMLElement>,\r\n                createSVGNode: ((name: string) => document.createElementNS('http://www.w3.org/2000/svg', name)) as any as FN<[ComponentIntrinsicElement], SVGElement>,\r\n                createText: document.createTextNode as any as FN<[any], Text>,\r\n                createDocumentFragment: document.createDocumentFragment as any as FN<[], DocumentFragment>\r\n            }\r\n        }\r\n    }\r\n\r\n    let document = globalThis.document\r\n    if (!document)\r\n        document = doc as any\r\n\r\n    // Standard browser/SSR environment - document should be available now\r\n    // Since document is always patched in SSR (see ssr.obj.ts lines 501-502), \r\n    // we can directly bind its methods without additional checks\r\n    return {\r\n        createComment: document.createComment.bind(document, '') as FN<[any], Comment>,\r\n        createHTMLNode: document.createElement.bind(document) as FN<[ComponentIntrinsicElement], HTMLElement>,\r\n        createSVGNode: document.createElementNS.bind(document, 'http://www.w3.org/2000/svg') as FN<[ComponentIntrinsicElement], Element>,\r\n        createText: document.createTextNode.bind(document) as FN<[any], Text>,\r\n        createDocumentFragment: document.createDocumentFragment.bind(document) as FN<[], DocumentFragment>\r\n    }\r\n}\r\n\r\nconst { createComment, createHTMLNode, createSVGNode, createText, createDocumentFragment } = getCreators()\r\n\r\n/* EXPORT */\r\n\r\nexport { createComment, createHTMLNode, createSVGNode, createText, createDocumentFragment }","/* IMPORT */\r\n\r\nimport { SYMBOL_OBSERVABLE_FROZEN, SYMBOL_OBSERVABLE_READABLE, SYMBOL_TEMPLATE_ACCESSOR, SYMBOL_UNTRACKED, SYMBOL_UNTRACKED_UNWRAPPED } from '../constants'\r\nimport type { ComponentFunction, Falsy, TemplateActionProxy, Truthy } from '../types'\r\nimport { isObservable } from 'soby'\r\n\r\n/* MAIN */\r\n\r\nexport const assign = Object.assign\r\n\r\nexport const castArray = <T>(value: T[] | T): T[] => {\r\n\r\n  return isArray(value) ? value : [value]\r\n\r\n}\r\n\r\nexport const castError = (exception: unknown): Error => {\r\n\r\n  if (isError(exception)) return exception\r\n\r\n  if (isString(exception)) return new Error(exception)\r\n\r\n  return new Error('Unknown error')\r\n\r\n}\r\n\r\nexport const flatten = <T>(arr: T[]) => {\r\n\r\n  for (let i = 0, l = arr.length; i < l; i++) {\r\n\r\n    if (!isArray(arr[i])) continue\r\n\r\n    return arr.flat(Infinity)\r\n\r\n  }\r\n\r\n  return arr\r\n\r\n}\r\n\r\nexport const indexOf = (() => {\r\n\r\n  const _indexOf = Array.prototype.indexOf\r\n\r\n  return <T>(arr: ArrayLike<unknown>, value: T): number => {\r\n\r\n    return _indexOf.call(arr, value)\r\n\r\n  }\r\n\r\n})()\r\n\r\n// export const { isArray } = Array\r\nexport const isArray = <T>(a: any): a is Array<T> => a instanceof Array\r\n\r\nexport const isBoolean = (value: unknown): value is boolean => {\r\n\r\n  return typeof value === 'boolean'\r\n\r\n}\r\n\r\nexport const isComponent = (value: unknown): value is ComponentFunction => {\r\n\r\n  return isFunction(value) && (SYMBOL_UNTRACKED_UNWRAPPED in value)\r\n\r\n}\r\n\r\nexport const isError = (value: unknown): value is Error => {\r\n\r\n  return value instanceof Error\r\n\r\n}\r\n\r\nexport const isFalsy = <T>(value: T): value is Falsy<T> => {\r\n\r\n  return !value\r\n\r\n}\r\n\r\nexport const isFunction = (value: unknown): value is ((...args: any[]) => any) => {\r\n\r\n  return typeof value === 'function'\r\n\r\n}\r\n\r\nexport const isClass = <T,>(fn: T): boolean => {\r\n  return typeof fn === 'function' && /^class\\s/.test(Function.prototype.toString.call(fn))\r\n}\r\n\r\nexport const isFunctionReactive = (value: Function): boolean => {\r\n\r\n  return !(SYMBOL_UNTRACKED in value || SYMBOL_UNTRACKED_UNWRAPPED in value || SYMBOL_OBSERVABLE_FROZEN in value || value[SYMBOL_OBSERVABLE_READABLE]?.parent?.disposed)\r\n\r\n}\r\n\r\nexport const isNil = (value: unknown): value is null | undefined => {\r\n\r\n  return value === null || value === undefined\r\n\r\n}\r\n\r\nexport const isNode = (value: unknown): value is Node => {\r\n\r\n  return value instanceof Node\r\n\r\n}\r\n\r\nexport const isObject = (value: unknown): value is object => {\r\n\r\n  return typeof value === 'object' && value !== null\r\n\r\n}\r\n\r\nexport const isPrimitive = (value: unknown): value is string | number | boolean | symbol | null | undefined | bigint => {\r\n  const t = typeof value\r\n  return !(t === 'object' || t === 'function')\r\n}\r\n\r\nexport const isPromise = (value: unknown): value is Promise<unknown> => {\r\n\r\n  return value instanceof Promise\r\n\r\n}\r\n\r\nexport const isString = (value: unknown): value is string => {\r\n\r\n  return typeof value === 'string'\r\n\r\n}\r\n\r\n\r\nexport const isSVG = (value: Element | Comment): value is SVGElement => {\r\n  return !!value['isSVG']\r\n\r\n}\r\n\r\nexport const isSVGElement = (() => {\r\n\r\n  const svgRe = /^(t(ext$|s)|s[vwy]|g)|^set|tad|ker|p(at|s)|s(to|c$|ca|k)|r(ec|cl)|ew|us|f($|e|s)|cu|n[ei]|l[ty]|[GOP]/ //URL: https://regex101.com/r/Ck4kFp/1\r\n  const svgCache = {}\r\n\r\n  return (element: string): boolean => {\r\n\r\n    const cached = svgCache[element]\r\n\r\n    return (cached !== undefined) ? cached : (svgCache[element] = !element.includes('-') && svgRe.test(element))\r\n\r\n  }\r\n\r\n})()\r\n\r\nexport const isTemplateAccessor = (value: unknown): value is TemplateActionProxy => {\r\n\r\n  return isFunction(value) && (SYMBOL_TEMPLATE_ACCESSOR in value)\r\n\r\n}\r\n\r\nexport const isTruthy = <T>(value: T): value is Truthy<T> => {\r\n\r\n  return !!value\r\n\r\n}\r\n\r\nexport const isVoidChild = (value: unknown): value is null | undefined | symbol | boolean => {\r\n\r\n  return value === null || value === undefined || typeof value === 'boolean' || typeof value === 'symbol'\r\n\r\n}\r\n\r\nexport const noop = (): void => {\r\n\r\n  return\r\n\r\n}\r\n\r\nexport const once = <T>(fn: () => T): (() => T) => {\r\n\r\n  let called = false\r\n  let result: T\r\n\r\n  return (): T => {\r\n\r\n    if (!called) {\r\n\r\n      called = true\r\n      result = fn()\r\n\r\n    }\r\n\r\n    return result\r\n\r\n  }\r\n\r\n}\r\n\r\nexport const isProxy = (proxy): proxy is typeof Proxy => {\r\n  return proxy == null ? false : !!proxy[Symbol.for(\"__isProxy\")]\r\n}\r\n\r\nexport const fixBigInt = (v: any | bigint) => typeof v === 'bigint' ? v + 'n' : v\r\n\r\n/**\r\n * Checks if a value is a pure function (not an observable)\r\n * \r\n * This utility function determines whether a given value is a plain function\r\n * that is not wrapped as an observable. This is useful for distinguishing\r\n * between reactive and non-reactive functions in the Woby framework.\r\n * \r\n * @param fn - The value to check\r\n * @returns True if the value is a pure function, false otherwise\r\n * \r\n * @example\r\n * ```typescript\r\n * isPureFunction(() => {}) // returns true\r\n * isPureFunction($(console.log)) // returns false\r\n * isPureFunction('not a function') // returns false\r\n * ```\r\n */\r\nexport const isPureFunction = (fn: Function) => typeof fn === 'function' && !isObservable(fn)\r\n\r\nexport const toArray = <T,>(v: T | T[]) => [...[v].flat(Infinity)] as T[]\r\n","import type { Child } from '../types'\r\n\r\nexport const Fragment = ({ children, ...props }: { children?: Child }): Child => {\r\n\r\n    return children\r\n\r\n}\r\n","import { SYMBOL_CLONE } from '../constants'\r\nimport type { Component, Child, Refs } from '../types'\r\n\r\nexport interface CloneableType<P extends { children?: Child, ref?: Refs } = { children?: Child, ref?: Refs } /* extends Props */> {\r\n  Component: Component<P>\r\n  props?: P | null\r\n};\r\n\r\nexport const wrapCloneElement = <T, P /* extends Props */>(target: T, component: Component<P>, props?: P | null) => {\r\n  target[SYMBOL_CLONE] = { Component: component, props } as CloneableType\r\n  return target\r\n}\r\n","\n/* IMPORT */\n\nimport '../types'\nimport './types'\nexport { Fragment } from '../components/fragment'\n// import createElement from '../methods/create_element';\n// import { wrapCloneElement } from '../methods/wrap_clone_element';\nimport type { Child, Component, ComponentFunction, Element } from '../types'\nimport { wrapCloneElement, CloneableType } from '../methods/wrap_clone_element'\nimport { createElement } from '../index'\nimport { SYMBOL_CLONE, SYMBOL_DEFAULT, SYMBOL_JSX } from '../constants'\n\nconst wrapJsx = <P>(props: P) => {\n  if (props[SYMBOL_JSX]) return props\n  props[SYMBOL_JSX] = true\n  return props\n}\n\nexport const unwrapJsx = <P>(props: P) => {\n  delete props[SYMBOL_JSX]\n  return props\n}\n\nexport const isJsx = <P>(props: P) => !!props[SYMBOL_JSX]\n\n\nfunction getProps<P extends {} = { key?: string; children?: Child }>(component: string | Node | ComponentFunction<P>, props: P) {\n  if (typeof component === 'string') {\n    const ce = customElements.get(component)\n    if (!!ce) {\n      const defaultPropsFn = (ce as any).__component__?.[SYMBOL_DEFAULT]\n      if (!defaultPropsFn) {\n        console.error(`Component ${component} is missing default props. Please use the 'defaults' helper function to provide default props.`)\n      }\n      if (!props) props = defaultPropsFn() ?? {}\n    }\n  }\n  if (!props) props = {} as any\n\n  return wrapJsx(props)\n}\n\n\n/* MAIN */\n// const jsx = <P = {}>(component: Component<P>, props?: P | null, ...children: Child[]): Element => {\n//     return wrapCloneElement(createElement<P>(component as any, props, ...children), component, props);\n// };\n\n// React 16\nexport function jsx<P extends {} = {}>(component: Component<P>, props?: P, ...children: Child[]): Element\n//React 17\nexport function jsx<P extends {} = { key?: string; children?: Child }>(component: Component<P>, props?: P, key?: string): Element\nexport function jsx<P extends {} = { key?: string; children?: Child }>(component: Component<P>, props?: P, ...children: (string | Child)[]): Element {\n  if (typeof children === 'string') // React 16, key\n    return wrapCloneElement(createElement<P>(component as any, props ?? {} as P, children as string), component, props)\n\n  props = getProps<P>(component, props)\n\n  if (typeof children === 'string') // React 16, key\n    Object.assign(props as any, { children })\n\n  return wrapCloneElement(createElement<P>(component as any, props, (props as any)?.key as string), component, props)\n};\n\n//React 17 only\nexport const jsxDEV = <P extends {} = {}>(component: Component<P>, props: P | null, key: string, isStatic: boolean, source: { fileName: string, lineNumber: number, columnNumber: number }, self: any): Element => {\n  props = getProps<P>(component, props)\n\n  if (key)\n    Object.assign(props, { key })\n\n  return wrapCloneElement(createElement<P>(component as any, props), component, props)\n}\n\nexport const getMeta = (target: Element) => target?.[SYMBOL_CLONE] as CloneableType\n\n\nexport const jsxs = jsx ","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\r\nimport { useEffect } from '../hooks/soby'\r\nimport type { Disposer, EffectFunction, EffectOptions } from '../types'\r\nimport { Stack } from '../soby'\r\n\r\n/* HELPERS */\r\n\r\nconst options: EffectOptions = {\r\n  sync: 'init',\r\n  stack: undefined\r\n}\r\n\r\n\r\n// This function exists for convenience, and to avoid creating unnecessary options objects\r\n\r\nexport const useRenderEffect = (fn: EffectFunction, stack: Stack): Disposer => {\r\n\r\n  return useEffect(fn, { ...options, stack })\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 { useCleanup } from '../hooks'\r\n\r\n\r\nexport const useCheapDisposed = (): (() => boolean) => {\r\n\r\n  let disposed = false\r\n\r\n  const get = (): boolean => disposed\r\n  const set = (): boolean => disposed = true\r\n\r\n  useCleanup(set)\r\n\r\n  return get\r\n\r\n}\r\n","\r\n\r\nimport { useCheapDisposed } from '../hooks/use_cheap_disposed'\r\nimport { with as _with, Stack } from '../soby'\r\nimport type { Callback } from '../types'\r\n\r\n\r\n//TODO: Maybe port this to soby\r\n//TODO: Maybe special-case this to use one shared mirotask per microtask\r\n\r\nexport const useMicrotask = (fn: Callback, stack: Stack): void => {\r\n\r\n  const disposed = useCheapDisposed()\r\n  const runWithOwner = _with()\r\n\r\n  queueMicrotask(() => {\r\n\r\n    if (disposed()) return\r\n\r\n    runWithOwner(fn, stack)\r\n\r\n  })\r\n\r\n}\r\n","\r\nimport { isString } from '../utils/lang'\r\n\r\n// This function exists to optimize memory usage in some cases, where the classList API won't be touched without sacrificing performance\r\n\r\nexport const classesToggle = (element: HTMLElement, classes: string, force: null | undefined | boolean): void => {\r\n\r\n  const { className } = element\r\n\r\n  /* OPTIMIZED PATH */\r\n\r\n  if (isString(className)) {\r\n\r\n    if (!className) { // Optimized addition/deletion\r\n\r\n      if (force) { // Optimized addition\r\n\r\n        element.className = classes\r\n\r\n        return\r\n\r\n      } else { // Optimized deletion, nothing to do really\r\n\r\n        return\r\n\r\n      }\r\n\r\n    } else if (!force && className === classes) { // Optimized deletion\r\n\r\n      element.className = ''\r\n\r\n      return\r\n\r\n    }\r\n\r\n  }\r\n\r\n  /* REGULAR PATH */\r\n\r\n  if (classes.includes(' ')) {\r\n\r\n    classes.split(' ').forEach(cls => {\r\n\r\n      if (!cls.length) return\r\n\r\n      element.classList.toggle(cls, !!force)\r\n\r\n    })\r\n\r\n  } else {\r\n\r\n    element.classList.toggle(classes, !!force)\r\n\r\n  }\r\n\r\n}","/**\r\n * ISC License\r\n *\r\n * Copyright (c) 2020, Andrea Giammarchi, @WebReflection\r\n *\r\n * Permission to use, copy, modify, and/or distribute this software for any\r\n * purpose with or without fee is hereby granted, provided that the above\r\n * copyright notice and this permission notice appear in all copies.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE\r\n * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n * PERFORMANCE OF THIS SOFTWARE.\r\n */\r\n\r\n/**\r\n * A DOM diffing algorithm that efficiently updates the DOM by calculating the minimum\r\n * number of operations needed to transform one list of nodes into another.\r\n * \r\n * This implementation is based on udomdiff with customizations for the Woby framework:\r\n * - Added TypeScript types\r\n * - Removed accessor functions\r\n * - Added support for diffing unwrapped nodes\r\n * - Added safety checks for parent node consistency\r\n * \r\n * The algorithm uses an optimized approach that:\r\n * 1. Handles fast paths for common operations (append, prepend, remove)\r\n * 2. Uses a mapping strategy for more complex rearrangements\r\n * 3. Minimizes DOM operations by finding the longest common subsequence\r\n * \r\n * @module diff\r\n */\r\n\r\nimport { createComment } from \"./creators\"\r\n\r\n// This is just a slightly customized version of udomdiff: with types, no accessor function and support for diffing unwrapped nodes\r\n\r\n/** Dummy comment node used as a placeholder for wrapping single nodes */\r\nconst dummyNode = createComment('')\r\n\r\n/** Wrapper array for single \"before\" nodes to normalize them as arrays */\r\nconst beforeDummyWrapper: [Node] = [dummyNode]\r\n\r\n/** Wrapper array for single \"after\" nodes to normalize them as arrays */\r\nconst afterDummyWrapper: [Node] = [dummyNode]\r\n\r\n/**\r\n * Efficiently diffs and updates the children of a parent node.\r\n * \r\n * Compares two lists of DOM nodes ([before] and [after]) and applies the minimum\r\n * number of DOM operations needed to transform the parent's current children\r\n * to match the [after] list.\r\n * \r\n * This is essential for reactive frameworks like Woby to efficiently update\r\n * the DOM when component state changes, avoiding costly re-renders.\r\n * \r\n * @param parent - The parent DOM node whose children need to be updated\r\n * @param before - The current list of child nodes (or a single node)\r\n * @param after - The desired list of child nodes (or a single node)\r\n * @param nextSibling - The reference node for insertion operations, or null to append\r\n * \r\n * @example\r\n * ```ts\r\n * // Update a parent's children from [nodeA, nodeB] to [nodeC, nodeA, nodeD]\r\n * diff(parentElement, [nodeA, nodeB], [nodeC, nodeA, nodeD], null)\r\n * // This will efficiently insert nodeC before nodeA, and append nodeD\r\n * ```\r\n */\r\nexport const diff = (parent: Node, before: Node | Node[], after: Node | Node[], nextSibling: Node | null): void => {\r\n  if (before === after) return\r\n  if (before instanceof Node) {\r\n    if (after instanceof Node) {\r\n      if (before.parentNode === parent) { // Safety check, since setChildStatic may trigger this\r\n        parent.replaceChild(after, before)\r\n        return\r\n      } else {\r\n        //TODO: Optimize this branch too\r\n      }\r\n    }\r\n    beforeDummyWrapper[0] = before\r\n    before = beforeDummyWrapper\r\n  }\r\n  if (after instanceof Node) {\r\n    afterDummyWrapper[0] = after\r\n    after = afterDummyWrapper\r\n  }\r\n  const bLength = after.length\r\n  let aEnd = before.length\r\n  let bEnd = bLength\r\n  let aStart = 0\r\n  let bStart = 0\r\n  let map: Map<any, any> | null = null\r\n  let removable: Node | undefined\r\n  while (aStart < aEnd || bStart < bEnd) {\r\n    // append head, tail, or nodes in between: fast path\r\n    if (aEnd === aStart) {\r\n      // we could be in a situation where the rest of nodes that\r\n      // need to be added are not at the end, and in such case\r\n      // the node to `insertBefore`, if the index is more than 0\r\n      // must be retrieved, otherwise it's gonna be the first item.\r\n      const node = bEnd < bLength ?\r\n        (bStart ?\r\n          (after[bStart - 1].nextSibling) :\r\n          after[bEnd - bStart]) :\r\n        nextSibling\r\n      if (bStart < bEnd) {\r\n        // parent.insertBefore(after[bStart++], node);\r\n        if (node) {\r\n          (node as ChildNode).before.apply(node, after.slice(bStart, bEnd))\r\n        } else {\r\n          // Check if parent has append method, if not fallback to appendChild or handle SSR container\r\n          if (typeof (parent as ParentNode).append === 'function') {\r\n            (parent as ParentNode).append(...after.slice(bStart, bEnd))\r\n          } else if (typeof parent.appendChild === 'function') {\r\n            // Fallback for environments where append is not available but appendChild is\r\n            const nodes = after.slice(bStart, bEnd)\r\n            for (const node of nodes) {\r\n              parent.appendChild(node)\r\n            }\r\n          } else {\r\n            console.log('no append detected')\r\n            // Handle SSR container which is just a plain object\r\n            // This is a special case for SSR where parent is { children: '' }\r\n            // We don't need to do anything here as the nodes are already handled by the fragment system\r\n          }\r\n        }\r\n        bStart = bEnd\r\n      }\r\n    }\r\n    // remove head or tail: fast path\r\n    else if (bEnd === bStart) {\r\n      while (aStart < aEnd) {\r\n        // remove the node only if it's unknown or not live\r\n        if (!map || !map.has(before[aStart])) {\r\n          removable = before[aStart]\r\n          if (removable.parentNode === parent) { // Safety check, since setChildStatic may trigger this\r\n            parent.removeChild(removable)\r\n          }\r\n        }\r\n        aStart++\r\n      }\r\n    }\r\n    // same node: fast path\r\n    else if (before[aStart] === after[bStart]) {\r\n      aStart++\r\n      bStart++\r\n    }\r\n    // same tail: fast path\r\n    else if (before[aEnd - 1] === after[bEnd - 1]) {\r\n      aEnd--\r\n      bEnd--\r\n    }\r\n    // The once here single last swap \"fast path\" has been removed in v1.1.0\r\n    // https://github.com/WebReflection/udomdiff/blob/single-final-swap/esm/index.js#L69-L85\r\n    // reverse swap: also fast path\r\n    else if (\r\n      before[aStart] === after[bEnd - 1] &&\r\n      after[bStart] === before[aEnd - 1]\r\n    ) {\r\n      // this is a \"shrink\" operation that could happen in these cases:\r\n      // [1, 2, 3, 4, 5]\r\n      // [1, 4, 3, 2, 5]\r\n      // or asymmetric too\r\n      // [1, 2, 3, 4, 5]\r\n      // [1, 2, 3, 5, 6, 4]\r\n      const node = before[--aEnd].nextSibling\r\n      parent.insertBefore(\r\n        after[bStart++],\r\n        before[aStart++].nextSibling\r\n      )\r\n      parent.insertBefore(after[--bEnd], node)\r\n      // mark the future index as identical (yeah, it's dirty, but cheap 👍)\r\n      // The main reason to do this, is that when a[aEnd] will be reached,\r\n      // the loop will likely be on the fast path, as identical to b[bEnd].\r\n      // In the best case scenario, the next loop will skip the tail,\r\n      // but in the worst one, this node will be considered as already\r\n      // processed, bailing out pretty quickly from the map index check\r\n      before[aEnd] = after[bEnd]\r\n    }\r\n    // map based fallback, \"slow\" path\r\n    else {\r\n      // the map requires an O(bEnd - bStart) operation once\r\n      // to store all future nodes indexes for later purposes.\r\n      // In the worst case scenario, this is a full O(N) cost,\r\n      // and such scenario happens at least when all nodes are different,\r\n      // but also if both first and last items of the lists are different\r\n      if (!map) {\r\n        map = new Map\r\n        let i = bStart\r\n        while (i < bEnd)\r\n          map.set(after[i], i++)\r\n      }\r\n      // if it's a future node, hence it needs some handling\r\n      if (map.has(before[aStart])) {\r\n        // grab the index of such node, 'cause it might have been processed\r\n        const index = map.get(before[aStart])\r\n        // if it's not already processed, look on demand for the next LCS\r\n        if (bStart < index && index < bEnd) {\r\n          let i = aStart\r\n          // counts the amount of nodes that are the same in the future\r\n          let sequence = 1\r\n          while (++i < aEnd && i < bEnd && map.get(before[i]) === (index + sequence))\r\n            sequence++\r\n          // effort decision here: if the sequence is longer than replaces\r\n          // needed to reach such sequence, which would brings again this loop\r\n          // to the fast path, prepend the difference before a sequence,\r\n          // and move only the future list index forward, so that aStart\r\n          // and bStart will be aligned again, hence on the fast path.\r\n          // An example considering aStart and bStart are both 0:\r\n          // a: [1, 2, 3, 4]\r\n          // b: [7, 1, 2, 3, 6]\r\n          // this would place 7 before 1 and, from that time on, 1, 2, and 3\r\n          // will be processed at zero cost\r\n          if (sequence > (index - bStart)) {\r\n            const node = before[aStart]\r\n            if (bStart < index) {\r\n              // parent.insertBefore(after[bStart++], node);\r\n              if (node) {\r\n                (node as ChildNode).before.apply(node, after.slice(bStart, index))\r\n              } else {\r\n                // Check if parent has append method, if not fallback to appendChild or handle SSR container\r\n                if (typeof (parent as ParentNode).append === 'function') {\r\n                  (parent as ParentNode).append(...after.slice(bStart, index))\r\n                } else if (typeof parent.appendChild === 'function') {\r\n                  // Fallback for environments where append is not available but appendChild is\r\n                  const nodes = after.slice(bStart, index)\r\n                  for (const node of nodes) {\r\n                    parent.appendChild(node)\r\n                  }\r\n                } else {\r\n                  // Handle SSR container which is just a plain object\r\n                  // This is a special case for SSR where parent is { children: '' }\r\n                  // We don't need to do anything here as the nodes are already handled by the fragment system\r\n                }\r\n              }\r\n              bStart = index\r\n            }\r\n          }\r\n          // if the effort wasn't good enough, fallback to a replace,\r\n          // moving both source and target indexes forward, hoping that some\r\n          // similar node will be found later on, to go back to the fast path\r\n          else {\r\n            parent.replaceChild(\r\n              after[bStart++],\r\n              before[aStart++]\r\n            )\r\n          }\r\n        }\r\n        // otherwise move the source forward, 'cause there's nothing to do\r\n        else\r\n          aStart++\r\n      }\r\n      // this node has no meaning in the future list, so it's more than safe\r\n      // to remove it, and check the next live node out instead, meaning\r\n      // that only the live list index should be forwarded\r\n      else {\r\n        removable = before[aStart++]\r\n        if (removable.parentNode === parent) { // Safety check, since setChildStatic may trigger this\r\n          parent.removeChild(removable)\r\n        }\r\n      }\r\n    }\r\n  }\r\n  beforeDummyWrapper[0] = dummyNode\r\n  afterDummyWrapper[0] = dummyNode\r\n}","\r\n/* IMPORT */\r\n\r\nimport type { FragmentNode, FragmentFragment, Fragment } from '../types'\r\n\r\n/* HELPERS */\r\n\r\nconst NOOP_CHILDREN: Node[] = []\r\n\r\n/* MAIN */\r\n\r\nexport const FragmentUtils = {\r\n\r\n  make: (): Fragment => {\r\n\r\n    return {\r\n      values: undefined,\r\n      length: 0\r\n    }\r\n\r\n  },\r\n\r\n  makeWithNode: (node: Node): FragmentNode => {\r\n\r\n    return {\r\n      values: node,\r\n      length: 1\r\n    }\r\n\r\n  },\r\n\r\n  makeWithFragment: (fragment: Fragment): FragmentFragment => {\r\n\r\n    return {\r\n      values: fragment,\r\n      fragmented: true,\r\n      length: 1\r\n    }\r\n\r\n  },\r\n\r\n  getChildrenFragmented: (thiz: Fragment, children: Node[] = []): Node[] => {\r\n\r\n    const { values, length } = thiz\r\n\r\n    if (!length) return children\r\n\r\n    if (values instanceof Array) {\r\n\r\n      for (let i = 0, l = values.length; i < l; i++) {\r\n\r\n        const value = values[i]\r\n\r\n        if (value instanceof Node) {\r\n\r\n          children.push(value)\r\n\r\n        } else {\r\n\r\n          FragmentUtils.getChildrenFragmented(value, children)\r\n\r\n        }\r\n\r\n      }\r\n\r\n    } else {\r\n\r\n      if (values instanceof Node) {\r\n\r\n        children.push(values)\r\n\r\n      } else {\r\n\r\n        FragmentUtils.getChildrenFragmented(values, children)\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return children\r\n\r\n  },\r\n\r\n  getChildren: (thiz: Fragment): Node | Node[] => {\r\n\r\n    if (!thiz.length) return NOOP_CHILDREN\r\n\r\n    if (!thiz.fragmented) return thiz.values as any\r\n\r\n    if (thiz.length === 1) return FragmentUtils.getChildren(thiz.values)\r\n\r\n    return FragmentUtils.getChildrenFragmented(thiz)\r\n\r\n  },\r\n\r\n  pushFragment: (thiz: Fragment, fragment: Fragment): void => {\r\n\r\n    FragmentUtils.pushValue(thiz, fragment)\r\n\r\n    thiz.fragmented = true\r\n\r\n  },\r\n\r\n  pushNode: (thiz: Fragment, node: Node): void => {\r\n\r\n    FragmentUtils.pushValue(thiz, node)\r\n\r\n  },\r\n\r\n  pushValue: (thiz: Fragment, value: Node | Fragment): void => {\r\n\r\n    const { values, length } = thiz as any //TSC\r\n\r\n    if (length === 0) {\r\n\r\n      thiz.values = value\r\n\r\n    } else if (length === 1) {\r\n\r\n      thiz.values = [values, value]\r\n\r\n    } else {\r\n\r\n      values.push(value)\r\n\r\n    }\r\n\r\n    thiz.length += 1\r\n\r\n  },\r\n\r\n  replaceWithNode: (thiz: Fragment, node: Node): void => {\r\n\r\n    thiz.values = node\r\n    delete thiz.fragmented\r\n    thiz.length = 1\r\n\r\n  },\r\n\r\n  replaceWithFragment: (thiz: Fragment, fragment: Fragment): void => {\r\n\r\n    thiz.values = fragment.values\r\n    thiz.fragmented = fragment.fragmented\r\n    thiz.length = fragment.length\r\n\r\n  }\r\n\r\n}\r\n\r\n","import { SYMBOL_OBSERVABLE_READABLE, SYMBOL_UNCACHED, SYMBOL_OBSERVABLE_WRITABLE, /* SYMBOL_DOM */ } from '../constants'\r\nimport { isObservable } from '../methods/soby'\r\nimport { useRenderEffect } from '../hooks/use_render_effect'\r\nimport { $$ } from '../methods/soby'\r\nimport { createText } from '../utils/creators'\r\nimport { isArray, isFunction, isFunctionReactive, isString } from '../utils/lang'\r\nimport type { Classes, ObservableMaybe, Styles } from '../types'\r\nimport { Observable, Stack } from '../soby'\r\n\r\n// const replaceSelf = <T extends { [SYMBOL_DOM]: HTMLElement | HTMLElement[] } & Observable<HTMLElement>>(value: T, newNode: HTMLElement | HTMLElement[]) => {\r\n//   const node = value[SYMBOL_DOM]\r\n//   if (!node)\r\n//     return false\r\n\r\n//   const isList = newNode instanceof NodeList\r\n\r\n//   if (node instanceof NodeList || isArray(node)) {\r\n//     const ns = [...(node as any)].flat()\r\n//     ns.forEach((n, i) => i !== 0 && n.remove())\r\n//     ns[0].replaceWith(...(value[SYMBOL_DOM] = (isList ? [...newNode as any] : [newNode]).flat()))\r\n//   }\r\n//   else\r\n//     node.replaceWith(...(value[SYMBOL_DOM] = (isList ? [...newNode as any] : [newNode]).flat()))\r\n\r\n//   return true\r\n// }\r\n\r\nexport const resolveChild = <T>(value: ObservableMaybe<T>, setter: ((value: T | T[], dynamic: boolean, stack: Stack) => void), _dynamic: boolean = false, stack: Stack): void => {\r\n  if (isArray(value)) {\r\n\r\n    const [values, hasObservables] = resolveArraysAndStatics(value)\r\n\r\n    values[SYMBOL_UNCACHED] = value[SYMBOL_UNCACHED] // Preserving this special symbol\r\n\r\n    setter(values, hasObservables || _dynamic, stack)\r\n  }\r\n  else if (isFunction(value)) {\r\n\r\n    if (!isFunctionReactive(value)) {\r\n\r\n      if (value[SYMBOL_OBSERVABLE_READABLE] ?? value[SYMBOL_OBSERVABLE_WRITABLE])\r\n        (value[SYMBOL_OBSERVABLE_READABLE] ?? value[SYMBOL_OBSERVABLE_WRITABLE]).stack = stack\r\n\r\n      const newValue = $$(value)\r\n      // if (!replaceSelf(value as any, newValue as any))\r\n      resolveChild(newValue, setter, _dynamic, stack)\r\n\r\n    } else {\r\n\r\n      useRenderEffect((stack) => {\r\n\r\n        if (value[SYMBOL_OBSERVABLE_READABLE] ?? value[SYMBOL_OBSERVABLE_WRITABLE])\r\n          (value[SYMBOL_OBSERVABLE_READABLE] ?? value[SYMBOL_OBSERVABLE_WRITABLE]).stack = stack\r\n\r\n        const newValue = $$(value)\r\n        // if (!replaceSelf(value as any, newValue as any))\r\n        resolveChild(newValue, setter, true, stack)\r\n\r\n      }, stack)\r\n\r\n    }\r\n\r\n  } else {\r\n\r\n    setter(value, _dynamic, stack)\r\n\r\n  }\r\n\r\n}\r\n\r\nexport const resolveClass = (classes: Classes, resolved: Record<string, true> = {}): Record<string, true> => {\r\n\r\n  if (isString(classes)) {\r\n\r\n    classes.split(/\\s+/g).filter(Boolean).filter(cls => {\r\n\r\n      resolved[cls] = true\r\n\r\n    })\r\n\r\n  } else if (isFunction(classes)) {\r\n\r\n    resolveClass(classes(), resolved)\r\n\r\n  } else if (isArray(classes)) {\r\n\r\n    classes.forEach(cls => {\r\n\r\n      resolveClass(cls as Classes, resolved) //TSC\r\n\r\n    })\r\n\r\n  } else if (classes) {\r\n\r\n    for (const key in classes) {\r\n\r\n      const value = classes[key]\r\n      const isActive = !!$$(value)\r\n\r\n      if (!isActive) continue\r\n\r\n      resolved[key] = true\r\n\r\n    }\r\n\r\n  }\r\n\r\n  return resolved\r\n\r\n}\r\n\r\nexport const resolveStyle = (styles: Styles, resolved: Record<string, null | undefined | number | string> | string = {}): Record<string, null | undefined | number | string> | string => {\r\n\r\n  if (isString(styles)) { //TODO: split into the individual styles, to be able to merge them with other styles\r\n\r\n    return styles\r\n\r\n  } else if (isFunction(styles)) {\r\n\r\n    return resolveStyle(styles(), resolved)\r\n\r\n  } else if (isArray(styles)) {\r\n\r\n    styles.forEach(style => {\r\n\r\n      resolveStyle(style as Styles, resolved) //TSC\r\n\r\n    })\r\n\r\n  } else if (styles) {\r\n\r\n    for (const key in styles) {\r\n\r\n      const value = styles[key]\r\n\r\n      resolved[key] = $$(value)\r\n\r\n    }\r\n\r\n  }\r\n\r\n  return resolved\r\n\r\n}\r\n\r\nexport const resolveArraysAndStatics = (() => {\r\n\r\n  // This function does 3 things:\r\n  // 1. It deeply flattens the array, only if actually needed though (!)\r\n  // 2. It resolves statics, it's important to resolve them soon enough or they will be re-created multiple times (!)\r\n  // 3. It checks if we found any Observables along the way, avoiding looping over the array another time in the future\r\n\r\n  const DUMMY_RESOLVED = []\r\n\r\n  const resolveArraysAndStaticsInner = (values: any[], resolved: any[], hasObservables: boolean): [any[], boolean] => {\r\n\r\n    for (let i = 0, l = values.length; i < l; i++) {\r\n\r\n      const value = values[i]\r\n      const type = typeof value\r\n\r\n      if (type === 'string' || type === 'number' || type === 'bigint') { // Static\r\n\r\n        if (resolved === DUMMY_RESOLVED) resolved = values.slice(0, i)\r\n\r\n        resolved.push(createText(value))\r\n\r\n      } else if (type === 'object' && isArray(value)) { // Array\r\n\r\n        if (resolved === DUMMY_RESOLVED) resolved = values.slice(0, i)\r\n\r\n        hasObservables = resolveArraysAndStaticsInner(value, resolved, hasObservables)[1]\r\n\r\n      } else if (type === 'function' && isObservable(value)) { // Observable\r\n\r\n        if (resolved !== DUMMY_RESOLVED) resolved.push(value)\r\n\r\n        hasObservables = true\r\n\r\n      } else { // Something else\r\n\r\n        if (resolved !== DUMMY_RESOLVED) resolved.push(value)\r\n\r\n      }\r\n\r\n    }\r\n\r\n    if (resolved === DUMMY_RESOLVED) resolved = values\r\n\r\n    return [resolved, hasObservables]\r\n\r\n  }\r\n\r\n  return (values: any[]): [any[], boolean] => {\r\n\r\n    return resolveArraysAndStaticsInner(values, DUMMY_RESOLVED, false)\r\n\r\n  }\r\n\r\n})()\r\n","/**\r\n * String utility functions for the Woby framework\r\n * \r\n * This module provides utility functions for string manipulation commonly used\r\n * in web development, particularly for converting between different naming conventions\r\n * such as kebab-case and camelCase.\r\n * \r\n * @module stringUtils\r\n */\r\n\r\n/**\r\n * Converts kebab-case strings to camelCase\r\n * \r\n * Utility function to convert CSS-style property names to JavaScript-style property names.\r\n * For example: 'font-size' becomes 'fontSize'\r\n * This is used to convert HTML attribute names to JavaScript property names since HTML attributes\r\n * are case-insensitive and commonly use kebab-case, while JavaScript properties typically use camelCase.\r\n * \r\n * @param str - The kebab-case string to convert\r\n * @returns The camelCase version of the input string\r\n * \r\n * @example\r\n * ```typescript\r\n * kebabToCamelCase('font-size') // returns 'fontSize'\r\n * kebabToCamelCase('background-color') // returns 'backgroundColor'\r\n * ```\r\n */\r\nexport const kebabToCamelCase = (str: string): string => {\r\n    return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase())\r\n}\r\n\r\n/**\r\n * Converts camelCase strings to kebab-case\r\n * \r\n * Utility function to convert JavaScript-style property names to CSS-style property names.\r\n * For example: 'fontSize' becomes 'font-size'\r\n * \r\n * @param str - The camelCase string to convert\r\n * @returns The kebab-case version of the input string\r\n * \r\n * @example\r\n * ```typescript\r\n * camelToKebabCase('fontSize') // returns 'font-size'\r\n * camelToKebabCase('backgroundColor') // returns 'background-color'\r\n * ```\r\n */\r\nexport const camelToKebabCase = (str: string): string => {\r\n    return str.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)\r\n}\r\n\r\n/**\r\n * Normalizes attribute names by converting kebab-case to camelCase\r\n * \r\n * This function is used to normalize HTML attribute names to JavaScript property names.\r\n * It handles both kebab-case and dot notation attributes.\r\n * \r\n * @param name - The attribute name to normalize\r\n * @returns The normalized attribute name\r\n * \r\n * @example\r\n * ```typescript\r\n * normalizeAttributeName('font-size') // returns 'fontSize'\r\n * normalizeAttributeName('style$font-size') // returns 'style.fontSize'\r\n * normalizeAttributeName('nested$prop$value') // returns 'nested.prop.value'\r\n * ```\r\n */\r\nexport const normalizeAttributeName = (name: string): string => {\r\n    // Convert $ notation to dot notation\r\n    if (name.includes('$')) {\r\n        name = name.replace(/\\$/g, '.')\r\n    }\r\n    \r\n    // Convert kebab-case to camelCase for each part\r\n    if (name.includes('.')) {\r\n        return name.split('.').map(part => kebabToCamelCase(part)).join('.')\r\n    }\r\n    \r\n    return kebabToCamelCase(name)\r\n}","/**\r\n * Nested property utility functions for the Woby framework\r\n * \r\n * This module provides utility functions for handling nested properties\r\n * in HTML attributes and JavaScript objects, supporting both $ and . notation.\r\n * \r\n * Features:\r\n * - Normalization of property paths with $ and . notation\r\n * - Conversion from kebab-case to camelCase for each path segment\r\n * - Setting of nested properties on HTML elements\r\n * \r\n * @module nestedUtils\r\n */\r\n\r\nimport { kebabToCamelCase } from './string'\r\n\r\n/**\r\n * Normalizes nested property paths by converting $ notation to dot notation\r\n * and converting kebab-case to camelCase for each part.\r\n * \r\n * @param path - The property path to normalize (e.g., 'style$font-size' or 'nested.prop.value')\r\n * @returns The normalized property path with camelCase parts\r\n * \r\n * @example\r\n * ```typescript\r\n * normalizePropertyPath('style$font-size') // returns 'style.fontSize'\r\n * normalizePropertyPath('nested$prop$value') // returns 'nested.prop.value'\r\n * normalizePropertyPath('background-color') // returns 'backgroundColor'\r\n * ```\r\n */\r\nexport const normalizePropertyPath = (path: string): string => {\r\n    // Convert $ notation to dot notation\r\n    if (path.includes('$')) {\r\n        path = path.replace(/\\$/g, '.')\r\n    }\r\n\r\n    // Convert kebab-case to camelCase for each part\r\n    if (path.includes('.')) {\r\n        return path.split('.').map(part => kebabToCamelCase(part)).join('.')\r\n    }\r\n\r\n    return kebabToCamelCase(path)\r\n}\r\n\r\n/**\r\n * Sets nested properties on an element from attribute names\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 element - The HTMLElement to set properties on\r\n * @param attributeName - The attribute name (e.g., 'style$font-size' or 'nested$prop$value')\r\n * @param value - The value to set\r\n * \r\n * @example\r\n * ```typescript\r\n * setNestedAttribute(element, 'style$font-size', '16px')\r\n * setNestedAttribute(element, 'nested$prop$value', 'test')\r\n * ```\r\n */\r\nexport const setNestedAttribute = (element: HTMLElement, attributeName: string, value: any): void => {\r\n    const normalizedPath = normalizePropertyPath(attributeName)\r\n\r\n    // For style properties, handle them specially\r\n    if (normalizedPath.startsWith('style.')) {\r\n        const styleProperty = normalizedPath.slice(6) // Remove 'style.' prefix\r\n        if (element.style) {\r\n            element.style[styleProperty as any] = value\r\n        }\r\n        return\r\n    }\r\n\r\n    // For other properties with dots, create nested structure in props\r\n    if (normalizedPath.includes('.')) {\r\n        const keys = normalizedPath.split('.')\r\n        const lastKey = keys.pop()\r\n\r\n        // Navigate to the nested object in props\r\n        let target = element as any\r\n        if (!target.props) {\r\n            target.props = {}\r\n        }\r\n        target = target.props\r\n\r\n        for (let i = 0; i < keys.length; i++) {\r\n            const key = keys[i]\r\n            if (!(key in target) || typeof target[key] !== 'object' || target[key] === null) {\r\n                target[key] = {}\r\n            }\r\n            target = target[key]\r\n        }\r\n\r\n        // Set the final property\r\n        if (lastKey) {\r\n            target[lastKey] = value\r\n        }\r\n        return\r\n    }\r\n\r\n    // For simple properties, set them directly\r\n    const propName = kebabToCamelCase(normalizedPath)\r\n    element[propName] = value\r\n}","import { DIRECTIVES, SYMBOLS_DIRECTIVES, /* SYMBOL_DOM, */ SYMBOL_UNCACHED } from '../constants'\r\nimport { useMicrotask } from '../hooks/use_microtask'\r\nimport { useRenderEffect } from '../hooks/use_render_effect'\r\nimport { isStore } from '../methods/soby'\r\nimport { $$, isObservable } from '../methods/soby'\r\nimport { store } from '../methods/soby'\r\nimport { untrack } from '../methods/soby'\r\nimport { context, with as _with, batch, Observable, SYMBOL_OBSERVABLE_WRITABLE } from '../soby'\r\nimport { SYMBOL_STORE_OBSERVABLE } from '../soby'\r\nimport { classesToggle } from '../utils/classlist'\r\nimport { createText, createComment } from '../utils/creators'\r\nimport { diff } from '../utils/diff'\r\nimport { FragmentUtils } from '../utils/fragment'\r\nimport { castArray, flatten, isArray, isBoolean, isFunction, isFunctionReactive, isNil, isObject, isString, isSVG, isTemplateAccessor, isVoidChild } from '../utils/lang'\r\nimport { resolveChild, resolveClass, resolveStyle } from '../utils/resolvers'\r\nimport { kebabToCamelCase } from '../utils/string'\r\nimport { normalizePropertyPath, setNestedAttribute } from '../utils/nested'\r\nimport type { Child, Classes, DirectiveData, EventListener, Fragment, FunctionMaybe, ObservableMaybe, Ref, TemplateActionProxy } from '../types'\r\nimport { Stack } from '../soby'\r\nimport { isJsx } from '../jsx-runtime'\r\n\r\nexport const setAttributeStatic = (() => {\r\n\r\n    const attributesBoolean = new Set(['allowfullscreen', 'async', 'autofocus', 'autoplay', 'checked', 'controls', 'default', 'disabled', 'formnovalidate', 'hidden', 'indeterminate', 'ismap', 'loop', 'multiple', 'muted', 'nomodule', 'novalidate', 'open', 'playsinline', 'readonly', 'required', 'reversed', 'seamless', 'selected'])\r\n    const attributeCamelCasedRe = /e(r[HRWrv]|[Vawy])|Con|l(e[Tcs]|c)|s(eP|y)|a(t[rt]|u|v)|Of|Ex|f[XYa]|gt|hR|d[Pg]|t[TXYd]|[UZq]/ //URL: https://regex101.com/r/I8Wm4S/1\r\n    const attributesCache: Record<string, string> = {}\r\n    const uppercaseRe = /[A-Z]/g\r\n\r\n    const normalizeKeySvg = (key: string): string => {\r\n\r\n        return attributesCache[key] || (attributesCache[key] = attributeCamelCasedRe.test(key) ? key : key.replace(uppercaseRe, char => `-${char.toLowerCase()}`))\r\n\r\n    }\r\n\r\n    return (element: HTMLElement, key: string, value: null | undefined | boolean | number | string): void => {\r\n\r\n        // Handle nested properties with \".\" or \"$\" syntax\r\n        if (key.includes('.') || key.includes('$')) {\r\n            setNestedAttribute(element, key, value)\r\n            return\r\n        }\r\n\r\n        if (isSVG(element)) {\r\n\r\n            key = (key === 'xlinkHref' || key === 'xlink:href') ? 'href' : normalizeKeySvg(key)\r\n\r\n            if (isNil(value) || (value === false && attributesBoolean.has(key))) {\r\n\r\n                element.removeAttribute(key)\r\n\r\n            } else {\r\n\r\n                element.setAttribute(key, String(value))\r\n\r\n            }\r\n\r\n        } else {\r\n\r\n            if (isNil(value) || (value === false && attributesBoolean.has(key))) {\r\n\r\n                element.removeAttribute(key)\r\n\r\n            } else {\r\n\r\n                value = (value === true) ? '' : String(value)\r\n\r\n                element.setAttribute(key, value)\r\n\r\n            }\r\n\r\n        }\r\n\r\n    }\r\n\r\n})()\r\n\r\nexport const setAttribute = (element: HTMLElement, key: string, value: FunctionMaybe<null | undefined | boolean | number | string>, stack: Stack): void => {\r\n\r\n    if (isFunction(value) && isFunctionReactive(value))\r\n    // useRenderEffect(() => {\r\n    //     const unwrappedValue = value()\r\n    //     const { toHtml } = value[SYMBOL_OBSERVABLE_WRITABLE]?.options ?? {}\r\n    //     setAttributeStatic(element, key, toHtml ? toHtml(unwrappedValue) : unwrappedValue)\r\n    // }, stack)\r\n    {\r\n        // Check if value is an observable with toHtml option\r\n        if (isObservable(value) && value[SYMBOL_OBSERVABLE_WRITABLE]?.options?.toHtml) {\r\n            useRenderEffect(() => {\r\n                const unwrappedValue = value()\r\n                const options = value[SYMBOL_OBSERVABLE_WRITABLE].options\r\n                const htmlValue = options.toHtml(unwrappedValue)\r\n                setAttributeStatic(element, key, htmlValue)\r\n            }, stack)\r\n        } else {\r\n            useRenderEffect(() => {\r\n                setAttributeStatic(element, key, value())\r\n            }, stack)\r\n        }\r\n    }\r\n    else\r\n        setAttributeStatic(element, key, $$(value))\r\n\r\n}\r\n\r\nexport const setChildReplacementFunction = (parent: HTMLElement | Node, fragment: Fragment, child: (() => Child), stack: Stack): void => {\r\n\r\n    useRenderEffect((stack) => {\r\n\r\n        let valueNext = child()\r\n\r\n        while (isFunction(valueNext)) {\r\n\r\n            valueNext = valueNext()\r\n\r\n        }\r\n\r\n        setChildStatic(parent, fragment, false, valueNext, true, child, stack)\r\n\r\n    }, stack)\r\n\r\n}\r\n\r\nexport const setChildReplacementText = (child: string, childPrev: Node): Node => {\r\n\r\n    if (childPrev.nodeType === 3) {\r\n\r\n        childPrev.nodeValue = child\r\n\r\n        return childPrev\r\n\r\n    } else {\r\n\r\n        const parent = childPrev.parentElement\r\n\r\n        if (!parent) throw new Error('Invalid child replacement')\r\n\r\n        const textNode = createText(child)\r\n\r\n        parent.replaceChild(textNode, childPrev)\r\n\r\n        return textNode\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setChildReplacement = (child: Child, childPrev: Node, stack: Stack): void => {\r\n\r\n    const type = typeof child\r\n\r\n    if (type === 'string' || type === 'number' || type === 'bigint') {\r\n\r\n        setChildReplacementText(String(child), childPrev)\r\n\r\n    } else {\r\n\r\n        const parent = childPrev.parentElement ?? childPrev.parentNode\r\n\r\n        if (!parent) throw new Error('Invalid child replacement')\r\n\r\n        const fragment = FragmentUtils.makeWithNode(childPrev)\r\n\r\n        if (type === 'function') {\r\n\r\n            setChildReplacementFunction(parent, fragment, child as (() => Child), stack) //TSC\r\n\r\n        } else {\r\n\r\n            setChild(parent, child, fragment, stack)\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\n/**\r\n * Sets child nodes on a parent element with static (non-reactive) values.\r\n * \r\n * This function efficiently updates the DOM by comparing the current children (in the fragment)\r\n * with the new children and applying the minimal set of DOM operations needed.\r\n * \r\n * The function handles several optimization cases:\r\n * 1. Fast path for appending a node the first time\r\n * 2. Fast path for single text child replacement\r\n * 3. Fast path for removing all children or replacing placeholders\r\n * 4. General diffing algorithm for complex changes\r\n * \r\n * @param parent - The parent DOM element to update\r\n * @param fragment - A fragment representing the current children state\r\n * @param fragmentOnly - Whether to only update the fragment without touching the actual DOM\r\n * @param child - The new child or children to set\r\n * @param dynamic - Whether the child is dynamic (reactive) or static\r\n * @param stack - The stack trace for debugging purposes\r\n * \r\n * @example\r\n * ```ts\r\n * // Set a simple text child\r\n * setChildStatic(parent, fragment, false, \"Hello World\", false, stack)\r\n * \r\n * // Set multiple children\r\n * setChildStatic(parent, fragment, false, [node1, node2, \"text\"], false, stack)\r\n * \r\n * // Set a function child (will be resolved)\r\n * setChildStatic(parent, fragment, false, () => \"Dynamic content\", true, stack)\r\n * ```\r\n */\r\nexport const setChildStatic = (parent: HTMLElement | Node, fragment: Fragment, fragmentOnly: boolean, child: Child, dynamic: boolean, childComp: Function, stack: Stack): void => {\r\n\r\n    if (!dynamic && isVoidChild(child)) return // Ignoring static undefined children, avoiding inserting some useless placeholder nodes\r\n\r\n    const prev = FragmentUtils.getChildren(fragment)\r\n    const prevIsArray = (prev instanceof Array)\r\n    const prevLength = prevIsArray ? prev.length : 1\r\n    const prevFirst = prevIsArray ? prev[0] : prev\r\n    const prevLast = prevIsArray ? prev[prevLength - 1] : prev\r\n    const prevSibling = prevLast?.nextSibling || null\r\n\r\n    if (prevLength === 0) { // Fast path for appending a node the first time\r\n\r\n        const type = typeof child\r\n\r\n        if (type === 'string' || type === 'number' || type === 'bigint') {\r\n\r\n            const textNode = createText(child as any)\r\n\r\n            if (!fragmentOnly) {\r\n\r\n                parent.appendChild(textNode)\r\n\r\n            }\r\n\r\n            FragmentUtils.replaceWithNode(fragment, textNode)\r\n\r\n            return\r\n\r\n        } else if (type === 'object' && child !== null && typeof (child as Node).nodeType === 'number') { //TSC\r\n\r\n            const node = child as Node\r\n\r\n            if (!fragmentOnly) {\r\n                // Check if parent has insertBefore method, if not fallback to appendChild for SSR\r\n                if (typeof parent.insertBefore === 'function') {\r\n                    parent.insertBefore(node, null)\r\n                } else {\r\n                    // Handle SSR container which is just a plain object\r\n                    // We don't need to do anything here as the nodes are already handled by the fragment system\r\n                }\r\n            }\r\n\r\n            FragmentUtils.replaceWithNode(fragment, node)\r\n\r\n            return\r\n\r\n        }\r\n\r\n    }\r\n\r\n    if (prevLength === 1) { // Fast path for single text child\r\n\r\n        const type = typeof child\r\n\r\n        if (type === 'string' || type === 'number' || type === 'bigint') {\r\n\r\n            const node = setChildReplacementText(String(child), prevFirst) //TODO: maybe \"fragmentOnly\" should be passed on here, but it seems unnecessary\r\n\r\n            FragmentUtils.replaceWithNode(fragment, node)\r\n\r\n            return\r\n\r\n        }\r\n\r\n    }\r\n\r\n    const fragmentNext = FragmentUtils.make()\r\n\r\n    const children = (isArray(child) ? child : [child]) as Node[] //TSC\r\n\r\n    for (let i = 0, l = children.length; i < l; i++) {\r\n\r\n        const child = children[i]\r\n        const type = typeof child\r\n\r\n        if (type === 'string' || type === 'number' || type === 'bigint') {\r\n\r\n            FragmentUtils.pushNode(fragmentNext, createText(child as any))\r\n\r\n        } else if (type === 'object' && child !== null && typeof child.nodeType === 'number') {\r\n\r\n            FragmentUtils.pushNode(fragmentNext, child)\r\n\r\n        } else if (type === 'function') {\r\n\r\n            const fragment = FragmentUtils.make()\r\n\r\n            let childFragmentOnly = !fragmentOnly // Avoiding mutating the DOM immediately, letting the parent handle it\r\n\r\n            FragmentUtils.pushFragment(fragmentNext, fragment)\r\n\r\n            resolveChild(child, (child, dynamic, stack) => {\r\n\r\n                const fragmentOnly = childFragmentOnly\r\n\r\n                childFragmentOnly = false\r\n\r\n                setChildStatic(parent, fragment, fragmentOnly, child, dynamic, children[i] as any, stack)\r\n\r\n            }, false, stack)\r\n\r\n        }\r\n\r\n    }\r\n\r\n    let next = FragmentUtils.getChildren(fragmentNext)\r\n    let nextLength = fragmentNext.length\r\n\r\n    if (nextLength === 0 && prevLength === 1 && prevFirst.nodeType === 8) { // It's a placeholder already, no need to replace it\r\n\r\n        return\r\n\r\n    }\r\n\r\n    if (!fragmentOnly && (nextLength === 0 || (prevLength === 1 && prevFirst.nodeType === 8) || children[SYMBOL_UNCACHED])) { // Fast path for removing all children and/or replacing the placeholder\r\n\r\n        const { childNodes } = parent\r\n\r\n        if (childNodes.length === prevLength) { // Maybe this fragment doesn't handle all children but only a range of them, checking for that here\r\n\r\n            parent.textContent = ''\r\n\r\n            if (nextLength === 0) { // Placeholder, to keep the right spot in the array of children\r\n\r\n                const placeholder = /* childComp[SYMBOL_DOM] = */ createComment('')\r\n\r\n                FragmentUtils.pushNode(fragmentNext, placeholder)\r\n\r\n                if (next !== fragmentNext.values) {\r\n\r\n                    next = placeholder\r\n                    nextLength += 1\r\n\r\n                }\r\n\r\n            }\r\n\r\n            if (prevSibling) {\r\n\r\n                if (next instanceof Array) {\r\n\r\n                    prevSibling.before.apply(prevSibling, next)\r\n\r\n                } else {\r\n                    // Check if parent has insertBefore method, if not fallback for SSR\r\n                    if (typeof parent.insertBefore === 'function') {\r\n                        parent.insertBefore(next, prevSibling)\r\n                    } else {\r\n                        // Handle SSR container which is just a plain object\r\n                        // We don't need to do anything here as the nodes are already handled by the fragment system\r\n                    }\r\n\r\n                }\r\n\r\n            } else {\r\n\r\n                if (next instanceof Array) {\r\n\r\n                    // parent.append.apply(parent, next)\r\n                    for (const node of next) parent.appendChild(node)\r\n\r\n                } else {\r\n\r\n                    parent.appendChild(next)\r\n\r\n                }\r\n\r\n            }\r\n\r\n            FragmentUtils.replaceWithFragment(fragment, fragmentNext)\r\n\r\n            return\r\n\r\n        }\r\n\r\n    }\r\n\r\n    if (nextLength === 0) { // Placeholder, to keep the right spot in the array of children\r\n\r\n        const placeholder = /* childComp[SYMBOL_DOM] = */ createComment('')\r\n\r\n        FragmentUtils.pushNode(fragmentNext, placeholder)\r\n\r\n        if (next !== fragmentNext.values) {\r\n\r\n            next = placeholder\r\n            nextLength += 1\r\n\r\n        }\r\n\r\n    }\r\n\r\n    if (!fragmentOnly) {\r\n\r\n        diff(parent, prev, next, prevSibling)\r\n\r\n    }\r\n\r\n    FragmentUtils.replaceWithFragment(fragment, fragmentNext)\r\n\r\n}\r\n\r\nexport const setChild = (parent: HTMLElement | Node, child: Child, fragment: Fragment = FragmentUtils.make(), stack: Stack): void => {\r\n    const cd = child\r\n    resolveChild(cd, (child, dynamic, stack) => setChildStatic(parent, fragment, false, child, dynamic, cd as any, stack), false, stack)\r\n}\r\n\r\nexport const setClassStatic = classesToggle\r\n\r\nexport const setClass = (element: HTMLElement, key: string, value: FunctionMaybe<null | undefined | boolean>, stack: Stack): void => {\r\n\r\n    if (isFunction(value) && isFunctionReactive(value)) {\r\n\r\n        useRenderEffect(() => {\r\n\r\n            setClassStatic(element, key, value())\r\n\r\n        }, stack)\r\n\r\n    } else {\r\n\r\n        setClassStatic(element, key, $$(value))\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setClassBooleanStatic = (element: HTMLElement, value: boolean, key: null | undefined | boolean | string, keyPrev?: null | undefined | boolean | string): void => {\r\n\r\n    if (keyPrev && keyPrev !== true) {\r\n\r\n        setClassStatic(element, keyPrev, false)\r\n\r\n    }\r\n\r\n    if (key && key !== true) {\r\n\r\n        setClassStatic(element, key, value)\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setClassBoolean = (element: HTMLElement, value: boolean, key: FunctionMaybe<null | undefined | boolean | string>, stack: Stack): void => {\r\n\r\n    if (isFunction(key) && isFunctionReactive(key)) {\r\n\r\n        let keyPrev: null | undefined | boolean | string\r\n\r\n        useRenderEffect(() => {\r\n\r\n            const keyNext = key()\r\n\r\n            setClassBooleanStatic(element, value, keyNext, keyPrev)\r\n\r\n            keyPrev = keyNext\r\n\r\n        }, stack)\r\n\r\n    } else {\r\n\r\n        setClassBooleanStatic(element, value, $$(key))\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setClassesStatic = (element: HTMLElement, object: null | undefined | string | FunctionMaybe<null | undefined | boolean | string>[] | Record<string, FunctionMaybe<null | undefined | boolean>>, objectPrev: null | undefined | string | FunctionMaybe<null | undefined | boolean | string>[] | Record<string, FunctionMaybe<null | undefined | boolean>>, stack: Stack): void => {\r\n\r\n    if (isString(object)) {\r\n\r\n        if (isSVG(element)) {\r\n\r\n            element.setAttribute('class', object)\r\n\r\n        } else {\r\n\r\n            element.className = object\r\n\r\n        }\r\n\r\n    } else {\r\n\r\n        if (objectPrev) {\r\n\r\n            if (isString(objectPrev)) {\r\n\r\n                if (objectPrev) {\r\n\r\n                    if (isSVG(element)) {\r\n\r\n                        element.setAttribute('class', '')\r\n\r\n                    } else {\r\n\r\n                        element.className = ''\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            } else if (isArray(objectPrev)) {\r\n\r\n                objectPrev = store.unwrap(objectPrev)\r\n\r\n                for (let i = 0, l = objectPrev.length; i < l; i++) {\r\n\r\n                    if (!objectPrev[i]) continue\r\n\r\n                    setClassBoolean(element, false, objectPrev[i], stack)\r\n\r\n                }\r\n\r\n            } else {\r\n\r\n                objectPrev = store.unwrap(objectPrev)\r\n\r\n                for (const key in objectPrev) {\r\n\r\n                    if (object && key in object) continue\r\n\r\n                    setClass(element, key, false, stack)\r\n\r\n                }\r\n\r\n            }\r\n\r\n        }\r\n\r\n        if (isArray(object)) {\r\n\r\n            if (isStore(object)) {\r\n\r\n                for (let i = 0, l = object.length; i < l; i++) {\r\n\r\n                    const fn = untrack(() => isFunction(object[i]) ? object[i] : object[SYMBOL_STORE_OBSERVABLE](String(i))) as (() => string | boolean | null | undefined) //TSC\r\n\r\n                    setClassBoolean(element, true, fn, stack)\r\n\r\n                }\r\n\r\n            } else {\r\n                //@ts-ignore\r\n                for (let i = 0, l = object.length; i < l; i++) {\r\n\r\n                    if (!object[i]) continue\r\n\r\n                    setClassBoolean(element, true, object[i], stack)\r\n\r\n                }\r\n\r\n            }\r\n\r\n        } else {\r\n\r\n            if (isStore(object)) {\r\n\r\n                for (const key in object) {\r\n\r\n                    const fn = untrack(() => isFunction(object[key]) ? object[key] : (object as any)[SYMBOL_STORE_OBSERVABLE](key)) as (() => boolean | null | undefined) //TSC\r\n\r\n                    setClass(element, key, fn, stack)\r\n\r\n                }\r\n\r\n            } else {\r\n                //@ts-ignore\r\n                for (const key in object) {\r\n\r\n                    setClass(element, key, object[key], stack)\r\n\r\n                }\r\n\r\n            }\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setClasses = (element: HTMLElement, object: Classes, stack: Stack): void => {\r\n\r\n    if (isFunction(object) || isArray(object)) {\r\n\r\n        let objectPrev: Record<string, boolean> | undefined\r\n\r\n        useRenderEffect(() => {\r\n\r\n            const objectNext = resolveClass(object)\r\n\r\n            setClassesStatic(element, objectNext, objectPrev, stack)\r\n\r\n            objectPrev = objectNext\r\n\r\n        }, stack)\r\n\r\n    } else {\r\n\r\n        setClassesStatic(element, object, null, stack)\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setDirective = <T extends unknown[]>(element: HTMLElement, directive: string, args: T): void => {\r\n\r\n    const symbol = SYMBOLS_DIRECTIVES[directive] || Symbol()\r\n    const data = context<DirectiveData<T>>(symbol) || DIRECTIVES[symbol]\r\n\r\n    if (!data) throw new Error(`Directive \"${directive}\" not found`)\r\n\r\n    const call = () => data.fn(element, ...castArray(args) as any) //TSC\r\n\r\n    const stack = new Error()\r\n\r\n    if (data.immediate) {\r\n\r\n        call()\r\n\r\n    } else {\r\n\r\n        useMicrotask(call, stack)\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setEventStatic = (() => {\r\n\r\n    //TODO: Maybe delete event delegation\r\n    //TODO: Maybe delegate more events: [onmousemove, onmouseout, onmouseover, onpointerdown, onpointermove, onpointerout, onpointerover, onpointerup, ontouchend, ontouchmove, ontouchstart]\r\n\r\n    const delegatedEvents = <const>{\r\n        onauxclick: ['_onauxclick', false],\r\n        onbeforeinput: ['_onbeforeinput', false],\r\n        onclick: ['_onclick', false],\r\n        ondblclick: ['_ondblclick', false],\r\n        onfocusin: ['_onfocusin', false],\r\n        onfocusout: ['_onfocusout', false],\r\n        oninput: ['_oninput', false],\r\n        onkeydown: ['_onkeydown', false],\r\n        onkeyup: ['_onkeyup', false],\r\n        onmousedown: ['_onmousedown', false],\r\n        onmouseup: ['_onmouseup', false]\r\n    }\r\n\r\n    const delegate = (event: string): void => {\r\n\r\n        const key = `_${event}`\r\n\r\n        document.addEventListener(event.slice(2), event => {\r\n\r\n            const targets = event.composedPath()\r\n\r\n            let target: EventTarget | null = null\r\n\r\n            Object.defineProperty(event, 'currentTarget', {\r\n                configurable: true,\r\n                get() {\r\n                    return target\r\n                }\r\n            })\r\n\r\n            for (let i = 0, l = targets.length; i < l; i++) {\r\n\r\n                target = targets[i]\r\n\r\n                const handler = target[key]\r\n\r\n                if (!handler) continue\r\n\r\n                handler(event)\r\n\r\n                if (event.cancelBubble) break\r\n\r\n            }\r\n\r\n            target = null\r\n\r\n        })\r\n\r\n    }\r\n\r\n    return (element: HTMLElement, event: string, value: null | undefined | EventListener): void => {\r\n\r\n        if (event.startsWith('onmiddleclick')) { // Special-cased synthetic event, somewhat ugly but very convenient\r\n\r\n            const _value = value\r\n\r\n            event = `onauxclick${event.slice(13)}`\r\n            value = _value && ((event: Event) => event['button'] === 1 && _value(event))\r\n\r\n        }\r\n\r\n        const delegated = delegatedEvents[event]\r\n\r\n        if (delegated) {\r\n\r\n            if (!delegated[1]) { // Not actually delegating yet\r\n\r\n                delegated[1] = true\r\n\r\n                delegate(event)\r\n\r\n            }\r\n\r\n            element[delegated[0]] = value\r\n\r\n        } else if (event.endsWith('passive')) {\r\n\r\n            const isCapture = event.endsWith('capturepassive')\r\n            const type = event.slice(2, -7 - (isCapture ? 7 : 0))\r\n            const key = `_${event}`\r\n\r\n            const valuePrev = element[key]\r\n\r\n            if (valuePrev) element.removeEventListener(type, valuePrev, { capture: isCapture })\r\n\r\n            if (value) element.addEventListener(type, value, { passive: true, capture: isCapture })\r\n\r\n            element[key] = value\r\n\r\n        } else if (event.endsWith('capture')) {\r\n\r\n            const type = event.slice(2, -7)\r\n            const key = `_${event}`\r\n\r\n            const valuePrev = element[key]\r\n\r\n            if (valuePrev) element.removeEventListener(type, valuePrev, { capture: true })\r\n\r\n            if (value) element.addEventListener(type, value, { capture: true })\r\n\r\n            element[key] = value\r\n\r\n        } else {\r\n\r\n            element[event] = value\r\n\r\n        }\r\n\r\n    }\r\n\r\n})()\r\n\r\nexport const setEvent = (element: HTMLElement, event: string, value: ObservableMaybe<null | undefined | EventListener>): void => {\r\n\r\n    setEventStatic(element, event, value)\r\n\r\n}\r\n\r\nexport const setHTMLStatic = (element: HTMLElement, value: null | undefined | number | string): void => {\r\n\r\n    element.innerHTML = String(isNil(value) ? '' : value)\r\n\r\n}\r\n\r\nexport const setHTML = (element: HTMLElement, value: FunctionMaybe<{ __html: FunctionMaybe<null | undefined | number | string> }>, stack: Stack): void => {\r\n\r\n    useRenderEffect(() => {\r\n\r\n        setHTMLStatic(element, $$($$(value).__html))\r\n\r\n    }, stack)\r\n\r\n}\r\n\r\nexport const setPropertyStatic = (element: HTMLElement | Comment, key: string, value: null | undefined | boolean | number | string): void => {\r\n    const isComment = (element instanceof Comment)\r\n\r\n    if (key === 'tabIndex' && isBoolean(value)) {\r\n\r\n        value = value ? 0 : undefined\r\n\r\n    }\r\n\r\n    if (key === 'value' && !isComment) {\r\n\r\n        if (element.tagName === 'PROGRESS') {\r\n\r\n            value ??= null\r\n\r\n        } else if (element.tagName === 'SELECT' && !element['_$inited']) {\r\n\r\n            element['_$inited'] = true\r\n\r\n            queueMicrotask(() => element[key] = value)\r\n\r\n        }\r\n\r\n    }\r\n\r\n    try { // Trying setting the property\r\n\r\n        element[key] = value\r\n\r\n        if (isNil(value) && !isComment) {\r\n\r\n            setAttributeStatic(element, key, null)\r\n\r\n        }\r\n\r\n    } catch { // If it fails, maybe because like HTMLInputElement.form there's only a getter, we try as an attribute instead //TODO: Figure out something better than this\r\n\r\n        if (!isComment)\r\n            setAttributeStatic(element, key, value)\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setProperty = (element: HTMLElement | Comment, key: string, value: FunctionMaybe<null | undefined | boolean | number | string>, stack: Stack): void => {\r\n\r\n    if (isFunction(value) && isFunctionReactive(value)) {\r\n\r\n        useRenderEffect(() => {\r\n\r\n            setPropertyStatic(element, key, value())\r\n\r\n        }, stack)\r\n\r\n    } else {\r\n\r\n        setPropertyStatic(element, key, $$(value))\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setRef = <T>(element: T, value: null | undefined | Ref<T> | (null | undefined | Ref<T>)[]): void => { // Scheduling a microtask to dramatically increase the probability that the element will get connected to the DOM in the meantime, which would be more convenient\r\n\r\n    if (isNil(value)) return\r\n\r\n    const values = flatten(castArray(value)).filter(Boolean)\r\n\r\n    if (!values.length) return\r\n\r\n    const stack = new Error()\r\n    useMicrotask(() => untrack(() => values.forEach(value => value?.(element))), stack)\r\n\r\n}\r\n\r\nexport const setStyleStatic = (() => {\r\n\r\n    // From Preact: https://github.com/preactjs/preact/blob/e703a62b77c9de45e886d8a7f59bd0db658318f9/src/constants.js#L3\r\n    // const propertyNonDimensionalRe = /acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;\r\n    // From this Preact issue: https://github.com/preactjs/preact/issues/2607\r\n    const propertyNonDimensionalRe = /^(-|f[lo].*[^se]$|g.{5,}[^ps]$|z|o[pr]|(W.{5})?[lL]i.*(t|mp)$|an|(bo|s).{4}Im|sca|m.{6}[ds]|ta|c.*[st]$|wido|ini)/i\r\n    const propertyNonDimensionalCache: Partial<Record<string, boolean>> = {}\r\n\r\n    return (element: HTMLElement, key: string, value: null | undefined | number | string): void => {\r\n\r\n        if (key.charCodeAt(0) === 45) { // /^-/\r\n\r\n            if (isNil(value)) {\r\n\r\n                element.style.removeProperty(key)\r\n\r\n            } else {\r\n\r\n                element.style.setProperty(key, String(value))\r\n\r\n            }\r\n\r\n        } else if (isNil(value)) {\r\n\r\n            element.style[key] = null\r\n\r\n        } else {\r\n\r\n            element.style[key] = (isString(value) || isObject(value) || (propertyNonDimensionalCache[key] ||= propertyNonDimensionalRe.test(key)) ? value : `${value}px`)\r\n\r\n        }\r\n\r\n    }\r\n\r\n})()\r\n\r\nexport const setStyle = (element: HTMLElement, key: string, value: FunctionMaybe<null | undefined | number | string>, stack: Stack): void => {\r\n\r\n    if (isFunction(value) && isFunctionReactive(value)) {\r\n\r\n        useRenderEffect(() => {\r\n\r\n            setStyleStatic(element, key, value())\r\n\r\n        }, stack)\r\n\r\n    } else {\r\n\r\n        setStyleStatic(element, key, $$(value))\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setStylesStatic = (element: HTMLElement, object: null | undefined | string | Record<string, FunctionMaybe<null | undefined | number | string>>, objectPrev: null | undefined | string | Record<string, FunctionMaybe<null | undefined | number | string>>, stack: Stack): void => {\r\n\r\n    if (isString(object)) {\r\n\r\n        element.setAttribute('style', object)\r\n\r\n    } else {\r\n\r\n        if (objectPrev) {\r\n\r\n            if (isString(objectPrev)) {\r\n\r\n                if (objectPrev) {\r\n\r\n                    element.style.cssText = ''\r\n\r\n                }\r\n\r\n            } else {\r\n\r\n                objectPrev = store.unwrap(objectPrev)\r\n\r\n                for (const key in objectPrev) {\r\n\r\n                    if (object && key in object) continue\r\n\r\n                    setStyleStatic(element, key, null)\r\n\r\n                }\r\n\r\n            }\r\n\r\n        }\r\n\r\n        if (isStore(object)) {\r\n\r\n            for (const key in object) {\r\n\r\n                const fn = untrack(() => isFunction(object[key]) ? object[key] : (object as any)[SYMBOL_STORE_OBSERVABLE](key)) as (() => number | string | null | undefined) //TSC\r\n\r\n                setStyle(element, key, fn, stack)\r\n\r\n            }\r\n\r\n        } else {\r\n            //@ts-ignore\r\n            for (const key in object) {\r\n\r\n                setStyle(element, key, object[key], stack)\r\n\r\n            }\r\n\r\n        }\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setStyles = (element: HTMLElement, object: FunctionMaybe<null | undefined | string | Record<string, FunctionMaybe<null | undefined | number | string>>>, stack: Stack): void => {\r\n\r\n    if (isFunction(object) || isArray(object)) {\r\n\r\n        let objectPrev: null | undefined | string | Record<string, null | undefined | number | string>\r\n\r\n        useRenderEffect((stack) => {\r\n\r\n            const objectNext = resolveStyle(object)\r\n\r\n            setStylesStatic(element, objectNext, objectPrev, stack)\r\n\r\n            objectPrev = objectNext\r\n\r\n        }, stack)\r\n\r\n    } else {\r\n\r\n        setStylesStatic(element, $$(object), null, stack)\r\n\r\n    }\r\n\r\n}\r\n\r\n\r\nexport const setTemplateAccessor = (element: HTMLElement, key: string, value: TemplateActionProxy): void => {\r\n\r\n    if (key === 'children') {\r\n\r\n        const placeholder = createText('') // Using a Text node rather than a Comment as the former may be what we actually want ultimately\r\n\r\n        element.insertBefore(placeholder, null)\r\n\r\n        value(element, 'setChildReplacement', undefined, placeholder)\r\n\r\n    } else if (key === 'ref') {\r\n\r\n        value(element, 'setRef')\r\n\r\n    } else if (key === 'style') {\r\n\r\n        value(element, 'setStyles')\r\n\r\n    } else if (key === 'class' || key === 'className') {\r\n\r\n        if (!isSVG(element)) {\r\n\r\n            element.className = '' // Ensuring the attribute is present\r\n\r\n        }\r\n\r\n        value(element, 'setClasses')\r\n\r\n    } else if (key === 'dangerouslySetInnerHTML') {\r\n\r\n        value(element, 'setHTML')\r\n\r\n    } else if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110) { // /^on/\r\n\r\n        value(element, 'setEvent', key.toLowerCase())\r\n\r\n    } else if (key.charCodeAt(0) === 117 && key.charCodeAt(3) === 58) { // /^u..:/\r\n\r\n        value(element, 'setDirective', key.slice(4))\r\n\r\n    } else if (key === 'innerHTML' || key === 'outerHTML' || key === 'textContent' || key === 'className') {\r\n\r\n        // Forbidden props\r\n\r\n    } else if (key in element && !isSVG(element)) {\r\n\r\n        value(element, 'setProperty', key)\r\n\r\n    } else {\r\n\r\n        element.setAttribute(key, '') // Ensuring the attribute is present\r\n\r\n        value(element, 'setAttribute', key)\r\n\r\n    }\r\n\r\n}\r\n\r\nexport const setProp = (element: HTMLElement | Comment, key: string, value: any, stack: Stack): void => {\r\n    if (element instanceof Comment || element instanceof Text) {\r\n        if (key === 'ref')\r\n            setRef(element, value)\r\n        else if (key in element)\r\n            setProperty(element, key, value, stack)\r\n    }\r\n    else {\r\n        if (value === undefined) return // Ignoring undefined props, for performance\r\n\r\n        if (isTemplateAccessor(value)) {\r\n\r\n            setTemplateAccessor(element, key, value)\r\n\r\n        } else if (key === 'children') {\r\n\r\n            setChild(element, value, FragmentUtils.make(), stack)\r\n\r\n        } else if (key === 'ref') {\r\n\r\n            setRef(element, value)\r\n\r\n        } else if (key === 'style') {\r\n\r\n            setStyles(element, value, stack)\r\n\r\n        } else if (key === 'class' || key === 'className') {\r\n\r\n            setClasses(element, value, stack)\r\n\r\n        } else if (key === 'dangerouslySetInnerHTML') {\r\n\r\n            setHTML(element, value, stack)\r\n\r\n        } else if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110) { // /^on/\r\n\r\n            setEvent(element, key.toLowerCase(), value)\r\n\r\n        } else if (key.charCodeAt(0) === 117 && key.charCodeAt(3) === 58) { // /^u..:/\r\n\r\n            setDirective(element, key.slice(4), value)\r\n\r\n        } else if (key === 'innerHTML' || key === 'outerHTML' || key === 'textContent' || key === 'className') {\r\n\r\n            // Forbidden props\r\n\r\n        } else if (key in element && !isSVG(element)) {\r\n\r\n            setProperty(element, key, value, stack)\r\n\r\n        } else {\r\n\r\n            setAttribute(element, key, value, stack)\r\n\r\n        }\r\n    }\r\n}\r\n\r\nexport const setProps = (element: HTMLElement | Comment, object: Record<string, unknown>, stack: Stack): void => {\r\n\r\n    for (const key in object) {\r\n\r\n        setProp(element, key, object[key], stack)\r\n\r\n    }\r\n\r\n}","/**\n * Element Creation API for Woby Framework\n * \n * This module provides the createElement function which is responsible for creating elements \n * in the Woby framework. It handles different types of components including functional components,\n * HTML elements, SVG elements, and custom elements.\n * \n * @module createElement\n */\n\nimport { untrack } from '../methods/soby'\nimport { wrapElement } from '../methods/wrap_element'\nimport { createComment, createHTMLNode, createSVGNode, createText } from '../utils/creators'\nimport { isClass, isFunction, isNode, isObject, isString, isSVGElement, isVoidChild } from '../utils/lang'\nimport { setChild, setProps } from '../utils/setters'\nimport type { Child, Component, Element } from '../types'\nimport { FragmentUtils } from '../utils/fragment'\nimport { customElement } from './custom_element'\nimport { Stack } from 'soby'\n\n/**\n * Creates an element from a component, props, and children\n * \n * This function is the core of the Woby rendering system. It handles the creation of elements\n * from various types of components:\n * 1. Functional components - Calls the function with props\n * 2. Class components - Instantiates the class with props\n * 3. String components - Creates HTML/SVG elements or custom elements\n * 4. Node components - Wraps existing DOM nodes\n * \n * @template P - The type of props for the component\n * @param component - The component to create (function, class, string tag name, or DOM node)\n * @param _props - The props to pass to the component\n * @param _children - The children elements\n * @returns A wrapped element that can be rendered\n * \n * @example\n * ```tsx\n * // Creating a functional component\n * const MyComponent = ({ name }: { name: string }) => <div>Hello, {name}!</div>\n * const element = createElement(MyComponent, { name: 'World' })\n * \n * // Creating an HTML element\n * const divElement = createElement('div', { className: 'container' }, 'Hello World')\n * \n * // Creating an SVG element\n * const svgElement = createElement('svg', { width: 100, height: 100 })\n * \n * // Creating a custom element\n * customElement('my-custom-element', ({ value }: { value: number }) => <div>Value: {value}</div>)\n * const customElementInstance = createElement('my-custom-element', { value: 42 })\n * ```\n */\nexport const createElement = <P = { children?: Child }>(component: Component<P>, _props?: P | null, ..._children: Child[]) => {\n\n    const children = _children.length > 1 ? _children : (_children.length > 0 ? _children[0] : undefined)\n    const hasChildren = !isVoidChild(children)\n    const { ...rest } = _props ?? {}\n\n    if (hasChildren && isObject(_props) && 'children' in _props) {\n\n        throw new Error('Providing \"children\" both as a prop and as rest arguments is forbidden')\n\n    }\n\n    if (isFunction(component)) {\n\n        const props = hasChildren ? Object.assign(_props, { children }) : _props\n\n        return wrapElement(() => {\n\n            return untrack(() => isClass(component) ? new (component as any)(props) : component.call(component, props as P)) //TSC\n\n        })\n\n    } else if (isString(component)) {\n\n        const isSVG = isSVGElement(component)\n        const isComment = component === 'comment'\n        const isText = component === 'text'\n\n        const createNode = isSVG ? createSVGNode : createHTMLNode\n        const create = isComment ? () => createComment((_props as any).data ?? '') : isText ? () => createText((_props as any).data ?? '') : createNode\n\n        return wrapElement((): Child => {\n            const ce = customElements.get(component) as ReturnType<typeof customElement>\n\n            const child = !!ce ? new ce(_props) : create(component) as HTMLElement\n\n            // if (!!ce)\n            //     (child as InstanceType<ReturnType<typeof customElement>>).props = { ..._props }\n\n            if (isSVG) child['isSVG'] = true\n\n            const stack = new Stack()\n\n            untrack(() => {\n\n                if (_props) {\n                    if (!!ce) {\n                        const { children, ...np } = _props as any //children already initialized in new ce(_props)\n                        setProps(child, np, stack)\n                    }\n                    else\n                        setProps(child, _props as any, stack)\n                }\n\n                // //already in prop\n                // if (hasChildren || ce?.__component__) {\n                //     // setChild(child, !!ce ? createElement(ce.__component__, (child as InstanceType<ReturnType<typeof customElement>>).props) : children, FragmentUtils.make(), stack)\n                //     setChild(child, children ?? _props.children, FragmentUtils.make(), stack)\n                // }\n\n            })\n\n            return child\n\n        })\n\n    } else if (isNode(component)) {\n\n        return wrapElement(() => component)\n\n    } else {\n\n        throw new Error('Invalid component')\n\n    }\n\n}","\r\n\r\nimport { useMemo } from '../hooks/soby'\r\nimport { createElement } from '../methods/create_element'\r\nimport { resolve } from '../methods/soby'\r\nimport { $$ } from '../methods/soby'\r\nimport { isFunction } from '../utils/lang'\r\nimport type { Child, Component, FunctionMaybe } from '../types'\r\n\r\n\r\nexport const Dynamic = <P = {}>({ component, props, children }: { component: Component<P>, props?: FunctionMaybe<P | null>, children?: Child }): Child => {\r\n\r\n    if (isFunction(component) || isFunction(props)) {\r\n\r\n        return useMemo(() => {\r\n\r\n            return resolve(createElement<P>($$(component, false), $$(props), children))\r\n\r\n        })\r\n\r\n    } else {\r\n\r\n        return createElement<P>(component, props, children)\r\n\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 { useCleanup } from '../hooks/soby'\r\nimport { useMemo } from '../hooks/soby'\r\nimport { useResolved } from '../hooks/use_resolved'\r\nimport { useRoot } from '../hooks/soby'\r\nimport { useSuspense } from '../hooks/soby'\r\nimport { resolve } from '../methods/soby'\r\nimport { $ } from '../methods/soby'\r\nimport { with as _with } from 'soby'\r\nimport type { Child, Disposer, FunctionMaybe, Observable, ObservableReadonly } from '../types'\r\n\r\n/* TYPES */\r\n\r\ntype Item = {\r\n  id: string,\r\n  lock: number,\r\n  result?: Child,\r\n  suspended?: Observable<boolean>,\r\n  dispose?: Disposer,\r\n  reset?: Disposer\r\n}\r\n\r\n/* HELPERS */\r\n\r\nconst cache: Record<string, Item> = {}\r\nconst runWithSuperRoot = _with()\r\n\r\nlet lockId = 1\r\n\r\n\r\n//TODO: Support hot-swapping owner and context, to make the context JustWork™\r\n\r\nexport const KeepAlive = ({ id, ttl, children }: { id: FunctionMaybe<string>, ttl?: FunctionMaybe<number>, children: Child }): ObservableReadonly<Child> => {\r\n\r\n  return useMemo((stack) => {\r\n\r\n    return useResolved([id, ttl], (id, ttl) => {\r\n\r\n      const lock = lockId++\r\n      const item = cache[id] ||= { id, lock }\r\n\r\n      item.lock = lock\r\n      item.reset?.(stack)\r\n      item.suspended ||= $(false)\r\n      item.suspended(false)\r\n\r\n      if (!item.dispose || !item.result) {\r\n\r\n        runWithSuperRoot(() => {\r\n\r\n          useRoot((stack, dispose) => {\r\n\r\n            item.dispose = () => {\r\n\r\n              delete cache[id]\r\n\r\n              dispose(stack)\r\n\r\n            }\r\n\r\n            useSuspense(item.suspended, () => {\r\n\r\n              item.result = resolve(children)\r\n\r\n            }, stack)\r\n\r\n          })\r\n\r\n        }, stack)\r\n\r\n      }\r\n\r\n      useCleanup(() => {\r\n\r\n        const hasLock = () => lock === item.lock\r\n\r\n        if (!hasLock()) return\r\n\r\n        item.suspended?.(true)\r\n\r\n        if (!ttl || ttl <= 0 || ttl >= Infinity) return\r\n\r\n        const dispose = () => hasLock() && item.dispose?.(stack)\r\n        const timeoutId = setTimeout(dispose, ttl)\r\n        const reset = () => clearTimeout(timeoutId)\r\n\r\n        item.reset = reset\r\n\r\n      })\r\n\r\n      return item.result\r\n\r\n    })\r\n\r\n  })\r\n\r\n}","\r\n\r\nimport { useRoot } from '../hooks/soby'\r\nimport { setChild } from '../utils/setters'\r\nimport type { Child, Disposer } from '../types'\r\nimport { FragmentUtils } from '../utils/fragment'\r\n\r\n\r\nexport const render = (child: Child, parent?: Element | null | ShadowRoot): Disposer => {\r\n\r\n    if (!parent || !(parent instanceof HTMLElement || parent instanceof ShadowRoot)) throw new Error('Invalid parent node')\r\n\r\n    // if (!(parent instanceof ShadowRoot))\r\n    parent.textContent = ''\r\n\r\n    return useRoot((stack, dispose) => {\r\n\r\n        setChild(parent, child, FragmentUtils.make(), stack)\r\n\r\n        return (): void => {\r\n\r\n            dispose(stack)\r\n\r\n            parent.textContent = ''\r\n\r\n        }\r\n\r\n    })\r\n\r\n}\r\n","\r\n\r\nimport { useBoolean } from '../hooks/soby'\r\nimport { useRenderEffect } from '../hooks/use_render_effect'\r\nimport { render } from '../methods/render'\r\nimport { $$ } from '../methods/soby'\r\nimport { createHTMLNode } from '../utils/creators'\r\nimport { assign } from '../utils/lang'\r\nimport type { Child, ChildWithMetadata, FunctionMaybe } from '../types'\r\n\r\n\r\nexport const Portal = ({ when = true, mount, wrapper, children }: { mount?: Child, when?: FunctionMaybe<boolean>, wrapper?: Child, children?: Child }): ChildWithMetadata<{ portal: HTMLElement }> => {\r\n\r\n    const portal = $$(wrapper) || createHTMLNode('div')\r\n\r\n    if (!(portal instanceof HTMLElement)) throw new Error('Invalid wrapper node')\r\n\r\n    const condition = useBoolean(when)\r\n\r\n    const stack = new Error()\r\n\r\n    useRenderEffect(() => {\r\n\r\n        if (!$$(condition)) return\r\n\r\n        const parent = $$(mount) || document.body\r\n\r\n        if (!(parent instanceof Element)) throw new Error('Invalid mount node')\r\n\r\n        parent.insertBefore(portal, null)\r\n\r\n        return (): void => {\r\n\r\n            parent.removeChild(portal)\r\n\r\n        }\r\n\r\n    }, stack)\r\n\r\n    useRenderEffect(() => {\r\n\r\n        if (!$$(condition)) return\r\n\r\n        return render(children, portal)\r\n\r\n    }, stack)\r\n\r\n    return assign(() => $$(condition) || children, { metadata: { portal } })\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 type { Child, Props } from '../types';;\r\nimport { isArray, isFunction, isPrimitive } from '../utils/lang'\r\nimport { SYMBOL_CLONE } from '../constants'\r\nimport { createElement } from './create_element'\r\nimport { CloneableType, wrapCloneElement } from './wrap_clone_element'\r\n\r\n\r\nexport const cloneElement = <P extends Props>(element: Child | Element, props: P, ...children: Child[]): Child => {\r\n  if (isPrimitive(element))\r\n    return element\r\n  else if (isFunction(element)) {\r\n    if (!element[SYMBOL_CLONE])\r\n      throw new Error('target is not cloneable, it is not created by jsx.createElement')\r\n\r\n    const { Component, props: oldProps } = element[SYMBOL_CLONE] as CloneableType<P>\r\n    const newProps = { ...oldProps, ...props }\r\n    if (children.length > 0)\r\n      Object.assign(props, { children })\r\n\r\n    return wrapCloneElement(createElement<P>(Component as any, newProps), Component, newProps)\r\n  }\r\n  else if (isArray(element))\r\n    return element.map(e => cloneElement(e, props))\r\n  else if ((element as Element).cloneNode) //native html\r\n    return (element as Element).cloneNode()\r\n\r\n  throw new Error(\"Unknown element\")\r\n}\r\n","\r\nimport { createElement } from '../methods/create_element'\r\nimport { isArray, isObject } from '../utils/lang'\r\nimport type { Child, Component, Element } from '../types'\r\n\r\n\r\nexport function h<P extends { children?: Child } = {}>(component: Component<P>, child: Child): Element\r\nexport function h<P extends { children?: Child } = {}>(component: Component<P>, props?: P | null, ...children: Child[]): Element\r\nexport function h<P extends { children?: Child } = {}>(component: Component<P>, props?: Child | P | null, ...children: Child[]): Element {\r\n\r\n  // return createElement(component, props, key, isStatic, source, self); //TSC\r\n\r\n  if (children.length || (isObject(props) && !isArray(props))) {\r\n    if (!props) props = { children } as any\r\n    else props = { ...(props as object), children } as P\r\n    return createElement(component, props as any) //TSC\r\n\r\n  } else {\r\n\r\n    return createElement(component, null, props as Child) //TSC\r\n\r\n  }\r\n\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\n\r\nimport htm from 'htm'\r\nimport { createElement } from '../methods/create_element'\r\nimport { assign } from '../utils/lang'\r\nimport type { Child, ComponentsMap, Element, Props } from '../types'\r\n\r\n/* HELPERS */\r\n\r\nconst registry: ComponentsMap = {}\r\nconst h = (type: string, props?: Props | null, ...children: Child[]): Element => createElement((registry[type] || type) as any, props, ...children)\r\nconst register = (components: ComponentsMap): void => void assign(registry, components)\r\n\r\n\r\nexport const html = assign(htm.bind(h), { register })\r\n","\r\n\r\nimport { useMemo } from '../hooks/soby'\r\nimport { useResolved } from '../hooks/use_resolved'\r\nimport { useResource } from '../hooks/use_resource'\r\nimport { createElement as creatElement } from '../methods/create_element'\r\nimport { resolve } from '../methods/soby'\r\nimport { once } from '../utils/lang'\r\nimport type { Child, LazyFetcher, LazyResult, ObservableReadonly } from '../types'\r\n\r\n\r\nexport const lazy = <P = {}>(fetcher: LazyFetcher<P>): LazyResult<P> => {\r\n\r\n  const fetcherOnce = once(fetcher)\r\n\r\n  const component = (props: P): ObservableReadonly<Child> => {\r\n\r\n    const resource = useResource(fetcherOnce)\r\n\r\n    return useMemo(() => {\r\n\r\n      return useResolved(resource, ({ pending, error, value }) => {\r\n\r\n        if (pending) return\r\n\r\n        if (error) throw error\r\n\r\n        const component = ('default' in value) ? value.default : value\r\n\r\n        return resolve(creatElement<P>(component, props))\r\n\r\n      })\r\n\r\n    })\r\n\r\n  }\r\n\r\n  component.preload = (): Promise<void> => {\r\n\r\n    return new Promise<void>((resolve, reject) => {\r\n\r\n      const resource = useResource(fetcherOnce)\r\n\r\n      useResolved(resource, ({ pending, error }) => {\r\n\r\n        if (pending) return\r\n\r\n        if (error) return reject(error)\r\n\r\n        return resolve()\r\n\r\n      })\r\n\r\n    })\r\n\r\n  }\r\n\r\n  return component\r\n\r\n}\r\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","\r\n\r\nimport { SYMBOL_TEMPLATE_ACCESSOR } from '../constants'\r\nimport { wrapElement } from '../methods/wrap_element'\r\nimport { assign, indexOf, isFunction, isString } from '../utils/lang'\r\nimport { setAttribute, setChildReplacement, setClasses, setEvent, setHTML, setProperty, setRef, setStyles } from '../utils/setters'\r\nimport type { Child, TemplateActionPath, TemplateActionWithNodes, TemplateActionWithPaths, TemplateVariableProperties, TemplateVariableData, TemplateVariablesMap } from '../types'\r\n\r\n\r\n//TODO: Avoid using \"Function\" and \"eval\", while still keeping similar performance, if possible\r\n//TODO: Support complex children in the template function\r\n//TODO: Support argumentless calls on props, like props.foo.bar()\r\n\r\nexport const template = <P = {}>(fn: ((props: P) => Child)): ((props: P) => () => Child) => {\r\n\r\n  const safePropertyRe = /^[a-z0-9-_]+$/i\r\n\r\n  const checkValidProperty = (property: unknown): property is string => {\r\n\r\n    if (isString(property) && safePropertyRe.test(property)) return true\r\n\r\n    throw new Error(`Invalid property, only alphanumeric properties are allowed inside templates, received: \"${property}\"`)\r\n\r\n  }\r\n\r\n  const makeAccessor = (actionsWithNodes: TemplateActionWithNodes[]): any => {\r\n\r\n    return new Proxy({}, {\r\n\r\n      get(target: unknown, prop: string) {\r\n\r\n        checkValidProperty(prop)\r\n\r\n        const accessor = (node: Node, method: string, key?: string, targetNode?: Node): void => {\r\n\r\n          if (key) checkValidProperty(key)\r\n\r\n          actionsWithNodes.push([node, method, prop, key, targetNode])\r\n\r\n        }\r\n\r\n        const metadata = { [SYMBOL_TEMPLATE_ACCESSOR]: true }\r\n\r\n        return assign(accessor, metadata)\r\n\r\n      }\r\n\r\n    })\r\n\r\n  }\r\n\r\n  const makeActionsWithNodesAndTemplate = (): { actionsWithNodes: TemplateActionWithNodes[], root: Element } => {\r\n\r\n    const actionsWithNodes: TemplateActionWithNodes[] = []\r\n    const accessor = makeAccessor(actionsWithNodes)\r\n    const component = fn(accessor)\r\n\r\n    if (isFunction(component)) {\r\n\r\n      const root = component()\r\n\r\n      if (root instanceof Element) {\r\n\r\n        return { actionsWithNodes, root }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    throw new Error('Invalid template, it must return a function that returns an Element')\r\n\r\n  }\r\n\r\n  const makeActionsWithPaths = (actionsWithNodes: TemplateActionWithNodes[]): TemplateActionWithPaths[] => {\r\n\r\n    const actionsWithPaths: TemplateActionWithPaths[] = []\r\n\r\n    for (let i = 0, l = actionsWithNodes.length; i < l; i++) {\r\n\r\n      const [node, method, prop, key, targetNode] = actionsWithNodes[i]\r\n\r\n      const nodePath = makeNodePath(node)\r\n      const targetNodePath = targetNode ? makeNodePath(targetNode) : undefined\r\n\r\n      actionsWithPaths.push([nodePath, method, prop, key, targetNodePath])\r\n\r\n    }\r\n\r\n    return actionsWithPaths\r\n\r\n  }\r\n\r\n  const makeNodePath = (() => {\r\n\r\n    let prevNode: Node | null = null\r\n    let prevPath: TemplateActionPath\r\n\r\n    return (node: Node): TemplateActionPath => {\r\n\r\n      if (node === prevNode) return prevPath // Cache hit\r\n\r\n      const path: TemplateActionPath = []\r\n\r\n      let child = node\r\n      let parent = child.parentNode\r\n\r\n      while (parent) {\r\n\r\n        const index = !child.previousSibling ? 0 : !child.nextSibling ? -0 : indexOf(parent.childNodes, child)\r\n\r\n        path.push(index)\r\n\r\n        child = parent\r\n        parent = parent.parentNode\r\n\r\n      }\r\n\r\n      prevNode = node\r\n      prevPath = path\r\n\r\n      return path\r\n\r\n    }\r\n\r\n  })()\r\n\r\n  const makeNodePathProperties = (path: TemplateActionPath): TemplateVariableProperties => {\r\n\r\n    const properties: TemplateVariableProperties = ['root']\r\n\r\n    const parts = path.slice().reverse()\r\n\r\n    for (let i = 0, l = parts.length; i < l; i++) {\r\n\r\n      const part = parts[i]\r\n\r\n      if (Object.is(0, part)) {\r\n\r\n        properties.push('firstChild')\r\n\r\n      } else if (Object.is(-0, part)) {\r\n\r\n        properties.push('lastChild')\r\n\r\n      } else {\r\n\r\n        properties.push('firstChild')\r\n\r\n        for (let nsi = 0; nsi < part; nsi++) {\r\n\r\n          properties.push('nextSibling')\r\n\r\n        }\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return properties\r\n\r\n  }\r\n\r\n  const makeReviverPaths = (actionsWithPaths: TemplateActionWithPaths[]): TemplateActionPath[] => {\r\n\r\n    const paths: TemplateActionPath[] = []\r\n\r\n    for (let i = 0, l = actionsWithPaths.length; i < l; i++) {\r\n\r\n      const action = actionsWithPaths[i]\r\n      const nodePath = action[0]\r\n      const targetNodePath = action[4]\r\n\r\n      paths.push(nodePath)\r\n\r\n      if (targetNodePath) {\r\n\r\n        paths.push(targetNodePath)\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return paths\r\n\r\n  }\r\n\r\n  const makeReviverVariablesData = (paths: TemplateActionPath[], properties: TemplateVariableProperties[]): TemplateVariableData[] => {\r\n\r\n    const data: TemplateVariableData[] = new Array(paths.length)\r\n\r\n    for (let i = 0, l = paths.length; i < l; i++) {\r\n\r\n      data[i] = {\r\n        path: paths[i],\r\n        properties: properties[i]\r\n      }\r\n\r\n    }\r\n\r\n    return data\r\n\r\n  }\r\n\r\n  const makeReviverVariables = (actionsWithPaths: TemplateActionWithPaths[]): { assignments: string[], map: Map<TemplateActionPath, string> } => { //TODO: Optimize this further, there's some duplication and unnecessary work being done\r\n\r\n    const paths = makeReviverPaths(actionsWithPaths)\r\n    const properties = paths.map(makeNodePathProperties)\r\n    const data = makeReviverVariablesData(paths, properties)\r\n    const assignments: string[] = []\r\n    const map: TemplateVariablesMap = new Map()\r\n\r\n    let variableId = 0\r\n\r\n    while (true) {\r\n\r\n      const datum = data.find(datum => datum.properties.length > 1)\r\n\r\n      if (!datum) break\r\n\r\n      const [current, next] = datum.properties\r\n      const variable = `$${variableId++}`\r\n      const assignment = `const ${variable} = ${current}.${next};`\r\n\r\n      assignments.push(assignment)\r\n\r\n      for (let i = 0, l = data.length; i < l; i++) {\r\n\r\n        const datum = data[i]\r\n        const [otherCurrent, otherNext] = datum.properties\r\n\r\n        if (otherCurrent !== current || otherNext !== next) continue\r\n\r\n        datum.properties[0] = variable\r\n        datum.properties.splice(1, 1)\r\n\r\n      }\r\n\r\n    }\r\n\r\n    for (let i = 0, l = data.length; i < l; i++) {\r\n\r\n      const datum = data[i]\r\n\r\n      map.set(datum.path, datum.properties[0])\r\n\r\n    }\r\n\r\n    return { assignments, map }\r\n\r\n  }\r\n\r\n  const makeReviverActions = (actionsWithPaths: TemplateActionWithPaths[], variables: Map<TemplateActionPath, string>): string[] => {\r\n\r\n    const actions: string[] = []\r\n\r\n    for (let i = 0, l = actionsWithPaths.length; i < l; i++) { //TODO: Write this more cleanly, with a single case\r\n\r\n      const [nodePath, method, prop, key, targetNodePath] = actionsWithPaths[i]\r\n\r\n      if (targetNodePath) {\r\n\r\n        actions.push(`this.${method} ( props[\"${prop}\"], ${variables.get(targetNodePath)} );`)\r\n\r\n      } else if (key) {\r\n\r\n        actions.push(`this.${method} ( ${variables.get(nodePath)}, \"${key}\", props[\"${prop}\"] );`)\r\n\r\n      } else {\r\n\r\n        actions.push(`this.${method} ( ${variables.get(nodePath)}, props[\"${prop}\"] );`)\r\n\r\n      }\r\n\r\n    }\r\n\r\n    return actions\r\n\r\n  }\r\n\r\n  const makeReviver = (actionsWithPaths: TemplateActionWithPaths[]): ((root: Element, props: P) => Element) => {\r\n\r\n    const { assignments, map } = makeReviverVariables(actionsWithPaths)\r\n    const actions = makeReviverActions(actionsWithPaths, map)\r\n    const fn = new Function('root', 'props', `${assignments.join('')}${actions.join('')}return root;`)\r\n    const apis = { setAttribute, setChildReplacement, setClasses, setEvent, setHTML, setProperty, setRef, setStyles }\r\n    const reviver = fn.bind(apis)\r\n\r\n    return reviver\r\n\r\n  }\r\n\r\n  const makeComponent = (): ((props: P) => () => Child) => {\r\n\r\n    const { actionsWithNodes, root } = makeActionsWithNodesAndTemplate()\r\n    const actionsWithPaths = makeActionsWithPaths(actionsWithNodes)\r\n    const reviver = makeReviver(actionsWithPaths)\r\n\r\n    return (props: P): (() => Child) => {\r\n\r\n      const clone = root.cloneNode(true)\r\n\r\n      return wrapElement(reviver.bind(undefined, clone as any, props))\r\n\r\n    }\r\n\r\n  }\r\n\r\n  return makeComponent()\r\n\r\n}","import { isArray, isFunction, isObject, isPrimitive } from '../utils'\r\nimport { $, $$, isObservable } from './soby'\r\n\r\n// import { $, $$, isObservable, isFunction, isArray } from \"..\"\r\n\r\n// const isPrimitive = (value: unknown): value is string | number | boolean | symbol | null | undefined | bigint => {\r\n// \tconst t = typeof value\r\n// \treturn !(t === \"object\" || t === \"function\")\r\n// }\r\n\r\n/**\r\n * Creates a shallow or deep clone of an object.\r\n * Preserves observable properties by creating new observables with the same values.\r\n * \r\n * @param source d The object to clone\r\n * @param deepClone d If true, performs deep cloning of nested objects\r\n * @returns A cloned copy of the source object\r\n * \r\n * @example\r\n * ```tsx\r\n * const original = { name: 'John', age: 30, active: $(true) }\r\n * const shallowClone = clone(original)\r\n * const deepClone = clone(original, true)\r\n * ```\r\n */\r\nexport const clone = <T,>(source: T, deepClone = false): T => {\r\n\tif (isPrimitive(source))\r\n\t\treturn source\r\n\r\n\tif (isFunction(source))\r\n\t\treturn source\r\n\r\n\tif (isArray(source))\r\n\t\tif (deepClone)\r\n\t\t\treturn source.map(item => clone(item, deepClone)) as any\r\n\t\telse\r\n\t\t\treturn source\r\n\r\n\t//is object\r\n\tconst newObject = {}\r\n\r\n\tObject.keys(source).forEach((key) => {\r\n\t\tif (typeof source[key] === \"function\" && !isObservable(source[key])) {\r\n\t\t\tnewObject[key] = source[key]\r\n\t\t}\r\n\t\telse if (isObservable(source[key]) && isObject($$(source[key])) && !isArray($$(source[key]))) {\r\n\t\t\tconst innerObject = clone($$(source[key]))\r\n\t\t\tnewObject[key] = innerObject\r\n\t\t}\r\n\t\telse if (isObservable(source[key])) {\r\n\t\t\tnewObject[key] = $($$(source[key]))\r\n\t\t}\r\n\r\n\t\telse if (isObject($$(source[key])) && deepClone) {\r\n\t\t\tconst innerObject = clone(source[key])\r\n\t\t\tnewObject[key] = innerObject\r\n\t\t} else\r\n\t\t\tnewObject[key] = source[key]\r\n\t})\r\n\r\n\treturn newObject as T\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Helper function to convert HTML string values to boolean\r\n// Treats empty strings and 'true' as true, and everything else as false\r\nconst is = (value: boolean | string | undefined) => value === '' || value === 'true' || value === true\r\n\r\nexport const HtmlBoolean: ObservableOptions<boolean | string | undefined> = {\r\n    equals: (a, b) => is(a) === is(b),\r\n    type: Boolean,\r\n    toHtml: (value) => is(value) ? '' : undefined as any, // Return empty string for true, undefined for false\r\n    fromHtml: (value) => is(value)\r\n}\r\n","import type { ObservableOptions } from \"soby\"\r\n\r\n// Helper function to convert HTML string values to number\r\n// Treats empty strings and non-numeric values as NaN\r\nconst toNumber = (value: number | string | undefined): number => {\r\n    if (value === undefined || value === '') return NaN\r\n    if (typeof value === 'number') return value\r\n    const num = Number(value)\r\n    return isNaN(num) ? NaN : num\r\n}\r\n\r\nexport const HtmlNumber: ObservableOptions<number | undefined> = {\r\n    equals: (a: number | string | undefined, b: number | string | undefined) => toNumber(a) === toNumber(b),\r\n    type: Number,\r\n    toHtml: (value) => {\r\n        const num = toNumber(value)\r\n        return isNaN(num) ? undefined as any : String(num)\r\n    },\r\n    fromHtml: (value) => toNumber(value)\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Helper function to convert HTML string values to Date\r\n// Treats empty strings and invalid dates as undefined\r\n// Handles various date formats including:\r\n// - ISO date strings\r\n// - Timestamp numbers and numeric strings (e.g. \"2141512551\")\r\n// - Custom date formats (e.g. \"2025 Oct ....\")\r\n// - Date objects\r\nconst toDate = (value: Date | string | number | undefined): Date | undefined => {\r\n    if (value === undefined || value === '') return undefined\r\n\r\n    // If it's already a Date object, return it\r\n    if (value instanceof Date) return isNaN(value.getTime()) ? undefined : value\r\n\r\n    // Try to parse as a number (timestamp)\r\n    if (typeof value === 'number') {\r\n        const date = new Date(value)\r\n        return isNaN(date.getTime()) ? undefined : date\r\n    }\r\n\r\n    // For strings, try multiple parsing strategies\r\n    if (typeof value === 'string') {\r\n        // First try Date.parse for standard formats\r\n        const timestamp = Date.parse(value)\r\n        if (!isNaN(timestamp)) {\r\n            return new Date(timestamp)\r\n        }\r\n\r\n        // Try parsing as a numeric timestamp string\r\n        const numericTimestamp = Number(value)\r\n        if (!isNaN(numericTimestamp)) {\r\n            const date = new Date(numericTimestamp)\r\n            if (!isNaN(date.getTime())) {\r\n                return date\r\n            }\r\n        }\r\n\r\n        // Fallback to new Date() for custom formats\r\n        const date = new Date(value)\r\n        return isNaN(date.getTime()) ? undefined : date\r\n    }\r\n\r\n    // Fallback for any other type\r\n    const date = new Date(value)\r\n    return isNaN(date.getTime()) ? undefined : date\r\n}\r\n\r\nexport const HtmlDate: ObservableOptions<Date | string | number | undefined> = {\r\n    equals: (a, b) => {\r\n        const dateA = toDate(a)\r\n        const dateB = toDate(b)\r\n        return (dateA === undefined && dateB === undefined) ||\r\n            (dateA !== undefined && dateB !== undefined && dateA.getTime() === dateB.getTime())\r\n    },\r\n    type: Date,\r\n    toHtml: (value) => {\r\n        const date = toDate(value)\r\n        return date ? date.toISOString() : \"\" as any\r\n    },\r\n    fromHtml: (value) => toDate(value) || new Date(NaN)\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Helper function to convert HTML string values to BigInt\r\n// Treats empty strings and invalid values as undefined\r\n// Handles BigInt, number, and string inputs\r\nconst toBigInt = (value: bigint | string | number | undefined): bigint | undefined => {\r\n    if (value === undefined || value === '') return undefined\r\n    try {\r\n        if (typeof value === 'bigint') return value\r\n        if (typeof value === 'number') {\r\n            if (!Number.isInteger(value)) return undefined\r\n            return BigInt(value)\r\n        }\r\n        return BigInt(value)\r\n    } catch {\r\n        return undefined\r\n    }\r\n}\r\n\r\nexport const HtmlBigInt: ObservableOptions<bigint | string | number | undefined> = {\r\n    equals: (a, b) => {\r\n        const bigA = toBigInt(a)\r\n        const bigB = toBigInt(b)\r\n        return (bigA === undefined && bigB === undefined) ||\r\n            (bigA !== undefined && bigB !== undefined && bigA === bigB)\r\n    },\r\n    type: BigInt,\r\n    toHtml: (value) => {\r\n        const big = toBigInt(value)\r\n        return big ? big.toString() : undefined as any\r\n    },\r\n    fromHtml: (value) => toBigInt(value) || BigInt(0)\r\n}\r\n","import type { ObservableOptions } from \"soby\"\r\n\r\n\r\n// Helper function to convert HTML string values to Object using JSON.parse\r\n// Treats empty strings and invalid JSON as undefined\r\nconst toObject = <T extends object>(value: T | string | undefined): T | undefined => {\r\n    if (value === undefined || value === '') return undefined\r\n    if (typeof value !== 'string') return value\r\n    try {\r\n        return HtmlObject.JSON.parse(value)\r\n    } catch {\r\n        return undefined\r\n    }\r\n}\r\n\r\nexport const HtmlObject: ObservableOptions<object | undefined> & { JSON: Omit<typeof JSON, 'toStringTag'> } = {\r\n    /**\r\n     * JSON implementation used for parsing and stringifying objects.\r\n     * Consumers can replace this with alternative implementations like JSON5.\r\n     */\r\n    JSON,\r\n\r\n    equals: (a: object | string, b: object | string) => {\r\n        const objA = toObject(a)\r\n        const objB = toObject(b)\r\n        return (objA === undefined && objB === undefined) ||\r\n            (objA !== undefined && objB !== undefined && HtmlObject.JSON.stringify(objA) === HtmlObject.JSON.stringify(objB))\r\n    },\r\n    type: Object,\r\n    toHtml: (value) => {\r\n        const obj = toObject(value)\r\n        try {\r\n            return obj ? HtmlObject.JSON.stringify(obj) : undefined as any\r\n        } catch {\r\n            return \"\" as any\r\n        }\r\n    },\r\n    fromHtml: (value) => toObject(value) || {}\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Define CSS unit types\r\n// Supports px, em, rem, %, vh, vw, vmin, vmax, ch, ex, pt, pc, in, cm, mm units\r\nexport type CSSUnit =\r\n    | `${number}px`\r\n    | `${number}em`\r\n    | `${number}rem`\r\n    | `${number}%`\r\n    | `${number}vh`\r\n    | `${number}vw`\r\n    | `${number}vmin`\r\n    | `${number}vmax`\r\n    | `${number}ch`\r\n    | `${number}ex`\r\n    | `${number}pt`\r\n    | `${number}pc`\r\n    | `${number}in`\r\n    | `${number}cm`\r\n    | `${number}mm`\r\n\r\nexport type CSSLength = CSSUnit | \"auto\" | \"inherit\" | \"initial\" | \"unset\" | \"\" | string | number\r\n\r\n// Define the structured representation of CSS length\r\n// Contains value and unit properties with valueOf and toString methods\r\nexport interface CSSLengthObject {\r\n    value: number\r\n    unit: string\r\n    valueOf(): string\r\n    toString(): string\r\n}\r\n\r\n// Helper function to parse CSS length strings into structured objects\r\n// Treats empty strings as undefined\r\n// Supports CSS keywords (auto, inherit, initial, unset) and numeric values with units\r\n// Treats plain numbers as pixels (e.g., 1 -> 1px)\r\n// Treats plain numbers as pixels (e.g., 1 -> 1px)\r\nconst parseCSSLength = (value: CSSLength | CSSLengthObject | undefined): CSSLengthObject | string | number | undefined => {\r\n    // If it's an empty string, return undefined\r\n    if (typeof value === 'string' && value === \"\") {\r\n        return undefined\r\n    }\r\n\r\n    // If it's already a structured object, return it\r\n    if (typeof value === 'object' && value !== null && 'value' in value && 'unit' in value) {\r\n        return {\r\n            value: value.value,\r\n            unit: value.unit,\r\n            valueOf: () => `${value.value}${value.unit}`,\r\n            toString: () => `${value.value}${value.unit}`\r\n        }\r\n    }\r\n\r\n    // If it's one of the special keywords, return as is\r\n    if (value === \"auto\" || value === \"inherit\" || value === \"initial\" || value === \"unset\") {\r\n        return value\r\n    }\r\n\r\n    if (typeof value === 'undefined')\r\n        return undefined\r\n\r\n    // Parse numeric values with units\r\n    const match = (value as string).match(/^(-?\\d*\\.?\\d+)([a-zA-Z%]+)$/)\r\n    if (match) {\r\n        const [, num, unit] = match\r\n        const numericValue = parseFloat(num)\r\n        return {\r\n            value: numericValue,\r\n            unit,\r\n            valueOf: () => `${numericValue}${unit}`,\r\n            toString: () => `${numericValue}${unit}`\r\n        }\r\n    }\r\n\r\n    // If it's a plain number, treat as pixels\r\n    if (typeof value === 'string' && /^-?\\d*\\.?\\d+$/.test(value)) {\r\n        const numericValue = parseFloat(value)\r\n        return {\r\n            value: numericValue,\r\n            unit: 'px',\r\n            valueOf: () => `${numericValue}px`,\r\n            toString: () => `${numericValue}px`\r\n        }\r\n    }\r\n\r\n    // Return as is if parsing fails\r\n    return value\r\n}\r\n\r\n// Helper function to convert structured objects back to strings\r\n// Converts CSSLengthObject to CSS length string\r\n// Converts numbers to pixel values\r\nconst stringifyCSSLength = (value: CSSLengthObject | string | number): string => {\r\n    if (typeof value === 'string') return value\r\n    if (typeof value === 'number') return `${value}px`\r\n    return `${value.value}${value.unit}`\r\n}\r\n\r\nexport const HtmlLength: ObservableOptions</* CSSLength | CSSLengthObject | */ number | string | undefined> = {\r\n    equals: (a, b) => {\r\n        const parsedA = parseCSSLength(a)\r\n        const parsedB = parseCSSLength(b)\r\n\r\n        // If both are strings, compare directly\r\n        if (typeof parsedA === 'string' && typeof parsedB === 'string') {\r\n            return parsedA === parsedB\r\n        }\r\n\r\n        // If both are objects, compare their properties\r\n        if (typeof parsedA === 'object' && typeof parsedB === 'object') {\r\n            return parsedA.value === parsedB.value && parsedA.unit === parsedB.unit\r\n        }\r\n\r\n        // Otherwise, they're not equal\r\n        return false\r\n    },\r\n    type: Object,\r\n    toHtml: (value) => {\r\n        const parsed = parseCSSLength(value)\r\n        if (parsed === undefined) return undefined as any\r\n        if (typeof parsed === 'string' || typeof parsed === 'number') return parsed as any\r\n        return stringifyCSSLength(parsed) as any\r\n    },\r\n    fromHtml: (value) => {\r\n        if (typeof value !== 'string') return value\r\n        return parseCSSLength(value as CSSLength) as any//as CSSLengthObject\r\n    }\r\n}","import type { ObservableOptions } from \"soby\"\r\nimport type { CSSLength } from \"./html-length\"\r\n\r\n// Define the structured representation of CSS box values\r\n// Contains top, right, bottom, left properties with valueOf and toString methods\r\nexport interface CSSBoxObject {\r\n    top: CSSLength\r\n    right: CSSLength\r\n    bottom: CSSLength\r\n    left: CSSLength\r\n    valueOf(): string\r\n    toString(): string\r\n}\r\n\r\nexport type CSSBoxValue = CSSLength | [CSSLength] | [CSSLength, CSSLength] | [CSSLength, CSSLength, CSSLength] | [CSSLength, CSSLength, CSSLength, CSSLength] | CSSBoxObject\r\n\r\n// Helper function to parse CSS box values into a consistent object format\r\n// Treats empty strings as undefined\r\n// Supports single values, arrays (1-4 elements), and structured objects\r\n// Plain numbers are treated as pixels (e.g., 1 -> 1px) through HtmlLength parsing\r\nconst parseCSSBox = (value: CSSBoxValue): CSSBoxObject | undefined => {\r\n    // If it's an empty string, return undefined\r\n    if (value === \"\") {\r\n        return undefined\r\n    }\r\n\r\n    // If it's already a structured object, return it\r\n    if (typeof value === 'object' && value !== null && 'top' in value && 'right' in value && 'bottom' in value && 'left' in value) {\r\n        return {\r\n            top: value.top,\r\n            right: value.right,\r\n            bottom: value.bottom,\r\n            left: value.left,\r\n            valueOf: () => `${value.top} ${value.right} ${value.bottom} ${value.left}`,\r\n            toString: () => `${value.top} ${value.right} ${value.bottom} ${value.left}`\r\n        }\r\n    }\r\n\r\n    // If it's an array, convert to object format following CSS shorthand rules\r\n    if (Array.isArray(value)) {\r\n        switch (value.length) {\r\n            case 1: // All sides same\r\n                return {\r\n                    top: value[0],\r\n                    right: value[0],\r\n                    bottom: value[0],\r\n                    left: value[0],\r\n                    valueOf: () => `${value[0]}`,\r\n                    toString: () => `${value[0]}`\r\n                }\r\n            case 2: // Top/bottom, left/right\r\n                return {\r\n                    top: value[0],\r\n                    right: value[1],\r\n                    bottom: value[0],\r\n                    left: value[1],\r\n                    valueOf: () => `${value[0]} ${value[1]}`,\r\n                    toString: () => `${value[0]} ${value[1]}`\r\n                }\r\n            case 3: // Top, left/right, bottom\r\n                return {\r\n                    top: value[0],\r\n                    right: value[1],\r\n                    bottom: value[2],\r\n                    left: value[1],\r\n                    valueOf: () => `${value[0]} ${value[1]} ${value[2]}`,\r\n                    toString: () => `${value[0]} ${value[1]} ${value[2]}`\r\n                }\r\n            case 4: // Top, right, bottom, left\r\n                return {\r\n                    top: value[0],\r\n                    right: value[1],\r\n                    bottom: value[2],\r\n                    left: value[3],\r\n                    valueOf: () => `${value[0]} ${value[1]} ${value[2]} ${value[3]}`,\r\n                    toString: () => `${value[0]} ${value[1]} ${value[2]} ${value[3]}`\r\n                }\r\n        }\r\n    }\r\n\r\n    // If it's a single CSS length value, treat as all sides same\r\n    if (typeof value === 'string' || typeof value === 'number') {\r\n        return {\r\n            top: value,\r\n            right: value,\r\n            bottom: value,\r\n            left: value,\r\n            valueOf: () => `${value}`,\r\n            toString: () => `${value}`\r\n        }\r\n    }\r\n\r\n    // Default fallback\r\n    return {\r\n        top: '0px',\r\n        right: '0px',\r\n        bottom: '0px',\r\n        left: '0px',\r\n        valueOf: () => '0px',\r\n        toString: () => '0px'\r\n    }\r\n}\r\n\r\nexport const HtmlBox: ObservableOptions</* CSSBoxValue */ string | undefined> = {\r\n    // Compare two CSS box values for equality\r\n    // Handles undefined, string, and object values\r\n    equals: (a, b) => {\r\n        const boxA = parseCSSBox(a)\r\n        const boxB = parseCSSBox(b)\r\n\r\n        // If either is undefined, they're equal only if both are undefined\r\n        if (boxA === undefined || boxB === undefined) {\r\n            return boxA === boxB\r\n        }\r\n\r\n        return boxA.top === boxB.top &&\r\n            boxA.right === boxB.right &&\r\n            boxA.bottom === boxB.bottom &&\r\n            boxA.left === boxB.left\r\n    },\r\n    type: Object,\r\n    toHtml: (value) => {\r\n        const box = parseCSSBox(value)\r\n        if (box === undefined) return undefined as any\r\n        return box.toString() as any\r\n    },\r\n    fromHtml: (value) => {\r\n        if (typeof value !== 'string') return value\r\n        const parts = value.split(' ').filter(part => part.length > 0)\r\n        switch (parts.length) {\r\n            case 1:\r\n                return { top: parts[0], right: parts[0], bottom: parts[0], left: parts[0], valueOf: () => value, toString: () => value } as any //as CSSBoxObject\r\n            case 2:\r\n                return { top: parts[0], right: parts[1], bottom: parts[0], left: parts[1], valueOf: () => value, toString: () => value } as any //as CSSBoxObject\r\n            case 3:\r\n                return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[1], valueOf: () => value, toString: () => value } as any //as CSSBoxObject\r\n            case 4:\r\n                return { top: parts[0], right: parts[1], bottom: parts[2], left: parts[3], valueOf: () => value, toString: () => value } as any //as CSSBoxObject\r\n            default:\r\n                return { top: '0px', right: '0px', bottom: '0px', left: '0px', valueOf: () => '0px', toString: () => '0px' } as any //as CSSBoxObject\r\n        }\r\n    }\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Define the structured representation of RGB color values\r\n// Contains r, g, b properties with valueOf and toString methods\r\nexport interface CSSColorObject {\r\n    r: number\r\n    g: number\r\n    b: number\r\n    valueOf(): string\r\n    toString(): string\r\n}\r\n\r\nexport type CSSColorValue = string | number | CSSColorObject\r\n\r\n// Helper function to parse CSS color strings into structured objects\r\n// Treats empty strings as undefined\r\n// Supports hex colors (#rgb, #rrggbb), RGB objects, and numeric values\r\nconst parseCSSColor = (value: CSSColorValue): CSSColorObject | string | undefined => {\r\n    // If it's an empty string, return undefined\r\n    if (value === \"\") {\r\n        return undefined\r\n    }\r\n\r\n    // If it's already a structured object, return it\r\n    if (typeof value === 'object' && value !== null && 'r' in value && 'g' in value && 'b' in value) {\r\n        return {\r\n            r: value.r,\r\n            g: value.g,\r\n            b: value.b,\r\n            valueOf: () => `#${Math.min(255, Math.max(0, value.r)).toString(16).padStart(2, '0')}${Math.min(255, Math.max(0, value.g)).toString(16).padStart(2, '0')}${Math.min(255, Math.max(0, value.b)).toString(16).padStart(2, '0')}`,\r\n            toString: () => `#${Math.min(255, Math.max(0, value.r)).toString(16).padStart(2, '0')}${Math.min(255, Math.max(0, value.g)).toString(16).padStart(2, '0')}${Math.min(255, Math.max(0, value.b)).toString(16).padStart(2, '0')}`\r\n        }\r\n    }\r\n\r\n    // If it's a string, try to parse it\r\n    if (typeof value === 'string') {\r\n        // Handle hex format #rgb or #rrggbb\r\n        if (value.startsWith('#')) {\r\n            const hex = value.slice(1)\r\n            if (hex.length === 3) {\r\n                const r = parseInt(hex[0] + hex[0], 16)\r\n                const g = parseInt(hex[1] + hex[1], 16)\r\n                const b = parseInt(hex[2] + hex[2], 16)\r\n                return {\r\n                    r, g, b,\r\n                    valueOf: () => value,\r\n                    toString: () => value\r\n                }\r\n            } else if (hex.length === 6) {\r\n                const r = parseInt(hex.slice(0, 2), 16)\r\n                const g = parseInt(hex.slice(2, 4), 16)\r\n                const b = parseInt(hex.slice(4, 6), 16)\r\n                return {\r\n                    r, g, b,\r\n                    valueOf: () => value,\r\n                    toString: () => value\r\n                }\r\n            }\r\n        }\r\n        // Return as is if parsing fails\r\n        return value\r\n    }\r\n\r\n    // If it's a number, treat as RGB integer\r\n    if (typeof value === 'number') {\r\n        const r = (value >> 16) & 0xFF\r\n        const g = (value >> 8) & 0xFF\r\n        const b = value & 0xFF\r\n        const hex = `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`\r\n        return {\r\n            r, g, b,\r\n            valueOf: () => hex,\r\n            toString: () => hex\r\n        }\r\n    }\r\n\r\n    // Return as is if parsing fails\r\n    return String(value)\r\n}\r\n\r\n// Helper function to convert structured objects back to strings\r\n// Converts CSSColorObject to hex color string\r\nconst stringifyCSSColor = (value: CSSColorObject | string): string => {\r\n    if (typeof value === 'string') return value\r\n    return `#${Math.min(255, Math.max(0, value.r)).toString(16).padStart(2, '0')}${Math.min(255, Math.max(0, value.g)).toString(16).padStart(2, '0')}${Math.min(255, Math.max(0, value.b)).toString(16).padStart(2, '0')}`\r\n}\r\n\r\nexport const HtmlColor: ObservableOptions</* CSSColorValue */ string | undefined> = {\r\n    equals: (a, b) => {\r\n        const parsedA = parseCSSColor(a)\r\n        const parsedB = parseCSSColor(b)\r\n\r\n        // If both are strings, compare directly\r\n        if (typeof parsedA === 'string' && typeof parsedB === 'string') {\r\n            return parsedA === parsedB\r\n        }\r\n\r\n        // If both are objects, compare their properties\r\n        if (typeof parsedA === 'object' && typeof parsedB === 'object' &&\r\n            'r' in parsedA && 'r' in parsedB) {\r\n            return parsedA.r === parsedB.r &&\r\n                parsedA.g === parsedB.g &&\r\n                parsedA.b === parsedB.b\r\n        }\r\n\r\n        // Otherwise, they're not equal\r\n        return false\r\n    },\r\n    type: String,\r\n    toHtml: (value) => {\r\n        const parsed = parseCSSColor(value)\r\n        if (parsed === undefined) return undefined as any\r\n        return stringifyCSSColor(parsed) as any\r\n    },\r\n    fromHtml: (value) => {\r\n        return value //as CSSColorValue\r\n    }\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Define the structured representation of CSS style objects\r\nexport interface CSSStyleObject {\r\n    [key: string]: string | number\r\n}\r\n\r\nexport type CSSStyleValue = string | CSSStyleObject\r\n\r\n// Helper function to convert HTML string values to CSS style objects\r\n// Treats empty strings and invalid values as undefined\r\nconst toStyleObject = (value: CSSStyleValue | undefined): CSSStyleObject | undefined => {\r\n    if (value === undefined || value === '') return undefined\r\n\r\n    // If it's already a style object, return it\r\n    if (typeof value === 'object' && value !== null) {\r\n        return value\r\n    }\r\n\r\n    // If it's a string, try to parse it as CSS styles\r\n    if (typeof value === 'string') {\r\n        // Handle empty string\r\n        if (value.trim() === '') return undefined\r\n\r\n        const style: CSSStyleObject = {}\r\n        const rules = value.split(';')\r\n\r\n        for (const rule of rules) {\r\n            const trimmedRule = rule.trim()\r\n            if (trimmedRule) {\r\n                const colonIndex = trimmedRule.indexOf(':')\r\n                if (colonIndex > 0) {\r\n                    const property = trimmedRule.substring(0, colonIndex).trim()\r\n                    const value = trimmedRule.substring(colonIndex + 1).trim()\r\n                    if (property && value) {\r\n                        // Convert CSS property to camelCase\r\n                        const camelCaseProperty = property.replace(/-([a-z])/g, (g) => g[1].toUpperCase())\r\n                        style[camelCaseProperty] = value\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        return Object.keys(style).length > 0 ? style : undefined\r\n    }\r\n\r\n    return undefined\r\n}\r\n\r\n// Helper function to convert CSS style objects to CSS string\r\n// Converts camelCase properties back to kebab-case\r\nconst stringifyStyleObject = (value: CSSStyleObject | undefined): string => {\r\n    if (value === undefined || value === null) return \"\"\r\n\r\n    const cssRules: string[] = []\r\n    for (const [property, val] of Object.entries(value)) {\r\n        if (property && val !== undefined && val !== null) {\r\n            // Convert camelCase to kebab-case\r\n            const kebabCaseProperty = property.replace(/[A-Z]/g, match => `-${match.toLowerCase()}`)\r\n            cssRules.push(`${kebabCaseProperty}: ${val}`)\r\n        }\r\n    }\r\n\r\n    return cssRules.join('; ')\r\n}\r\n\r\nexport const HtmlStyle: ObservableOptions<CSSStyleValue | string> = {\r\n    // Compare two CSS style values for equality\r\n    // Handles undefined, string, and object values\r\n    equals: (a: CSSStyleValue | undefined, b: CSSStyleValue | undefined) => {\r\n        const styleA = toStyleObject(a)\r\n        const styleB = toStyleObject(b)\r\n\r\n        // If both are undefined, they're equal\r\n        if (styleA === undefined && styleB === undefined) return true\r\n\r\n        // If only one is undefined, they're not equal\r\n        if (styleA === undefined || styleB === undefined) return false\r\n\r\n        // Compare the string representations\r\n        return stringifyStyleObject(styleA) === stringifyStyleObject(styleB)\r\n    },\r\n    type: Object,\r\n    toHtml: (value) => {\r\n        const style = toStyleObject(value)\r\n        return stringifyStyleObject(style) as any\r\n    },\r\n    fromHtml: (value) => {\r\n        return toStyleObject(value) || {}\r\n    }\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Helper function to handle string values\r\n// Treats null and undefined as empty strings\r\nconst toString = (value: string | null | undefined): string => {\r\n    if (value === null || value === undefined) return ''\r\n    return String(value)\r\n}\r\n\r\nexport const HtmlString: ObservableOptions<string | undefined> = {\r\n    equals: (a: string | null | undefined, b: string | null | undefined) => toString(a) === toString(b),\r\n    type: String,\r\n    toHtml: (value) => toString(value),\r\n    fromHtml: (value) => toString(value)\r\n}","import type { ObservableOptions } from \"soby\"\r\n\r\n// Helper function to handle function values\r\n// Functions cannot be meaningfully converted to HTML attributes, so we return undefined\r\nconst toFunctionString = (value: Function | null | undefined): string | undefined => {\r\n    if (value === null || value === undefined) return undefined\r\n    // Functions don't have a meaningful string representation for HTML attributes\r\n    return undefined\r\n}\r\n\r\nexport const HtmlFunction: ObservableOptions<Function | undefined> = {\r\n    equals: (a: Function | null | undefined, b: Function | null | undefined) => {\r\n        // Functions are compared by reference\r\n        return a === b\r\n    },\r\n    type: Function,\r\n    toHtml: (value) => {\r\n        const result = toFunctionString(value)\r\n        return result as any\r\n    },\r\n    fromHtml: (value) => {\r\n        // Functions cannot be meaningfully created from HTML strings\r\n        return undefined as any\r\n    }\r\n}","import type { ObservableOptions, FunctionMaybe } from \"soby\"\r\n\r\n// Define the types for class values\r\nexport type ClassValue =\r\n  | string\r\n  | number\r\n  | boolean\r\n  | null\r\n  | undefined\r\n  | ClassArray\r\n  | ClassDictionary\r\n  | (() => ClassValue)\r\n\r\nexport interface ClassDictionary {\r\n  [id: string]: FunctionMaybe<boolean | null | undefined>\r\n}\r\n\r\nexport interface ClassArray extends Array<ClassValue> { }\r\n\r\n// Helper function to convert class values to string\r\nconst toClassString = (value: ClassValue): string => {\r\n  if (value === null || value === undefined) return ''\r\n\r\n  // Handle string and number directly\r\n  if (typeof value === 'string') return value\r\n  if (typeof value === 'number') return String(value)\r\n\r\n  // Handle boolean\r\n  if (typeof value === 'boolean') return value ? '' : ''\r\n\r\n  // Handle function\r\n  if (typeof value === 'function') {\r\n    try {\r\n      return toClassString(value())\r\n    } catch {\r\n      return ''\r\n    }\r\n  }\r\n\r\n  // Handle array\r\n  if (Array.isArray(value)) {\r\n    return value.map(toClassString).filter(Boolean).join(' ')\r\n  }\r\n\r\n  // Handle object/dictionary\r\n  if (typeof value === 'object') {\r\n    return Object.entries(value)\r\n      .filter(([key, val]) => {\r\n        // Handle observable values\r\n        try {\r\n          const resolvedVal = typeof val === 'function' ? val() : val\r\n          return resolvedVal === true\r\n        } catch {\r\n          return false\r\n        }\r\n      })\r\n      .map(([key]) => key)\r\n      .join(' ')\r\n  }\r\n\r\n  return ''\r\n}\r\n\r\nexport const HtmlClass: ObservableOptions<ClassValue | undefined> = {\r\n  equals: (a, b) => toClassString(a) === toClassString(b),\r\n  type: String,\r\n  toHtml: (value) => toClassString(value),\r\n  fromHtml: (value) => value as ClassValue\r\n}","import type { ObservableOptions } from \"soby\"\r\nimport { Component } from \"../types\"\r\n\r\nexport const HtmlHidden = <T>(): ObservableOptions<T> => ({\r\n    equals: (a: T, b: T) => {\r\n        // Functions are compared by reference\r\n        return a === b\r\n    },\r\n    type: Function,\r\n    toHtml: (value) => undefined,\r\n    fromHtml: (value) => undefined\r\n})\r\n\r\nexport const HtmlChild = HtmlHidden<Component | undefined>()","/* EXPORT */\r\n\r\nexport * from './singleton'\r\n// export * from './jsx/jsx';\r\nexport * from './components'\r\nexport * from './jsx/runtime'\r\nexport * from './hooks'\r\n// Explicitly export from methods and utils to avoid assign conflict\r\nexport {\r\n    $,\r\n    $$,\r\n    batch,\r\n    context,\r\n    createContext,\r\n    createDirective,\r\n    createElement,\r\n    defaults,\r\n    assign,\r\n    make,\r\n    clone,\r\n    h,\r\n    hmr,\r\n    html,\r\n    isBatching,\r\n    isObservable,\r\n    isObservableWritable,\r\n    isServer,\r\n    isStore,\r\n    lazy,\r\n    render,\r\n    renderToString,\r\n    resolve,\r\n    store,\r\n    template,\r\n    tick,\r\n    untrack,\r\n    cloneElement,\r\n    setRef,\r\n    customElement,\r\n    wrapCloneElement,\r\n    SYMBOL_STACK\r\n} from './methods'\r\nexport type {\r\n    ElementAttributes,\r\n    CustomElementChildren,\r\n    StyleEncapsulationProps,\r\n} from './methods'\r\nexport {\r\n    castArray,\r\n    castError,\r\n    flatten,\r\n    indexOf,\r\n    isArray,\r\n    isBoolean,\r\n    isComponent,\r\n    isError,\r\n    isFalsy,\r\n    isFunction,\r\n    isClass,\r\n    isFunctionReactive,\r\n    isNil,\r\n    isNode,\r\n    isObject,\r\n    isPrimitive,\r\n    isPromise,\r\n    isString,\r\n    isSVG,\r\n    isSVGElement,\r\n    isTemplateAccessor,\r\n    isTruthy,\r\n    isVoidChild,\r\n    mark,\r\n    noop,\r\n    once,\r\n    fixBigInt,\r\n    toArray,\r\n    setProp,\r\n    resolveArraysAndStatics,\r\n    setChild,\r\n    FragmentUtils\r\n} from './utils'\r\nexport * from \"./constants\"\r\n\r\n//export type {Context, Directive, DirectiveOptions, FunctionMaybe, Observable, ObservableReadonly, ObservableMaybe, ObservableOptions, Resource, StoreOptions, CSSProperties, Component, JSX.Element} from './types';\r\n\r\n// export type {IComputation, IEffect, IMemo, IObservable, IObserver, IReaction, IRoot, ISuperRoot, ISuspense} from 'soby';\r\nexport type { BatchFunction, CallbackFunction, CleanupFunction, DisposeFunction, EffectFunction, ErrorFunction, EqualsFunction, /* ListenerFunction, */ MapFunction, /* MapIndexFunction, */ MapValueFunction, MemoFunction, /* ObservedFunction, ObservedDisposableFunction, ReactionFunction, */ SelectorFunction, SuspenseFunction, TryCatchFunction, UntrackFunction, UpdateFunction, WithFunction } from './soby'\r\nexport type { Observable, ObservableReadonly, ObservableOptions } from 'soby'\r\nexport { DEBUGGER, Stack, callStack } from 'soby'\r\n\r\nimport { SYMBOL_OBSERVABLE } from 'soby'\r\n\r\n// export type {Owner} from 'soby';\r\nexport type { StoreOptions } from 'soby'\r\nexport type { CSSUnit, CSSLength } from './html/html-length'\r\n\r\nexport type {\r\n    ArrayMaybe, Callback, Child, ChildWithMetadata, Classes, ComponentFunction, ComponentIntrinsicElement,\r\n    ComponentNode, Component, ComponentsMap, /* Constructor, */ ConstructorWith, ContextData, ContextProvider,\r\n    Context, ContextWithDefault, DirectiveFunction, DirectiveProvider, DirectiveRef, DirectiveRegister, Directive, DirectiveData,\r\n    DirectiveOptions, Disposer, Element, EventListener, Falsy, FN, FragmentUndefined, FragmentNode, FragmentFragment,\r\n    FragmentNodes, FragmentFragments, FragmentMixed, /* Fragment, */ FunctionMaybe, MemoOptions, LazyComponent, LazyFetcher, LazyResult,\r\n    /* Observable, ObservableReadonly, */ ObservableMaybe, /* ObservableOptions, */ PromiseMaybe, ObservableLike, Props, Ref,\r\n    ResourceStaticPending, ResourceStaticRejected, ResourceStaticResolved, ResourceStatic, ResourceFunction, Resource,\r\n    /* StoreOptions, */ SuspenseData, TemplateActionPath, TemplateActionProxy, TemplateActionWithNodes, TemplateActionWithPaths,\r\n    TemplateVariableProperties, TemplateVariableData, TemplateVariablesMap, Truthy,\r\n    CSSProperties, Nullable, Unobservant, Observant,\r\n} from './types'\r\n\r\nexport const ObservableSymbol = SYMBOL_OBSERVABLE\r\nexport * as JSX from './types'\r\n\r\n// Add HtmlBoolean export\r\nexport * from './html'"],"names":["castArray","isArray","castError","is","isFunction","isObject","noop","resolve","SYMBOL_SUSPENSE","_b","_a","isUntracked","Scheduler","options","set","cleanup","observable","memo","boolean","context","effect","suspense","register","callStack","DUMMY_INDEX","cache","fn","MappedRoot","root","Suspense","pooled","mapped","suspended","SchedulerAsync","ObservableClass","stack","store","parent","target","node","key","getter","value","property","lengthPrev","lengthNext","get","selector","$","untracked","customElements","document","HTMLElement","MutationObserver","doc","assign","t","self","match","$$","observer","useEffect","event","useCleanup","once","useSuspended","tick","Context","useMemo","counter","disposed","fetch","error","useReadonly","request","init","callback","child","fragment","dynamic","fragmentOnly","isSVG","children","useUntracked","id","ttl","useRoot","useSuspense","useBoolean","merge","h","component","cached","hot","module","cold","n","s","r","creatElement","datum","clone","date"],"mappings":"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","x_google_ignoreList":[118]}