{"version":3,"sources":["../src/reactivity/dep.ts","../src/layers/tracing/global.ts","../src/layers/tracing/signals.ts","../src/reactivity/signal.ts","../src/constants.ts","../src/reactivity/proxy-utils.ts","../src/reactivity/reactive.ts","../src/reactivity/computed.ts","../src/config/EffuseConfig.ts","../src/reactivity/readonly.ts","../src/blueprint/blueprint.ts","../src/blueprint/lifecycle.ts","../src/blueprint/hooks.ts","../src/layers/errors.ts","../src/layers/context.ts","../src/errors.ts","../src/blueprint/script-context.ts","../src/blueprint/define.ts","../src/blueprint/props.ts","../src/refs/ref.ts","../src/refs/directive.ts","../src/services/dom-renderer/props.ts","../src/services/dom-renderer/events.ts","../src/services/dom-renderer/mount.ts","../src/services/dom-renderer/index.ts","../src/render/node.ts","../src/render/element.ts","../src/render/index.ts","../src/blueprint/portal.ts","../src/suspense/Suspense.ts","../src/effects/effect.ts","../src/effects/watch.ts","../src/components/For.ts","../src/components/Show.ts","../src/components/Switch.ts","../src/components/Dynamic.ts","../src/components/ErrorBoundary.ts","../src/components/Repeat.ts","../src/components/Await.ts","../src/components/constants.ts","../src/components/Transition.ts","../src/components/TransitionGroup.ts","../src/components/KeepAlive.ts","../src/components/AsyncBoundary.ts","../src/components/Deferred.ts","../src/errors/tagged.ts","../src/errors/internal.ts","../src/canvas/canvas.ts","../src/layers/tracing/hooks.ts","../src/hooks/errors.ts","../src/hooks/context.ts","../src/hooks/defineHook.ts","../src/jsx/runtime.ts","../src/layers/services/PropsService.ts","../src/layers/services/RegistryService.ts","../src/layers/utils/resolve.ts","../src/layers/api/defineLayer.ts","../src/layers/tracing/categories.ts","../src/layers/tracing/TracingService.ts","../src/layers/tracing/spans.ts","../src/layers/tracing/suspense.ts","../src/layers/tracing/emit.ts","../src/layers/tracing/fibers.ts","../src/layers/internal/topology.ts","../src/layers/internal/builder.ts","../src/layers/internal/runtime.ts","../src/app/EffuseApp.ts","../src/app/createApp.ts","../src/ssr/errors.ts","../src/ssr/head-registry.ts","../src/ssr/use-head.ts","../src/ssr/render.ts","../src/ssr/server-app.ts","../src/ssr/seo-meta.ts","../src/ssr/handler.ts","../src/ssr/hydration.ts","../src/form/validation.ts","../src/form/config.ts","../src/form/useForm.ts","../src/form/validators/index.ts","../src/form/validators/common.ts","../src/form/validators/schema.ts","../src/form/validators/string.ts","../src/form/validators/number.ts","../src/form/validators/format.ts","../src/form/validators/array.ts","../src/form/validators/date.ts","../src/form/validators/bigint.ts","../src/emit/config/constants.ts","../src/emit/services/service.ts","../src/emit/hooks/useEmits.ts","../src/emit/hooks/useEventSignal.ts","../src/emit/modifiers/debounce.ts","../src/emit/modifiers/throttle.ts","../src/emit/modifiers/once.ts","../src/emit/modifiers/filter.ts","../src/context/registry.ts","../src/context/errors.ts","../src/context/context.ts","../src/refs/errors.ts"],"names":["Predicate","SubscriptionRef","Effect","Data","Config","Scope","Exit","Arr","pipe","Option","effect","blueprint","Schema","Either","ParseResult","Cause","el","Context","styles","Layer","Element","Text","Fragment","List","Blueprint","props","signal","Match","cleanup","Schedule","Duration","Fiber","Rec","render","resolveFallback","isTruthy","isSignal","Num","isSignalLike","resolveChild","$match","$is","Idle","Error","name","children","Loading","Success","ManagedRuntime","RenderError","EffectOption","Ref","url","escapeHtml","node","escapeAttr","S","required","ArrayFormatter","handlers","HashMap"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nconst TrackingContextStack: Set<Dep>[] = [];\n\nlet BatchQueue: Set<() => void> | null = null;\nlet BatchDepth = 0;\nlet GlobalVersion = 0;\nlet TrackingPaused = false;\n\nconst pendingEffects = new Set<() => void>();\nlet effectExecutionDepth = 0;\n\nfunction flushPendingEffects(): void {\n\tif (effectExecutionDepth > 0) return;\n\n\twhile (pendingEffects.size > 0) {\n\t\tconst effects = [...pendingEffects];\n\t\tpendingEffects.clear();\n\t\teffectExecutionDepth++;\n\t\ttry {\n\t\t\tfor (const effect of effects) {\n\t\t\t\teffect();\n\t\t\t}\n\t\t} finally {\n\t\t\teffectExecutionDepth--;\n\t\t}\n\t}\n}\n\n// Dependency tracker for reactive signals\nexport class Dep {\n\tversion = 0;\n\tprivate subscribers = new Set<() => void>();\n\n\ttrack(): void {\n\t\tif (TrackingPaused) return;\n\n\t\tconst current = TrackingContextStack[TrackingContextStack.length - 1];\n\t\tif (current) {\n\t\t\tcurrent.add(this);\n\t\t}\n\t}\n\n\ttrigger(): void {\n\t\tthis.version++;\n\t\tGlobalVersion++;\n\t\tif (BatchDepth > 0 && BatchQueue) {\n\t\t\tfor (const sub of this.subscribers) {\n\t\t\t\tBatchQueue.add(sub);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const sub of this.subscribers) {\n\t\t\t\tpendingEffects.add(sub);\n\t\t\t}\n\n\t\t\tif (effectExecutionDepth === 0 && pendingEffects.size > 0) {\n\t\t\t\tflushPendingEffects();\n\t\t\t}\n\t\t}\n\t}\n\n\tsubscribe(callback: () => void): () => void {\n\t\tthis.subscribers.add(callback);\n\t\treturn () => this.subscribers.delete(callback);\n\t}\n\n\thasSubscribers(): boolean {\n\t\treturn this.subscribers.size > 0;\n\t}\n\n\tclear(): void {\n\t\tthis.subscribers.clear();\n\t}\n}\n\n// Access tracked dependencies in current context\nexport function getTrackedDeps(): Dep[] {\n\tconst current = TrackingContextStack[TrackingContextStack.length - 1];\n\treturn current ? [...current] : [];\n}\n\n// Initialize tracking context\nexport function startTracking(): void {\n\tTrackingContextStack.push(new Set());\n}\n\n// Finalize and return tracked dependencies\nexport function stopTracking(): Dep[] {\n\tconst deps = getTrackedDeps();\n\tTrackingContextStack.pop();\n\treturn deps;\n}\n\n// Execute function with batched reactive updates\nexport function batch<T>(fn: () => T): T {\n\tBatchDepth++;\n\tif (!BatchQueue) {\n\t\tBatchQueue = new Set();\n\t}\n\tconst currentQueue = BatchQueue;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tBatchDepth--;\n\t\tif (BatchDepth === 0) {\n\t\t\tBatchQueue = null;\n\t\t\tfor (const cb of currentQueue) {\n\t\t\t\tcb();\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Execute function without reactive tracking\nexport function untrack<T>(fn: () => T): T {\n\tconst wasPaused = TrackingPaused;\n\tTrackingPaused = true;\n\ttry {\n\t\treturn fn();\n\t} finally {\n\t\tTrackingPaused = wasPaused;\n\t}\n}\n\n// Detect if tracking is currently paused\nexport function getTrackingPaused(): boolean {\n\treturn TrackingPaused;\n}\n\n// Disable reactive tracking globally\nexport function pauseTracking(): void {\n\tTrackingPaused = true;\n}\n\n// Reenable reactive tracking globally\nexport function resumeTracking(): void {\n\tTrackingPaused = false;\n}\n\n// Detect if reactive tracking is active\nexport function isTracking(): boolean {\n\treturn !TrackingPaused && TrackingContextStack.length > 0;\n}\n\n// Initialize update batching\nexport function startBatch(): void {\n\tBatchDepth++;\n\tif (!BatchQueue) {\n\t\tBatchQueue = new Set();\n\t}\n}\n\n// Execute batched updates and finalize batch\nexport function endBatch(): void {\n\tBatchDepth--;\n\tif (BatchDepth === 0 && BatchQueue) {\n\t\tconst queue = BatchQueue;\n\t\tBatchQueue = null;\n\t\tfor (const cb of queue) {\n\t\t\tcb();\n\t\t}\n\t}\n}\n\n// Access global reactivity version\nexport function getGlobalVersion(): number {\n\treturn GlobalVersion;\n}\n\n// Initialize cleanup scope\nexport function createScope<T>(fn: (dispose: () => void) => T): T {\n\tconst disposers: (() => void)[] = [];\n\n\tconst runDisposers = (): void => {\n\t\tconst toRun = [...disposers].reverse();\n\t\tfor (const d of toRun) {\n\t\t\td();\n\t\t}\n\t};\n\n\ttry {\n\t\treturn fn(runDisposers);\n\t} catch (err) {\n\t\trunDisposers();\n\t\tthrow err;\n\t}\n}\n\n// Execute reactive updates or initial function\nexport function executeUpdates<T>(fn: () => T, init: boolean): T {\n\tif (init) {\n\t\treturn fn();\n\t}\n\treturn batch(fn);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { TracingServiceApi } from './TracingService.js';\n\nlet globalTracingService: TracingServiceApi | null = null;\n\nexport const setGlobalTracing = (service: TracingServiceApi): void => {\n\tglobalTracingService = service;\n};\n\nexport const getGlobalTracing = (): TracingServiceApi | null => {\n\treturn globalTracingService;\n};\n\nexport const clearGlobalTracing = (): void => {\n\tglobalTracingService = null;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport { getGlobalTracing } from './global.js';\n\nlet signalCounter = 0;\n\nexport const traceSignalCreate = (\n\tname: string | undefined,\n\tinitialValue: unknown\n): string => {\n\tconst tracing = getGlobalTracing();\n\tconst signalId = name ?? `signal_${String(++signalCounter)}`;\n\n\tif (\n\t\tPredicate.isNotNullable(tracing) &&\n\t\ttracing.isCategoryEnabled('signals')\n\t) {\n\t\ttracing.log('signals', 'create', signalId, {\n\t\t\tinitial: initialValue,\n\t\t});\n\t}\n\n\treturn signalId;\n};\n\nexport const traceSignalUpdate = (\n\tsignalId: string,\n\tprevValue: unknown,\n\tnextValue: unknown\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (\n\t\t!Predicate.isNotNullable(tracing) ||\n\t\t!tracing.isCategoryEnabled('signals')\n\t)\n\t\treturn;\n\n\ttracing.log('signals', 'update', signalId, {\n\t\tprev: prevValue,\n\t\tnext: nextValue,\n\t});\n};\n\nexport const traceComputedCreate = (name: string | undefined): string => {\n\tconst tracing = getGlobalTracing();\n\tconst computedId = name ?? `computed_${String(++signalCounter)}`;\n\n\tif (\n\t\tPredicate.isNotNullable(tracing) &&\n\t\ttracing.isCategoryEnabled('signals')\n\t) {\n\t\ttracing.log('signals', 'computed', computedId);\n\t}\n\n\treturn computedId;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Predicate, SubscriptionRef } from 'effect';\nimport type { Signal, ReadonlySignal } from '../types/index.js';\nimport { Dep } from './dep.js';\nimport {\n\ttraceSignalCreate,\n\ttraceSignalUpdate,\n} from '../layers/tracing/signals.js';\n\nexport type { Signal };\n\ninterface SignalInternal<T> extends Signal<T> {\n\treadonly _ref: SubscriptionRef.SubscriptionRef<T>;\n\treadonly _dep: Dep;\n\treadonly _version: { value: number };\n\treadonly _traceId: string;\n}\n\n// Initialize reactive signal\nexport function signal<T>(initialValue: T, name?: string): Signal<T> {\n\tconst refEffect = SubscriptionRef.make(initialValue);\n\tconst ref = Effect.runSync(refEffect);\n\tconst dep = new Dep();\n\tconst version = { value: 0 };\n\tlet cached = initialValue;\n\n\tconst traceId = traceSignalCreate(name, initialValue);\n\n\tconst signalObj: SignalInternal<T> = {\n\t\tget _ref() {\n\t\t\treturn ref;\n\t\t},\n\t\tget _dep() {\n\t\t\treturn dep;\n\t\t},\n\t\tget _version() {\n\t\t\treturn version;\n\t\t},\n\t\tget _traceId() {\n\t\t\treturn traceId;\n\t\t},\n\t\tget value(): T {\n\t\t\tdep.track();\n\t\t\treturn cached;\n\t\t},\n\t\tset value(newValue: T) {\n\t\t\tif (!Object.is(cached, newValue)) {\n\t\t\t\tconst prevValue = cached;\n\t\t\t\tcached = newValue;\n\t\t\t\tversion.value++;\n\t\t\t\tEffect.runSync(SubscriptionRef.set(ref, newValue));\n\t\t\t\tdep.trigger();\n\t\t\t\ttraceSignalUpdate(traceId, prevValue, newValue);\n\t\t\t}\n\t\t},\n\t};\n\n\treturn signalObj;\n}\n\n// Build readonly signal view\nexport function readonlySignal<T>(source: Signal<T>): ReadonlySignal<T> {\n\treturn {\n\t\tget value() {\n\t\t\treturn source.value;\n\t\t},\n\t};\n}\n\n// Detect reactive signal\nexport function isSignal<T>(value: unknown): value is Signal<T> {\n\tif (!Predicate.isObject(value)) {\n\t\treturn false;\n\t}\n\tconst obj = value as Record<string, unknown>;\n\tif (!('value' in obj)) {\n\t\treturn false;\n\t}\n\tif ('_ref' in obj || '_dep' in obj) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n// Resolve signal value\nexport function unref<T>(maybeSignal: T | Signal<T>): T {\n\treturn isSignal<T>(maybeSignal) ? maybeSignal.value : maybeSignal;\n}\n\n// Access internal subscription ref\nexport function getSignalRef<T>(\n\tsig: Signal<T>\n): SubscriptionRef.SubscriptionRef<T> | null {\n\tconst internal = sig as SignalInternal<T>;\n\treturn '_ref' in internal ? internal._ref : null;\n}\n\n// Access internal dependency tracker\nexport function getSignalDep<T>(sig: Signal<T>): Dep | null {\n\tconst internal = sig as SignalInternal<T>;\n\treturn '_dep' in internal ? internal._dep : null;\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\n\nexport const EFFUSE_NODE = Symbol.for('effuse.node');\n\nexport const FRAGMENT = Symbol.for('effuse.fragment');\n\nexport const SIGNAL_REF = Symbol('effuse.signal.ref');\n\nexport const REACTIVE_MARKER = Symbol('effuse.reactive');\n\nexport const READONLY_MARKER = Symbol('effuse.readonly');\n\nexport const MATCH_MARKER = Symbol('effuse.match');\n\nexport const SUSPEND_TOKEN = Symbol.for('effuse/SuspendToken');\nexport const BOUNDARY_ID_PREFIX = 'suspense-boundary-';\n\nexport const HYDRATION_SCRIPT_ID = '__EFFUSE_DATA__';\n\ntype NodeTypeInternal = Data.TaggedEnum<{\n\tElement: object;\n\tText: object;\n\tBlueprint: object;\n\tFragment: object;\n\tList: object;\n}>;\n\nconst { Element, Text, Blueprint, Fragment, List, $is } =\n\tData.taggedEnum<NodeTypeInternal>();\n\nexport const NodeType = { Element, Text, Blueprint, Fragment, List };\n\nexport const isNodeElement = (n: NodeTypeInternal): boolean =>\n\t$is('Element')(n);\nexport const isNodeText = (n: NodeTypeInternal): boolean => $is('Text')(n);\nexport const isNodeBlueprint = (n: NodeTypeInternal): boolean =>\n\t$is('Blueprint')(n);\nexport const isNodeFragment = (n: NodeTypeInternal): boolean =>\n\t$is('Fragment')(n);\nexport const isNodeList = (n: NodeTypeInternal): boolean => $is('List')(n);\n\nexport const matchNodeType = <R>(\n\tnodeType: NodeTypeInternal,\n\thandlers: {\n\t\tonElement: () => R;\n\t\tonText: () => R;\n\t\tonBlueprint: () => R;\n\t\tonFragment: () => R;\n\t\tonList: () => R;\n\t}\n): R => {\n\tswitch (nodeType._tag) {\n\t\tcase 'Element':\n\t\t\treturn handlers.onElement();\n\t\tcase 'Text':\n\t\t\treturn handlers.onText();\n\t\tcase 'Blueprint':\n\t\t\treturn handlers.onBlueprint();\n\t\tcase 'Fragment':\n\t\t\treturn handlers.onFragment();\n\t\tcase 'List':\n\t\t\treturn handlers.onList();\n\t}\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\n\nexport interface PropertyLookupResult {\n\tdescriptor: PropertyDescriptor | undefined;\n\tfound: boolean;\n}\n\n// Locate property descriptor in prototype chain\nexport function findPropertyDescriptor(\n\tobj: object,\n\tkey: string | symbol\n): PropertyLookupResult {\n\tlet proto: object | null = obj;\n\n\twhile (proto !== null) {\n\t\tconst descriptor = Object.getOwnPropertyDescriptor(proto, key);\n\t\tif (descriptor) {\n\t\t\treturn { descriptor, found: true };\n\t\t}\n\t\tproto = Object.getPrototypeOf(proto) as object | null;\n\t}\n\n\treturn { descriptor: undefined, found: false };\n}\n\n// Access property value with private field support\nexport function getPropertyWithPrivateFieldSupport(\n\ttarget: object,\n\tkey: string | symbol\n): unknown {\n\tconst { descriptor, found } = findPropertyDescriptor(target, key);\n\n\tif (found && descriptor) {\n\t\tif (descriptor.get) {\n\t\t\treturn descriptor.get.call(target);\n\t\t} else if ('value' in descriptor) {\n\t\t\treturn descriptor.value;\n\t\t}\n\t}\n\n\treturn Reflect.get(target, key, target);\n}\n\n// Update property value with private field support\nexport function setPropertyWithPrivateFieldSupport(\n\ttarget: object,\n\tkey: string | symbol,\n\tvalue: unknown\n): boolean {\n\tconst { descriptor, found } = findPropertyDescriptor(target, key);\n\n\tif (\n\t\tfound &&\n\t\tPredicate.isNotNullable(descriptor) &&\n\t\tPredicate.isFunction(descriptor.set) // eslint-disable-line @typescript-eslint/unbound-method\n\t) {\n\t\t// eslint-disable-next-line @typescript-eslint/unbound-method\n\t\tReflect.apply(descriptor.set, target, [value]);\n\t\treturn true;\n\t}\n\n\treturn Reflect.set(target, key, value, target);\n}\n\n// Bind method to reactive target\nexport function bindMethodToTarget<T>(method: T, target: object): T {\n\tif (Predicate.isFunction(method)) {\n\t\treturn method.bind(target) as T;\n\t}\n\treturn method;\n}\n\n// Access current property value\nexport function getCurrentValue(target: object, key: string | symbol): unknown {\n\treturn getPropertyWithPrivateFieldSupport(target, key);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport { Dep, isTracking } from './dep.js';\nimport { REACTIVE_MARKER } from '../constants.js';\nimport {\n\tgetPropertyWithPrivateFieldSupport,\n\tsetPropertyWithPrivateFieldSupport,\n\tbindMethodToTarget,\n\tgetCurrentValue,\n} from './proxy-utils.js';\n\nconst reactiveMap = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\n\nexport type Reactive<T extends object> = T & {\n\treadonly [REACTIVE_MARKER]: true;\n};\n\nconst isMarkedRaw = (obj: object): boolean => {\n\treturn (\n\t\tObject.prototype.hasOwnProperty.call(obj, REACTIVE_MARKER) &&\n\t\t(obj as Record<symbol, unknown>)[REACTIVE_MARKER] === false\n\t);\n};\n\n// Initialize reactive object proxy\nexport const reactive = <T extends object>(target: T): Reactive<T> => {\n\tif (isMarkedRaw(target)) {\n\t\treturn target as Reactive<T>;\n\t}\n\n\tif (Object.isFrozen(target)) {\n\t\treturn target as Reactive<T>;\n\t}\n\n\tif (isReactive(target)) {\n\t\treturn target as Reactive<T>;\n\t}\n\n\tconst existingProxy = reactiveMap.get(target);\n\tif (existingProxy) {\n\t\treturn existingProxy as Reactive<T>;\n\t}\n\n\tconst deps = new Map<string | symbol, Dep>();\n\n\tconst iterateDep = new Dep();\n\n\tconst getOrCreateDep = (key: string | symbol): Dep => {\n\t\tlet dep = deps.get(key);\n\t\tif (!dep) {\n\t\t\tdep = new Dep();\n\t\t\tdeps.set(key, dep);\n\t\t}\n\t\treturn dep;\n\t};\n\n\tconst ARRAY_MUTATION_METHODS = new Set([\n\t\t'push',\n\t\t'pop',\n\t\t'shift',\n\t\t'unshift',\n\t\t'splice',\n\t\t'sort',\n\t\t'reverse',\n\t\t'fill',\n\t\t'copyWithin',\n\t]);\n\n\tconst handler: ProxyHandler<T> = {\n\t\tget(obj, key, _receiver) {\n\t\t\tif (key === REACTIVE_MARKER) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst value = getPropertyWithPrivateFieldSupport(obj, key);\n\n\t\t\tconst dep = getOrCreateDep(key);\n\t\t\tdep.track();\n\n\t\t\tif (\n\t\t\t\tArray.isArray(obj) &&\n\t\t\t\tPredicate.isString(key) &&\n\t\t\t\tARRAY_MUTATION_METHODS.has(key) &&\n\t\t\t\tPredicate.isFunction(value)\n\t\t\t) {\n\t\t\t\treturn (...args: unknown[]) => {\n\t\t\t\t\tconst result = (value as (...a: unknown[]) => unknown).apply(\n\t\t\t\t\t\tobj,\n\t\t\t\t\t\targs\n\t\t\t\t\t);\n\t\t\t\t\tgetOrCreateDep('length').trigger();\n\t\t\t\t\titerateDep.trigger();\n\t\t\t\t\treturn result;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst boundValue = bindMethodToTarget(value, obj);\n\n\t\t\tif (Predicate.isObject(boundValue)) {\n\t\t\t\tif (isMarkedRaw(boundValue)) {\n\t\t\t\t\treturn boundValue;\n\t\t\t\t}\n\t\t\t\treturn reactive(boundValue);\n\t\t\t}\n\n\t\t\treturn boundValue;\n\t\t},\n\n\t\tset(obj, key, value, _receiver) {\n\t\t\tconst oldValue = getCurrentValue(obj, key);\n\t\t\tconst hadKey = Reflect.has(obj, key);\n\n\t\t\tif (!Object.is(oldValue, value)) {\n\t\t\t\tconst result = setPropertyWithPrivateFieldSupport(obj, key, value);\n\n\t\t\t\tconst dep = getOrCreateDep(key);\n\t\t\t\tdep.trigger();\n\n\t\t\t\tif (!hadKey) {\n\t\t\t\t\titerateDep.trigger();\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\tdeleteProperty(obj, key) {\n\t\t\tconst hadKey = Reflect.has(obj, key);\n\t\t\tconst result = Reflect.deleteProperty(obj, key);\n\n\t\t\tif (hadKey && result) {\n\t\t\t\tconst dep = deps.get(key);\n\t\t\t\tif (dep) {\n\t\t\t\t\tdep.trigger();\n\t\t\t\t\tdeps.delete(key);\n\t\t\t\t}\n\t\t\t\titerateDep.trigger();\n\t\t\t}\n\n\t\t\treturn result;\n\t\t},\n\n\t\thas(obj, key) {\n\t\t\tif (key !== REACTIVE_MARKER && isTracking()) {\n\t\t\t\tgetOrCreateDep(key).track();\n\t\t\t}\n\t\t\treturn Reflect.has(obj, key);\n\t\t},\n\n\t\townKeys(obj) {\n\t\t\titerateDep.track();\n\t\t\treturn Reflect.ownKeys(obj);\n\t\t},\n\t};\n\n\tconst proxy = new Proxy(target, handler) as Reactive<T>;\n\treactiveMap.set(target, proxy);\n\tproxyToRaw.set(proxy, target);\n\n\treturn proxy;\n};\n\n// Detect reactive proxy\nexport const isReactive = (value: unknown): value is Reactive<object> => {\n\treturn (\n\t\tPredicate.isObject(value) &&\n\t\t(value as Record<symbol, unknown>)[REACTIVE_MARKER] === true\n\t);\n};\n\n// Access raw object\nexport const toRaw = <T extends object>(observed: T): T => {\n\tconst raw = proxyToRaw.get(observed);\n\treturn raw !== undefined ? (raw as T) : observed;\n};\n\n// Prevent reactivity for object\nexport const markRaw = <T extends object>(value: T): T => {\n\tObject.defineProperty(value, REACTIVE_MARKER, {\n\t\tvalue: false,\n\t\twritable: false,\n\t\tenumerable: false,\n\t});\n\treturn value;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { ReadonlySignal, Signal } from '../types/index.js';\nimport {\n\tDep,\n\tstartTracking,\n\tstopTracking,\n\tgetTrackingPaused,\n\tresumeTracking,\n\tpauseTracking,\n} from './dep.js';\n\nclass ComputedCell<T> {\n\tprivate cachedValue: T | undefined;\n\tprivate isDirty = true;\n\tprivate depInstance = new Dep();\n\tprivate getter: () => T;\n\tprivate unsubscribers: (() => void)[] = [];\n\tprivate computeVersion = 0;\n\n\tconstructor(getter: () => T) {\n\t\tthis.getter = getter;\n\t}\n\n\tget value(): T {\n\t\tthis.depInstance.track();\n\t\tif (this.isDirty) {\n\t\t\tthis.recompute();\n\t\t}\n\t\treturn this.cachedValue as T;\n\t}\n\n\tget dirty(): boolean {\n\t\treturn this.isDirty;\n\t}\n\n\tget dep(): Dep {\n\t\treturn this.depInstance;\n\t}\n\n\tprivate recompute(): void {\n\t\tthis.cleanup();\n\n\t\tconst wasPaused = getTrackingPaused();\n\t\tresumeTracking();\n\t\tstartTracking();\n\n\t\ttry {\n\t\t\tconst newValue = this.getter();\n\t\t\tconst hasChanged = !Object.is(this.cachedValue, newValue);\n\t\t\tthis.cachedValue = newValue;\n\t\t\tthis.isDirty = false;\n\t\t\tthis.computeVersion++;\n\n\t\t\tconst trackedDeps = stopTracking();\n\n\t\t\tfor (const trackedDep of trackedDeps) {\n\t\t\t\tconst unsub = trackedDep.subscribe(() => {\n\t\t\t\t\tthis.markDirty();\n\t\t\t\t});\n\t\t\t\tthis.unsubscribers.push(unsub);\n\t\t\t}\n\n\t\t\tif (hasChanged) {\n\t\t\t\tthis.depInstance.trigger();\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tstopTracking();\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (wasPaused) {\n\t\t\t\tpauseTracking();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate markDirty(): void {\n\t\tif (!this.isDirty) {\n\t\t\tthis.isDirty = true;\n\t\t\tthis.depInstance.trigger();\n\t\t}\n\t}\n\n\tprivate cleanup(): void {\n\t\tfor (const unsub of this.unsubscribers) {\n\t\t\tunsub();\n\t\t}\n\t\tthis.unsubscribers = [];\n\t}\n\n\tstop(): void {\n\t\tthis.cleanup();\n\t}\n}\n\n// Build computed signal\nexport function computed<T>(getter: () => T): ReadonlySignal<T> {\n\tconst cell = new ComputedCell(getter);\n\n\tconst computedSignal = {\n\t\tget value(): T {\n\t\t\treturn cell.value;\n\t\t},\n\t\tget _dep() {\n\t\t\treturn cell.dep;\n\t\t},\n\t};\n\n\treturn computedSignal as ReadonlySignal<T>;\n}\n\n// Build writable computed signal\nexport function writableComputed<T>(options: {\n\tget: () => T;\n\tset: (value: T) => void;\n}): Signal<T> {\n\tconst readonlyComputed = computed(options.get);\n\n\treturn {\n\t\tget value(): T {\n\t\t\treturn readonlyComputed.value;\n\t\t},\n\t\tset value(newValue: T) {\n\t\t\toptions.set(newValue);\n\t\t},\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Config, Effect } from 'effect';\n\nexport const EffuseConfig = {\n\tdebug: Config.boolean('EFFUSE_DEBUG').pipe(Config.withDefault(false)),\n\tstrictMode: Config.boolean('EFFUSE_STRICT').pipe(Config.withDefault(true)),\n\tssrMode: Config.boolean('EFFUSE_SSR').pipe(Config.withDefault(false)),\n};\n\nexport interface EffuseConfigType {\n\tdebug: boolean;\n\tstrictMode: boolean;\n\tssrMode: boolean;\n}\n\nexport const loadEffuseConfig = Effect.all({\n\tdebug: EffuseConfig.debug,\n\tstrictMode: EffuseConfig.strictMode,\n\tssrMode: EffuseConfig.ssrMode,\n});\n\nexport const defaultEffuseConfig: EffuseConfigType = {\n\tdebug: false,\n\tstrictMode: true,\n\tssrMode: false,\n};\n\nlet cachedConfig: EffuseConfigType | null = null;\n\nexport const getEffuseConfig = (): EffuseConfigType => {\n\tif (!cachedConfig) {\n\t\tcachedConfig = Effect.runSync(\n\t\t\tloadEffuseConfig.pipe(Effect.orElseSucceed(() => defaultEffuseConfig))\n\t\t);\n\t}\n\treturn cachedConfig;\n};\n\nexport const isDebugEnabled = (): boolean => getEffuseConfig().debug;\nexport const isStrictMode = (): boolean => getEffuseConfig().strictMode;\nexport const isSSRMode = (): boolean => getEffuseConfig().ssrMode;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport type { ReadonlySignal, Signal } from '../types/index.js';\nimport type { Reactive } from './reactive.js';\nimport { isDebugEnabled, isStrictMode } from '../config/index.js';\nimport { isSignal } from './signal.js';\nimport { READONLY_MARKER } from '../constants.js';\n\nexport type DeepReadonly<T> = T extends object\n\t? { readonly [K in keyof T]: DeepReadonly<T[K]> }\n\t: T;\n\n// Build deep readonly wrapper\nexport function readonly<T>(target: Signal<T>): ReadonlySignal<T>;\nexport function readonly<T extends object>(\n\ttarget: Reactive<T>\n): DeepReadonly<Reactive<T>>;\nexport function readonly<T extends object>(target: T): DeepReadonly<T>;\nexport function readonly<T>(\n\ttarget: T | Signal<T> | Reactive<T & object>\n): ReadonlySignal<T> | DeepReadonly<T> {\n\tif (isSignal<T>(target)) {\n\t\treturn {\n\t\t\tget value(): T {\n\t\t\t\treturn target.value;\n\t\t\t},\n\t\t};\n\t}\n\n\tif (Predicate.isObject(target)) {\n\t\treturn createReadonlyProxy(target as object) as DeepReadonly<T>;\n\t}\n\n\treturn target as DeepReadonly<T>;\n}\n\nconst createReadonlyProxy = <T extends object>(target: T): DeepReadonly<T> => {\n\tconst handler: ProxyHandler<T> = {\n\t\tget(obj, key, receiver) {\n\t\t\tif (key === READONLY_MARKER) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tconst value = Reflect.get(obj, key, receiver);\n\n\t\t\tif (Predicate.isObject(value)) {\n\t\t\t\treturn createReadonlyProxy(value);\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tset(_obj, key) {\n\t\t\tif (isStrictMode() || isDebugEnabled()) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Cannot set property \"${String(key)}\" on a readonly value.`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tdeleteProperty(_obj, key) {\n\t\t\tif (isStrictMode() || isDebugEnabled()) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Cannot delete property \"${String(key)}\" from a readonly value.`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t};\n\n\treturn new Proxy(target, handler) as DeepReadonly<T>;\n};\n\n// Detect readonly proxy\nexport const isReadonly = (value: unknown): boolean => {\n\treturn (\n\t\tPredicate.isObject(value) &&\n\t\t(value as Record<symbol, unknown>)[READONLY_MARKER] === true\n\t);\n};\n\n// Build shallow readonly wrapper\nexport const shallowReadonly = <T extends object>(target: T): Readonly<T> => {\n\tconst handler: ProxyHandler<T> = {\n\t\tget(obj, key, receiver) {\n\t\t\tif (key === READONLY_MARKER) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn Reflect.get(obj, key, receiver);\n\t\t},\n\n\t\tset(_obj, key) {\n\t\t\tif (isStrictMode() || isDebugEnabled()) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Cannot set property \"${String(key)}\" on a readonly value.`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\tdeleteProperty(_obj, key) {\n\t\t\tif (isStrictMode() || isDebugEnabled()) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`Cannot delete property \"${String(key)}\" from a readonly value.`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t};\n\n\treturn new Proxy(target, handler);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport type { Signal } from '../types/index.js';\nimport type {\n\tBlueprintDef,\n\tBlueprintContext,\n\tEffuseChild,\n\tPortals,\n} from '../render/node.js';\nimport type { PropSchemaBuilder } from './props.js';\n\nexport type PropsDef<P> = {\n\t[K in keyof P]?: P[K] | (() => P[K]);\n};\n\nexport interface BlueprintOptions<\n\tP extends Record<string, unknown> = Record<string, unknown>,\n> {\n\treadonly name?: string;\n\treadonly props?: PropsDef<P>;\n\treadonly propsSchema?: PropSchemaBuilder<P>;\n\treadonly state?: (props: P) => Record<string, Signal<unknown>>;\n\treadonly view: (context: BlueprintContext<P>) => EffuseChild;\n\treadonly error?: (error: Error) => EffuseChild;\n\treadonly loading?: () => EffuseChild;\n}\n\n// Build blueprint definition\nexport const blueprint = <\n\tP extends Record<string, unknown> = Record<string, unknown>,\n>(\n\toptions: BlueprintOptions<P>\n): BlueprintDef<P> => {\n\tconst def: BlueprintDef<P> = {\n\t\t_tag: 'Blueprint',\n\t\tname: options.name,\n\t\tview: options.view,\n\t};\n\n\tconst mutableDef = def as unknown as Record<string, unknown>;\n\tif (options.state) {\n\t\tmutableDef.state = options.state;\n\t}\n\tif (options.error) {\n\t\tmutableDef.error = options.error;\n\t}\n\tif (options.loading) {\n\t\tmutableDef.loading = options.loading;\n\t}\n\tif (options.propsSchema) {\n\t\tmutableDef.propsSchema = options.propsSchema;\n\t}\n\n\treturn def;\n};\n\n// Verify blueprint definition\nexport const isBlueprint = (value: unknown): value is BlueprintDef => {\n\treturn (\n\t\tPredicate.isObject(value) &&\n\t\tPredicate.hasProperty(value, '_tag') &&\n\t\tvalue._tag === 'Blueprint'\n\t);\n};\n\n// Initialize blueprint context\nexport const instantiateBlueprint = <P extends Record<string, unknown>>(\n\tdef: BlueprintDef<P>,\n\tprops: P,\n\tportals: Portals\n): BlueprintContext<P> => {\n\tlet validatedProps = props;\n\n\tconst defWithSchema = def as unknown as {\n\t\tpropsSchema?: PropSchemaBuilder<P>;\n\t};\n\tif (defWithSchema.propsSchema) {\n\t\tvalidatedProps = defWithSchema.propsSchema.validateSync(props, def.name);\n\t}\n\n\tconst state = def.state ? def.state(validatedProps) : {};\n\n\treturn {\n\t\tprops: validatedProps,\n\t\tstate,\n\t\tportals,\n\t};\n};\n\n// Build anonymous blueprint\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Exit, Predicate, Scope } from 'effect';\n\nexport interface ComponentLifecycle {\n\treadonly scope: Scope.CloseableScope;\n\treadonly onMount: (fn: () => (() => void) | undefined) => void;\n\treadonly onUnmount: (fn: () => void) => void;\n\treadonly onBeforeMount: (fn: () => void) => void;\n\treadonly onBeforeUnmount: (fn: () => void) => void;\n\treadonly runMount: () => void;\n\treadonly runCleanup: () => Effect.Effect<void>;\n}\n\ninterface LifecycleState {\n\treadonly beforeMountCallbacks: Array<() => void>;\n\treadonly mountCallbacks: Array<() => (() => void) | undefined>;\n\treadonly beforeUnmountCallbacks: Array<() => void>;\n\treadonly mountCleanups: Array<() => void>;\n\tmounted: boolean;\n}\n\nconst createLifecycleFns = (\n\tscope: Scope.CloseableScope,\n\tstate: LifecycleState\n): Omit<ComponentLifecycle, 'scope'> => {\n\tconst onBeforeMount = (fn: () => void): void => {\n\t\tif (!state.mounted) {\n\t\t\tstate.beforeMountCallbacks.push(fn);\n\t\t}\n\t};\n\n\tconst onMount = (fn: () => (() => void) | undefined): void => {\n\t\tif (state.mounted) {\n\t\t\tconst cleanup = fn();\n\t\t\tif (cleanup) state.mountCleanups.push(cleanup);\n\t\t} else {\n\t\t\tstate.mountCallbacks.push(fn);\n\t\t}\n\t};\n\n\tconst onBeforeUnmount = (fn: () => void): void => {\n\t\tstate.beforeUnmountCallbacks.push(fn);\n\t};\n\n\tconst onUnmount = (fn: () => void): void => {\n\t\tEffect.runSync(Scope.addFinalizer(scope, Effect.sync(fn)));\n\t};\n\n\tconst runMount = (): void => {\n\t\tif (state.mounted) return;\n\n\t\tfor (const fn of state.beforeMountCallbacks) fn();\n\t\tstate.beforeMountCallbacks.length = 0;\n\n\t\tstate.mounted = true;\n\n\t\tfor (const fn of state.mountCallbacks) {\n\t\t\tconst cleanup = fn();\n\t\t\tif (cleanup) state.mountCleanups.push(cleanup);\n\t\t}\n\t\tstate.mountCallbacks.length = 0;\n\t};\n\n\tconst runCleanup = (): Effect.Effect<void> =>\n\t\tEffect.gen(function* () {\n\t\t\tfor (const fn of state.beforeUnmountCallbacks) fn();\n\t\t\tstate.beforeUnmountCallbacks.length = 0;\n\n\t\t\tfor (const cleanup of state.mountCleanups) {\n\t\t\t\tif (Predicate.isFunction(cleanup)) {\n\t\t\t\t\tcleanup();\n\t\t\t\t}\n\t\t\t}\n\t\t\tstate.mountCleanups.length = 0;\n\n\t\t\tyield* Scope.close(scope, Exit.void);\n\t\t\tstate.mounted = false;\n\t\t});\n\n\treturn {\n\t\tonMount,\n\t\tonUnmount,\n\t\tonBeforeMount,\n\t\tonBeforeUnmount,\n\t\trunMount,\n\t\trunCleanup,\n\t};\n};\n\nconst createState = (): LifecycleState => ({\n\tbeforeMountCallbacks: [],\n\tmountCallbacks: [],\n\tbeforeUnmountCallbacks: [],\n\tmountCleanups: [],\n\tmounted: false,\n});\n\nexport const createComponentLifecycleSync = (): ComponentLifecycle => {\n\tconst scope = Effect.runSync(Scope.make());\n\tconst state = createState();\n\treturn { scope, ...createLifecycleFns(scope, state) };\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Array as Arr, Predicate } from 'effect';\nimport { computed } from '../reactivity/computed.js';\nimport { isSignal } from '../reactivity/signal.js';\nimport type { ReadonlySignal } from '../types/index.js';\n\nconst trackDependencies = (deps: unknown[] | undefined): void => {\n\tif (!Predicate.isNotNullable(deps)) return;\n\tArr.forEach(deps, (d) => {\n\t\tif (isSignal(d)) {\n\t\t\tvoid (d as ReadonlySignal<unknown>).value;\n\t\t}\n\t});\n};\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function useCallback<T extends (...args: any[]) => any>(\n\tfn: T,\n\tdeps?: unknown[]\n): T {\n\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion\n\treturn computed(() => {\n\t\ttrackDependencies(deps);\n\t\treturn fn;\n\t}).value as T;\n}\n\nexport function useMemo<T>(fn: () => T, deps?: unknown[]): () => T {\n\tconst memoized = computed(() => {\n\t\ttrackDependencies(deps);\n\t\treturn fn();\n\t});\n\treturn () => memoized.value;\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\n\nexport class LayerNotFoundError extends Data.TaggedError('LayerNotFoundError')<{\n\treadonly layerName: string;\n}> {\n\tget message(): string {\n\t\treturn `[Effuse] Layer \"${this.layerName}\" not found.`;\n\t}\n}\n\nexport class LayerRuntimeNotReadyError extends Data.TaggedError(\n\t'LayerRuntimeNotReadyError'\n)<{\n\treadonly layerName: string;\n}> {\n\tget message(): string {\n\t\treturn (\n\t\t\t`[Effuse] Layer runtime not ready. Cannot access layer \"${this.layerName}\". ` +\n\t\t\t'Ensure the app is mounted with useLayers() before components render.'\n\t\t);\n\t}\n}\n\nexport class LayerRuntimeNotInitializedError extends Data.TaggedError(\n\t'LayerRuntimeNotInitializedError'\n)<{\n\treadonly resource: string;\n}> {\n\tget message(): string {\n\t\treturn `[Effuse] Layer runtime not initialized. Cannot access ${this.resource}.`;\n\t}\n}\n\nexport class ServiceNotFoundError extends Data.TaggedError(\n\t'ServiceNotFoundError'\n)<{\n\treadonly serviceKey: string;\n}> {\n\tget message(): string {\n\t\treturn `[Effuse] Service \"${this.serviceKey}\" not found.`;\n\t}\n}\n\nexport class DependencyNotFoundError extends Data.TaggedError(\n\t'DependencyNotFoundError'\n)<{\n\treadonly layerName: string;\n\treadonly dependencyName: string;\n}> {\n\tget message(): string {\n\t\treturn `[Effuse] Layer \"${this.dependencyName}\" not found as dependency of \"${this.layerName}\"`;\n\t}\n}\n\nexport class CircularDependencyError extends Data.TaggedError(\n\t'CircularDependencyError'\n)<{\n\treadonly layerName: string;\n\treadonly dependencyChain: readonly string[];\n}> {\n\tget message(): string {\n\t\treturn `[Effuse] Circular dependency detected: ${[...this.dependencyChain, this.layerName].join(' -> ')}`;\n\t}\n}\n\nexport class RouterNotConfiguredError extends Data.TaggedError(\n\t'RouterNotConfiguredError'\n)<{\n\treadonly _tag: 'RouterNotConfiguredError';\n}> {\n\toverride get message(): string {\n\t\treturn '[Effuse] Router not configured. Call setGlobalRouter().';\n\t}\n}\n\nexport type LayerError =\n\t| LayerNotFoundError\n\t| LayerRuntimeNotReadyError\n\t| LayerRuntimeNotInitializedError\n\t| ServiceNotFoundError\n\t| DependencyNotFoundError\n\t| CircularDependencyError\n\t| RouterNotConfiguredError;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Option, pipe, Predicate } from 'effect';\nimport type { Component } from '../render/node.js';\nimport type {\n\tLayerProps,\n\tAnyResolvedLayer,\n\tEffuseLayerRegistry,\n\tEffuseComponentRegistry,\n\tLayerPropsOf,\n} from './types.js';\nimport type { PropsRegistry } from './services/PropsService.js';\nimport type { LayerRegistry } from './services/RegistryService.js';\nimport {\n\tLayerNotFoundError,\n\tLayerRuntimeNotInitializedError,\n} from './errors.js';\n\nexport interface LayerContext<P extends LayerProps = LayerProps> {\n\treadonly name: string;\n\treadonly props: P;\n\treadonly provides?: Record<string, () => unknown>;\n\treadonly deps: Record<string, LayerContext>;\n\tgetService: (key: string) => unknown;\n\tgetComponent: (name: string) => unknown;\n}\n\nexport type TypedLayerContext<K extends keyof EffuseLayerRegistry> =\n\tLayerContext<LayerPropsOf<K>>;\n\ninterface GlobalLayerState {\n\tpropsRegistry: PropsRegistry | null;\n\tlayerRegistry: LayerRegistry | null;\n\tlayers: readonly AnyResolvedLayer[];\n}\n\nconst globalState: GlobalLayerState = {\n\tpropsRegistry: null,\n\tlayerRegistry: null,\n\tlayers: [],\n};\n\nexport const initGlobalLayerContext = (\n\tpropsRegistry: PropsRegistry,\n\tlayerRegistry: LayerRegistry,\n\tlayers: readonly AnyResolvedLayer[]\n): void => {\n\tglobalState.propsRegistry = propsRegistry;\n\tglobalState.layerRegistry = layerRegistry;\n\tglobalState.layers = layers;\n};\n\nexport const clearGlobalLayerContext = (): void => {\n\tglobalState.propsRegistry = null;\n\tglobalState.layerRegistry = null;\n\tglobalState.layers = [];\n};\n\nexport const isLayerRuntimeReady = (): boolean => {\n\treturn (\n\t\tPredicate.isNotNullable(globalState.propsRegistry) &&\n\t\tPredicate.isNotNullable(globalState.layerRegistry)\n\t);\n};\n\nexport function getLayerContext<K extends keyof EffuseLayerRegistry>(\n\tname: K\n): TypedLayerContext<K>;\nexport function getLayerContext(name: string): LayerContext;\nexport function getLayerContext(name: string): LayerContext {\n\tif (!globalState.layerRegistry || !globalState.propsRegistry) {\n\t\tthrow new LayerRuntimeNotInitializedError({ resource: `layer \"${name}\"` });\n\t}\n\n\tconst layer = globalState.layerRegistry.getLayer(name);\n\tif (!layer) {\n\t\tthrow new LayerNotFoundError({ layerName: name });\n\t}\n\n\tconst props = globalState.propsRegistry.get(name) ?? ({} as LayerProps);\n\n\tconst deps: Record<string, LayerContext> = {};\n\tif (layer.dependencies) {\n\t\tfor (const depName of layer.dependencies as readonly string[]) {\n\t\t\tObject.defineProperty(deps, depName, {\n\t\t\t\tget: () => getLayerContext(depName),\n\t\t\t\tenumerable: true,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn {\n\t\tname,\n\t\tprops,\n\t\t...(layer.provides && {\n\t\t\tprovides: layer.provides as Record<string, () => unknown>,\n\t\t}),\n\t\tdeps,\n\t\tgetService: (key: string) =>\n\t\t\tpipe(\n\t\t\t\tOption.fromNullable(globalState.layerRegistry),\n\t\t\t\tOption.map((registry) => registry.getService(key)),\n\t\t\t\tOption.getOrUndefined\n\t\t\t),\n\t\tgetComponent: (componentName: string) =>\n\t\t\tpipe(\n\t\t\t\tOption.fromNullable(globalState.layerRegistry),\n\t\t\t\tOption.flatMap((registry) =>\n\t\t\t\t\tOption.fromNullable(registry.getComponent(componentName))\n\t\t\t\t),\n\t\t\t\tOption.getOrUndefined\n\t\t\t),\n\t};\n}\n\nexport const getLayerService = (key: string): unknown => {\n\tif (!globalState.layerRegistry) {\n\t\tthrow new LayerRuntimeNotInitializedError({ resource: `service \"${key}\"` });\n\t}\n\treturn globalState.layerRegistry.getService(key);\n};\n\nexport function getLayerComponent<K extends keyof EffuseComponentRegistry>(\n\tname: K\n): EffuseComponentRegistry[K];\nexport function getLayerComponent(name: string): Component | undefined;\nexport function getLayerComponent(name: string): Component | undefined {\n\tif (!globalState.layerRegistry) {\n\t\treturn undefined;\n\t}\n\treturn globalState.layerRegistry.getComponent(name);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data, Effect, Predicate } from 'effect';\n\nexport class UnknownJSXTypeError extends Data.TaggedError(\n\t'UnknownJSXTypeError'\n)<{\n\treadonly type: unknown;\n}> {}\n\nexport class DuplicateKeysError extends Data.TaggedError('DuplicateKeysError')<{\n\treadonly component: string;\n}> {}\n\nexport class ResourcePendingError extends Data.TaggedError(\n\t'ResourcePendingError'\n)<{\n\treadonly message: string;\n}> {}\n\nexport class PropValidationError extends Data.TaggedError(\n\t'PropValidationError'\n)<{\n\treadonly cause: unknown;\n}> {}\n\nexport class ScriptContextError extends Data.TaggedError('ScriptContextError')<{\n\treadonly message: string;\n}> {}\n\nexport class StoreGetterNotConfiguredError extends Data.TaggedError(\n\t'StoreGetterNotConfiguredError'\n)<Record<string, never>> {}\n\nexport class CauseExtractionError extends Data.TaggedError(\n\t'CauseExtractionError'\n)<{\n\treadonly cause: unknown;\n}> {}\n\nexport class ResourceFetchError extends Data.TaggedError('ResourceFetchError')<{\n\treadonly message: string;\n\treadonly cause?: unknown;\n}> {}\n\nexport class LayerExecutionError extends Data.TaggedError(\n\t'LayerExecutionError'\n)<{\n\treadonly message: string;\n\treadonly cause?: unknown;\n}> {}\n\nexport const mapEffuseErrors = <A, E>(\n\teffect: Effect.Effect<A, E>\n): Effect.Effect<A, Error> =>\n\tEffect.catchAll(effect, (e) => {\n\t\tif (e instanceof Error && !('_tag' in e)) {\n\t\t\treturn Effect.fail(e);\n\t\t}\n\t\tif (Predicate.isObject(e) && Predicate.hasProperty(e, '_tag')) {\n\t\t\tconst tag = e._tag;\n\t\t\tconst msg = Predicate.hasProperty(e, 'message')\n\t\t\t\t? e.message\n\t\t\t\t: String(e);\n\t\t\treturn Effect.fail(new Error(`[Effuse] ${String(tag)}: ${String(msg)}`));\n\t\t}\n\t\treturn Effect.fail(new Error(String(e)));\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, pipe } from 'effect';\nimport type { Scope } from 'effect';\nimport type {\n\tSignal,\n\tReadonlySignal,\n\tWatchOptions,\n\tEffectOptions,\n\tEffectHandle,\n\tOnCleanup,\n} from '../types/index.js';\nimport type { Component } from '../render/node.js';\nimport { signal } from '../reactivity/index.js';\nimport { computed } from '../reactivity/computed.js';\nimport {\n\twatch as standaloneWatch,\n\twatchMultiple as standaloneWatchMultiple,\n} from '../effects/index.js';\nimport { watchEffect as standaloneEffect } from '../effects/effect.js';\nimport {\n\tcreateComponentLifecycleSync,\n\ttype ComponentLifecycle,\n} from './lifecycle.js';\nimport { useCallback, useMemo } from './hooks.js';\nimport {\n\tgetLayerContext,\n\tgetLayerComponent,\n\tgetLayerService,\n\tisLayerRuntimeReady,\n\ttype LayerContext,\n\ttype TypedLayerContext,\n} from '../layers/context.js';\nimport type {\n\tEffuseLayerRegistry,\n\tEffuseServiceRegistry,\n\tEffuseComponentRegistry,\n\tLayerPropsOf,\n\tLayerProvidesOf,\n} from '../layers/types.js';\nimport {\n\tLayerRuntimeNotReadyError,\n\tRouterNotConfiguredError,\n} from '../layers/errors.js';\nimport { StoreGetterNotConfiguredError, mapEffuseErrors } from '../errors.js';\n\nexport type ExposedValues = object;\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface EffuseRegistry {}\n\ntype RouterType = EffuseRegistry extends { router: infer R } ? R : unknown;\n\nexport interface ScriptContext<P> {\n\treadonly props: Readonly<P>;\n\n\texpose: (values: ExposedValues) => void;\n\n\tsignal: typeof signal;\n\n\tcomputed: <T>(getter: () => T) => ReadonlySignal<T>;\n\n\tstore: (name: string) => unknown;\n\n\trouter: RouterType;\n\n\tonMount: (callback: () => (() => void) | undefined) => void;\n\n\tonUnmount: (callback: () => void) => void;\n\n\tonBeforeMount: (callback: () => void) => void;\n\n\tonBeforeUnmount: (callback: () => void) => void;\n\n\twatch: <T>(\n\t\tsource: Signal<T> | (() => T),\n\t\tcallback: (\n\t\t\tnewValue: T,\n\t\t\toldValue: T | undefined,\n\t\t\tonCleanup: OnCleanup\n\t\t) => void,\n\t\toptions?: WatchOptions\n\t) => void;\n\n\twatchMultiple: <T extends readonly (Signal<unknown> | (() => unknown))[]>(\n\t\tsources: T,\n\t\tcallback: (\n\t\t\tnewValues: {\n\t\t\t\t[K in keyof T]: T[K] extends Signal<infer V>\n\t\t\t\t\t? V\n\t\t\t\t\t: T[K] extends () => infer V\n\t\t\t\t\t\t? V\n\t\t\t\t\t\t: never;\n\t\t\t},\n\t\t\toldValues: {\n\t\t\t\t[K in keyof T]: T[K] extends Signal<infer V>\n\t\t\t\t\t? V | undefined\n\t\t\t\t\t: T[K] extends () => infer V\n\t\t\t\t\t\t? V | undefined\n\t\t\t\t\t\t: never;\n\t\t\t},\n\t\t\tonCleanup: OnCleanup\n\t\t) => void,\n\t\toptions?: WatchOptions\n\t) => void;\n\n\twatchEffect: (\n\t\tfn: (onCleanup: OnCleanup) => void | Promise<void>,\n\t\toptions?: EffectOptions\n\t) => EffectHandle;\n\n\tuseCallback: typeof useCallback;\n\n\tuseMemo: typeof useMemo;\n\n\tuseLayer: <K extends keyof EffuseLayerRegistry>(\n\t\tname: K\n\t) => TypedLayerContext<K>;\n\n\tuseStore: {\n\t\t<K extends keyof EffuseServiceRegistry>(key: K): EffuseServiceRegistry[K];\n\t\t(key: string): unknown;\n\t};\n\n\tuseService: {\n\t\t<K extends keyof EffuseServiceRegistry>(key: K): EffuseServiceRegistry[K];\n\t\t(key: string): unknown;\n\t};\n\n\tuseLayerProps: <K extends keyof EffuseLayerRegistry>(\n\t\tname: K\n\t) => LayerPropsOf<K> | undefined;\n\n\t/**\n\t * @deprecated Use `useLayer(name).provides` for all layer providers,\n\t * or `useService(key)` for individual services. Will be removed in a future release.\n\t */\n\tuseLayerProvider: <K extends keyof EffuseLayerRegistry>(\n\t\tname: K\n\t) => LayerProvidesOf<K> | undefined;\n\n\tuseComponent: {\n\t\t<K extends keyof EffuseComponentRegistry>(\n\t\t\tname: K\n\t\t): EffuseComponentRegistry[K];\n\t\t(name: string): Component | undefined;\n\t};\n}\n\nexport interface ScriptState<E extends ExposedValues> {\n\texposed: E;\n\tlifecycle: ComponentLifecycle;\n\tscope: Scope.CloseableScope | null;\n}\n\nlet globalStoreGetter: ((name: string) => unknown) | null = null;\nlet globalRouter: unknown = null;\n\nexport const setGlobalStoreGetter = (\n\tgetter: (name: string) => unknown\n): void => {\n\tglobalStoreGetter = getter;\n};\n\nexport const setGlobalRouter = (router: unknown): void => {\n\tglobalRouter = router;\n};\n\nexport const createScriptContext = <P, E extends ExposedValues>(\n\tprops: P,\n\tstoreGetter?: (name: string) => unknown\n): { context: ScriptContext<P>; state: ScriptState<E> } => {\n\tconst lifecycle = createComponentLifecycleSync();\n\n\tconst state: ScriptState<E> = {\n\t\texposed: {} as E,\n\t\tlifecycle,\n\t\tscope: lifecycle.scope,\n\t};\n\n\tconst getStore = storeGetter ?? globalStoreGetter;\n\n\tconst context: ScriptContext<P> = {\n\t\tprops: Object.freeze({ ...props }),\n\n\t\texpose: (values: ExposedValues): void => {\n\t\t\tObject.assign(state.exposed, values);\n\t\t},\n\n\t\tsignal,\n\n\t\tcomputed,\n\n\t\tstore: (name: string): unknown => {\n\t\t\tif (isLayerRuntimeReady()) {\n\t\t\t\tconst layerService = getLayerService(name);\n\t\t\t\tif (layerService !== undefined) {\n\t\t\t\t\treturn layerService;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!getStore) {\n\t\t\t\tthrow new StoreGetterNotConfiguredError({});\n\t\t\t}\n\t\t\treturn getStore(name);\n\t\t},\n\n\t\trouter: (() => {\n\t\t\tif (!globalRouter) {\n\t\t\t\treturn new Proxy({} as object, {\n\t\t\t\t\tget: () => {\n\t\t\t\t\t\tthrow new RouterNotConfiguredError();\n\t\t\t\t\t},\n\t\t\t\t}) as RouterType;\n\t\t\t}\n\t\t\treturn globalRouter as RouterType;\n\t\t})(),\n\n\t\tonMount: (callback): void => {\n\t\t\tlifecycle.onMount(callback);\n\t\t},\n\n\t\tonUnmount: (callback): void => {\n\t\t\tlifecycle.onUnmount(callback);\n\t\t},\n\n\t\tonBeforeMount: (callback): void => {\n\t\t\tlifecycle.onBeforeMount(callback);\n\t\t},\n\n\t\tonBeforeUnmount: (callback): void => {\n\t\t\tlifecycle.onBeforeUnmount(callback);\n\t\t},\n\n\t\twatch: <T>(\n\t\t\tsource: Signal<T> | (() => T),\n\t\t\tcallback: (\n\t\t\t\tnewValue: T,\n\t\t\t\toldValue: T | undefined,\n\t\t\t\tonCleanup: OnCleanup\n\t\t\t) => void,\n\t\t\toptions?: WatchOptions\n\t\t): void => {\n\t\t\tconst handle = standaloneWatch(source, callback, options);\n\t\t\tlifecycle.onUnmount(() => handle.stop());\n\t\t},\n\n\t\twatchMultiple: (sources, callback, options): void => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any -- bridge ScriptContext types with WatchSource\n\t\t\tconst handle = standaloneWatchMultiple(\n\t\t\t\tsources as any,\n\t\t\t\tcallback as any,\n\t\t\t\toptions\n\t\t\t);\n\t\t\tlifecycle.onUnmount(() => handle.stop());\n\t\t},\n\n\t\twatchEffect: (\n\t\t\tfn: (onCleanup: OnCleanup) => void | Promise<void>,\n\t\t\toptions?: EffectOptions\n\t\t): EffectHandle => {\n\t\t\tconst handle = standaloneEffect(fn, options);\n\t\t\tlifecycle.onUnmount(() => handle.stop());\n\t\t\treturn handle;\n\t\t},\n\n\t\tuseCallback,\n\n\t\tuseMemo,\n\n\t\tuseLayer: (<K extends keyof EffuseLayerRegistry>(\n\t\t\tname: K\n\t\t): TypedLayerContext<K> => {\n\t\t\tif (!isLayerRuntimeReady()) {\n\t\t\t\tthrow new LayerRuntimeNotReadyError({ layerName: name as string });\n\t\t\t}\n\t\t\treturn getLayerContext(name as string) as TypedLayerContext<K>;\n\t\t}) as ScriptContext<P>['useLayer'],\n\n\t\tuseStore: (key: string): unknown => {\n\t\t\tif (!isLayerRuntimeReady()) {\n\t\t\t\tif (getStore) {\n\t\t\t\t\treturn getStore(key);\n\t\t\t\t}\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn getLayerService(key);\n\t\t},\n\n\t\tuseService: (key: string): unknown => {\n\t\t\tif (!isLayerRuntimeReady()) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn getLayerService(key);\n\t\t},\n\n\t\tuseLayerProps: (<K extends keyof EffuseLayerRegistry>(\n\t\t\tname: K\n\t\t): LayerPropsOf<K> | undefined => {\n\t\t\tif (!isLayerRuntimeReady()) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst layerContext = getLayerContext(name as string);\n\t\t\treturn layerContext.props as LayerPropsOf<K> | undefined;\n\t\t}) as ScriptContext<P>['useLayerProps'],\n\n\t\tuseLayerProvider: (<K extends keyof EffuseLayerRegistry>(\n\t\t\tname: K\n\t\t): LayerProvidesOf<K> | undefined => {\n\t\t\tif (!isLayerRuntimeReady()) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst layerContext = getLayerContext(name as string);\n\t\t\tif (!layerContext.provides) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tconst providers: Record<string, unknown> = {};\n\t\t\tfor (const key of Object.keys(layerContext.provides)) {\n\t\t\t\tproviders[key] = getLayerService(key);\n\t\t\t}\n\t\t\treturn providers as LayerProvidesOf<K>;\n\t\t}) as ScriptContext<P>['useLayerProvider'],\n\n\t\tuseComponent: (name: string): Component | undefined => {\n\t\t\tif (!isLayerRuntimeReady()) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\treturn getLayerComponent(name) as Component | undefined;\n\t\t},\n\t};\n\n\treturn { context, state };\n};\n\nexport const runMountCallbacks = <E extends ExposedValues>(\n\tstate: ScriptState<E>\n): void => {\n\tstate.lifecycle.runMount();\n};\n\nexport const runUnmountCallbacks = <E extends ExposedValues>(\n\tstate: ScriptState<E>\n): void => {\n\tEffect.runSync(pipe(state.lifecycle.runCleanup(), mapEffuseErrors));\n};\n\nexport type { LayerContext };\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport type {\n\tBlueprintDef,\n\tBlueprintContext,\n\tEffuseChild,\n\tComponent,\n} from '../render/node.js';\nimport type { ScriptContext, ExposedValues } from './script-context.js';\nimport { createScriptContext, runMountCallbacks } from './script-context.js';\nimport type { ComponentLifecycle } from './lifecycle.js';\nimport type { EffuseLayerRegistry, LayerPropsOf } from '../layers/types.js';\nimport type { LayerContext } from '../layers/context.js';\nimport { getLayerContext, isLayerRuntimeReady } from '../layers/context.js';\nimport { LayerRuntimeNotReadyError } from '../layers/errors.js';\n\ninterface PropsWithChildren {\n\treadonly children?: EffuseChild;\n}\n\nexport type TemplateArgs<E extends ExposedValues> = E & {\n\treadonly children?: EffuseChild;\n};\n\nexport interface LayerScriptContext<\n\tP,\n\tK extends keyof EffuseLayerRegistry,\n> extends ScriptContext<P> {\n\treadonly layerProps: LayerPropsOf<K>;\n\treadonly layer: LayerContext<LayerPropsOf<K>>;\n}\n\nexport interface DefineOptionsWithInferredProps<P, E extends ExposedValues> {\n\tname?: string;\n\tprops: P;\n\tlayer?: undefined;\n\tscript: (ctx: ScriptContext<P>) => E | undefined;\n\ttemplate: (exposed: TemplateArgs<E>, props: Readonly<P>) => EffuseChild;\n}\n\nexport interface DefineOptionsWithInferredPropsAndLayer<\n\tP,\n\tE extends ExposedValues,\n\tK extends keyof EffuseLayerRegistry,\n> {\n\tname?: string;\n\tprops: P;\n\tlayer: K;\n\tscript: (ctx: LayerScriptContext<P, K>) => E | undefined;\n\ttemplate: (exposed: TemplateArgs<E>, props: Readonly<P>) => EffuseChild;\n}\n\nexport interface DefineOptions<P, E extends ExposedValues> {\n\tname?: string;\n\tprops?: undefined;\n\tlayer?: undefined;\n\tscript: (ctx: ScriptContext<P>) => E | undefined;\n\ttemplate: (exposed: TemplateArgs<E>, props: Readonly<P>) => EffuseChild;\n}\n\nexport interface DefineOptionsWithLayer<\n\tP,\n\tE extends ExposedValues,\n\tK extends keyof EffuseLayerRegistry,\n> {\n\tname?: string;\n\tprops?: undefined;\n\tlayer: K;\n\tscript: (ctx: LayerScriptContext<P, K>) => E | undefined;\n\ttemplate: (exposed: TemplateArgs<E>, props: Readonly<P>) => EffuseChild;\n}\n\ninterface DefineState<E extends ExposedValues> {\n\texposed: E;\n\tlifecycle: ComponentLifecycle;\n\t_template: (exposed: TemplateArgs<E>, props: unknown) => EffuseChild;\n\t[key: string]: unknown;\n}\n\nexport function define<\n\tP = Record<string, unknown>,\n\tE extends ExposedValues = ExposedValues,\n>(\n\toptions: DefineOptions<P, E> | DefineOptionsWithInferredProps<P, E>\n): Component<P>;\n\nexport function define<\n\tK extends keyof EffuseLayerRegistry,\n\tP = Record<string, unknown>,\n\tE extends ExposedValues = ExposedValues,\n>(\n\toptions:\n\t\t| DefineOptionsWithLayer<P, E, K>\n\t\t| DefineOptionsWithInferredPropsAndLayer<P, E, K>\n): Component<P>;\n\nexport function define<\n\tP = Record<string, unknown>,\n\tE extends ExposedValues = ExposedValues,\n\tK extends keyof EffuseLayerRegistry = never,\n>(\n\toptions:\n\t\t| DefineOptions<P, E>\n\t\t| DefineOptionsWithLayer<P, E, K>\n\t\t| DefineOptionsWithInferredProps<P, E>\n\t\t| DefineOptionsWithInferredPropsAndLayer<P, E, K>\n): Component<P> {\n\tconst blueprint: BlueprintDef<P> = {\n\t\t_tag: 'Blueprint',\n\t\tname: (options as { name?: string }).name,\n\n\t\tstate: (props: P) => {\n\t\t\tconst { context, state } = createScriptContext<P, E>(props);\n\n\t\t\tlet scriptResult: E | undefined;\n\n\t\t\tconst layerName = (options as { layer?: string }).layer;\n\n\t\t\tif (Predicate.isString(layerName)) {\n\t\t\t\tif (isLayerRuntimeReady()) {\n\t\t\t\t\tconst layerContext = getLayerContext(layerName) as LayerContext<\n\t\t\t\t\t\tLayerPropsOf<K>\n\t\t\t\t\t>;\n\n\t\t\t\t\tconst extendedContext: LayerScriptContext<P, K> = {\n\t\t\t\t\t\t...context,\n\t\t\t\t\t\tlayerProps: layerContext.props,\n\t\t\t\t\t\tlayer: layerContext,\n\t\t\t\t\t};\n\n\t\t\t\t\tscriptResult = (\n\t\t\t\t\t\toptions as unknown as DefineOptionsWithLayer<P, E, K>\n\t\t\t\t\t).script(extendedContext);\n\t\t\t\t} else {\n\t\t\t\t\tthrow new LayerRuntimeNotReadyError({\n\t\t\t\t\t\tlayerName: layerName,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tscriptResult = (options as DefineOptions<P, E>).script(context);\n\t\t\t}\n\n\t\t\tif (Predicate.isNotNullable(scriptResult)) {\n\t\t\t\tObject.assign(state.exposed, scriptResult);\n\t\t\t}\n\n\t\t\tqueueMicrotask(() => {\n\t\t\t\trunMountCallbacks(state);\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\texposed: state.exposed,\n\t\t\t\tlifecycle: state.lifecycle,\n\t\t\t\t_template: options.template,\n\t\t\t} as DefineState<E> as unknown as Record<string, never>;\n\t\t},\n\n\t\tview: (ctx: BlueprintContext<P>) => {\n\t\t\tconst state = ctx.state as unknown as DefineState<E>;\n\n\t\t\tconst propsWithChildren = ctx.props as unknown as PropsWithChildren;\n\t\t\tconst exposedWithChildren: TemplateArgs<E> = {\n\t\t\t\t...state.exposed,\n\t\t\t\tchildren: propsWithChildren.children,\n\t\t\t};\n\n\t\t\treturn state._template(exposedWithChildren, ctx.props);\n\t\t},\n\t};\n\n\treturn blueprint as unknown as Component<P>;\n}\n\nexport type InferExposed<D> =\n\tD extends DefineOptions<unknown, infer E> ? E : never;\n\nexport type InferProps<D> =\n\tD extends DefineOptionsWithInferredProps<infer P, ExposedValues>\n\t\t? P\n\t\t: D extends DefineOptions<infer P, ExposedValues>\n\t\t\t? P\n\t\t\t: never;\n\nexport type LayerPropsFor<K extends keyof EffuseLayerRegistry> =\n\tLayerPropsOf<K>;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport {\n\tSchema,\n\tEffect,\n\tEither,\n\tExit,\n\tCause,\n\tParseResult,\n\tArray as Arr,\n\tOption,\n\tPredicate,\n\tpipe,\n} from 'effect';\nimport { Data } from 'effect';\nimport { CauseExtractionError } from '../errors.js';\n\nexport class PropsValidationError extends Data.TaggedError(\n\t'PropsValidationError'\n)<{\n\treadonly propName: string;\n\treadonly componentName: string | undefined;\n\treadonly message: string;\n\treadonly cause?: unknown;\n}> {\n\toverride toString(): string {\n\t\treturn `PropsValidationError: Props validation failed for \"${this.propName}\": ${this.message}`;\n\t}\n}\n\nexport interface PropDefinition<T> {\n\treadonly schema: Schema.Schema<T>;\n\treadonly required: boolean;\n\treadonly defaultValue?: T;\n\treadonly _tag: 'PropDefinition';\n}\n\nexport interface PropSchemaBuilder<T extends Record<string, unknown>> {\n\treadonly _schema: {\n\t\t[K in keyof T]: PropDefinition<T[K]>;\n\t};\n\treadonly schema: Schema.Schema<T>;\n\treadonly validate: (\n\t\tprops: unknown,\n\t\tcomponentName?: string\n\t) => Effect.Effect<T, PropsValidationError>;\n\treadonly validateSync: (props: unknown, componentName?: string) => T;\n}\n\nexport interface AnyPropSchemaBuilder {\n\treadonly validateSync: (props: unknown, componentName?: string) => unknown;\n}\n\ntype ExtractPropType<P> = P extends PropDefinition<infer T> ? T : never;\n\n// Build required prop definition\nfunction required<T>(schema: Schema.Schema<T>): PropDefinition<T>;\nfunction required<T extends Record<string, unknown>>(\n\tbuilder: PropSchemaBuilder<T>\n): PropDefinition<T>;\nfunction required<T>(\n\tschemaOrBuilder: Schema.Schema<T> | PropSchemaBuilder<Record<string, unknown>>\n): PropDefinition<T> {\n\tif (\n\t\tPredicate.isObject(schemaOrBuilder) &&\n\t\tPredicate.hasProperty(schemaOrBuilder, 'validate') &&\n\t\tPredicate.hasProperty(schemaOrBuilder, 'schema')\n\t) {\n\t\tconst builder = schemaOrBuilder;\n\t\treturn {\n\t\t\tschema: builder.schema as unknown as Schema.Schema<T>,\n\t\t\trequired: true,\n\t\t\t_tag: 'PropDefinition',\n\t\t};\n\t}\n\treturn {\n\t\tschema: schemaOrBuilder,\n\t\trequired: true,\n\t\t_tag: 'PropDefinition',\n\t};\n}\n\nfunction optional<T>(\n\tschema: Schema.Schema<T>,\n\tdefaultValue?: T\n): PropDefinition<T | undefined>;\nfunction optional<T extends Record<string, unknown>>(\n\tbuilder: PropSchemaBuilder<T>,\n\tdefaultValue?: T\n): PropDefinition<T | undefined>;\nfunction optional<T>(\n\tschemaOrBuilder:\n\t\t| Schema.Schema<T>\n\t\t| PropSchemaBuilder<Record<string, unknown>>,\n\tdefaultValue?: T\n): PropDefinition<T | undefined> {\n\tlet baseSchema: Schema.Schema<T>;\n\n\tif (\n\t\tPredicate.isObject(schemaOrBuilder) &&\n\t\tPredicate.hasProperty(schemaOrBuilder, 'validate') &&\n\t\tPredicate.hasProperty(schemaOrBuilder, 'schema')\n\t) {\n\t\tconst builder = schemaOrBuilder;\n\t\tbaseSchema = builder.schema as unknown as Schema.Schema<T>;\n\t} else {\n\t\tbaseSchema = schemaOrBuilder;\n\t}\n\n\tconst schema = (defaultValue !== undefined\n\t\t? Schema.optional(baseSchema).pipe(\n\t\t\t\tSchema.withDecodingDefault(\n\t\t\t\t\t() => defaultValue as unknown as Exclude<T, undefined>\n\t\t\t\t)\n\t\t\t)\n\t\t: Schema.optional(baseSchema)) as unknown as Schema.Schema<T | undefined>;\n\n\treturn {\n\t\tschema,\n\t\trequired: false,\n\t\tdefaultValue,\n\t\t_tag: 'PropDefinition',\n\t};\n}\n\n// Build property structure definition\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst struct = <const D extends Record<string, PropDefinition<any>>>(\n\tdefinitions: D\n): PropSchemaBuilder<{ [K in keyof D]: ExtractPropType<D[K]> }> => {\n\ttype ResultType = { [K in keyof D]: ExtractPropType<D[K]> };\n\n\tconst schemaFields: Record<string, Schema.Schema<unknown>> = {};\n\tfor (const [key, def] of Object.entries(definitions)) {\n\t\tschemaFields[key] = def.schema;\n\t}\n\tconst compositeSchema = Schema.Struct(schemaFields);\n\n\tconst validate = (\n\t\tprops: unknown,\n\t\tcomponentName?: string\n\t): Effect.Effect<ResultType, PropsValidationError> =>\n\t\tEffect.gen(function* () {\n\t\t\tif (!Predicate.isObject(props)) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew PropsValidationError({\n\t\t\t\t\t\tpropName: 'props',\n\t\t\t\t\t\tcomponentName,\n\t\t\t\t\t\tmessage: 'Props must be an object',\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst parseResult = Schema.decodeUnknownEither(compositeSchema)(props);\n\n\t\t\tif (Either.isLeft(parseResult)) {\n\t\t\t\tconst error = parseResult.left;\n\t\t\t\tconst issues = ParseResult.ArrayFormatter.formatErrorSync(error);\n\n\t\t\t\tconst { propName, message } = pipe(\n\t\t\t\t\tArr.head(issues),\n\t\t\t\t\tOption.match({\n\t\t\t\t\t\tonNone: () => ({\n\t\t\t\t\t\t\tpropName: 'unknown',\n\t\t\t\t\t\t\tmessage: 'Invalid prop value',\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tonSome: (issue) => ({\n\t\t\t\t\t\t\tpropName: issue.path.join('.'),\n\t\t\t\t\t\t\tmessage: issue.message,\n\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\t\t\t\t);\n\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tnew PropsValidationError({\n\t\t\t\t\t\tpropName,\n\t\t\t\t\t\tcomponentName,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn parseResult.right as ResultType;\n\t\t});\n\n\tconst validateSync = (props: unknown, componentName?: string): ResultType => {\n\t\tconst exit = Effect.runSyncExit(validate(props, componentName));\n\t\tif (Exit.isFailure(exit)) {\n\t\t\tconst cause = exit.cause;\n\t\t\tconst failure = Cause.failureOption(cause);\n\t\t\tif (failure._tag === 'Some') {\n\t\t\t\tthrow failure.value;\n\t\t\t}\n\t\t\tthrow new CauseExtractionError({ cause });\n\t\t}\n\t\treturn exit.value;\n\t};\n\n\treturn {\n\t\t_schema: definitions as {\n\t\t\t[K in keyof ResultType]: PropDefinition<ResultType[K]>;\n\t\t},\n\t\tschema: compositeSchema as unknown as Schema.Schema<ResultType>,\n\t\tvalidate,\n\t\tvalidateSync,\n\t};\n};\n\nexport const PropSchema = {\n\trequired,\n\toptional,\n\tstruct,\n\n\tString: Schema.String,\n\tNumber: Schema.Number,\n\tBoolean: Schema.Boolean,\n\tLiteral: Schema.Literal,\n\tUnion: Schema.Union,\n\tArray: Schema.Array,\n\tStruct: Schema.Struct,\n\tUnknown: Schema.Unknown,\n\tOptional: Schema.optional,\n};\n\nexport type PropSchemaInfer<S> =\n\tS extends PropSchemaBuilder<infer T> ? T : never;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, SubscriptionRef, Predicate } from 'effect';\nimport type {\n\tRefObject,\n\tRefObjectInternal,\n\tRefCallback,\n\tRefOptions,\n} from './types.js';\n\nexport function createRef<T extends Element = Element>(\n\t_options?: RefOptions\n): RefObject<T> {\n\tconst internalRef = Effect.runSync(SubscriptionRef.make<T | null>(null));\n\tconst subscribers = new Set<RefCallback<T>>();\n\n\tconst refObject: RefObjectInternal<T> = {\n\t\tget current(): T | null {\n\t\t\treturn Effect.runSync(SubscriptionRef.get(internalRef));\n\t\t},\n\n\t\tsubscribe(callback: RefCallback<T>): () => void {\n\t\t\tsubscribers.add(callback);\n\t\t\tcallback(this.current);\n\t\t\treturn () => {\n\t\t\t\tsubscribers.delete(callback);\n\t\t\t};\n\t\t},\n\n\t\t_setCurrent(el: T | null): void {\n\t\t\tEffect.runSync(SubscriptionRef.set(internalRef, el));\n\t\t\tfor (const cb of subscribers) {\n\t\t\t\tcb(el);\n\t\t\t}\n\t\t},\n\t};\n\n\treturn refObject as RefObject<T>;\n}\n\nexport function isRefObject<T extends Element = Element>(\n\tvalue: unknown\n): value is RefObject<T> {\n\treturn (\n\t\tPredicate.isObject(value) &&\n\t\tPredicate.hasProperty(value, 'current') &&\n\t\tPredicate.hasProperty(value, 'subscribe') &&\n\t\tPredicate.isFunction((value as RefObject<T>).subscribe)\n\t);\n}\n\nexport function isRefCallback<T extends Element = Element>(\n\tvalue: unknown\n): value is RefCallback<T> {\n\treturn Predicate.isFunction(value);\n}\n\nexport function applyRef<T extends Element>(\n\tref: RefCallback<T> | RefObject<T> | undefined | null,\n\telement: T | null\n): void {\n\tif (Predicate.isNullable(ref)) {\n\t\treturn;\n\t}\n\n\tif (isRefCallback(ref)) {\n\t\tref(element);\n\t} else if (isRefObject(ref)) {\n\t\tconst internal = ref as RefObjectInternal<T>;\n\t\tif (Predicate.isFunction(internal._setCurrent)) {\n\t\t\tinternal._setCurrent(element);\n\t\t}\n\t}\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Directive } from './types.js';\n\nconst directiveRegistry = new Map<string, Directive>();\n\nexport function registerDirective<T extends Element, P>(\n\tname: string,\n\tfn: Directive<T, P>\n): void {\n\tdirectiveRegistry.set(name, fn as Directive);\n}\n\nexport function getDirective(name: string): Directive | undefined {\n\treturn directiveRegistry.get(name);\n}\n\nexport function hasDirective(name: string): boolean {\n\treturn directiveRegistry.has(name);\n}\n\nexport function unregisterDirective(name: string): boolean {\n\treturn directiveRegistry.delete(name);\n}\n\nexport function applyDirective(\n\tname: string,\n\telement: Element,\n\taccessor: () => unknown\n): (() => void) | undefined {\n\tconst directive = directiveRegistry.get(name);\n\tif (directive) {\n\t\treturn directive(element, accessor);\n\t}\n\treturn undefined;\n}\n\nexport function getDirectiveNames(): string[] {\n\treturn Array.from(directiveRegistry.keys());\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Context, Effect, Layer, Predicate } from 'effect';\nimport type { Signal } from '../../reactivity/signal.js';\nimport { isSignal } from '../../reactivity/signal.js';\nimport { watchEffect } from '../../effects/effect.js';\nimport type { EffectHandle } from '../../types/index.js';\nimport { applyRef, isRefCallback, isRefObject } from '../../refs/ref.js';\nimport { applyDirective } from '../../refs/directive.js';\n\nexport interface PropBindingResult {\n\tcleanup: () => void;\n}\n\ntype FormValue = string | number | boolean;\ntype FormValueSource = Signal<FormValue> | (() => FormValue);\n\nexport interface PropServiceInterface {\n\treadonly bindProp: (\n\t\telement: Element,\n\t\tkey: string,\n\t\tvalue: unknown\n\t) => Effect.Effect<PropBindingResult>;\n\n\treadonly bindFormControl: (\n\t\telement: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,\n\t\tsource: FormValueSource\n\t) => Effect.Effect<PropBindingResult>;\n}\n\nexport class PropService extends Context.Tag('effuse/PropService')<\n\tPropService,\n\tPropServiceInterface\n>() {}\n\nconst setElementProp = (\n\telement: Element,\n\tkey: string,\n\tvalue: unknown\n): void => {\n\tif (key === 'class' || key === 'className') {\n\t\tif (Predicate.isString(value)) {\n\t\t\telement.className = value;\n\t\t} else if (value == null) {\n\t\t\telement.className = '';\n\t\t}\n\t\treturn;\n\t}\n\n\tif (key === 'style') {\n\t\tif (Predicate.isObject(value)) {\n\t\t\tconst el = element as HTMLElement;\n\t\t\tconst styles = value as Record<string, string | number>;\n\t\t\tfor (const [prop, val] of Object.entries(styles)) {\n\t\t\t\tconst cssProp = prop.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);\n\t\t\t\tel.style.setProperty(cssProp, String(val));\n\t\t\t}\n\t\t}\n\t\treturn;\n\t}\n\n\tif (key === 'value') {\n\t\tconst inputEl = element as HTMLInputElement | HTMLTextAreaElement;\n\t\tlet stringValue = '';\n\t\tif (Predicate.isString(value)) {\n\t\t\tstringValue = value;\n\t\t} else if (Predicate.isNumber(value)) {\n\t\t\tstringValue = String(value);\n\t\t}\n\t\tif (inputEl.value !== stringValue) {\n\t\t\tinputEl.value = stringValue;\n\t\t}\n\t\treturn;\n\t}\n\n\tif (key === 'checked') {\n\t\t(element as HTMLInputElement).checked = Boolean(value);\n\t\treturn;\n\t}\n\n\tif (Predicate.isBoolean(value)) {\n\t\tif (value) {\n\t\t\telement.setAttribute(key, '');\n\t\t} else {\n\t\t\telement.removeAttribute(key);\n\t\t}\n\t\treturn;\n\t}\n\n\tif (value == null) {\n\t\telement.removeAttribute(key);\n\t} else if (Predicate.isString(value) || Predicate.isNumber(value)) {\n\t\telement.setAttribute(key, String(value));\n\t}\n};\n\nconst getValue = (source: FormValueSource): FormValue => {\n\tif (isSignal(source)) {\n\t\treturn (source as Signal<FormValue>).value;\n\t}\n\treturn (source as () => FormValue)();\n};\n\nconst bindFormControlImpl = (\n\telement: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,\n\tsource: FormValueSource\n): PropBindingResult => {\n\tconst cleanups: (() => void)[] = [];\n\tconst tagName = element.tagName.toLowerCase();\n\tconst inputEl = element as HTMLInputElement;\n\tconst inputType = inputEl.type ? inputEl.type.toLowerCase() : '';\n\n\tif (inputType === 'checkbox' || inputType === 'radio') {\n\t\tconst handle: EffectHandle = watchEffect(() => {\n\t\t\tconst newVal = Boolean(getValue(source));\n\t\t\tif (inputEl.checked !== newVal) {\n\t\t\t\tinputEl.checked = newVal;\n\t\t\t}\n\t\t});\n\t\tcleanups.push(handle.stop);\n\t} else if (tagName === 'select') {\n\t\tconst handle: EffectHandle = watchEffect(() => {\n\t\t\tconst newVal = String(getValue(source));\n\t\t\tif (element.value !== newVal) {\n\t\t\t\telement.value = newVal;\n\t\t\t}\n\t\t});\n\t\tcleanups.push(handle.stop);\n\t} else {\n\t\tconst textEl = element as HTMLInputElement | HTMLTextAreaElement;\n\t\tconst handle: EffectHandle = watchEffect(() => {\n\t\t\tconst newVal = String(getValue(source));\n\t\t\tif (textEl.value !== newVal) {\n\t\t\t\ttextEl.value = newVal;\n\t\t\t}\n\t\t});\n\t\tcleanups.push(handle.stop);\n\t}\n\n\treturn {\n\t\tcleanup: () => {\n\t\t\tfor (const fn of cleanups) {\n\t\t\t\tfn();\n\t\t\t}\n\t\t},\n\t};\n};\n\nconst isEventHandler = (key: string): boolean => {\n\tif (key.length <= 2 || !key.startsWith('on')) return false;\n\tconst thirdChar = key[2];\n\treturn thirdChar !== undefined && thirdChar === thirdChar.toUpperCase();\n};\n\nconst isCompilerGetter = (value: unknown): value is () => unknown => {\n\treturn Predicate.isFunction(value) && value.length === 0;\n};\n\nexport const PropServiceLive = Layer.succeed(PropService, {\n\tbindProp: (element: Element, key: string, value: unknown) =>\n\t\tEffect.sync(() => {\n\t\t\tif (key === 'ref') {\n\t\t\t\tif (isRefCallback(value) || isRefObject(value)) {\n\t\t\t\t\tapplyRef(value, element);\n\t\t\t\t} else if (Predicate.isFunction(value)) {\n\t\t\t\t\t(value as (el: Element) => void)(element);\n\t\t\t\t}\n\t\t\t\treturn { cleanup: () => {} };\n\t\t\t}\n\t\t\tif (key.startsWith('use:')) {\n\t\t\t\tconst directiveName = key.slice(4);\n\t\t\t\tconst cleanup = applyDirective(directiveName, element, () => value);\n\t\t\t\treturn { cleanup: cleanup ?? (() => {}) };\n\t\t\t}\n\n\t\t\tif (isEventHandler(key)) {\n\t\t\t\tif (Predicate.isFunction(value)) {\n\t\t\t\t\tconst handler = value as EventListener;\n\t\t\t\t\tconst eventName = key.slice(2).toLowerCase();\n\t\t\t\t\telement.addEventListener(eventName, handler);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\telement.removeEventListener(eventName, handler);\n\t\t\t\t\t\t},\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t/*  */\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isSignal(value)) {\n\t\t\t\tconst sig = value;\n\t\t\t\tconst handle: EffectHandle = watchEffect(() => {\n\t\t\t\t\tsetElementProp(element, key, sig.value);\n\t\t\t\t});\n\t\t\t\treturn { cleanup: handle.stop };\n\t\t\t}\n\n\t\t\tif (isCompilerGetter(value)) {\n\t\t\t\tconst getter = value;\n\t\t\t\tconst handle: EffectHandle = watchEffect(() => {\n\t\t\t\t\tconst computedValue = getter();\n\t\t\t\t\tsetElementProp(element, key, computedValue);\n\t\t\t\t});\n\t\t\t\treturn { cleanup: handle.stop };\n\t\t\t}\n\n\t\t\tsetElementProp(element, key, value);\n\t\t\treturn { cleanup: () => {} };\n\t\t}),\n\n\tbindFormControl: (\n\t\telement: HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement,\n\t\tsource: FormValueSource\n\t) => Effect.sync(() => bindFormControlImpl(element, source)),\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Context, Effect, Layer } from 'effect';\n\nexport interface EventBindingResult {\n\tcleanup: () => void;\n}\n\nexport interface EventServiceInterface {\n\treadonly bindEvent: (\n\t\telement: Element,\n\t\teventName: string,\n\t\thandler: EventListener,\n\t\toptions?: AddEventListenerOptions\n\t) => Effect.Effect<EventBindingResult>;\n}\n\nexport class EventService extends Context.Tag('effuse/EventService')<\n\tEventService,\n\tEventServiceInterface\n>() {}\n\nexport const EventServiceLive = Layer.succeed(EventService, {\n\tbindEvent: (\n\t\telement: Element,\n\t\teventName: string,\n\t\thandler: EventListener,\n\t\toptions?: AddEventListenerOptions\n\t) =>\n\t\tEffect.sync(() => {\n\t\t\telement.addEventListener(eventName, handler, options);\n\t\t\treturn {\n\t\t\t\tcleanup: () => {\n\t\t\t\t\telement.removeEventListener(eventName, handler, options);\n\t\t\t\t},\n\t\t\t};\n\t\t}),\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Context, Effect, Layer, pipe, Predicate } from 'effect';\nimport type { Signal } from '../../reactivity/signal.js';\nimport { untrack, isSignal } from '../../reactivity/index.js';\nimport { watchEffect } from '../../effects/effect.js';\nimport type { EffectHandle } from '../../types/index.js';\nimport { type EffuseChild, type EffuseNode } from '../../render/node.js';\nimport {\n\tPropService,\n\tPropServiceLive,\n\ttype PropBindingResult,\n} from './props.js';\nimport {\n\tEventService,\n\tEventServiceLive,\n\ttype EventBindingResult,\n} from './events.js';\nimport { instantiateBlueprint } from '../../blueprint/blueprint.js';\nimport type { BlueprintContext } from '../../schema/node.js';\nimport { isSuspendToken } from '../../suspense/Suspense.js';\nimport { isEffuseNode } from '../../render/index.js';\nimport { mapEffuseErrors } from '../../errors.js';\n\nexport interface MountedNode {\n\tnodes: Node[];\n\tcleanup: () => void;\n}\n\nexport interface MountServiceInterface {\n\treadonly mount: (\n\t\tchild: EffuseChild,\n\t\tcontainer: Element\n\t) => Effect.Effect<MountedNode, never, PropService | EventService>;\n\n\treadonly unmount: (mounted: MountedNode) => Effect.Effect<void>;\n}\n\nexport class MountService extends Context.Tag('effuse/MountService')<\n\tMountService,\n\tMountServiceInterface\n>() { }\n\ntype CleanupFn = () => void;\n\nconst mountChild = (\n\tchild: EffuseChild,\n\tcleanups: CleanupFn[]\n): Effect.Effect<Node[], never, PropService | EventService> => {\n\tif (child == null) {\n\t\treturn Effect.succeed([]);\n\t}\n\n\tif (Predicate.isString(child) || Predicate.isNumber(child)) {\n\t\tconst textNode = document.createTextNode(String(child));\n\t\treturn Effect.succeed([textNode]);\n\t}\n\n\tif (Predicate.isBoolean(child)) {\n\t\treturn Effect.succeed([]);\n\t}\n\n\tif (Predicate.isFunction(child)) {\n\t\tconst fn = child as () => unknown;\n\t\tconst anchor = document.createComment('fn');\n\t\tlet currentNodes: Node[] = [];\n\t\tconst fnCleanups: CleanupFn[] = [];\n\t\tlet effectHandle: EffectHandle | null = null;\n\n\t\tconst runEffect = () => {\n\t\t\teffectHandle = watchEffect(() => {\n\t\t\t\tconst value = fn();\n\n\t\t\t\tfor (const node of currentNodes) {\n\t\t\t\t\tif (Predicate.isNotNullable(node.parentNode)) {\n\t\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const cleanup of fnCleanups) {\n\t\t\t\t\tcleanup();\n\t\t\t\t}\n\t\t\t\tfnCleanups.length = 0;\n\n\t\t\t\tif (value == null) {\n\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (Predicate.isString(value) || Predicate.isNumber(value)) {\n\t\t\t\t\tconst textNode = document.createTextNode(String(value));\n\t\t\t\t\tif (Predicate.isNotNullable(anchor.parentNode)) {\n\t\t\t\t\t\tanchor.parentNode.insertBefore(textNode, anchor.nextSibling);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentNodes = [textNode];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (Predicate.isBoolean(value)) {\n\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tuntrack(() => {\n\t\t\t\t\tconst childCleanups: CleanupFn[] = [];\n\n\t\t\t\t\tlet mountResult: Node[];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmountResult = Effect.runSync(\n\t\t\t\t\t\t\tpipe(\n\t\t\t\t\t\t\t\tmountChild(value as EffuseChild, childCleanups),\n\t\t\t\t\t\t\t\tEffect.provide(PropServiceLive),\n\t\t\t\t\t\t\t\tEffect.provide(EventServiceLive),\n\t\t\t\t\t\t\t\tmapEffuseErrors\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst isSuspendError = (e: unknown): boolean => {\n\t\t\t\t\t\t\tif (isSuspendToken(e)) return true;\n\t\t\t\t\t\t\tif (Predicate.isObject(e)) {\n\t\t\t\t\t\t\t\tconst anyErr = e as Record<string, unknown>;\n\t\t\t\t\t\t\t\tif (isSuspendToken(anyErr.cause)) return true;\n\t\t\t\t\t\t\t\tif (isSuspendToken(anyErr.error)) return true;\n\t\t\t\t\t\t\t\tif (isSuspendToken(anyErr.defect)) return true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (isSuspendError(err)) {\n\t\t\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst insertPoint: Node | null = anchor.nextSibling;\n\t\t\t\t\tfor (const node of mountResult) {\n\t\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t\t\t\tanchor.parentNode.insertBefore(node, insertPoint);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcurrentNodes = mountResult;\n\t\t\t\t\tfnCleanups.push(...childCleanups);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tqueueMicrotask(runEffect);\n\n\t\tcleanups.push(() => {\n\t\t\tif (Predicate.isNotNullable(effectHandle)) {\n\t\t\t\teffectHandle.stop();\n\t\t\t}\n\t\t\tfor (const cleanup of fnCleanups) {\n\t\t\t\tcleanup();\n\t\t\t}\n\t\t});\n\t\treturn Effect.succeed([anchor]);\n\t}\n\n\tif (isSignal(child)) {\n\t\tconst sig = child as Signal<EffuseChild>;\n\t\tconst anchor = document.createComment('signal');\n\t\tlet currentNodes: Node[] = [];\n\t\tconst signalCleanups: CleanupFn[] = [];\n\t\tlet effectHandle: EffectHandle | null = null;\n\n\t\tconst runEffect = () => {\n\t\t\teffectHandle = watchEffect(() => {\n\t\t\t\tconst value = sig.value;\n\n\t\t\t\tfor (const node of currentNodes) {\n\t\t\t\t\tif (Predicate.isNotNullable(node.parentNode)) {\n\t\t\t\t\t\tnode.parentNode.removeChild(node);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const cleanup of signalCleanups) {\n\t\t\t\t\tcleanup();\n\t\t\t\t}\n\t\t\t\tsignalCleanups.length = 0;\n\n\t\t\t\tif (value == null) {\n\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (Predicate.isString(value) || Predicate.isNumber(value)) {\n\t\t\t\t\tconst textNode = document.createTextNode(String(value));\n\t\t\t\t\tif (Predicate.isNotNullable(anchor.parentNode)) {\n\t\t\t\t\t\tanchor.parentNode.insertBefore(textNode, anchor.nextSibling);\n\t\t\t\t\t}\n\t\t\t\t\tcurrentNodes = [textNode];\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tuntrack(() => {\n\t\t\t\t\tconst childCleanups: CleanupFn[] = [];\n\n\t\t\t\t\tlet mountResult: Node[];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tmountResult = Effect.runSync(\n\t\t\t\t\t\t\tpipe(\n\t\t\t\t\t\t\t\tmountChild(value, childCleanups),\n\t\t\t\t\t\t\t\tEffect.provide(PropServiceLive),\n\t\t\t\t\t\t\t\tEffect.provide(EventServiceLive),\n\t\t\t\t\t\t\t\tmapEffuseErrors\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst isSuspendError = (e: unknown): boolean => {\n\t\t\t\t\t\t\tif (isSuspendToken(e)) return true;\n\t\t\t\t\t\t\tif (Predicate.isObject(e)) {\n\t\t\t\t\t\t\t\tconst anyErr = e as Record<string, unknown>;\n\t\t\t\t\t\t\t\tif (isSuspendToken(anyErr.cause)) return true;\n\t\t\t\t\t\t\t\tif (isSuspendToken(anyErr.error)) return true;\n\t\t\t\t\t\t\t\tif (isSuspendToken(anyErr.defect)) return true;\n\t\t\t\t\t\t\t\tconst msg = Predicate.isString(anyErr.message)\n\t\t\t\t\t\t\t\t\t? anyErr.message\n\t\t\t\t\t\t\t\t\t: '';\n\t\t\t\t\t\t\t\tif (msg.includes('\"resourceId\"') && msg.includes('\"promise\"')) {\n\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif (isSuspendError(err)) {\n\t\t\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthrow err;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst insertPoint: Node | null = anchor.nextSibling;\n\t\t\t\t\tfor (const node of mountResult) {\n\t\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t\t\t\tanchor.parentNode.insertBefore(node, insertPoint);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcurrentNodes = mountResult;\n\t\t\t\t\tsignalCleanups.push(...childCleanups);\n\t\t\t\t});\n\t\t\t});\n\t\t};\n\n\t\tqueueMicrotask(runEffect);\n\n\t\tcleanups.push(() => {\n\t\t\tif (Predicate.isNotNullable(effectHandle)) {\n\t\t\t\teffectHandle.stop();\n\t\t\t}\n\t\t\tfor (const cleanup of signalCleanups) {\n\t\t\t\tcleanup();\n\t\t\t}\n\t\t});\n\t\treturn Effect.succeed([anchor]);\n\t}\n\n\tif (Array.isArray(child)) {\n\t\treturn pipe(\n\t\t\tEffect.all(child.map((c: EffuseChild) => mountChild(c, cleanups))),\n\t\t\tEffect.map((results) => results.flat())\n\t\t);\n\t}\n\n\tif (isEffuseNode(child)) {\n\t\treturn mountNode(child, cleanups);\n\t}\n\n\treturn Effect.succeed([]);\n};\n\nconst mountNode = (\n\tnode: EffuseNode,\n\tcleanups: CleanupFn[]\n): Effect.Effect<Node[], never, PropService | EventService> => {\n\tswitch (node._tag) {\n\t\tcase 'Text': {\n\t\t\tconst domNode = document.createTextNode(node.text);\n\t\t\treturn Effect.succeed([domNode]);\n\t\t}\n\t\tcase 'Element': {\n\t\t\tconst tag = node.tag;\n\t\t\tconst props = node.props;\n\t\t\tconst children = node.children;\n\n\t\t\treturn pipe(\n\t\t\t\tEffect.Do,\n\t\t\t\tEffect.bind('propService', () => PropService),\n\t\t\t\tEffect.bind('eventService', () => EventService),\n\t\t\t\tEffect.flatMap(({ propService, eventService }) => {\n\t\t\t\t\tconst element = document.createElement(tag);\n\t\t\t\t\tconst bindingCleanups: CleanupFn[] = [];\n\n\t\t\t\t\tconst propEffects: Effect.Effect<PropBindingResult>[] = [];\n\t\t\t\t\tconst eventEffects: Effect.Effect<EventBindingResult>[] = [];\n\n\t\t\t\t\tif (props) {\n\t\t\t\t\t\tfor (const [key, value] of Object.entries(props)) {\n\t\t\t\t\t\t\tif (key === 'children' || key === 'key') continue;\n\n\t\t\t\t\t\t\tif (key.startsWith('on') && Predicate.isFunction(value)) {\n\t\t\t\t\t\t\t\tconst eventName = key.slice(2).toLowerCase();\n\t\t\t\t\t\t\t\teventEffects.push(\n\t\t\t\t\t\t\t\t\teventService.bindEvent(\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t\teventName,\n\t\t\t\t\t\t\t\t\t\tvalue as EventListener\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(key === 'value' || key === 'checked') &&\n\t\t\t\t\t\t\t\tPredicate.isFunction(value) &&\n\t\t\t\t\t\t\t\t(element instanceof HTMLInputElement ||\n\t\t\t\t\t\t\t\t\telement instanceof HTMLTextAreaElement ||\n\t\t\t\t\t\t\t\t\telement instanceof HTMLSelectElement)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst result = Effect.runSync(\n\t\t\t\t\t\t\t\t\tpropService.bindFormControl(\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t\tvalue as () => string | number | boolean\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tbindingCleanups.push(result.cleanup);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(key === 'value' || key === 'checked') &&\n\t\t\t\t\t\t\t\tisSignal(value) &&\n\t\t\t\t\t\t\t\t(element instanceof HTMLInputElement ||\n\t\t\t\t\t\t\t\t\telement instanceof HTMLTextAreaElement ||\n\t\t\t\t\t\t\t\t\telement instanceof HTMLSelectElement)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tconst result = Effect.runSync(\n\t\t\t\t\t\t\t\t\tpropService.bindFormControl(\n\t\t\t\t\t\t\t\t\t\telement,\n\t\t\t\t\t\t\t\t\t\tvalue as Signal<string | number | boolean>\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tbindingCleanups.push(result.cleanup);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tpropEffects.push(propService.bindProp(element, key, value));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const propEffect of propEffects) {\n\t\t\t\t\t\tconst result = Effect.runSync(pipe(propEffect, mapEffuseErrors));\n\t\t\t\t\t\tbindingCleanups.push(result.cleanup);\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (const eventEffect of eventEffects) {\n\t\t\t\t\t\tconst result = Effect.runSync(pipe(eventEffect, mapEffuseErrors));\n\t\t\t\t\t\tbindingCleanups.push(result.cleanup);\n\t\t\t\t\t}\n\n\t\t\t\t\tcleanups.push(() => {\n\t\t\t\t\t\tfor (const fn of bindingCleanups) {\n\t\t\t\t\t\t\tfn();\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\treturn pipe(\n\t\t\t\t\t\tEffect.all(children.map((c) => mountChild(c, cleanups))),\n\t\t\t\t\t\tEffect.map((results) => {\n\t\t\t\t\t\t\tfor (const childNode of results.flat()) {\n\t\t\t\t\t\t\t\telement.appendChild(childNode);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn [element];\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t\tcase 'Fragment': {\n\t\t\treturn pipe(\n\t\t\t\tEffect.all(node.children.map((c) => mountChild(c, cleanups))),\n\t\t\t\tEffect.map((results) => results.flat())\n\t\t\t);\n\t\t}\n\t\tcase 'List': {\n\t\t\tconst anchor = document.createComment('list');\n\t\t\tlet currentNodes: Node[] = [];\n\t\t\tconst listCleanups: CleanupFn[] = [];\n\t\t\tlet effectHandle: { stop: () => void } | null = null;\n\n\t\t\tconst runEffect = () => {\n\t\t\t\teffectHandle = watchEffect(() => {\n\t\t\t\t\tconst children = node.children;\n\n\t\t\t\t\tfor (const n of currentNodes) {\n\t\t\t\t\t\tif (Predicate.isNotNullable(n.parentNode)) {\n\t\t\t\t\t\t\tn.parentNode.removeChild(n);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tfor (const cleanup of listCleanups) {\n\t\t\t\t\t\tcleanup();\n\t\t\t\t\t}\n\t\t\t\t\tlistCleanups.length = 0;\n\n\t\t\t\t\tif (children.length === 0) {\n\t\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst childCleanups: CleanupFn[] = [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst mountResult = Effect.runSync(\n\t\t\t\t\t\t\tpipe(\n\t\t\t\t\t\t\t\tEffect.all(children.map((c) => mountChild(c, childCleanups))),\n\t\t\t\t\t\t\t\tEffect.map((results) => results.flat()),\n\t\t\t\t\t\t\t\tEffect.provide(PropServiceLive),\n\t\t\t\t\t\t\t\tEffect.provide(EventServiceLive),\n\t\t\t\t\t\t\t\tmapEffuseErrors\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst insertPoint: Node | null = anchor.nextSibling;\n\t\t\t\t\t\tfor (const n of mountResult) {\n\t\t\t\t\t\t\tif (anchor.parentNode) {\n\t\t\t\t\t\t\t\tanchor.parentNode.insertBefore(n, insertPoint);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentNodes = mountResult;\n\t\t\t\t\t\tlistCleanups.push(...childCleanups);\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// Error during list mounting - silently recover\n\t\t\t\t\t\tcurrentNodes = [];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tqueueMicrotask(runEffect);\n\n\t\t\tcleanups.push(() => {\n\t\t\t\tif (Predicate.isNotNullable(effectHandle)) {\n\t\t\t\t\teffectHandle.stop();\n\t\t\t\t}\n\t\t\t\tfor (const cleanup of listCleanups) {\n\t\t\t\t\tcleanup();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn Effect.succeed([anchor]);\n\t\t}\n\t\tcase 'Blueprint': {\n\t\t\tconst context = instantiateBlueprint(\n\t\t\t\tnode.blueprint,\n\t\t\t\tnode.props,\n\t\t\t\tnode.portals ?? {}\n\t\t\t);\n\n\t\t\tconst stateWithLifecycle = context.state as unknown as {\n\t\t\t\tlifecycle?: { runCleanup: () => Effect.Effect<void> };\n\t\t\t};\n\n\t\t\tif (stateWithLifecycle.lifecycle) {\n\t\t\t\tconst lifecycle = stateWithLifecycle.lifecycle;\n\t\t\t\t// Track component unmount for resource cleanup\n\t\t\t\tcleanups.push(() => {\n\t\t\t\t\tEffect.runSync(lifecycle.runCleanup());\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst childView = node.blueprint.view(context as BlueprintContext);\n\t\t\treturn mountChild(childView, cleanups);\n\t\t}\n\t\tdefault: {\n\t\t\tlet tag: unknown = 'unknown';\n\t\t\tif (Predicate.isObject(node)) {\n\t\t\t\tconst n = node as Record<string, unknown>;\n\t\t\t\ttag = n._tag || n.type || 'unknown';\n\t\t\t}\n\t\t\tthrow new Error(\n\t\t\t\t`Paint failed: Unknown node tag \"${Predicate.isString(tag) ? tag : 'unknown'}\"`\n\t\t\t);\n\t\t}\n\t}\n};\n\nexport const MountServiceLive = Layer.succeed(MountService, {\n\tmount: (child: EffuseChild, container: Element) =>\n\t\tpipe(\n\t\t\tEffect.sync(() => {\n\t\t\t\tconst cleanups: CleanupFn[] = [];\n\t\t\t\treturn { cleanups };\n\t\t\t}),\n\t\t\tEffect.flatMap(({ cleanups }) =>\n\t\t\t\tpipe(\n\t\t\t\t\tmountChild(child, cleanups),\n\t\t\t\t\tEffect.map((nodes) => {\n\t\t\t\t\t\tfor (const nodeItem of nodes) {\n\t\t\t\t\t\t\tcontainer.appendChild(nodeItem);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tnodes,\n\t\t\t\t\t\t\tcleanup: () => {\n\t\t\t\t\t\t\t\tfor (const fn of cleanups) {\n\t\t\t\t\t\t\t\t\tfn();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor (const nodeItem of nodes) {\n\t\t\t\t\t\t\t\t\tif (Predicate.isNotNullable(nodeItem.parentNode)) {\n\t\t\t\t\t\t\t\t\t\tnodeItem.parentNode.removeChild(nodeItem);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t),\n\n\tunmount: (mounted: MountedNode) =>\n\t\tEffect.sync(() => {\n\t\t\tmounted.cleanup();\n\t\t}),\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Layer } from 'effect';\nimport { PropServiceLive } from './props.js';\nimport { EventServiceLive } from './events.js';\nimport { MountServiceLive } from './mount.js';\n\nexport const DOMRendererLive = Layer.mergeAll(\n\tPropServiceLive,\n\tEventServiceLive,\n\tMountServiceLive\n);\n\nexport {\n\tPropService,\n\tPropServiceLive,\n\ttype PropBindingResult,\n} from './props.js';\nexport {\n\tEventService,\n\tEventServiceLive,\n\ttype EventBindingResult,\n} from './events.js';\nexport { MountService, MountServiceLive, type MountedNode } from './mount.js';\n","import { Data, Predicate } from 'effect';\nimport type { Signal } from '../types/index.js';\nimport type { ElementProps, Portals, PortalFn } from '../schema/index.js';\nimport { EFFUSE_NODE, NodeType } from '../constants.js';\n\nexport type { ElementProps, Portals, PortalFn };\n\nexport { EFFUSE_NODE, NodeType };\n\nexport type EffuseChild =\n\t| EffuseNode\n\t| string\n\t| number\n\t| boolean\n\t| null\n\t| undefined\n\t| Signal<EffuseChild>\n\t| (() => EffuseChild)\n\t| EffuseChild[];\n\nexport interface BlueprintContext<P = Record<string, unknown>> {\n\treadonly props: P;\n\treadonly state: Record<string, unknown>;\n\treadonly portals: Portals;\n}\n\nexport interface BlueprintDef<P = Record<string, unknown>> {\n\treadonly _tag: 'Blueprint';\n\treadonly name?: string | undefined;\n\treadonly props?: P | undefined;\n\tstate?(props: P): Record<string, unknown>;\n\tview(context: BlueprintContext<P>): EffuseChild;\n\terror?(error: Error): EffuseChild;\n\tloading?(): EffuseChild;\n}\n\nexport interface Component<\n\tP = Record<string, unknown>,\n> extends BlueprintDef<P> {\n\t(props?: P): EffuseNode;\n}\n\nexport type EffuseNode = Data.TaggedEnum<{\n\tElement: {\n\t\treadonly [EFFUSE_NODE]: true;\n\t\treadonly tag: string;\n\t\treadonly props: ElementProps | null;\n\t\treadonly children: EffuseChild[];\n\t\treadonly key?: string | number | undefined;\n\t};\n\tText: {\n\t\treadonly [EFFUSE_NODE]: true;\n\t\treadonly text: string;\n\t\treadonly key?: string | number | undefined;\n\t};\n\tFragment: {\n\t\treadonly [EFFUSE_NODE]: true;\n\t\treadonly children: EffuseChild[];\n\t\treadonly key?: string | number | undefined;\n\t};\n\tList: {\n\t\treadonly [EFFUSE_NODE]: true;\n\t\treadonly children: EffuseChild[];\n\t\treadonly key?: string | number | undefined;\n\t};\n\tBlueprint: {\n\t\treadonly [EFFUSE_NODE]: true;\n\t\treadonly blueprint: BlueprintDef;\n\t\treadonly props: Record<string, unknown>;\n\t\treadonly portals: Portals | null;\n\t\treadonly key?: string | number | undefined;\n\t};\n}>;\n\nconst { $match, Element, Text, Fragment, List, Blueprint } =\n\tData.taggedEnum<EffuseNode>();\n\nexport const isEffuseNode = (u: unknown): u is EffuseNode =>\n\tPredicate.isObject(u) && Predicate.hasProperty(u, EFFUSE_NODE);\n\nexport type ElementNodeInput = Omit<ElementNode, '_tag'>;\nexport type TextNodeInput = Omit<TextNode, '_tag'>;\nexport type FragmentNodeInput = Omit<FragmentNode, '_tag'>;\nexport type ListNodeInput = Omit<ListNode, '_tag'>;\nexport type BlueprintNodeInput = Omit<BlueprintNode, '_tag'>;\n\nexport const CreateElementNode = (args: ElementNodeInput): ElementNode =>\n\tElement(args);\n\nexport const CreateTextNode = (args: TextNodeInput): TextNode => Text(args);\n\nexport const CreateFragmentNode = (args: FragmentNodeInput): FragmentNode =>\n\tFragment(args);\n\nexport const CreateListNode = (args: ListNodeInput): ListNode => List(args);\n\nexport const CreateBlueprintNode = (args: BlueprintNodeInput): BlueprintNode =>\n\tBlueprint(args);\n\nexport const matchEffuseNode = $match;\n\nexport type ElementNode = Extract<EffuseNode, { _tag: 'Element' }>;\nexport type TextNode = Extract<EffuseNode, { _tag: 'Text' }>;\nexport type FragmentNode = Extract<EffuseNode, { _tag: 'Fragment' }>;\nexport type ListNode = Extract<EffuseNode, { _tag: 'List' }>;\nexport type BlueprintNode<P = Record<string, unknown>> = Extract<\n\tEffuseNode,\n\t{ _tag: 'Blueprint' }\n> & { props: P; blueprint: BlueprintDef<P> };\n\nexport const createTextNode = (text: string): TextNode =>\n\tText({\n\t\t[EFFUSE_NODE]: true,\n\t\ttext,\n\t});\n\nexport const createFragmentNode = (children: EffuseChild[]): FragmentNode =>\n\tFragment({\n\t\t[EFFUSE_NODE]: true,\n\t\tchildren,\n\t});\n\nexport const createListNode = (children: EffuseChild[]): ListNode =>\n\tList({\n\t\t[EFFUSE_NODE]: true,\n\t\tchildren,\n\t});\n\nexport const isSignalChild = (value: unknown): value is Signal<EffuseChild> => {\n\treturn (\n\t\tPredicate.isObject(value) &&\n\t\t'value' in value &&\n\t\tPredicate.isObject((value as Record<string, unknown>)._subscribers)\n\t);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Option, pipe, Predicate } from 'effect';\nimport {\n\ttype EffuseNode,\n\ttype EffuseChild,\n\ttype ElementProps,\n\ttype ElementNode,\n\ttype BlueprintNode,\n\ttype BlueprintDef,\n\ttype Portals,\n\ttype PortalFn,\n\tCreateElementNode,\n\tCreateBlueprintNode,\n\tcreateFragmentNode,\n\tcreateTextNode,\n} from './node.js';\nimport { EFFUSE_NODE } from '../constants.js';\n\nexport function el(\n\ttag: string,\n\tprops?: ElementProps | null,\n\t...children: EffuseChild[]\n): ElementNode;\n\nexport function el<P>(\n\tblueprint: BlueprintDef<P>,\n\tprops?: P | null,\n\n\t// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n\tportals?: Portals | PortalFn | null\n): BlueprintNode<P>;\n\nexport function el(\n\ttagOrBlueprint: string | BlueprintDef,\n\tpropsOrNull?: ElementProps | Record<string, never> | null,\n\t// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n\t...rest: (EffuseChild | Portals | PortalFn | null)[]\n): EffuseNode {\n\tif (Predicate.isString(tagOrBlueprint)) {\n\t\tconst props = propsOrNull as ElementProps | null;\n\t\tconst children = normalizeChildren(rest as EffuseChild[]);\n\n\t\treturn CreateElementNode({\n\t\t\t[EFFUSE_NODE]: true,\n\t\t\ttag: tagOrBlueprint,\n\t\t\tprops: props ?? null,\n\t\t\tchildren,\n\t\t\tkey: pipe(\n\t\t\t\tOption.fromNullable(props),\n\t\t\t\tOption.flatMap((p) => Option.fromNullable(p.key)),\n\t\t\t\tOption.getOrUndefined\n\t\t\t),\n\t\t});\n\t}\n\n\tconst blueprint = tagOrBlueprint;\n\tconst props = propsOrNull ?? {};\n\tconst portalsArg = rest[0];\n\n\tlet portals: Portals | null = null;\n\tif (Predicate.isFunction(portalsArg)) {\n\t\tportals = { default: portalsArg as PortalFn };\n\t} else if (\n\t\tportalsArg &&\n\t\tPredicate.isObject(portalsArg) &&\n\t\t!Array.isArray(portalsArg)\n\t) {\n\t\tportals = portalsArg as Portals;\n\t}\n\n\treturn CreateBlueprintNode({\n\t\t[EFFUSE_NODE]: true,\n\t\tblueprint,\n\t\tprops,\n\t\tportals,\n\t\tkey: (props as { key?: string | number }).key,\n\t});\n}\n\n// Build fragment node\nexport const fragment = (...children: EffuseChild[]): EffuseNode => {\n\treturn createFragmentNode(normalizeChildren(children));\n};\n\nconst normalizeChildren = (children: EffuseChild[]): EffuseChild[] => {\n\tconst result: EffuseChild[] = [];\n\n\tfor (const child of children) {\n\t\tif (Predicate.isNullable(child) || Predicate.isBoolean(child)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (Array.isArray(child)) {\n\t\t\tresult.push(...normalizeChildren(child));\n\t\t} else {\n\t\t\tresult.push(child);\n\t\t}\n\t}\n\n\treturn result;\n};\n\n// Convert child to reactive node\nexport const toNode = (child: EffuseChild): EffuseNode | null => {\n\tif (Predicate.isNullable(child) || Predicate.isBoolean(child)) {\n\t\treturn null;\n\t}\n\n\tif (Predicate.isString(child)) {\n\t\treturn createTextNode(child);\n\t}\n\n\tif (Predicate.isNumber(child)) {\n\t\treturn createTextNode(String(child));\n\t}\n\n\tif (Predicate.isObject(child) && EFFUSE_NODE in child) {\n\t\treturn child;\n\t}\n\n\treturn null;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, pipe } from 'effect';\nimport type { EffuseChild } from './node.js';\nimport {\n\tDOMRendererLive,\n\tMountService,\n\ttype MountedNode,\n} from '../services/dom-renderer/index.js';\n\nexport {\n\ttype EffuseChild,\n\ttype EffuseNode,\n\ttype ElementNode,\n\ttype TextNode,\n\ttype FragmentNode,\n\ttype ListNode,\n\ttype Portals,\n\ttype PortalFn,\n\ttype BlueprintDef,\n\ttype BlueprintContext,\n\ttype BlueprintNode,\n\ttype Component,\n\tisEffuseNode,\n\tmatchEffuseNode,\n} from './node.js';\n\nexport {\n\tCreateElementNode,\n\tCreateTextNode,\n\tCreateFragmentNode,\n\tCreateListNode,\n\tCreateBlueprintNode,\n} from './node.js';\n\nexport { el, fragment, toNode } from './element.js';\n\nexport type CleanupFn = () => void;\n\n// Initialize reactive rendering\nexport const render = (child: EffuseChild, container: Element): CleanupFn => {\n\tlet mountedResult: MountedNode | null = null;\n\n\tconst program = pipe(\n\t\tMountService,\n\t\tEffect.flatMap((service) => service.mount(child, container)),\n\t\tEffect.tap((result) =>\n\t\t\tEffect.sync(() => {\n\t\t\t\tmountedResult = result;\n\t\t\t})\n\t\t),\n\t\tEffect.provide(DOMRendererLive)\n\t);\n\n\tEffect.runSync(program);\n\n\treturn () => {\n\t\tif (mountedResult) {\n\t\t\tmountedResult.cleanup();\n\t\t}\n\t};\n};\n\n// Finalize and remove application from container\nexport const unmount = (container: Element): void => {\n\tcontainer.innerHTML = '';\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Match, Option, Predicate, pipe } from 'effect';\nimport type { EffuseChild } from '../render/node.js';\nimport { render } from '../render/index.js';\nimport { define } from './define.js';\n\nexport interface PortalContainer {\n\treadonly id: string;\n\treadonly element: Element;\n\treadonly cleanup: () => void;\n}\n\nexport const createPortal = (\n\tcontent: EffuseChild,\n\ttarget: string | Element\n): { cleanup: () => void } => {\n\tconst targetElement =\n\t\ttypeof target === 'string' ? document.querySelector(target) : target;\n\n\tif (!targetElement) {\n\t\treturn { cleanup: () => {} };\n\t}\n\n\tconst cleanup = render(content, targetElement);\n\n\treturn { cleanup };\n};\n\nconst namedOutlets = new Map<string, Element>();\n\nexport const registerPortalOutlet = (name: string, element: Element): void => {\n\tnamedOutlets.set(name, element);\n};\n\nexport const unregisterPortalOutlet = (name: string): void => {\n\tnamedOutlets.delete(name);\n};\n\nexport const getPortalOutlet = (name: string): Element | undefined => {\n\treturn namedOutlets.get(name);\n};\n\nexport const renderToNamedPortal = (\n\tname: string,\n\tcontent: EffuseChild\n): { cleanup: () => void } => {\n\tconst outlet = namedOutlets.get(name);\n\tif (!outlet) {\n\t\treturn { cleanup: () => {} };\n\t}\n\treturn createPortal(content, outlet);\n};\n\nconst portalCleanups = new Map<string, () => void>();\nlet portalIdCounter = 0;\n\nexport type PortalInsertMode = 'append' | 'prepend' | 'replace';\n\nexport type PortalPriority = 'low' | 'normal' | 'high' | 'overlay' | number;\n\nexport const PORTAL_PRIORITY = {\n\tLOW: 100,\n\tNORMAL: 1000,\n\tHIGH: 10000,\n\tOVERLAY: 100000,\n\tDEFAULT: 1000,\n} as const;\n\nconst PRIORITY_VALUES: Record<string, number> = {\n\tlow: PORTAL_PRIORITY.LOW,\n\tnormal: PORTAL_PRIORITY.NORMAL,\n\thigh: PORTAL_PRIORITY.HIGH,\n\toverlay: PORTAL_PRIORITY.OVERLAY,\n};\n\nexport interface PortalProps {\n\ttarget: string | Element | (() => string | Element | null);\n\tchildren: EffuseChild;\n\tdisabled?: boolean | (() => boolean);\n\tinsertMode?: PortalInsertMode;\n\tpriority?: PortalPriority;\n\tonMount?: (element: Element) => void;\n\tonUnmount?: () => void;\n\tuseShadow?: boolean;\n\tkey?: string;\n}\n\nexport const Portal = define<PortalProps>({\n\tscript: ({ props, onMount, signal }) => {\n\t\tconst isMounted = signal(false);\n\n\t\tonMount(() => {\n\t\t\tif (typeof window === 'undefined') return () => {};\n\n\t\t\tconst isDisabled = pipe(\n\t\t\t\tMatch.value(props.disabled),\n\t\t\t\tMatch.when(Predicate.isFunction, (fn) => fn()),\n\t\t\t\tMatch.orElse((val) => val === true)\n\t\t\t);\n\n\t\t\tif (isDisabled) {\n\t\t\t\tisMounted.value = true;\n\t\t\t\treturn () => {\n\t\t\t\t\tisMounted.value = false;\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tconst resolveTarget = (): Element | null => {\n\t\t\t\tconst target = Predicate.isFunction(props.target)\n\t\t\t\t\t? props.target()\n\t\t\t\t\t: props.target;\n\t\t\t\tif (!target) return null;\n\t\t\t\treturn typeof target === 'string'\n\t\t\t\t\t? document.querySelector(target)\n\t\t\t\t\t: target;\n\t\t\t};\n\n\t\t\tconst targetElement = resolveTarget();\n\n\t\t\tif (!targetElement) {\n\t\t\t\treturn () => {};\n\t\t\t}\n\n\t\t\tconst portalId = pipe(\n\t\t\t\tOption.fromNullable(props.key),\n\t\t\t\tOption.getOrElse(() => {\n\t\t\t\t\tportalIdCounter++;\n\t\t\t\t\treturn `portal-${String(portalIdCounter)}`;\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tpipe(\n\t\t\t\tOption.fromNullable(portalCleanups.get(portalId)),\n\t\t\t\tOption.map((cleanup) => {\n\t\t\t\t\tcleanup();\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tlet renderTarget: Element | ShadowRoot = targetElement;\n\t\t\tif (props.useShadow) {\n\t\t\t\tconst shadowRoot = targetElement.shadowRoot;\n\t\t\t\tif (shadowRoot) {\n\t\t\t\t\trenderTarget = shadowRoot;\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\trenderTarget = targetElement.attachShadow({ mode: 'open' });\n\t\t\t\t\t} catch {\n\t\t\t\t\t\trenderTarget = targetElement;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst container = document.createElement('div');\n\t\t\tcontainer.setAttribute('data-portal', portalId);\n\n\t\t\tpipe(\n\t\t\t\tOption.fromNullable(props.priority),\n\t\t\t\tOption.map((priority) => {\n\t\t\t\t\tconst zIndex = pipe(\n\t\t\t\t\t\tMatch.value(priority),\n\t\t\t\t\t\tMatch.when(Predicate.isNumber, (n) => n),\n\t\t\t\t\t\tMatch.orElse((str) =>\n\t\t\t\t\t\t\tpipe(\n\t\t\t\t\t\t\t\tOption.fromNullable(PRIORITY_VALUES[str]),\n\t\t\t\t\t\t\t\tOption.getOrElse(() => PORTAL_PRIORITY.DEFAULT)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tcontainer.style.position = 'relative';\n\t\t\t\t\tcontainer.style.zIndex = String(zIndex);\n\t\t\t\t})\n\t\t\t);\n\n\t\t\tconst insertMode = pipe(\n\t\t\t\tOption.fromNullable(props.insertMode),\n\t\t\t\tOption.getOrElse((): PortalInsertMode => 'append')\n\t\t\t);\n\t\t\tif (insertMode === 'prepend') {\n\t\t\t\trenderTarget.insertBefore(container, renderTarget.firstChild);\n\t\t\t} else if (insertMode === 'replace') {\n\t\t\t\t(renderTarget as Element).innerHTML = '';\n\t\t\t\trenderTarget.appendChild(container);\n\t\t\t} else {\n\t\t\t\trenderTarget.appendChild(container);\n\t\t\t}\n\n\t\t\tconst cleanup = render(props.children, container);\n\t\t\tportalCleanups.set(portalId, cleanup);\n\n\t\t\tisMounted.value = true;\n\t\t\tpipe(\n\t\t\t\tOption.fromNullable(props.onMount),\n\t\t\t\tOption.map((fn) => {\n\t\t\t\t\tfn(targetElement);\n\t\t\t\t})\n\t\t\t);\n\n\t\t\treturn () => {\n\t\t\t\tcleanup();\n\t\t\t\tcontainer.remove();\n\t\t\t\tportalCleanups.delete(portalId);\n\t\t\t\tisMounted.value = false;\n\t\t\t\tpipe(\n\t\t\t\t\tOption.fromNullable(props.onUnmount),\n\t\t\t\t\tOption.map((fn) => {\n\t\t\t\t\t\tfn();\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t};\n\t\t});\n\n\t\treturn { isMounted };\n\t},\n\ttemplate: () => {\n\t\treturn null;\n\t},\n});\n\nexport const PortalOutlet = define<{ name: string; class?: string }>({\n\tscript: ({ props, onMount }) => {\n\t\tonMount(() => {\n\t\t\tconst outletId = `portal-outlet-${props.name}`;\n\t\t\tlet outletElement = document.getElementById(outletId);\n\n\t\t\tif (!outletElement) {\n\t\t\t\toutletElement = document.createElement('div');\n\t\t\t\toutletElement.id = outletId;\n\t\t\t\toutletElement.setAttribute('data-portal-outlet', props.name);\n\t\t\t\tif (props.class) {\n\t\t\t\t\toutletElement.className = props.class;\n\t\t\t\t}\n\t\t\t\tdocument.body.appendChild(outletElement);\n\t\t\t}\n\n\t\t\tregisterPortalOutlet(props.name, outletElement);\n\n\t\t\treturn () => {\n\t\t\t\tunregisterPortalOutlet(props.name);\n\t\t\t\tpipe(\n\t\t\t\t\tOption.fromNullable(outletElement),\n\t\t\t\t\tOption.map((el) => {\n\t\t\t\t\t\tel.remove();\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t};\n\t\t});\n\n\t\treturn {};\n\t},\n\ttemplate: () => null,\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate, Option } from 'effect';\nimport { define } from '../blueprint/index.js';\nimport { computed } from '../reactivity/index.js';\nimport { watchEffect } from '../effects/index.js';\nimport { CreateFragmentNode, type EffuseChild } from '../render/node.js';\nimport {\n\tEFFUSE_NODE,\n\tSUSPEND_TOKEN,\n\tBOUNDARY_ID_PREFIX,\n} from '../constants.js';\nimport type { Signal, ReadonlySignal } from '../types/index.js';\n\nexport { SUSPEND_TOKEN };\n\nexport const isSuspendToken = (value: unknown): value is SuspendToken =>\n\tPredicate.isRecord(value) && Predicate.hasProperty(value, SUSPEND_TOKEN);\n\nexport interface SuspendToken {\n\treadonly [SUSPEND_TOKEN]: true;\n\treadonly promise: Promise<void>;\n\treadonly resourceId: string;\n}\n\nexport interface SuspenseContext {\n\treadonly id: string;\n\treadonly pendingResources: Map<string, Promise<void>>;\n\treadonly registerPending: (\n\t\tresourceId: string,\n\t\tpromise: Promise<void>\n\t) => void;\n\treadonly unregisterPending: (resourceId: string) => void;\n\treadonly hasPending: () => boolean;\n\treadonly waitForAll: () => Promise<void>;\n}\n\nexport interface SuspenseApi {\n\treadonly createBoundary: () => SuspenseContext;\n\treadonly getCurrentBoundary: () => Option.Option<SuspenseContext>;\n\treadonly pushBoundary: (boundary: SuspenseContext) => void;\n\treadonly popBoundary: () => void;\n}\n\nlet boundaryIdCounter = 0;\n\nconst generateBoundaryId = (prefix: string): string =>\n\t`${prefix}${String(++boundaryIdCounter)}`;\n\nconst boundaryStack: SuspenseContext[] = [];\n\nexport const suspenseApi: SuspenseApi = {\n\tcreateBoundary: (): SuspenseContext => {\n\t\tconst id = generateBoundaryId(BOUNDARY_ID_PREFIX);\n\t\tconst pendingResources = new Map<string, Promise<void>>();\n\n\t\treturn {\n\t\t\tid,\n\t\t\tpendingResources,\n\t\t\tregisterPending: (resourceId: string, promise: Promise<void>) => {\n\t\t\t\tpendingResources.set(resourceId, promise);\n\t\t\t},\n\t\t\tunregisterPending: (resourceId: string) => {\n\t\t\t\tpendingResources.delete(resourceId);\n\t\t\t},\n\t\t\thasPending: () => pendingResources.size > 0,\n\t\t\twaitForAll: async () => {\n\t\t\t\tconst promises = Array.from(pendingResources.values());\n\t\t\t\tawait Promise.all(promises);\n\t\t\t},\n\t\t};\n\t},\n\n\tgetCurrentBoundary: () => Option.fromNullable(boundaryStack.at(-1)),\n\n\tpushBoundary: (boundary: SuspenseContext) => {\n\t\tboundaryStack.push(boundary);\n\t},\n\n\tpopBoundary: () => {\n\t\tboundaryStack.pop();\n\t},\n};\n\nexport interface SuspenseProps {\n\tfallback: EffuseChild;\n\tchildren: EffuseChild | (() => EffuseChild);\n\t[key: string]: unknown;\n}\n\ninterface SuspenseExposed {\n\tboundary: SuspenseContext;\n\tisPending: Signal<boolean>;\n\tshouldShowFallback: Signal<boolean>;\n\tresolvedChildren: Signal<EffuseChild>;\n\tcurrentContent: ReadonlySignal<EffuseChild>;\n\ttryRenderChildren: (\n\t\tchildren: EffuseChild | (() => EffuseChild),\n\t\tfallback: EffuseChild\n\t) => void;\n}\n\nexport const Suspense = define<SuspenseProps, SuspenseExposed>({\n\tscript: ({ props, signal: createSignal }) => {\n\t\tconst boundary = suspenseApi.createBoundary();\n\t\tconst isPending = createSignal(true);\n\t\tconst shouldShowFallback = createSignal(true);\n\t\tconst resolvedChildren = createSignal<EffuseChild>(null);\n\t\tconst pendingTokens = new Map<string, SuspendToken>();\n\n\t\tconst currentContent = computed(() => {\n\t\t\tif (shouldShowFallback.value) {\n\t\t\t\treturn props.fallback;\n\t\t\t}\n\t\t\treturn resolvedChildren.value;\n\t\t});\n\n\t\tconst handleSuspendToken = (token: SuspendToken) => {\n\t\t\tif (pendingTokens.has(token.resourceId)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tpendingTokens.set(token.resourceId, token);\n\t\t\tboundary.registerPending(token.resourceId, token.promise);\n\t\t\tshouldShowFallback.value = true;\n\n\t\t\ttoken.promise\n\t\t\t\t.then(() => {\n\t\t\t\t\tpendingTokens.delete(token.resourceId);\n\t\t\t\t\tboundary.unregisterPending(token.resourceId);\n\t\t\t\t\tif (pendingTokens.size === 0) {\n\t\t\t\t\t\tisPending.value = false;\n\t\t\t\t\t\ttryRenderChildren(props.children, props.fallback);\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tpendingTokens.delete(token.resourceId);\n\t\t\t\t\tboundary.unregisterPending(token.resourceId);\n\t\t\t\t\tif (pendingTokens.size === 0) {\n\t\t\t\t\t\tisPending.value = false;\n\t\t\t\t\t\tshouldShowFallback.value = false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t};\n\n\t\tconst tryRenderChildren = (\n\t\t\tchildren: EffuseChild | (() => EffuseChild),\n\t\t\t_fallback: EffuseChild\n\t\t): void => {\n\t\t\tsuspenseApi.pushBoundary(boundary);\n\t\t\ttry {\n\t\t\t\tlet childToRender = children;\n\t\t\t\tif (Array.isArray(children) && children.length === 1) {\n\t\t\t\t\tchildToRender = children[0];\n\t\t\t\t}\n\t\t\t\tconst rendered = Predicate.isFunction(childToRender)\n\t\t\t\t\t? childToRender()\n\t\t\t\t\t: childToRender;\n\t\t\t\tresolvedChildren.value = rendered;\n\t\t\t\tshouldShowFallback.value = false;\n\t\t\t} catch (error: unknown) {\n\t\t\t\tif (isSuspendToken(error)) {\n\t\t\t\t\thandleSuspendToken(error);\n\t\t\t\t} else {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t} finally {\n\t\t\t\tsuspenseApi.popBoundary();\n\t\t\t}\n\t\t};\n\n\t\twatchEffect(() => {\n\t\t\ttryRenderChildren(props.children, props.fallback);\n\t\t});\n\n\t\treturn {\n\t\t\tboundary,\n\t\t\tisPending,\n\t\t\tshouldShowFallback,\n\t\t\tresolvedChildren,\n\t\t\tcurrentContent,\n\t\t\ttryRenderChildren,\n\t\t};\n\t},\n\n\ttemplate: (exposed) => {\n\t\treturn CreateFragmentNode({\n\t\t\t[EFFUSE_NODE]: true,\n\t\t\tchildren: [exposed.currentContent],\n\t\t});\n\t},\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Schedule, Duration, Fiber } from 'effect';\nimport {\n\tstartTracking,\n\tstopTracking,\n\tgetTrackingPaused,\n\tresumeTracking,\n\tpauseTracking,\n} from '../reactivity/dep.js';\nimport type { Dep } from '../reactivity/dep.js';\nimport { isSuspendToken } from '../suspense/Suspense.js';\nimport type {\n\tEffectHandle,\n\tEffectOptions,\n\tOnCleanup,\n\tCleanupFn,\n} from '../types/index.js';\n\n// Initialize reactive effect\nexport function watchEffect(\n\tfn: (onCleanup: OnCleanup) => void | Promise<void>,\n\toptions: EffectOptions = {}\n): EffectHandle {\n\tlet isActive = true;\n\tlet isPaused = false;\n\tlet isScheduled = false;\n\tlet currentFiber: Fiber.RuntimeFiber<void> | null = null;\n\tlet debounceTimeout: ReturnType<typeof setTimeout> | null = null;\n\tlet cleanupFns: CleanupFn[] = [];\n\tlet subscriptions: (() => void)[] = [];\n\n\tfunction runCleanups(): void {\n\t\tfor (const cleanup of cleanupFns) {\n\t\t\ttry {\n\t\t\t\tcleanup();\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\t\tcleanupFns = [];\n\t}\n\n\tfunction clearSubscriptions(): void {\n\t\tfor (const unsub of subscriptions) {\n\t\t\tunsub();\n\t\t}\n\t\tsubscriptions = [];\n\t}\n\n\tconst onCleanup: OnCleanup = (cleanupFn: CleanupFn): void => {\n\t\tcleanupFns.push(cleanupFn);\n\t};\n\n\tfunction execute(): void {\n\t\tif (!isActive || isPaused) return;\n\t\tisScheduled = false;\n\n\t\trunCleanups();\n\t\tclearSubscriptions();\n\n\t\tconst wasPaused = getTrackingPaused();\n\t\tresumeTracking();\n\n\t\tstartTracking();\n\n\t\tlet trackedDeps: Dep[] | undefined;\n\t\ttry {\n\t\t\tconst result = fn(onCleanup);\n\n\t\t\ttrackedDeps = stopTracking();\n\n\t\t\tif (result instanceof Promise) {\n\t\t\t\texecuteAsync(result);\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tif (!trackedDeps) {\n\t\t\t\ttrackedDeps = stopTracking();\n\t\t\t}\n\t\t\tif (isSuspendToken(err)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthrow err;\n\t\t} finally {\n\t\t\tif (trackedDeps) {\n\t\t\t\tfor (const trackedDep of trackedDeps) {\n\t\t\t\t\tconst unsub = trackedDep.subscribe(scheduleRun);\n\t\t\t\t\tsubscriptions.push(unsub);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (wasPaused) {\n\t\t\t\tpauseTracking();\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction executeAsync(promise: Promise<void>): void {\n\t\tlet effectProgram: Effect.Effect<void, unknown> = Effect.promise(\n\t\t\t() => promise\n\t\t);\n\n\t\tif (options.retry) {\n\t\t\tconst { times = 3, delay = 1000, strategy = 'constant' } = options.retry;\n\t\t\tconst baseSchedule =\n\t\t\t\tstrategy === 'exponential'\n\t\t\t\t\t? Schedule.exponential(Duration.millis(delay))\n\t\t\t\t\t: Schedule.fixed(Duration.millis(delay));\n\n\t\t\tconst limitedSchedule = Schedule.compose(\n\t\t\t\tbaseSchedule,\n\t\t\t\tSchedule.recurs(times)\n\t\t\t);\n\n\t\t\teffectProgram = Effect.retry(effectProgram, limitedSchedule);\n\t\t}\n\n\t\tif (options.timeout) {\n\t\t\teffectProgram = Effect.timeout(\n\t\t\t\teffectProgram,\n\t\t\t\tDuration.millis(options.timeout)\n\t\t\t);\n\t\t}\n\n\t\tconst fiber = Effect.runFork(\n\t\t\tEffect.catchAll(effectProgram, () => Effect.void)\n\t\t);\n\t\tcurrentFiber = fiber;\n\t}\n\n\tfunction scheduleRun(): void {\n\t\tif (!isActive || isPaused || isScheduled) return;\n\n\t\tif (options.debounce) {\n\t\t\tif (debounceTimeout) {\n\t\t\t\tclearTimeout(debounceTimeout);\n\t\t\t}\n\t\t\tisScheduled = true;\n\t\t\tdebounceTimeout = setTimeout(() => {\n\t\t\t\texecute();\n\t\t\t}, options.debounce.wait);\n\t\t} else if (options.flush === 'post') {\n\t\t\tisScheduled = true;\n\t\t\tqueueMicrotask(execute);\n\t\t} else {\n\t\t\texecute();\n\t\t}\n\t}\n\n\tif (options.immediate !== false) {\n\t\texecute();\n\t}\n\n\treturn {\n\t\tstop: (): void => {\n\t\t\tisActive = false;\n\t\t\trunCleanups();\n\t\t\tclearSubscriptions();\n\n\t\t\tif (debounceTimeout) {\n\t\t\t\tclearTimeout(debounceTimeout);\n\t\t\t}\n\n\t\t\tif (currentFiber) {\n\t\t\t\tEffect.runFork(Fiber.interrupt(currentFiber));\n\t\t\t}\n\t\t},\n\t\tpause: (): void => {\n\t\t\tisPaused = true;\n\t\t},\n\t\tresume: (): void => {\n\t\t\tisPaused = false;\n\t\t\texecute();\n\t\t},\n\t};\n}\n\n// Execute effect once and stop\nexport function effectOnce(fn: () => void): void {\n\tconst handle = watchEffect(() => {\n\t\tfn();\n\t\thandle.stop();\n\t});\n}\n\nexport { batch } from '../reactivity/dep.js';\nexport type { OnCleanup } from '../types/index.js';\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Array as Arr, Option, Predicate, Record as Rec, pipe } from 'effect';\nimport { signal, isSignal } from '../reactivity/signal.js';\nimport { isReactive } from '../reactivity/reactive.js';\nimport type {\n\tEffectHandle,\n\tWatchOptions,\n\tOnCleanup,\n\tCleanupFn,\n\tSignal,\n\tReadonlySignal,\n} from '../types/index.js';\nimport { watchEffect } from './effect.js';\n\nexport type WatchSource<T> =\n\t| Signal<T>\n\t| ReadonlySignal<T>\n\t| (() => T)\n\t| (T extends object ? T : never);\n\nexport type WatchCallback<T> = (\n\tnewValue: T,\n\toldValue: T | undefined,\n\tonCleanup: OnCleanup\n) => void | Promise<void>;\n\nexport type DeepWatchCallback<T> = (\n\tnewValue: T,\n\toldValue: T,\n\tonCleanup: OnCleanup\n) => void | Promise<void>;\n\nconst getDeepOption = (options: WatchOptions | undefined): boolean =>\n\tpipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.deep)),\n\t\tOption.getOrElse(() => false)\n\t);\n\nconst getImmediateOption = (options: WatchOptions | undefined): boolean =>\n\tpipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.immediate)),\n\t\tOption.getOrElse(() => false)\n\t);\n\nconst getOnceOption = (options: WatchOptions | undefined): boolean =>\n\tpipe(\n\t\tOption.fromNullable(options),\n\t\tOption.flatMap((o) => Option.fromNullable(o.once)),\n\t\tOption.getOrElse(() => false)\n\t);\n\nconst createCleanupRunner = (): {\n\tqueue: CleanupFn[];\n\trun: () => void;\n\tregister: OnCleanup;\n} => {\n\tlet queue: CleanupFn[] = [];\n\treturn {\n\t\tget queue() {\n\t\t\treturn queue;\n\t\t},\n\t\trun: () => {\n\t\t\tArr.forEach(queue, (cleanup) => {\n\t\t\t\ttry {\n\t\t\t\t\tcleanup();\n\t\t\t\t} catch {\n\t\t\t\t\t/* silent */\n\t\t\t\t}\n\t\t\t});\n\t\t\tqueue = [];\n\t\t},\n\t\tregister: (fn) => {\n\t\t\tqueue.push(fn);\n\t\t},\n\t};\n};\n\nconst handleAsyncResult = (result: void | Promise<void>): void => {\n\tif (result instanceof Promise) {\n\t\tvoid result;\n\t}\n};\n\nexport function watch<T>(\n\tsource: WatchSource<T>,\n\tcallback: WatchCallback<T>,\n\toptions: WatchOptions = {}\n): EffectHandle {\n\tlet oldValue: T | undefined;\n\tlet hasRun = false;\n\tconst cleanup = createCleanupRunner();\n\tconst deep = getDeepOption(options);\n\tconst immediate = getImmediateOption(options);\n\tconst once = getOnceOption(options);\n\tconst getter = createGetter(source, deep);\n\n\tconst handle = watchEffect(\n\t\t() => {\n\t\t\tconst newValue = getter();\n\n\t\t\tif (!hasRun) {\n\t\t\t\thasRun = true;\n\t\t\t\toldValue = deep ? deepClone(newValue) : newValue;\n\t\t\t\tif (immediate) {\n\t\t\t\t\tcleanup.run();\n\t\t\t\t\thandleAsyncResult(callback(newValue, undefined, cleanup.register));\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (deep || !Object.is(newValue, oldValue)) {\n\t\t\t\tcleanup.run();\n\t\t\t\thandleAsyncResult(callback(newValue, oldValue, cleanup.register));\n\t\t\t\toldValue = deep ? deepClone(newValue) : newValue;\n\t\t\t}\n\n\t\t\tif (once) {\n\t\t\t\thandle.stop();\n\t\t\t}\n\t\t},\n\t\t{ ...options, immediate: true }\n\t);\n\n\treturn handle;\n}\n\nconst createGetter = <T>(source: WatchSource<T>, deep: boolean): (() => T) => {\n\tif (Predicate.isFunction(source)) {\n\t\treturn source as () => T;\n\t}\n\tif (isSignal<T>(source)) {\n\t\treturn () => source.value;\n\t}\n\tif (isReactive(source)) {\n\t\treturn deep\n\t\t\t? () => {\n\t\t\t\t\ttraverse(source);\n\t\t\t\t\treturn source as T;\n\t\t\t\t}\n\t\t\t: () => source as T;\n\t}\n\tconst sig = signal(source as T);\n\treturn () => sig.value;\n};\n\nconst traverse = (value: unknown, seen = new WeakSet()): void => {\n\tif (!Predicate.isObject(value)) return;\n\tif (seen.has(value)) return;\n\tseen.add(value);\n\n\tif (Array.isArray(value)) {\n\t\tArr.forEach(value, (item) => {\n\t\t\ttraverse(item, seen);\n\t\t});\n\t} else {\n\t\tArr.forEach(Rec.keys(value as Record<string, unknown>), (key) => {\n\t\t\ttraverse((value as Record<string, unknown>)[key], seen);\n\t\t});\n\t}\n};\n\nconst deepClone = <T>(value: T): T => {\n\tif (!Predicate.isObject(value)) return value;\n\n\tif (Array.isArray(value)) {\n\t\treturn Arr.map(value, deepClone) as T;\n\t}\n\n\treturn pipe(\n\t\tRec.map(value as Record<string, unknown>, deepClone),\n\t\t(cloned) => cloned as T\n\t);\n};\n\nexport const watchMultiple = <T extends readonly WatchSource<unknown>[]>(\n\tsources: T,\n\tcallback: (\n\t\tnewValues: {\n\t\t\t[K in keyof T]: T[K] extends WatchSource<infer V> ? V : never;\n\t\t},\n\t\toldValues: {\n\t\t\t[K in keyof T]: T[K] extends WatchSource<infer V> ? V | undefined : never;\n\t\t},\n\t\tonCleanup: OnCleanup\n\t) => void | Promise<void>,\n\toptions?: WatchOptions\n): EffectHandle => {\n\tconst deep = getDeepOption(options);\n\tconst immediate = getImmediateOption(options);\n\tconst once = getOnceOption(options);\n\tconst getters = Arr.map(sources, (source) => createGetter(source, deep));\n\tlet oldValues: unknown[] = [];\n\tlet hasRun = false;\n\tconst cleanup = createCleanupRunner();\n\n\tconst handle = watchEffect(\n\t\t() => {\n\t\t\tconst newValues = Arr.map(getters, (getter) => getter());\n\n\t\t\tif (!hasRun) {\n\t\t\t\thasRun = true;\n\t\t\t\toldValues = Arr.map(newValues, (v) => (deep ? deepClone(v) : v));\n\t\t\t\tif (immediate) {\n\t\t\t\t\tcleanup.run();\n\t\t\t\t\thandleAsyncResult(\n\t\t\t\t\t\tcallback(\n\t\t\t\t\t\t\tnewValues as never,\n\t\t\t\t\t\t\tArr.replicate(undefined, sources.length) as never,\n\t\t\t\t\t\t\tcleanup.register\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst hasChanged = Arr.some(\n\t\t\t\tnewValues,\n\t\t\t\t(v, i) => !Object.is(v, oldValues[i])\n\t\t\t);\n\n\t\t\tif (hasChanged || deep) {\n\t\t\t\tcleanup.run();\n\t\t\t\thandleAsyncResult(\n\t\t\t\t\tcallback(newValues as never, oldValues as never, cleanup.register)\n\t\t\t\t);\n\t\t\t\toldValues = Arr.map(newValues, (v) => (deep ? deepClone(v) : v));\n\t\t\t}\n\n\t\t\tif (once) {\n\t\t\t\thandle.stop();\n\t\t\t}\n\t\t},\n\t\t{ ...options, immediate: true }\n\t);\n\n\treturn handle;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild, ListNode } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { computed, untrack, signal } from '../reactivity/index.js';\nimport { DuplicateKeysError } from '../errors.js';\nimport { pipe, Match, Predicate } from 'effect';\n\nexport interface ForProps<T> {\n\teach: Signal<T[]> | (() => T[]);\n\tkeyExtractor?: (item: T, index: number) => unknown;\n\tchildren: (item: Signal<T>, index: Signal<number>) => EffuseNode;\n\tfallback?: EffuseChild | (() => EffuseChild);\n\trange?: Signal<{ start: number; end: number }>;\n\ttransitions?: {\n\t\tenter?: (node: EffuseNode, index: number) => void;\n\t\texit?: (node: EffuseNode, index: number) => void;\n\t\tmove?: (node: EffuseNode, fromIndex: number, toIndex: number) => void;\n\t};\n}\n\ntype ItemMeta<T> = {\n\tkey: unknown;\n\titemSignal: Signal<T>;\n\tindexSignal: Signal<number>;\n};\n\ntype ForCache<T> = {\n\tcachedChildren: EffuseNode[];\n\tmeta: WeakMap<EffuseNode, ItemMeta<T>>;\n};\n\nconst createForCache = <T>(): ForCache<T> => ({\n\tcachedChildren: [],\n\tmeta: new WeakMap(),\n});\n\nconst resolveList = <T>(listSignal: Signal<T[]> | (() => T[])): T[] =>\n\tpipe(\n\t\tlistSignal,\n\t\tMatch.value,\n\t\tMatch.when(Predicate.isFunction, (fn) => fn()),\n\t\tMatch.orElse((sig) => sig.value)\n\t);\n\nconst isValidRange = (r: { start: number; end: number }): boolean =>\n\tr.end > r.start && r.start >= 0;\n\nconst computeRange = <T>(\n\titems: T[],\n\trange: Signal<{ start: number; end: number }> | undefined\n): { start: number; end: number; sliced: T[] } => {\n\tif (!Predicate.isNotNullable(range)) {\n\t\treturn { start: 0, end: items.length, sliced: items };\n\t}\n\n\tconst r = range.value;\n\tif (!isValidRange(r)) {\n\t\treturn { start: 0, end: items.length, sliced: items };\n\t}\n\n\tconst start = Math.min(r.start, items.length);\n\tconst end = Math.min(r.end, items.length);\n\treturn { start, end, sliced: items.slice(start, end) };\n};\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild[] => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn [];\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn [fallback()];\n\t}\n\n\treturn [fallback];\n};\n\nconst invokeEnterTransition = <T>(\n\tprops: ForProps<T>,\n\tnode: EffuseNode,\n\tindex: number\n): void => {\n\tif (!Predicate.isNotNullable(props.transitions)) return;\n\tif (!Predicate.isNotNullable(props.transitions.enter)) return;\n\tprops.transitions.enter(node, index);\n};\n\nconst invokeMoveTransition = <T>(\n\tprops: ForProps<T>,\n\tnode: EffuseNode,\n\tfromIndex: number,\n\ttoIndex: number\n): void => {\n\tif (!Predicate.isNotNullable(props.transitions)) return;\n\tif (!Predicate.isNotNullable(props.transitions.move)) return;\n\tprops.transitions.move(node, fromIndex, toIndex);\n};\n\nconst invokeExitTransitions = <T>(\n\tprops: ForProps<T>,\n\tprevChildren: EffuseNode[],\n\tcache: ForCache<T>,\n\tseenKeys: Set<unknown>\n): void => {\n\tif (!Predicate.isNotNullable(props.transitions)) return;\n\tif (!Predicate.isNotNullable(props.transitions.exit)) return;\n\n\tconst exit = props.transitions.exit;\n\tfor (const child of prevChildren) {\n\t\tconst meta = cache.meta.get(child);\n\t\tif (!Predicate.isNotNullable(meta)) continue;\n\t\tif (seenKeys.has(meta.key)) continue;\n\t\texit(child, meta.indexSignal.value);\n\t}\n};\n\nconst createFor = <T>(props: ForProps<T>): EffuseNode => {\n\tconst {\n\t\teach: listSignal,\n\t\tchildren: renderChild,\n\t\tkeyExtractor: getKey,\n\t} = props;\n\tconst keyFn = Predicate.isNotNullable(getKey)\n\t\t? getKey\n\t\t: (_item: T, i: number) => i;\n\n\tconst cache = createForCache<T>();\n\tconst listNode = createListNode([]) as ListNode & { _cache: ForCache<T> };\n\tlistNode._cache = cache;\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst fullItems = resolveList(listSignal);\n\t\t\tif (!Array.isArray(fullItems)) return [];\n\n\t\t\tconst { start, sliced: newItems } = computeRange(fullItems, props.range);\n\n\t\t\tif (newItems.length === 0) {\n\t\t\t\tcache.cachedChildren = [];\n\t\t\t\treturn resolveFallback(props.fallback);\n\t\t\t}\n\n\t\t\tconst prevChildren = cache.cachedChildren;\n\t\t\tconst newChildren: EffuseNode[] = Array.from({ length: newItems.length });\n\t\t\tconst keyToOldNode = new Map<unknown, EffuseNode>();\n\t\t\tconst seenKeys = new Set<unknown>();\n\n\t\t\tfor (const child of prevChildren) {\n\t\t\t\tconst meta = cache.meta.get(child);\n\t\t\t\tif (Predicate.isNotNullable(meta)) {\n\t\t\t\t\tkeyToOldNode.set(meta.key, child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < newItems.length; i++) {\n\t\t\t\tconst item = newItems[i];\n\t\t\t\tif (!Predicate.isNotNullable(item)) continue;\n\n\t\t\t\tconst actualIndex = start + i;\n\t\t\t\tconst key = keyFn(item, actualIndex);\n\n\t\t\t\tif (process.env.NODE_ENV !== 'production') {\n\t\t\t\t\tif (seenKeys.has(key)) {\n\t\t\t\t\t\tthrow new DuplicateKeysError({ component: 'For' });\n\t\t\t\t\t}\n\t\t\t\t\tseenKeys.add(key);\n\t\t\t\t}\n\n\t\t\t\tconst existingNode = keyToOldNode.get(key);\n\n\t\t\t\tif (Predicate.isNotNullable(existingNode)) {\n\t\t\t\t\tconst meta = cache.meta.get(existingNode);\n\t\t\t\t\tif (!Predicate.isNotNullable(meta)) continue;\n\n\t\t\t\t\tconst prevIndex = meta.indexSignal.value;\n\t\t\t\t\tif (meta.itemSignal.value !== item) {\n\t\t\t\t\t\tmeta.itemSignal.value = item;\n\t\t\t\t\t}\n\t\t\t\t\tif (meta.indexSignal.value !== actualIndex) {\n\t\t\t\t\t\tmeta.indexSignal.value = actualIndex;\n\t\t\t\t\t\tinvokeMoveTransition(props, existingNode, prevIndex, actualIndex);\n\t\t\t\t\t}\n\t\t\t\t\tnewChildren[i] = existingNode;\n\t\t\t\t} else {\n\t\t\t\t\tconst itemSignal = signal<T>(item);\n\t\t\t\t\tconst indexSignal = signal<number>(actualIndex);\n\t\t\t\t\tconst node = untrack(() => renderChild(itemSignal, indexSignal));\n\t\t\t\t\tcache.meta.set(node, { key, itemSignal, indexSignal });\n\t\t\t\t\tinvokeEnterTransition(props, node, actualIndex);\n\t\t\t\t\tnewChildren[i] = node;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tinvokeExitTransitions(props, prevChildren, cache, seenKeys);\n\t\t\tcache.cachedChildren = newChildren;\n\t\t\treturn newChildren;\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nconst createDynamic = <T>(\n\tsig: Signal<T[]>,\n\trender: (item: T, index: Signal<number>) => EffuseNode\n): EffuseNode => {\n\tconst node = createListNode([]);\n\n\tObject.defineProperty(node, 'children', {\n\t\tget() {\n\t\t\tconst items = sig.value;\n\t\t\treturn items.map((item, i) =>\n\t\t\t\trender(\n\t\t\t\t\titem,\n\t\t\t\t\tcomputed(() => i)\n\t\t\t\t)\n\t\t\t);\n\t\t},\n\t});\n\n\treturn node;\n};\n\nexport const For = Object.assign(createFor, {\n\tDynamic: createDynamic,\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { Option, pipe, Predicate } from 'effect';\n\nexport interface ShowProps<T> {\n\twhen: Signal<T> | (() => T);\n\tfallback?: EffuseChild | (() => EffuseChild);\n\tchildren: EffuseChild | ((item: NonNullable<T>) => EffuseChild);\n\tkeyed?: boolean;\n}\n\ntype ShowCache<T> = {\n\tlastTruthy: boolean;\n\tcachedChild: Option.Option<EffuseChild>;\n\tvalue: Option.Option<NonNullable<T>>;\n};\n\nconst createCache = <T>(): ShowCache<T> => ({\n\tlastTruthy: false,\n\tcachedChild: Option.none(),\n\tvalue: Option.none(),\n});\n\nconst resolveCondition = <T>(condition: Signal<T> | (() => T)): T =>\n\tPredicate.isFunction(condition) ? condition() : condition.value;\n\nconst isTruthy = <T>(value: T): value is NonNullable<T> =>\n\tPredicate.isNotNullable(value) && value !== false;\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild[] => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn [];\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn [fallback()];\n\t}\n\n\treturn [fallback];\n};\n\nconst renderChildren = <T>(\n\tchildren: EffuseChild | ((item: NonNullable<T>) => EffuseChild),\n\tvalue: NonNullable<T>\n): EffuseChild => (Predicate.isFunction(children) ? children(value) : children);\n\nexport const Show = <T>(props: ShowProps<T>): EffuseNode => {\n\tconst { when: condition, fallback, children, keyed = false } = props;\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_cache: ShowCache<T>;\n\t};\n\n\tlistNode._cache = createCache<T>();\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst cache = listNode._cache;\n\t\t\tconst rawValue = resolveCondition(condition);\n\n\t\t\tif (!isTruthy(rawValue)) {\n\t\t\t\tcache.lastTruthy = false;\n\t\t\t\tcache.cachedChild = Option.none();\n\t\t\t\tcache.value = Option.none();\n\t\t\t\treturn resolveFallback(fallback);\n\t\t\t}\n\n\t\t\tconst shouldRecreate = keyed || !cache.lastTruthy;\n\n\t\t\tif (shouldRecreate || Option.isNone(cache.cachedChild)) {\n\t\t\t\tcache.cachedChild = Option.some(renderChildren(children, rawValue));\n\t\t\t\tcache.value = Option.some(rawValue);\n\t\t\t}\n\n\t\t\tcache.lastTruthy = true;\n\n\t\t\treturn pipe(\n\t\t\t\tcache.cachedChild,\n\t\t\t\tOption.match({\n\t\t\t\t\tonNone: () => [] as EffuseChild[],\n\t\t\t\t\tonSome: (child) => [child] as EffuseChild[],\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t});\n\n\treturn listNode;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { EFFUSE_NODE, MATCH_MARKER } from '../constants.js';\nimport { Option, pipe, Predicate } from 'effect';\n\ntype MatchNode<T> = {\n\t[EFFUSE_NODE]: true;\n\t_tag: 'Fragment';\n\t_matchMarker: typeof MATCH_MARKER;\n\twhen: Signal<T> | (() => T) | T;\n\tchildren: EffuseChild | ((item: NonNullable<T>) => EffuseChild);\n};\n\ntype MatchResult = {\n\tindex: number;\n\tvalue: NonNullable<unknown>;\n\tmatch: MatchNode<unknown>;\n};\n\ntype SwitchCache = {\n\tlastMatchIndex: number;\n\tcachedChild: Option.Option<EffuseChild>;\n};\n\ntype ConditionInput =\n\t| Signal<unknown>\n\t| (() => unknown)\n\t| boolean\n\t| string\n\t| number\n\t| object\n\t| null\n\t| undefined;\n\nconst createMatch = <T>(props: {\n\twhen: Signal<T> | (() => T) | T;\n\tchildren: EffuseChild | ((item: NonNullable<T>) => EffuseChild);\n}): MatchNode<T> => ({\n\t[EFFUSE_NODE]: true,\n\t_tag: 'Fragment',\n\t_matchMarker: MATCH_MARKER,\n\twhen: props.when,\n\tchildren: props.children,\n});\n\nconst isMatchNode = (node: unknown): node is MatchNode<unknown> => {\n\tif (!Predicate.isObject(node)) return false;\n\tif (!Predicate.hasProperty(node, '_matchMarker')) return false;\n\treturn node._matchMarker === MATCH_MARKER;\n};\n\nconst createSwitchCache = (): SwitchCache => ({\n\tlastMatchIndex: -1,\n\tcachedChild: Option.none(),\n});\n\nconst isSignalLike = (val: unknown): val is Signal<unknown> =>\n\tPredicate.isObject(val) && Predicate.hasProperty(val, 'value');\n\nconst isConditionFunction = (val: unknown): val is () => unknown =>\n\tPredicate.isFunction(val);\n\nconst resolveConditionValue = (condition: ConditionInput): unknown => {\n\tif (isConditionFunction(condition)) {\n\t\treturn condition();\n\t}\n\n\tif (isSignalLike(condition)) {\n\t\treturn condition.value;\n\t}\n\n\treturn condition;\n};\n\nconst isTruthy = (value: unknown): value is NonNullable<unknown> =>\n\tPredicate.isNotNullable(value) && value !== false;\n\nconst findFirstMatch = (\n\tmatches: MatchNode<unknown>[]\n): Option.Option<MatchResult> => {\n\tfor (let i = 0; i < matches.length; i++) {\n\t\tconst match = matches[i];\n\t\tif (!Predicate.isNotNullable(match)) continue;\n\t\tif (!isMatchNode(match)) continue;\n\n\t\tconst value = resolveConditionValue(match.when as ConditionInput);\n\t\tif (isTruthy(value)) {\n\t\t\treturn Option.some({ index: i, value, match });\n\t\t}\n\t}\n\treturn Option.none();\n};\n\nconst renderMatchChild = (\n\tmatch: MatchNode<unknown>,\n\tvalue: NonNullable<unknown>\n): EffuseChild => {\n\tif (Predicate.isFunction(match.children)) {\n\t\treturn (match.children as (item: NonNullable<unknown>) => EffuseChild)(\n\t\t\tvalue\n\t\t);\n\t}\n\treturn match.children;\n};\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild[] => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn [];\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn [fallback()];\n\t}\n\n\treturn [fallback];\n};\n\nexport interface SwitchProps {\n\tfallback?: EffuseChild | (() => EffuseChild);\n\tchildren: MatchNode<unknown>[] | MatchNode<unknown>;\n}\n\nconst createSwitch = (props: SwitchProps): EffuseNode => {\n\tconst { fallback, children } = props;\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_cache: SwitchCache;\n\t};\n\n\tlistNode._cache = createSwitchCache();\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst cache = listNode._cache;\n\t\t\tconst matchNodes = Array.isArray(children) ? children : [children];\n\n\t\t\tconst matchResult = findFirstMatch(matchNodes);\n\n\t\t\tif (Option.isNone(matchResult)) {\n\t\t\t\tcache.lastMatchIndex = -1;\n\t\t\t\tcache.cachedChild = Option.none();\n\t\t\t\treturn resolveFallback(fallback);\n\t\t\t}\n\n\t\t\tconst { index, value, match } = matchResult.value;\n\n\t\t\tif (cache.lastMatchIndex !== index) {\n\t\t\t\tcache.lastMatchIndex = index;\n\t\t\t\tcache.cachedChild = Option.some(renderMatchChild(match, value));\n\t\t\t}\n\n\t\t\treturn pipe(\n\t\t\t\tcache.cachedChild,\n\t\t\t\tOption.match({\n\t\t\t\t\tonNone: () => [] as EffuseChild[],\n\t\t\t\t\tonSome: (child) => [child] as EffuseChild[],\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nexport const Switch = Object.assign(createSwitch, {\n\tMatch: createMatch,\n});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type {\n\tEffuseNode,\n\tEffuseChild,\n\tBlueprintNode,\n\tPortals,\n} from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { instantiateBlueprint, isBlueprint } from '../blueprint/blueprint.js';\nimport { Option, pipe, Predicate } from 'effect';\n\nexport interface DynamicProps<P extends Record<string, unknown>> {\n\tcomponent: Signal<BlueprintNode<P> | null> | (() => BlueprintNode<P> | null);\n\tprops?: P;\n\tfallback?: EffuseChild | (() => EffuseChild);\n\tportals?: Portals;\n}\n\ntype DynamicCache<P extends Record<string, unknown>> = {\n\tlastComponent: Option.Option<BlueprintNode<P>>;\n\tcachedChild: Option.Option<EffuseChild>;\n};\n\nconst createDynamicCache = <\n\tP extends Record<string, unknown>,\n>(): DynamicCache<P> => ({\n\tlastComponent: Option.none(),\n\tcachedChild: Option.none(),\n});\n\nconst resolveComponent = <P extends Record<string, unknown>>(\n\tcomponentSignal:\n\t\t| Signal<BlueprintNode<P> | null>\n\t\t| (() => BlueprintNode<P> | null)\n): Option.Option<BlueprintNode<P>> => {\n\tconst component = Predicate.isFunction(componentSignal)\n\t\t? componentSignal()\n\t\t: componentSignal.value;\n\n\treturn Option.fromNullable(component);\n};\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild[] => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn [];\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn [fallback()];\n\t}\n\n\treturn [fallback];\n};\n\nconst instantiateComponent = <P extends Record<string, unknown>>(\n\tcomponent: BlueprintNode<P>,\n\tprops: P,\n\tportals: Portals\n): EffuseChild => {\n\tif (isBlueprint(component)) {\n\t\tconst ctx = instantiateBlueprint(component.blueprint, props, portals);\n\t\treturn { ...component, ...ctx } as unknown as EffuseChild;\n\t}\n\treturn component as unknown as EffuseChild;\n};\n\nconst componentEquals = <P extends Record<string, unknown>>(\n\ta: Option.Option<BlueprintNode<P>>,\n\tb: Option.Option<BlueprintNode<P>>\n): boolean => {\n\tif (Option.isNone(a) && Option.isNone(b)) return true;\n\tif (Option.isNone(a) || Option.isNone(b)) return false;\n\treturn a.value === b.value;\n};\n\nexport const Dynamic = <P extends Record<string, unknown>>(\n\tdynamicProps: DynamicProps<P>\n): EffuseNode => {\n\tconst { component: componentSignal, props, fallback } = dynamicProps;\n\tconst portals = Predicate.isNotNullable(dynamicProps.portals)\n\t\t? dynamicProps.portals\n\t\t: {};\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_cache: DynamicCache<P>;\n\t};\n\n\tlistNode._cache = createDynamicCache<P>();\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst cache = listNode._cache;\n\t\t\tconst componentOpt = resolveComponent(componentSignal);\n\n\t\t\tif (Option.isNone(componentOpt)) {\n\t\t\t\tcache.lastComponent = Option.none();\n\t\t\t\tcache.cachedChild = Option.none();\n\t\t\t\treturn resolveFallback(fallback);\n\t\t\t}\n\n\t\t\tconst component = componentOpt.value;\n\n\t\t\tif (!componentEquals(cache.lastComponent, componentOpt)) {\n\t\t\t\tcache.lastComponent = componentOpt;\n\t\t\t\tconst resolvedProps = Predicate.isNotNullable(props)\n\t\t\t\t\t? props\n\t\t\t\t\t: ({} as P);\n\t\t\t\tcache.cachedChild = Option.some(\n\t\t\t\t\tinstantiateComponent(component, resolvedProps, portals)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn pipe(\n\t\t\t\tcache.cachedChild,\n\t\t\t\tOption.match({\n\t\t\t\t\tonNone: () => [] as EffuseChild[],\n\t\t\t\t\tonSome: (child) => [child] as EffuseChild[],\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t});\n\n\treturn listNode;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport { signal, type Signal } from '../reactivity/signal.js';\nimport { Option, Predicate } from 'effect';\n\nexport interface ErrorBoundaryProps {\n\tfallback: EffuseChild | ((error: Error, reset: () => void) => EffuseChild);\n\tchildren: EffuseChild;\n\tonError?: (error: Error) => void;\n}\n\ntype ErrorState = {\n\terror: Signal<Option.Option<Error>>;\n};\n\nconst createErrorState = (): ErrorState => ({\n\terror: signal<Option.Option<Error>>(Option.none()),\n});\n\nconst getError = (state: ErrorState): Option.Option<Error> => state.error.value;\n\nconst setError = (state: ErrorState, error: Error): void => {\n\tstate.error.value = Option.some(error);\n};\n\nconst clearError = (state: ErrorState): void => {\n\tstate.error.value = Option.none();\n};\n\nconst renderFallback = (\n\tfallback: EffuseChild | ((error: Error, reset: () => void) => EffuseChild),\n\terror: Error,\n\treset: () => void\n): EffuseChild =>\n\tPredicate.isFunction(fallback) ? fallback(error, reset) : fallback;\n\nexport const ErrorBoundary = (props: ErrorBoundaryProps): EffuseNode => {\n\tconst { fallback, children, onError } = props;\n\tconst state = createErrorState();\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_state: ErrorState;\n\t\tcapture: (error: Error) => void;\n\t};\n\n\tlistNode._state = state;\n\n\tlistNode.capture = (error: Error) => {\n\t\tsetError(state, error);\n\t\tif (Predicate.isNotNullable(onError)) {\n\t\t\tonError(error);\n\t\t}\n\t};\n\n\tconst reset = () => {\n\t\tclearError(state);\n\t};\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst errorOpt = getError(state);\n\n\t\t\tif (Option.isNone(errorOpt)) {\n\t\t\t\treturn [children] as EffuseChild[];\n\t\t\t}\n\n\t\t\treturn [renderFallback(fallback, errorOpt.value, reset)] as EffuseChild[];\n\t\t},\n\t});\n\n\treturn listNode;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { Option, pipe, Predicate, Array as Arr, Number as Num } from 'effect';\n\nexport interface RepeatProps {\n\treadonly times: number | Signal<number>;\n\treadonly children: (index: number) => EffuseChild;\n\treadonly fallback?: EffuseChild | (() => EffuseChild);\n}\n\nconst isSignal = <T>(val: unknown): val is Signal<T> =>\n\tPredicate.isObject(val) && Predicate.hasProperty(val, 'value');\n\nconst resolveCount = (times: number | Signal<number>): number =>\n\tisSignal<number>(times) ? times.value : times;\n\nconst clampNonNegative = Num.clamp({\n\tminimum: 0,\n\tmaximum: Number.MAX_SAFE_INTEGER,\n});\n\nconst resolveChild = (\n\tchild: EffuseChild | (() => EffuseChild) | undefined\n): Option.Option<EffuseChild> =>\n\tpipe(\n\t\tchild,\n\t\tOption.fromNullable,\n\t\tOption.map((c) => (Predicate.isFunction(c) ? c() : c))\n\t);\n\nexport const Repeat = (props: RepeatProps): EffuseNode => {\n\tconst { times, children: renderChild, fallback } = props;\n\n\tconst listNode = createListNode([]);\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst count = pipe(times, resolveCount, clampNonNegative, Math.floor);\n\n\t\t\tif (count === 0) {\n\t\t\t\tconst optChild = resolveChild(fallback);\n\t\t\t\treturn Option.isSome(optChild) ? [optChild.value] : [];\n\t\t\t}\n\n\t\t\treturn Arr.makeBy(count, renderChild);\n\t\t},\n\t});\n\n\treturn listNode;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { signal, getSignalDep } from '../reactivity/index.js';\nimport { Data, Option, Either, pipe, Predicate } from 'effect';\n\ntype AwaitState<T> = Data.TaggedEnum<{\n\tPending: object;\n\tSuccess: { readonly data: T };\n\tFailure: { readonly error: unknown };\n}>;\n\ninterface AwaitStateDefinition extends Data.TaggedEnum.WithGenerics<1> {\n\treadonly taggedEnum: AwaitState<this['A']>;\n}\n\nconst AwaitState = Data.taggedEnum<AwaitStateDefinition>();\n\nexport interface AwaitProps<T> {\n\treadonly promise: Promise<T> | (() => Promise<T>) | Signal<Promise<T>>;\n\treadonly pending?: EffuseChild | (() => EffuseChild);\n\treadonly error?: EffuseChild | ((error: unknown) => EffuseChild);\n\treadonly children: (data: T) => EffuseChild;\n}\n\nconst isSignalLike = <T>(val: unknown): val is Signal<T> =>\n\tPredicate.isObject(val) && Predicate.hasProperty(val, 'value');\n\nconst isPromiseFn = Predicate.isFunction;\n\nconst resolveChild = (\n\tchild: EffuseChild | (() => EffuseChild) | undefined\n): Option.Option<EffuseChild> =>\n\tpipe(\n\t\tchild,\n\t\tOption.fromNullable,\n\t\tOption.map((c) => (Predicate.isFunction(c) ? c() : c))\n\t);\n\nconst resolveErrorChild = (\n\tchild: EffuseChild | ((err: unknown) => EffuseChild) | undefined,\n\terror: unknown\n): Option.Option<EffuseChild> =>\n\tpipe(\n\t\tchild,\n\t\tOption.fromNullable,\n\t\tOption.map((c) => (Predicate.isFunction(c) ? c(error) : c))\n\t);\n\nconst optionToArray = <A>(opt: Option.Option<A>): A[] =>\n\tOption.isSome(opt) ? [opt.value] : [];\n\nconst promiseToEither = <T>(\n\tpromise: Promise<T>\n): Promise<Either.Either<T, unknown>> =>\n\tpromise.then(Either.right).catch((e: unknown) => Either.left(e));\n\nexport const Await = <T>(props: AwaitProps<T>): EffuseNode => {\n\tconst {\n\t\tpromise: promiseInput,\n\t\tpending,\n\t\terror: errorFallback,\n\t\tchildren: renderSuccess,\n\t} = props;\n\n\tconst state = signal<AwaitState<T>>(AwaitState.Pending() as AwaitState<T>);\n\tlet currentPromiseId = 0;\n\n\tconst startFetch = (promise: Promise<T>): void => {\n\t\tconst promiseId = ++currentPromiseId;\n\n\t\tvoid promiseToEither(promise).then((result) => {\n\t\t\tif (promiseId !== currentPromiseId) return;\n\n\t\t\tstate.value = pipe(\n\t\t\t\tresult,\n\t\t\t\tEither.match({\n\t\t\t\t\tonLeft: (error) => AwaitState.Failure({ error }),\n\t\t\t\t\tonRight: (data) => AwaitState.Success({ data }),\n\t\t\t\t})\n\t\t\t);\n\t\t});\n\t};\n\n\tconst getPromise = (): Promise<T> => {\n\t\tif (isSignalLike<Promise<T>>(promiseInput)) {\n\t\t\treturn promiseInput.value;\n\t\t}\n\t\tif (isPromiseFn(promiseInput)) {\n\t\t\treturn promiseInput();\n\t\t}\n\t\treturn promiseInput;\n\t};\n\n\tstartFetch(getPromise());\n\n\tif (isSignalLike<Promise<T>>(promiseInput)) {\n\t\tconst dep = getSignalDep(promiseInput);\n\t\tif (dep) {\n\t\t\tdep.subscribe(() => {\n\t\t\t\tstartFetch(promiseInput.value);\n\t\t\t});\n\t\t}\n\t}\n\n\tconst listNode = createListNode([]);\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\treturn pipe(\n\t\t\t\tstate.value,\n\t\t\t\tAwaitState.$match({\n\t\t\t\t\tPending: () => optionToArray(resolveChild(pending)),\n\t\t\t\t\tFailure: ({ error }) =>\n\t\t\t\t\t\toptionToArray(resolveErrorChild(errorFallback, error)),\n\t\t\t\t\tSuccess: ({ data }) => [renderSuccess(data)],\n\t\t\t\t})\n\t\t\t);\n\t\t},\n\t});\n\n\treturn listNode;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Config } from 'effect';\n\nexport const TransitionConfig = Config.all({\n\tenterMs: Config.integer('EFFUSE_TRANSITION_ENTER_MS').pipe(\n\t\tConfig.withDefault(300)\n\t),\n\texitMs: Config.integer('EFFUSE_TRANSITION_EXIT_MS').pipe(\n\t\tConfig.withDefault(200)\n\t),\n\tmoveMs: Config.integer('EFFUSE_TRANSITION_MOVE_MS').pipe(\n\t\tConfig.withDefault(300)\n\t),\n});\n\nexport const CacheConfig = Config.all({\n\tmaxSize: Config.integer('EFFUSE_CACHE_MAX_SIZE').pipe(Config.withDefault(10)),\n\tttlMs: Config.integer('EFFUSE_CACHE_TTL_MS').pipe(Config.withDefault(60_000)),\n});\n\nexport const TransitionDefaults = {\n\tENTER_MS: 300,\n\tEXIT_MS: 200,\n\tMOVE_MS: 300,\n} as const;\n\nexport const CacheDefaults = {\n\tMAX_SIZE: 10,\n\tTTL_MS: 60_000,\n} as const;\n\nexport const TransitionClassPrefixes = {\n\tTRANSITION: 'transition',\n\tLIST: 'list',\n} as const;\n\nexport const TransitionClassSuffixes = {\n\tENTER: '-enter',\n\tENTER_ACTIVE: '-enter-active',\n\tENTER_TO: '-enter-to',\n\tEXIT: '-exit',\n\tEXIT_ACTIVE: '-exit-active',\n\tEXIT_TO: '-exit-to',\n\tMOVE: '-move',\n} as const;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { signal } from '../reactivity/index.js';\nimport { Data, Option, Predicate } from 'effect';\nimport {\n\tTransitionDefaults,\n\tTransitionClassPrefixes,\n\tTransitionClassSuffixes,\n} from './constants.js';\n\nexport class TransitionError extends Data.TaggedError('TransitionError')<{\n\treadonly phase: 'enter' | 'exit';\n\treadonly element: Element | null;\n\treadonly cause: unknown;\n}> {}\n\nexport type TransitionState = Data.TaggedEnum<{\n\tIdle: object;\n\tEntering: { readonly element: Element };\n\tEntered: { readonly element: Element };\n\tExiting: { readonly element: Element };\n\tExited: object;\n}>;\n\nconst { Idle, Entering, Entered, Exiting, Exited, $match, $is } =\n\tData.taggedEnum<TransitionState>();\n\nexport const TransitionState = {\n\tIdle,\n\tEntering,\n\tEntered,\n\tExiting,\n\tExited,\n\t$match,\n\t$is,\n};\n\nexport const isTransitionIdle = $is('Idle');\nexport const isTransitionEntering = $is('Entering');\nexport const isTransitionEntered = $is('Entered');\nexport const isTransitionExiting = $is('Exiting');\nexport const isTransitionExited = $is('Exited');\n\nexport const matchTransitionState = $match;\n\nexport type TransitionMode = Data.TaggedEnum<{\n\tDefault: object;\n\tOutIn: object;\n\tInOut: object;\n}>;\n\nconst transitionModeEnum = Data.taggedEnum<TransitionMode>();\nexport const TransitionMode = {\n\tDefault: transitionModeEnum.Default,\n\tOutIn: transitionModeEnum.OutIn,\n\tInOut: transitionModeEnum.InOut,\n\t$match: transitionModeEnum.$match,\n\t$is: transitionModeEnum.$is,\n};\n\nexport interface TransitionClasses {\n\tenter?: string;\n\tenterActive?: string;\n\tenterTo?: string;\n\texit?: string;\n\texitActive?: string;\n\texitTo?: string;\n}\n\nexport interface TransitionDurations {\n\tenter?: number;\n\texit?: number;\n}\n\nexport interface TransitionCallbacks {\n\tonBeforeEnter?: (el: Element) => void;\n\tonEnter?: (el: Element, done: () => void) => void;\n\tonAfterEnter?: (el: Element) => void;\n\tonEnterCancelled?: (el: Element) => void;\n\tonBeforeExit?: (el: Element) => void;\n\tonExit?: (el: Element, done: () => void) => void;\n\tonAfterExit?: (el: Element) => void;\n\tonExitCancelled?: (el: Element) => void;\n}\n\nexport interface TransitionProps extends TransitionCallbacks {\n\tname?: string;\n\tmode?: TransitionMode;\n\tappear?: boolean;\n\tcss?: boolean;\n\ttype?: 'transition' | 'animation';\n\tduration?: number | TransitionDurations;\n\tenterClass?: string;\n\tenterActiveClass?: string;\n\tenterToClass?: string;\n\texitClass?: string;\n\texitActiveClass?: string;\n\texitToClass?: string;\n\tchildren: EffuseChild | Signal<EffuseChild | null>;\n}\n\ntype TransitionCache = {\n\tstate: Signal<TransitionState>;\n\tcurrentChild: Option.Option<EffuseChild>;\n\tpendingChild: Option.Option<EffuseChild>;\n\tclasses: TransitionClasses;\n\tdurations: { enter: number; exit: number };\n};\n\nconst resolveClasses = (props: TransitionProps): TransitionClasses => {\n\tconst name = props.name ?? TransitionClassPrefixes.TRANSITION;\n\treturn {\n\t\tenter: props.enterClass ?? `${name}${TransitionClassSuffixes.ENTER}`,\n\t\tenterActive:\n\t\t\tprops.enterActiveClass ??\n\t\t\t`${name}${TransitionClassSuffixes.ENTER_ACTIVE}`,\n\t\tenterTo: props.enterToClass ?? `${name}${TransitionClassSuffixes.ENTER_TO}`,\n\t\texit: props.exitClass ?? `${name}${TransitionClassSuffixes.EXIT}`,\n\t\texitActive:\n\t\t\tprops.exitActiveClass ?? `${name}${TransitionClassSuffixes.EXIT_ACTIVE}`,\n\t\texitTo: props.exitToClass ?? `${name}${TransitionClassSuffixes.EXIT_TO}`,\n\t};\n};\n\nconst resolveDurations = (\n\tprops: TransitionProps\n): { enter: number; exit: number } => {\n\tif (!Predicate.isNotNullable(props.duration)) {\n\t\treturn {\n\t\t\tenter: TransitionDefaults.ENTER_MS,\n\t\t\texit: TransitionDefaults.EXIT_MS,\n\t\t};\n\t}\n\n\tif (typeof props.duration === 'number') {\n\t\treturn { enter: props.duration, exit: props.duration };\n\t}\n\n\treturn {\n\t\tenter: props.duration.enter ?? TransitionDefaults.ENTER_MS,\n\t\texit: props.duration.exit ?? TransitionDefaults.EXIT_MS,\n\t};\n};\n\nconst addClass = (el: Element, className: string | undefined): void => {\n\tif (Predicate.isNotNullable(className) && className.length > 0) {\n\t\tel.classList.add(...className.split(' ').filter(Boolean));\n\t}\n};\n\nconst removeClass = (el: Element, className: string | undefined): void => {\n\tif (Predicate.isNotNullable(className) && className.length > 0) {\n\t\tel.classList.remove(...className.split(' ').filter(Boolean));\n\t}\n};\n\nconst resolveChild = (\n\tchildren: EffuseChild | Signal<EffuseChild | null>\n): EffuseChild | null => {\n\tif (Predicate.isFunction(children) && 'value' in children) {\n\t\treturn (children as Signal<EffuseChild | null>).value;\n\t}\n\treturn children as EffuseChild;\n};\n\nconst createCache = (props: TransitionProps): TransitionCache => ({\n\tstate: signal<TransitionState>(Idle()),\n\tcurrentChild: Option.none(),\n\tpendingChild: Option.none(),\n\tclasses: resolveClasses(props),\n\tdurations: resolveDurations(props),\n});\n\nexport const performEnter = (\n\tel: Element,\n\tclasses: TransitionClasses,\n\tdurations: { enter: number; exit: number },\n\tprops: TransitionProps,\n\tonComplete: () => void\n): void => {\n\tprops.onBeforeEnter?.(el);\n\n\taddClass(el, classes.enter);\n\taddClass(el, classes.enterActive);\n\n\trequestAnimationFrame(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\tremoveClass(el, classes.enter);\n\t\t\taddClass(el, classes.enterTo);\n\n\t\t\tif (Predicate.isNotNullable(props.onEnter)) {\n\t\t\t\tprops.onEnter(el, () => {\n\t\t\t\t\tremoveClass(el, classes.enterActive);\n\t\t\t\t\tremoveClass(el, classes.enterTo);\n\t\t\t\t\tprops.onAfterEnter?.(el);\n\t\t\t\t\tonComplete();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tremoveClass(el, classes.enterActive);\n\t\t\t\t\tremoveClass(el, classes.enterTo);\n\t\t\t\t\tprops.onAfterEnter?.(el);\n\t\t\t\t\tonComplete();\n\t\t\t\t}, durations.enter);\n\t\t\t}\n\t\t});\n\t});\n};\n\nexport const performExit = (\n\tel: Element,\n\tclasses: TransitionClasses,\n\tdurations: { enter: number; exit: number },\n\tprops: TransitionProps,\n\tonComplete: () => void\n): void => {\n\tprops.onBeforeExit?.(el);\n\n\taddClass(el, classes.exit);\n\taddClass(el, classes.exitActive);\n\n\trequestAnimationFrame(() => {\n\t\trequestAnimationFrame(() => {\n\t\t\tremoveClass(el, classes.exit);\n\t\t\taddClass(el, classes.exitTo);\n\n\t\t\tif (Predicate.isNotNullable(props.onExit)) {\n\t\t\t\tprops.onExit(el, () => {\n\t\t\t\t\tremoveClass(el, classes.exitActive);\n\t\t\t\t\tremoveClass(el, classes.exitTo);\n\t\t\t\t\tprops.onAfterExit?.(el);\n\t\t\t\t\tonComplete();\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tremoveClass(el, classes.exitActive);\n\t\t\t\t\tremoveClass(el, classes.exitTo);\n\t\t\t\t\tprops.onAfterExit?.(el);\n\t\t\t\t\tonComplete();\n\t\t\t\t}, durations.exit);\n\t\t\t}\n\t\t});\n\t});\n};\n\nexport const Transition = (props: TransitionProps): EffuseNode => {\n\tconst mode = props.mode ?? TransitionMode.Default();\n\tconst { appear = false } = props;\n\n\tconst cache = createCache(props);\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_cache: TransitionCache;\n\t\t_mounted: boolean;\n\t};\n\n\tlistNode._cache = cache;\n\tlistNode._mounted = false;\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst newChild = resolveChild(props.children);\n\t\t\tconst hasNewChild = Predicate.isNotNullable(newChild);\n\t\t\tconst hasCurrentChild = Option.isSome(cache.currentChild);\n\t\t\tconst state = cache.state.value;\n\n\t\t\tif (!listNode._mounted) {\n\t\t\t\tlistNode._mounted = true;\n\n\t\t\t\tif (hasNewChild && appear) {\n\t\t\t\t\tcache.state.value = Entering({\n\t\t\t\t\t\telement: newChild as unknown as Element,\n\t\t\t\t\t});\n\t\t\t\t\tcache.currentChild = Option.some(newChild);\n\t\t\t\t} else if (hasNewChild) {\n\t\t\t\t\tcache.currentChild = Option.some(newChild);\n\t\t\t\t\tcache.state.value = Entered({\n\t\t\t\t\t\telement: newChild as unknown as Element,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\treturn Option.match(cache.currentChild, {\n\t\t\t\t\tonNone: () => [] as EffuseChild[],\n\t\t\t\t\tonSome: (child) => [child] as EffuseChild[],\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (hasNewChild && !hasCurrentChild) {\n\t\t\t\tcache.currentChild = Option.some(newChild);\n\t\t\t\tcache.state.value = Entering({\n\t\t\t\t\telement: newChild as unknown as Element,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (!hasNewChild && hasCurrentChild && !isTransitionExiting(state)) {\n\t\t\t\tconst current = Option.getOrThrow(cache.currentChild);\n\t\t\t\tcache.state.value = Exiting({ element: current as unknown as Element });\n\t\t\t}\n\n\t\t\tif (hasNewChild && hasCurrentChild) {\n\t\t\t\tconst current = Option.getOrThrow(cache.currentChild);\n\t\t\t\tif (current !== newChild) {\n\t\t\t\t\tTransitionMode.$match(mode, {\n\t\t\t\t\t\tOutIn: () => {\n\t\t\t\t\t\t\tcache.pendingChild = Option.some(newChild);\n\t\t\t\t\t\t\tcache.state.value = Exiting({\n\t\t\t\t\t\t\t\telement: current as unknown as Element,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tInOut: () => {\n\t\t\t\t\t\t\tcache.pendingChild = Option.some(newChild);\n\t\t\t\t\t\t\tcache.state.value = Entering({\n\t\t\t\t\t\t\t\telement: newChild as unknown as Element,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tDefault: () => {\n\t\t\t\t\t\t\tcache.currentChild = Option.some(newChild);\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn Option.match(cache.currentChild, {\n\t\t\t\tonNone: () => {\n\t\t\t\t\tcache.state.value = Idle();\n\t\t\t\t\treturn [] as EffuseChild[];\n\t\t\t\t},\n\t\t\t\tonSome: (child) => [child] as EffuseChild[],\n\t\t\t});\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nexport const useTransitionState = (\n\tnode: EffuseNode\n): Signal<TransitionState> => {\n\tconst cacheNode = node as unknown as { _cache?: TransitionCache };\n\tif (Predicate.isNotNullable(cacheNode._cache)) {\n\t\treturn cacheNode._cache.state;\n\t}\n\treturn signal<TransitionState>(Idle());\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild, ListNode } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { signal, untrack } from '../reactivity/index.js';\nimport { Data, Predicate } from 'effect';\nimport {\n\tTransitionDefaults,\n\tTransitionClassPrefixes,\n\tTransitionClassSuffixes,\n} from './constants.js';\n\nexport class TransitionGroupError extends Data.TaggedError(\n\t'TransitionGroupError'\n)<{\n\treadonly key: unknown;\n\treadonly phase: 'enter' | 'exit' | 'move';\n\treadonly cause: unknown;\n}> {}\n\nexport type TransitionGroupState = Data.TaggedEnum<{\n\tIdle: object;\n\tAnimating: { readonly activeCount: number };\n}>;\n\nconst groupStateEnum = Data.taggedEnum<TransitionGroupState>();\nexport const TransitionGroupState = {\n\tIdle: groupStateEnum.Idle,\n\tAnimating: groupStateEnum.Animating,\n\t$match: groupStateEnum.$match,\n\t$is: groupStateEnum.$is,\n};\n\nexport const isGroupIdle = groupStateEnum.$is('Idle');\nexport const isGroupAnimating = groupStateEnum.$is('Animating');\n\nexport const matchGroupState = groupStateEnum.$match;\n\nexport type ItemState = Data.TaggedEnum<{\n\tEntering: { readonly element: Element };\n\tEntered: { readonly element: Element };\n\tExiting: { readonly element: Element };\n\tMoving: {\n\t\treadonly element: Element;\n\t\treadonly fromIndex: number;\n\t\treadonly toIndex: number;\n\t};\n}>;\n\nconst itemStateEnum = Data.taggedEnum<ItemState>();\nexport const ItemState = {\n\tEntering: itemStateEnum.Entering,\n\tEntered: itemStateEnum.Entered,\n\tExiting: itemStateEnum.Exiting,\n\tMoving: itemStateEnum.Moving,\n\t$match: itemStateEnum.$match,\n\t$is: itemStateEnum.$is,\n};\n\nexport const isItemEntering = itemStateEnum.$is('Entering');\nexport const isItemEntered = itemStateEnum.$is('Entered');\nexport const isItemExiting = itemStateEnum.$is('Exiting');\nexport const isItemMoving = itemStateEnum.$is('Moving');\n\nexport interface TransitionGroupClasses {\n\tenter?: string;\n\tenterActive?: string;\n\tenterTo?: string;\n\texit?: string;\n\texitActive?: string;\n\texitTo?: string;\n\tmove?: string;\n}\n\nexport interface TransitionGroupCallbacks {\n\tonBeforeEnter?: (el: Element, index: number) => void;\n\tonEnter?: (el: Element, index: number, done: () => void) => void;\n\tonAfterEnter?: (el: Element, index: number) => void;\n\tonBeforeExit?: (el: Element, index: number) => void;\n\tonExit?: (el: Element, index: number, done: () => void) => void;\n\tonAfterExit?: (el: Element, index: number) => void;\n\tonBeforeMove?: (el: Element, fromIndex: number, toIndex: number) => void;\n\tonMove?: (\n\t\tel: Element,\n\t\tfromIndex: number,\n\t\ttoIndex: number,\n\t\tdone: () => void\n\t) => void;\n\tonAfterMove?: (el: Element, fromIndex: number, toIndex: number) => void;\n}\n\nexport interface TransitionGroupProps<T> extends TransitionGroupCallbacks {\n\tname?: string;\n\ttag?: keyof HTMLElementTagNameMap;\n\tcss?: boolean;\n\tduration?: number | { enter?: number; exit?: number; move?: number };\n\tenterClass?: string;\n\tenterActiveClass?: string;\n\tenterToClass?: string;\n\texitClass?: string;\n\texitActiveClass?: string;\n\texitToClass?: string;\n\tmoveClass?: string;\n\teach: Signal<T[]> | (() => T[]);\n\tkeyExtractor?: (item: T, index: number) => unknown;\n\tchildren: (item: Signal<T>, index: Signal<number>) => EffuseNode;\n\tfallback?: EffuseChild | (() => EffuseChild);\n}\n\ntype ItemMeta<T> = {\n\tkey: unknown;\n\titemSignal: Signal<T>;\n\tindexSignal: Signal<number>;\n\tstate: ItemState | null;\n\trect?: DOMRect;\n};\n\ntype TransitionGroupCache<T> = {\n\tstate: Signal<TransitionGroupState>;\n\tcachedChildren: EffuseNode[];\n\tmeta: WeakMap<EffuseNode, ItemMeta<T>>;\n\telementMap: WeakMap<EffuseNode, Element>;\n\tclasses: TransitionGroupClasses;\n\tdurations: { enter: number; exit: number; move: number };\n};\n\nconst resolveClasses = <T>(\n\tprops: TransitionGroupProps<T>\n): TransitionGroupClasses => {\n\tconst name = props.name ?? TransitionClassPrefixes.LIST;\n\treturn {\n\t\tenter: props.enterClass ?? `${name}${TransitionClassSuffixes.ENTER}`,\n\t\tenterActive:\n\t\t\tprops.enterActiveClass ??\n\t\t\t`${name}${TransitionClassSuffixes.ENTER_ACTIVE}`,\n\t\tenterTo: props.enterToClass ?? `${name}${TransitionClassSuffixes.ENTER_TO}`,\n\t\texit: props.exitClass ?? `${name}${TransitionClassSuffixes.EXIT}`,\n\t\texitActive:\n\t\t\tprops.exitActiveClass ?? `${name}${TransitionClassSuffixes.EXIT_ACTIVE}`,\n\t\texitTo: props.exitToClass ?? `${name}${TransitionClassSuffixes.EXIT_TO}`,\n\t\tmove: props.moveClass ?? `${name}${TransitionClassSuffixes.MOVE}`,\n\t};\n};\n\nconst resolveDurations = <T>(\n\tprops: TransitionGroupProps<T>\n): { enter: number; exit: number; move: number } => {\n\tif (!Predicate.isNotNullable(props.duration)) {\n\t\treturn {\n\t\t\tenter: TransitionDefaults.ENTER_MS,\n\t\t\texit: TransitionDefaults.EXIT_MS,\n\t\t\tmove: TransitionDefaults.MOVE_MS,\n\t\t};\n\t}\n\n\tif (typeof props.duration === 'number') {\n\t\treturn {\n\t\t\tenter: props.duration,\n\t\t\texit: props.duration,\n\t\t\tmove: props.duration,\n\t\t};\n\t}\n\n\treturn {\n\t\tenter: props.duration.enter ?? TransitionDefaults.ENTER_MS,\n\t\texit: props.duration.exit ?? TransitionDefaults.EXIT_MS,\n\t\tmove: props.duration.move ?? TransitionDefaults.MOVE_MS,\n\t};\n};\n\nconst resolveList = <T>(listSignal: Signal<T[]> | (() => T[])): T[] => {\n\tif (Predicate.isFunction(listSignal) && !('value' in listSignal)) {\n\t\treturn listSignal();\n\t}\n\treturn (listSignal as Signal<T[]>).value;\n};\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild[] => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn [];\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn [fallback()];\n\t}\n\n\treturn [fallback];\n};\n\nconst createCache = <T>(\n\tprops: TransitionGroupProps<T>\n): TransitionGroupCache<T> => ({\n\tstate: signal<TransitionGroupState>(TransitionGroupState.Idle()),\n\tcachedChildren: [],\n\tmeta: new WeakMap(),\n\telementMap: new WeakMap(),\n\tclasses: resolveClasses(props),\n\tdurations: resolveDurations(props),\n});\n\nexport const TransitionGroup = <T>(\n\tprops: TransitionGroupProps<T>\n): EffuseNode => {\n\tconst {\n\t\teach: listSignal,\n\t\tchildren: renderChild,\n\t\tkeyExtractor: getKey,\n\t} = props;\n\n\tconst keyFn = Predicate.isNotNullable(getKey)\n\t\t? getKey\n\t\t: (_item: T, i: number) => i;\n\n\tconst cache = createCache(props);\n\n\tconst listNode = createListNode([]) as ListNode & {\n\t\t_cache: TransitionGroupCache<T>;\n\t};\n\n\tlistNode._cache = cache;\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst newItems = resolveList(listSignal);\n\t\t\tif (!Array.isArray(newItems)) return [];\n\n\t\t\tif (newItems.length === 0) {\n\t\t\t\tcache.cachedChildren = [];\n\t\t\t\treturn resolveFallback(props.fallback);\n\t\t\t}\n\n\t\t\tconst prevChildren = cache.cachedChildren;\n\t\t\tconst newChildren: EffuseNode[] = Array.from({ length: newItems.length });\n\t\t\tconst keyToOldNode = new Map<unknown, EffuseNode>();\n\t\t\tconst seenKeys = new Set<unknown>();\n\t\t\tlet animatingCount = 0;\n\n\t\t\tfor (const child of prevChildren) {\n\t\t\t\tconst meta = cache.meta.get(child);\n\t\t\t\tif (Predicate.isNotNullable(meta)) {\n\t\t\t\t\tkeyToOldNode.set(meta.key, child);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (let i = 0; i < newItems.length; i++) {\n\t\t\t\tconst item = newItems[i];\n\t\t\t\tif (!Predicate.isNotNullable(item)) continue;\n\n\t\t\t\tconst key = keyFn(item, i);\n\t\t\t\tseenKeys.add(key);\n\n\t\t\t\tconst existingNode = keyToOldNode.get(key);\n\n\t\t\t\tif (Predicate.isNotNullable(existingNode)) {\n\t\t\t\t\tconst meta = cache.meta.get(existingNode);\n\t\t\t\t\tif (!Predicate.isNotNullable(meta)) continue;\n\n\t\t\t\t\tif (meta.itemSignal.value !== item) {\n\t\t\t\t\t\tmeta.itemSignal.value = item;\n\t\t\t\t\t}\n\t\t\t\t\tif (meta.indexSignal.value !== i) {\n\t\t\t\t\t\tconst el = cache.elementMap.get(existingNode);\n\t\t\t\t\t\tif (Predicate.isNotNullable(el)) {\n\t\t\t\t\t\t\tmeta.state = ItemState.Moving({\n\t\t\t\t\t\t\t\telement: el,\n\t\t\t\t\t\t\t\tfromIndex: meta.indexSignal.value,\n\t\t\t\t\t\t\t\ttoIndex: i,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmeta.indexSignal.value = i;\n\t\t\t\t\t\tanimatingCount++;\n\t\t\t\t\t}\n\t\t\t\t\tnewChildren[i] = existingNode;\n\t\t\t\t} else {\n\t\t\t\t\tconst itemSignal = signal<T>(item);\n\t\t\t\t\tconst indexSignal = signal<number>(i);\n\t\t\t\t\tconst node = untrack(() => renderChild(itemSignal, indexSignal));\n\t\t\t\t\tconst meta: ItemMeta<T> = {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\titemSignal,\n\t\t\t\t\t\tindexSignal,\n\t\t\t\t\t\tstate: null,\n\t\t\t\t\t};\n\t\t\t\t\tcache.meta.set(node, meta);\n\t\t\t\t\tanimatingCount++;\n\t\t\t\t\tnewChildren[i] = node;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const child of prevChildren) {\n\t\t\t\tconst meta = cache.meta.get(child);\n\t\t\t\tif (!Predicate.isNotNullable(meta)) continue;\n\t\t\t\tif (!seenKeys.has(meta.key)) {\n\t\t\t\t\tconst el = cache.elementMap.get(child);\n\t\t\t\t\tif (Predicate.isNotNullable(el)) {\n\t\t\t\t\t\tmeta.state = ItemState.Exiting({ element: el });\n\t\t\t\t\t}\n\t\t\t\t\tanimatingCount++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcache.state.value =\n\t\t\t\tanimatingCount > 0\n\t\t\t\t\t? TransitionGroupState.Animating({ activeCount: animatingCount })\n\t\t\t\t\t: TransitionGroupState.Idle();\n\t\t\tcache.cachedChildren = newChildren;\n\t\t\treturn newChildren;\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nexport const useTransitionGroupState = (\n\tnode: EffuseNode\n): {\n\tstate: Signal<TransitionGroupState>;\n\tisIdle: () => boolean;\n\tisAnimating: () => boolean;\n} => {\n\tconst cacheNode = node as unknown as {\n\t\t_cache?: TransitionGroupCache<unknown>;\n\t};\n\tif (Predicate.isNotNullable(cacheNode._cache)) {\n\t\tconst cache = cacheNode._cache;\n\t\treturn {\n\t\t\tstate: cache.state,\n\t\t\tisIdle: () => isGroupIdle(cache.state.value),\n\t\t\tisAnimating: () => isGroupAnimating(cache.state.value),\n\t\t};\n\t}\n\tconst defaultState = signal<TransitionGroupState>(\n\t\tTransitionGroupState.Idle()\n\t);\n\treturn {\n\t\tstate: defaultState,\n\t\tisIdle: () => true,\n\t\tisAnimating: () => false,\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { signal } from '../reactivity/index.js';\nimport {\n\tCache,\n\tData,\n\tDuration,\n\tEffect,\n\tExit,\n\tMatch,\n\tOption,\n\tPredicate,\n\tScope,\n} from 'effect';\nimport { CacheDefaults } from './constants.js';\n\nexport class KeepAliveError extends Data.TaggedError('KeepAliveError')<{\n\treadonly key: string;\n\treadonly action: 'cache' | 'prune' | 'restore';\n\treadonly cause: unknown;\n}> {}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport class CacheMissError extends Data.TaggedError('CacheMissError')<{}> {}\n\nexport interface KeepAliveProps {\n\tinclude?: string[] | RegExp;\n\texclude?: string[] | RegExp;\n\tmax?: number;\n\tchildren: EffuseChild | Signal<EffuseChild | null>;\n}\n\nexport type CachedComponent = Data.TaggedEnum<{\n\tCached: {\n\t\treadonly key: string;\n\t\treadonly child: EffuseChild;\n\t\treadonly timestamp: number;\n\t};\n\tFresh: { readonly key: string; readonly child: EffuseChild };\n}>;\n\nconst { Cached, Fresh } = Data.taggedEnum<CachedComponent>();\nexport const CachedComponent = { Cached, Fresh };\n\nexport interface KeepAliveNode extends ReturnType<typeof createListNode> {\n\treadonly _cache: Cache.Cache<string, CachedComponent, CacheMissError>;\n\treadonly _activeKey: Signal<string | null>;\n\treadonly _cleanup: () => void;\n\treadonly children: EffuseChild[];\n}\n\nconst isSignal = <T>(value: unknown): value is Signal<T> =>\n\tPredicate.isNotNullable(value) &&\n\ttypeof value === 'object' &&\n\tPredicate.hasProperty(value, 'value');\n\nconst hasType = (value: unknown): value is { type: unknown } =>\n\tPredicate.isNotNullable(value) &&\n\ttypeof value === 'object' &&\n\tPredicate.hasProperty(value, 'type');\n\nconst matchesPattern = (\n\tname: string,\n\tpattern: string[] | RegExp | undefined\n): boolean =>\n\tPredicate.isNotNullable(pattern) &&\n\t(Array.isArray(pattern) ? pattern.includes(name) : pattern.test(name));\n\nconst shouldCache = (\n\tname: string,\n\tinclude: string[] | RegExp | undefined,\n\texclude: string[] | RegExp | undefined\n): boolean =>\n\t!matchesPattern(name, exclude) &&\n\t(!Predicate.isNotNullable(include) || matchesPattern(name, include));\n\nconst getComponentKey = (child: EffuseChild): string => {\n\tif (!hasType(child)) return String(Date.now());\n\tconst { type } = child;\n\tif (typeof type === 'string') return type;\n\tif (\n\t\ttypeof type === 'object' &&\n\t\tPredicate.isNotNullable(type) &&\n\t\tPredicate.hasProperty(type, 'name')\n\t) {\n\t\tconst name = (type as { name: unknown }).name;\n\t\tif (typeof name === 'string') return name;\n\t}\n\treturn String(Date.now());\n};\n\nconst resolveChild = (\n\tchildren: EffuseChild | Signal<EffuseChild | null>\n): Option.Option<EffuseChild> =>\n\tisSignal<EffuseChild | null>(children)\n\t\t? Option.fromNullable(children.value)\n\t\t: Option.fromNullable(children);\n\nexport const KeepAlive = (props: KeepAliveProps): EffuseNode => {\n\tconst { include, exclude, max = CacheDefaults.MAX_SIZE } = props;\n\n\tconst scope = Effect.runSync(Scope.make());\n\tconst cache = Effect.runSync(\n\t\tCache.make<string, CachedComponent, CacheMissError>({\n\t\t\tcapacity: max,\n\t\t\ttimeToLive: Duration.infinity,\n\t\t\tlookup: () => Effect.fail(new CacheMissError()),\n\t\t}).pipe(Scope.extend(scope))\n\t);\n\n\tconst activeKey = signal<string | null>(null);\n\tconst listNode = createListNode([]) as KeepAliveNode;\n\n\tObject.assign(listNode, {\n\t\t_cache: cache,\n\t\t_activeKey: activeKey,\n\t\t_cleanup: () => {\n\t\t\tEffect.runSync(Scope.close(scope, Exit.void));\n\t\t},\n\t});\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget(): EffuseChild[] {\n\t\t\treturn Option.match(resolveChild(props.children), {\n\t\t\t\tonNone: () => {\n\t\t\t\t\tactiveKey.value = null;\n\t\t\t\t\treturn [];\n\t\t\t\t},\n\t\t\t\tonSome: (child) => {\n\t\t\t\t\tconst key = getComponentKey(child);\n\n\t\t\t\t\tif (!shouldCache(key, include, exclude)) {\n\t\t\t\t\t\tactiveKey.value = null;\n\t\t\t\t\t\treturn [child];\n\t\t\t\t\t}\n\n\t\t\t\t\tconst exit = Effect.runSync(Effect.exit(cache.get(key)));\n\t\t\t\t\tif (Exit.isSuccess(exit)) {\n\t\t\t\t\t\tactiveKey.value = key;\n\t\t\t\t\t\treturn Match.value(exit.value).pipe(\n\t\t\t\t\t\t\tMatch.tag('Cached', (c) => [c.child]),\n\t\t\t\t\t\t\tMatch.tag('Fresh', (f) => [f.child]),\n\t\t\t\t\t\t\tMatch.exhaustive\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tEffect.runSync(cache.set(key, Fresh({ key, child })));\n\t\t\t\t\tactiveKey.value = key;\n\t\t\t\t\treturn [child];\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nexport const useKeepAliveContext = (\n\tnode: EffuseNode\n): { activeKey: Signal<string | null>; cacheSize: () => number } => {\n\tconst cacheNode = node as unknown as Partial<KeepAliveNode>;\n\n\tif (\n\t\tPredicate.isNotNullable(cacheNode._cache) &&\n\t\tPredicate.isNotNullable(cacheNode._activeKey)\n\t) {\n\t\tconst nodeCache = cacheNode._cache;\n\t\treturn {\n\t\t\tactiveKey: cacheNode._activeKey,\n\t\t\tcacheSize: () => Effect.runSync(nodeCache.size),\n\t\t};\n\t}\n\n\treturn { activeKey: signal<string | null>(null), cacheSize: () => 0 };\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { signal } from '../reactivity/index.js';\nimport { Data, Predicate } from 'effect';\n\ntype AsyncStatusInternal = Data.TaggedEnum<{\n\tIdle: object;\n\tLoading: object;\n\tSuccess: object;\n\tError: { readonly error: unknown };\n}>;\n\nconst { Idle, Loading, Success, Error, $is } =\n\tData.taggedEnum<AsyncStatusInternal>();\n\nexport type AsyncStatus = 'idle' | 'loading' | 'success' | 'error';\nexport type AsyncBoundaryStatus = AsyncStatus;\n\nconst isAsyncIdleInternal = (\n\ts: AsyncStatusInternal\n): s is Extract<AsyncStatusInternal, { _tag: 'Idle' }> => $is('Idle')(s);\nconst isAsyncLoadingInternal = (\n\ts: AsyncStatusInternal\n): s is Extract<AsyncStatusInternal, { _tag: 'Loading' }> => $is('Loading')(s);\nconst isAsyncSuccessInternal = (\n\ts: AsyncStatusInternal\n): s is Extract<AsyncStatusInternal, { _tag: 'Success' }> => $is('Success')(s);\nconst isAsyncErrorInternal = (\n\ts: AsyncStatusInternal\n): s is Extract<AsyncStatusInternal, { _tag: 'Error' }> => $is('Error')(s);\n\nexport const isAsyncIdle = (s: AsyncStatus): s is 'idle' => s === 'idle';\nexport const isAsyncLoading = (s: AsyncStatus): s is 'loading' =>\n\ts === 'loading';\nexport const isAsyncSuccess = (s: AsyncStatus): s is 'success' =>\n\ts === 'success';\nexport const isAsyncError = (s: AsyncStatus): s is 'error' => s === 'error';\n\nexport const matchAsyncStatus = <R>(\n\tstatus: AsyncStatus,\n\thandlers: {\n\t\tonIdle: () => R;\n\t\tonLoading: () => R;\n\t\tonSuccess: () => R;\n\t\tonError: (error: unknown) => R;\n\t}\n): R => {\n\tswitch (status) {\n\t\tcase 'idle':\n\t\t\treturn handlers.onIdle();\n\t\tcase 'loading':\n\t\t\treturn handlers.onLoading();\n\t\tcase 'success':\n\t\t\treturn handlers.onSuccess();\n\t\tcase 'error':\n\t\t\treturn handlers.onError(undefined);\n\t}\n};\n\nexport class AsyncBoundaryError extends Data.TaggedError('AsyncBoundaryError')<{\n\treadonly cause: unknown;\n\treadonly retryCount: number;\n}> {}\n\nexport interface AsyncBoundaryProps {\n\tloading?: EffuseChild | (() => EffuseChild);\n\terror?: EffuseChild | ((error: unknown, retry: () => void) => EffuseChild);\n\tonError?: (error: unknown) => void;\n\tonRetry?: () => void;\n\tchildren: EffuseChild;\n}\n\ntype AsyncBoundaryCache = {\n\tstatus: Signal<AsyncStatusInternal>;\n\terror: Signal<unknown>;\n\tretryCount: Signal<number>;\n};\n\nconst createCache = (): AsyncBoundaryCache => ({\n\tstatus: signal<AsyncStatusInternal>(Idle()),\n\terror: signal<unknown>(null),\n\tretryCount: signal<number>(0),\n});\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild | null => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn null;\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn fallback();\n\t}\n\n\treturn fallback;\n};\n\nconst resolveErrorFallback = (\n\terrorFallback:\n\t\t| EffuseChild\n\t\t| ((error: unknown, retry: () => void) => EffuseChild)\n\t\t| undefined,\n\terror: unknown,\n\tretry: () => void\n): EffuseChild | null => {\n\tif (!Predicate.isNotNullable(errorFallback)) {\n\t\treturn null;\n\t}\n\n\tif (Predicate.isFunction(errorFallback)) {\n\t\treturn errorFallback(error, retry);\n\t}\n\n\treturn errorFallback;\n};\n\nexport const AsyncBoundary = (props: AsyncBoundaryProps): EffuseNode => {\n\tconst cache = createCache();\n\n\tconst retry = (): void => {\n\t\tcache.error.value = null;\n\t\tcache.status.value = Idle();\n\t\tcache.retryCount.value += 1;\n\t\tprops.onRetry?.();\n\t};\n\n\tconst handleError = (error: unknown): void => {\n\t\tcache.error.value = error;\n\t\tcache.status.value = Error({ error });\n\t\tprops.onError?.(error);\n\t};\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_cache: AsyncBoundaryCache;\n\t\t_retry: () => void;\n\t\t_handleError: (error: unknown) => void;\n\t};\n\n\tlistNode._cache = cache;\n\tlistNode._retry = retry;\n\tlistNode._handleError = handleError;\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tconst status = cache.status.value;\n\n\t\t\tswitch (status._tag) {\n\t\t\t\tcase 'Idle':\n\t\t\t\t\treturn [props.children];\n\t\t\t\tcase 'Loading': {\n\t\t\t\t\tconst loadingChild = resolveFallback(props.loading);\n\t\t\t\t\treturn Predicate.isNotNullable(loadingChild) ? [loadingChild] : [];\n\t\t\t\t}\n\t\t\t\tcase 'Success':\n\t\t\t\t\treturn [props.children];\n\t\t\t\tcase 'Error': {\n\t\t\t\t\tconst errorChild = resolveErrorFallback(\n\t\t\t\t\t\tprops.error,\n\t\t\t\t\t\tstatus.error,\n\t\t\t\t\t\tretry\n\t\t\t\t\t);\n\t\t\t\t\treturn Predicate.isNotNullable(errorChild) ? [errorChild] : [];\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nexport const useAsyncBoundary = (\n\tnode: EffuseNode\n): {\n\tstatus: AsyncStatus;\n\terror: unknown;\n\tretry: () => void;\n\tsetLoading: () => void;\n\tsetSuccess: () => void;\n\tsetError: (error: unknown) => void;\n\tisIdle: () => boolean;\n\tisLoading: () => boolean;\n\tisSuccess: () => boolean;\n\tisError: () => boolean;\n} => {\n\tconst cacheNode = node as unknown as {\n\t\t_cache?: AsyncBoundaryCache;\n\t\t_retry?: () => void;\n\t\t_handleError?: (error: unknown) => void;\n\t};\n\n\tif (\n\t\tPredicate.isNotNullable(cacheNode._cache) &&\n\t\tPredicate.isNotNullable(cacheNode._retry) &&\n\t\tPredicate.isNotNullable(cacheNode._handleError)\n\t) {\n\t\tconst cache = cacheNode._cache;\n\t\tconst handleErrorFn = cacheNode._handleError;\n\n\t\tconst getStatus = (): AsyncStatus => {\n\t\t\tconst s = cache.status.value;\n\t\t\tif (isAsyncIdleInternal(s)) return 'idle';\n\t\t\tif (isAsyncLoadingInternal(s)) return 'loading';\n\t\t\tif (isAsyncSuccessInternal(s)) return 'success';\n\t\t\tif (isAsyncErrorInternal(s)) return 'error';\n\t\t\treturn 'idle';\n\t\t};\n\n\t\treturn {\n\t\t\tget status() {\n\t\t\t\treturn getStatus();\n\t\t\t},\n\t\t\tget error() {\n\t\t\t\treturn cache.error.value;\n\t\t\t},\n\t\t\tretry: cacheNode._retry,\n\t\t\tsetLoading: () => {\n\t\t\t\tcache.status.value = Loading();\n\t\t\t},\n\t\t\tsetSuccess: () => {\n\t\t\t\tcache.status.value = Success();\n\t\t\t},\n\t\t\tsetError: (error: unknown) => {\n\t\t\t\thandleErrorFn(error);\n\t\t\t},\n\t\t\tisIdle: () => isAsyncIdleInternal(cache.status.value),\n\t\t\tisLoading: () => isAsyncLoadingInternal(cache.status.value),\n\t\t\tisSuccess: () => isAsyncSuccessInternal(cache.status.value),\n\t\t\tisError: () => isAsyncErrorInternal(cache.status.value),\n\t\t};\n\t}\n\n\treturn {\n\t\tstatus: 'idle',\n\t\terror: null,\n\t\tretry: () => {},\n\t\tsetLoading: () => {},\n\t\tsetSuccess: () => {},\n\t\tsetError: () => {},\n\t\tisIdle: () => true,\n\t\tisLoading: () => false,\n\t\tisSuccess: () => false,\n\t\tisError: () => false,\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { EffuseNode, EffuseChild } from '../render/node.js';\nimport { createListNode } from '../render/node.js';\nimport type { Signal } from '../types/index.js';\nimport { signal } from '../reactivity/index.js';\nimport { Data, Option, Predicate } from 'effect';\n\nexport class DeferredError extends Data.TaggedError('DeferredError')<{\n\treadonly timeout: number;\n\treadonly cause: unknown;\n}> {}\n\nexport interface DeferredProps {\n\ttimeout?: number;\n\tfallback?: EffuseChild | (() => EffuseChild);\n\tchildren: EffuseChild;\n}\n\ntype DeferredCache = {\n\tready: Signal<boolean>;\n\tchild: Option.Option<EffuseChild>;\n\ttimerId: number | null;\n};\n\nconst createCache = (): DeferredCache => ({\n\tready: signal<boolean>(false),\n\tchild: Option.none(),\n\ttimerId: null,\n});\n\nconst resolveFallback = (\n\tfallback: EffuseChild | (() => EffuseChild) | undefined\n): EffuseChild | null => {\n\tif (!Predicate.isNotNullable(fallback)) {\n\t\treturn null;\n\t}\n\n\tif (Predicate.isFunction(fallback)) {\n\t\treturn fallback();\n\t}\n\n\treturn fallback;\n};\n\nconst DEFAULT_TIMEOUT_MS = 0;\n\nexport const Deferred = (props: DeferredProps): EffuseNode => {\n\tconst { timeout = DEFAULT_TIMEOUT_MS, fallback } = props;\n\n\tconst cache = createCache();\n\n\tconst listNode = createListNode([]) as ReturnType<typeof createListNode> & {\n\t\t_cache: DeferredCache;\n\t\t_mounted: boolean;\n\t};\n\n\tlistNode._cache = cache;\n\tlistNode._mounted = false;\n\n\tObject.defineProperty(listNode, 'children', {\n\t\tenumerable: true,\n\t\tconfigurable: true,\n\t\tget() {\n\t\t\tif (!listNode._mounted) {\n\t\t\t\tlistNode._mounted = true;\n\t\t\t\tcache.child = Option.some(props.children);\n\n\t\t\t\tif (timeout <= DEFAULT_TIMEOUT_MS) {\n\t\t\t\t\tqueueMicrotask(() => {\n\t\t\t\t\t\tcache.ready.value = true;\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcache.timerId = window.setTimeout(() => {\n\t\t\t\t\t\tcache.ready.value = true;\n\t\t\t\t\t\tcache.timerId = null;\n\t\t\t\t\t}, timeout);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!cache.ready.value) {\n\t\t\t\tconst fallbackChild = resolveFallback(fallback);\n\t\t\t\treturn Predicate.isNotNullable(fallbackChild) ? [fallbackChild] : [];\n\t\t\t}\n\n\t\t\treturn Option.match(cache.child, {\n\t\t\t\tonNone: () => [] as EffuseChild[],\n\t\t\t\tonSome: (child) => [child] as EffuseChild[],\n\t\t\t});\n\t\t},\n\t});\n\n\treturn listNode;\n};\n\nexport const useDeferredState = (\n\tnode: EffuseNode\n): { ready: Signal<boolean>; cancel: () => void } => {\n\tconst cacheNode = node as unknown as { _cache?: DeferredCache };\n\n\tif (Predicate.isNotNullable(cacheNode._cache)) {\n\t\tconst nodeCache = cacheNode._cache;\n\t\treturn {\n\t\t\tready: nodeCache.ready,\n\t\t\tcancel: () => {\n\t\t\t\tif (Predicate.isNotNullable(nodeCache.timerId)) {\n\t\t\t\t\twindow.clearTimeout(nodeCache.timerId);\n\t\t\t\t\tnodeCache.timerId = null;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t}\n\n\treturn {\n\t\tready: signal<boolean>(true),\n\t\tcancel: () => {},\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data, Predicate } from 'effect';\n\nexport const TaggedError = Data.TaggedError;\n\nexport type TaggedErrorLike = Error & { readonly _tag: string };\n\nexport const isTaggedError = (value: unknown): value is TaggedErrorLike =>\n\tvalue instanceof Error &&\n\tPredicate.hasProperty(value, '_tag') &&\n\tPredicate.isString(value._tag);\n\nexport const hasTag = <Tag extends string>(\n\tvalue: unknown,\n\ttag: Tag\n): value is Error & { readonly _tag: Tag } =>\n\tisTaggedError(value) && value._tag === tag;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { TaggedError } from './tagged.js';\n\nexport class RenderError extends TaggedError('RenderError')<{\n\treadonly message: string;\n\treadonly node?: unknown;\n\treadonly element?: unknown;\n}> {}\n\nexport class MountError extends TaggedError('MountError')<{\n\treadonly message: string;\n\treadonly target?: string | Element;\n}> {}\n\nexport class BlueprintError extends TaggedError('BlueprintError')<{\n\treadonly message: string;\n\treadonly blueprint?: unknown;\n\treadonly props?: unknown;\n}> {}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport type { BlueprintDef, EffuseChild } from '../render/node.js';\nimport { el } from '../render/element.js';\nimport { render } from '../render/index.js';\nimport { MountError, RenderError } from '../errors/internal.js';\n\nexport interface Canvas {\n\tpaint: <P extends Record<string, unknown>>(\n\t\tblueprint: BlueprintDef<P>,\n\t\tprops?: P\n\t) => void;\n\n\trender: (node: EffuseChild) => void;\n\n\tdispose: () => void;\n\n\tpaintEffect: <P extends Record<string, unknown>>(\n\t\tblueprint: BlueprintDef<P>,\n\t\tprops?: P\n\t) => Effect.Effect<void, RenderError | MountError>;\n\n\trenderEffect: (node: EffuseChild) => Effect.Effect<void, RenderError>;\n}\n\nexport const canvas = (target: Element | string): Canvas => {\n\tconst container =\n\t\ttypeof target === 'string' ? document.querySelector(target) : target;\n\n\tif (!container) {\n\t\tconst targetStr =\n\t\t\ttypeof target === 'string' ? target : `<${target.tagName.toLowerCase()}>`;\n\t\tthrow new MountError({\n\t\t\tmessage: `Canvas target not found: ${targetStr}`,\n\t\t\ttarget,\n\t\t});\n\t}\n\n\tlet cleanupFn: (() => void) | null = null;\n\n\tconst canvasPaintEffect = <P extends Record<string, unknown>>(\n\t\tblueprint: BlueprintDef<P>,\n\t\tprops?: P\n\t): Effect.Effect<void, RenderError | MountError> =>\n\t\tEffect.try({\n\t\t\ttry: () => {\n\t\t\t\tif (cleanupFn) {\n\t\t\t\t\tcleanupFn();\n\t\t\t\t\tcleanupFn = null;\n\t\t\t\t}\n\n\t\t\t\tconst node = el(blueprint, props ?? ({} as P));\n\t\t\t\tcleanupFn = render(node as EffuseChild, container);\n\t\t\t},\n\t\t\tcatch: (error) =>\n\t\t\t\tnew RenderError({\n\t\t\t\t\tmessage: `Paint failed: ${String(error)}`,\n\t\t\t\t\tnode: undefined,\n\t\t\t\t}),\n\t\t});\n\n\tconst canvasRenderEffect = (\n\t\tnode: EffuseChild\n\t): Effect.Effect<void, RenderError> =>\n\t\tEffect.try({\n\t\t\ttry: () => {\n\t\t\t\tif (cleanupFn) {\n\t\t\t\t\tcleanupFn();\n\t\t\t\t\tcleanupFn = null;\n\t\t\t\t}\n\n\t\t\t\tcleanupFn = render(node, container);\n\t\t\t},\n\t\t\tcatch: (error) =>\n\t\t\t\tnew RenderError({\n\t\t\t\t\tmessage: `Render failed: ${String(error)}`,\n\t\t\t\t\tnode,\n\t\t\t\t}),\n\t\t});\n\n\treturn {\n\t\tpaint: <P extends Record<string, unknown>>(\n\t\t\tblueprint: BlueprintDef<P>,\n\t\t\tprops?: P\n\t\t): void => {\n\t\t\tEffect.runSync(canvasPaintEffect(blueprint, props));\n\t\t},\n\n\t\trender: (node: EffuseChild): void => {\n\t\t\tEffect.runSync(canvasRenderEffect(node));\n\t\t},\n\n\t\tdispose: (): void => {\n\t\t\tif (cleanupFn) {\n\t\t\t\tcleanupFn();\n\t\t\t\tcleanupFn = null;\n\t\t\t}\n\t\t\tcontainer.innerHTML = '';\n\t\t},\n\n\t\tpaintEffect: canvasPaintEffect,\n\t\trenderEffect: canvasRenderEffect,\n\t};\n};\n\nexport const canvasEffect = (\n\ttarget: Element | string\n): Effect.Effect<Canvas, MountError> =>\n\tEffect.try({\n\t\ttry: () => canvas(target),\n\t\tcatch: (error) =>\n\t\t\tnew MountError({\n\t\t\t\tmessage: String(error),\n\t\t\t\ttarget,\n\t\t\t}),\n\t});\n\nexport const mount = <P = Record<string, unknown>>(\n\tblueprint: BlueprintDef<P>,\n\ttarget: Element | string,\n\tprops?: P\n): Canvas => {\n\tconst c = canvas(target);\n\tc.paint(blueprint as BlueprintDef, props as Record<string, unknown>);\n\treturn c;\n};\n\nexport const mountEffect = <P extends Record<string, unknown>>(\n\tblueprint: BlueprintDef<P>,\n\ttarget: Element | string,\n\tprops?: P\n): Effect.Effect<Canvas, MountError | RenderError> =>\n\tEffect.gen(function* () {\n\t\tconst c = yield* canvasEffect(target);\n\t\tyield* c.paintEffect(blueprint, props);\n\t\treturn c;\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport { getGlobalTracing } from './global.js';\n\nconst formatValue = (v: unknown): string => {\n\tif (v === null) return 'null';\n\tif (v === undefined) return 'undefined';\n\tif (Predicate.isString(v)) return `'${v}'`;\n\tif (Predicate.isObject(v)) return '{...}';\n\tif (Predicate.isNumber(v) || Predicate.isBoolean(v)) return String(v);\n\treturn 'unknown';\n};\n\nconst formatConfigSummary = (config?: Record<string, unknown>): string => {\n\tif (!config || Object.keys(config).length === 0) return '';\n\tconst entries = Object.entries(config)\n\t\t.map(([k, v]) => `${k}: ${formatValue(v)}`)\n\t\t.join(', ');\n\treturn `({ ${entries} })`;\n};\n\nexport const traceHookSetup = (\n\thookName: string,\n\tduration: number,\n\tconfig?: Record<string, unknown>\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('hooks'))\n\t\treturn;\n\n\tconst name = `${hookName}${formatConfigSummary(config)}`;\n\tconst data: Record<string, unknown> =\n\t\tconfig && Object.keys(config).length > 0 ? { ...config } : {};\n\n\ttracing.logWithDuration('hooks', 'hook:setup', name, duration, data);\n};\n\nexport const traceHookEffect = (\n\thookName: string,\n\teffectIndex: number,\n\tduration: number\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('hooks'))\n\t\treturn;\n\n\ttracing.logWithDuration(\n\t\t'hooks',\n\t\t'hook:effect',\n\t\t`${hookName}[${String(effectIndex)}]`,\n\t\tduration\n\t);\n};\n\nexport const traceHookCleanup = (hookName: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('hooks'))\n\t\treturn;\n\n\ttracing.log('hooks', 'hook:cleanup', hookName);\n};\n\nexport const traceHookDispose = (\n\thookName: string,\n\tduration: number,\n\tcleanupCount: number\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('hooks'))\n\t\treturn;\n\n\ttracing.logWithDuration('hooks', 'hook:dispose', hookName, duration, {\n\t\tcleanups: cleanupCount,\n\t});\n};\n\nexport const traceHookMount = (hookName: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('hooks'))\n\t\treturn;\n\n\ttracing.log('hooks', 'hook:mount', hookName);\n};\n","import { Data } from 'effect';\n\nexport class HookLayerNotReadyError extends Data.TaggedError(\n\t'HookLayerNotReadyError'\n)<{\n\treadonly hookContext: string;\n\treadonly layerName: string;\n}> {\n\tget message(): string {\n\t\treturn (\n\t\t\t`[defineHook] Cannot access layer \"${this.layerName}\" - layer runtime not initialized. ` +\n\t\t\t`Ensure hooks using ${this.hookContext}() are called within mounted components.`\n\t\t);\n\t}\n}\n\nexport type HookError = HookLayerNotReadyError;\n","import { Effect, Scope, Exit, Predicate } from 'effect';\nimport { signal } from '../reactivity/signal.js';\nimport { computed } from '../reactivity/computed.js';\nimport { watchEffect as reactiveEffect } from '../effects/effect.js';\nimport {\n\tgetLayerContext,\n\tgetLayerService,\n\tisLayerRuntimeReady,\n} from '../layers/context.js';\nimport {\n\ttraceHookEffect,\n\ttraceHookCleanup,\n\ttraceHookDispose,\n} from '../layers/tracing/hooks.js';\nimport { HookLayerNotReadyError } from './errors.js';\nimport type {\n\tHookContext,\n\tHookCleanup,\n\tHookScope,\n\tHookFinalizer,\n\tEffectCallback,\n} from './types.js';\nimport type {\n\tLayerPropsOf,\n\tLayerProvidesOf,\n\tEffuseLayerRegistry,\n} from '../layers/types.js';\n\nconst createHookScope = (): { scope: HookScope } => {\n\tconst internalScope = Effect.runSync(Scope.make());\n\tconst finalizers: HookFinalizer[] = [];\n\n\tconst scope: HookScope = {\n\t\taddFinalizer: (fn: HookFinalizer) => {\n\t\t\tfinalizers.push(fn);\n\t\t},\n\t\tdispose: async () => {\n\t\t\tfor (const fn of finalizers.reverse()) {\n\t\t\t\tawait fn();\n\t\t\t}\n\t\t\tEffect.runSync(Scope.close(internalScope, Exit.void));\n\t\t},\n\t};\n\n\treturn { scope };\n};\n\nexport const createHookContext = <C>(\n\tconfig: C,\n\thookName?: string\n): {\n\tctx: HookContext<C>;\n\tdispose: () => Promise<void>;\n\tmountCallbacks: EffectCallback[];\n} => {\n\tconst cleanups: HookCleanup[] = [];\n\tconst mountCallbacks: EffectCallback[] = [];\n\tconst { scope } = createHookScope();\n\tconst name = hookName ?? 'anonymous';\n\tlet effectIndex = 0;\n\n\tconst wrappedEffect = (fn: EffectCallback) => {\n\t\tconst currentIndex = effectIndex++;\n\t\treactiveEffect(() => {\n\t\t\tconst start = performance.now();\n\t\t\tconst result = fn();\n\t\t\tconst duration = performance.now() - start;\n\n\t\t\ttraceHookEffect(name, currentIndex, duration);\n\n\t\t\tif (Predicate.isFunction(result)) {\n\t\t\t\tcleanups.push(() => {\n\t\t\t\t\ttraceHookCleanup(`${name}[${String(currentIndex)}]`);\n\t\t\t\t\tresult();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t};\n\n\tconst onMount = (fn: EffectCallback) => {\n\t\tmountCallbacks.push(fn);\n\t};\n\n\tconst layer = <K extends keyof EffuseLayerRegistry>(\n\t\tname: K\n\t): LayerPropsOf<K> => {\n\t\tif (!isLayerRuntimeReady()) {\n\t\t\tthrow new HookLayerNotReadyError({\n\t\t\t\thookContext: 'layer',\n\t\t\t\tlayerName: name as string,\n\t\t\t});\n\t\t}\n\t\tconst layerCtx = getLayerContext(name as string);\n\t\treturn layerCtx.props as LayerPropsOf<K>;\n\t};\n\n\tconst layerProvider = <K extends keyof EffuseLayerRegistry>(\n\t\tname: K\n\t): LayerProvidesOf<K> => {\n\t\tif (!isLayerRuntimeReady()) {\n\t\t\tthrow new HookLayerNotReadyError({\n\t\t\t\thookContext: 'layerProvider',\n\t\t\t\tlayerName: name as string,\n\t\t\t});\n\t\t}\n\t\tconst layerCtx = getLayerContext(name as string);\n\t\tif (!layerCtx.provides) {\n\t\t\treturn {} as LayerProvidesOf<K>;\n\t\t}\n\t\tconst providers: Record<string, unknown> = {};\n\t\tfor (const key of Object.keys(layerCtx.provides)) {\n\t\t\tproviders[key] = getLayerService(key);\n\t\t}\n\t\treturn providers as LayerProvidesOf<K>;\n\t};\n\n\tconst use = <R>(hook: () => R): R => hook();\n\n\tconst runAsync = async <T>(fn: () => Promise<T>): Promise<T> => fn();\n\n\tconst dispose = async () => {\n\t\tconst start = performance.now();\n\t\tconst cleanupCount = cleanups.length;\n\n\t\tfor (const cleanup of cleanups.reverse()) {\n\t\t\tcleanup();\n\t\t}\n\t\tawait scope.dispose();\n\n\t\tconst duration = performance.now() - start;\n\t\ttraceHookDispose(name, duration, cleanupCount);\n\t};\n\n\tconst ctx: HookContext<C> = {\n\t\tconfig,\n\t\tsignal,\n\t\tcomputed,\n\t\twatchEffect: wrappedEffect,\n\t\tonMount,\n\t\tscope,\n\t\tlayer,\n\t\tlayerProvider,\n\t\tuse,\n\t\trunAsync,\n\t};\n\n\treturn { ctx, dispose, mountCallbacks };\n};\n","import { createHookContext } from './context.js';\nimport { traceHookSetup } from '../layers/tracing/hooks.js';\nimport type { HookSetupFn } from './types.js';\n\nexport function defineHook<C = undefined, R = unknown>(definition: {\n\treadonly name?: string;\n\treadonly deps?: readonly string[];\n\treadonly setup: HookSetupFn<C, R>;\n}): C extends undefined ? () => R : (config: C) => R {\n\tconst hookName = definition.name || definition.setup.name || 'anonymous';\n\n\tconst hookFn = (config?: C): R => {\n\t\tconst start = performance.now();\n\t\tconst { ctx } = createHookContext<C>(config as C, hookName);\n\t\tconst result = definition.setup(ctx);\n\t\tconst duration = performance.now() - start;\n\n\t\ttraceHookSetup(hookName, duration, config as Record<string, unknown>);\n\n\t\treturn result;\n\t};\n\n\treturn hookFn as C extends undefined ? () => R : (config: C) => R;\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport {\n\ttype EffuseNode,\n\ttype EffuseChild,\n\ttype BlueprintDef,\n\ttype Component,\n\ttype Portals,\n\tCreateBlueprintNode,\n} from '../render/node.js';\nimport type { ElementProps } from '../schema/index.js';\nimport { EFFUSE_NODE, FRAGMENT } from '../constants.js';\nimport { el, fragment } from '../render/element.js';\nimport { isBlueprint } from '../blueprint/blueprint.js';\nimport { UnknownJSXTypeError } from '../errors.js';\nimport type { BaseIntrinsicElements } from './types/intrinsic.js';\nimport { pipe, Predicate } from 'effect';\n\ninterface FragmentProps {\n\tchildren?: EffuseChild;\n}\n\nexport type * from './types/index.js';\n\nexport interface FragmentComponent {\n\t(props: FragmentProps): EffuseNode;\n\treadonly _tag: typeof FRAGMENT;\n}\n\nexport const Fragment: FragmentComponent = pipe(\n\t(props: FragmentProps): EffuseNode =>\n\t\tfragment(...normalizeJSXChildren(props.children)),\n\t(fn) => Object.assign(fn, { _tag: FRAGMENT } as const)\n);\n\nconst isFragment = (value: unknown): value is FragmentComponent =>\n\tPredicate.isFunction(value) &&\n\tPredicate.hasProperty(value, '_tag') &&\n\tvalue._tag === FRAGMENT;\n\nexport type JSXElement = EffuseNode;\n\nexport const jsx = (\n\ttype: string | BlueprintDef | typeof Fragment,\n\tprops: Record<string, unknown> | null,\n\tkey?: string | number\n): EffuseNode => {\n\tif (type === Fragment) {\n\t\tconst { children } = props ?? {};\n\t\tconst childArray = normalizeJSXChildren(children);\n\t\treturn fragment(...childArray);\n\t}\n\n\tconst { children, ...restProps } = props ?? {};\n\tconst propsWithKey = key !== undefined ? { ...restProps, key } : restProps;\n\n\tif (Predicate.isString(type)) {\n\t\tconst childArray = normalizeJSXChildren(children);\n\t\treturn el(type, propsWithKey as ElementProps, ...childArray);\n\t}\n\n\tif (isBlueprint(type)) {\n\t\tconst portals =\n\t\t\tPredicate.isObject(children) && !Array.isArray(children)\n\t\t\t\t? (children as Portals)\n\t\t\t\t: children\n\t\t\t\t\t? { default: () => children as EffuseChild }\n\t\t\t\t\t: null;\n\n\t\tconst blueprintProps =\n\t\t\tchildren !== undefined ? { ...propsWithKey, children } : propsWithKey;\n\n\t\treturn CreateBlueprintNode({\n\t\t\t[EFFUSE_NODE]: true,\n\t\t\tblueprint: type,\n\t\t\tprops: blueprintProps,\n\t\t\tportals,\n\t\t\tkey: propsWithKey.key as string | number | undefined,\n\t\t});\n\t}\n\n\tif (Predicate.isFunction(type) && !isFragment(type)) {\n\t\tconst componentProps =\n\t\t\tkey !== undefined\n\t\t\t\t? { ...restProps, key, children }\n\t\t\t\t: { ...restProps, children };\n\t\treturn (type as Component)(componentProps);\n\t}\n\n\tif (isFragment(type)) {\n\t\treturn type({ children: children as EffuseChild });\n\t}\n\n\tthrow new UnknownJSXTypeError({ type });\n};\n\nexport const jsxs = jsx;\n\nexport const jsxDEV = (\n\ttype: string | BlueprintDef | typeof Fragment,\n\tprops: Record<string, unknown> | null,\n\tkey?: string | number\n): EffuseNode => {\n\tif (type === Fragment) {\n\t\tconst { children } = props ?? {};\n\t\tconst childArray = normalizeJSXChildren(children);\n\t\treturn fragment(...childArray);\n\t}\n\n\treturn jsx(type, props, key);\n};\n\nconst normalizeJSXChildren = (children: unknown): EffuseChild[] => {\n\tif (Predicate.isNullable(children)) {\n\t\treturn [];\n\t}\n\n\tif (Array.isArray(children)) {\n\t\treturn children as EffuseChild[];\n\t}\n\n\treturn [children as EffuseChild];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace JSX {\n\texport type Element = EffuseNode;\n\texport type ElementClass = never;\n\n\texport interface IntrinsicAttributes {\n\t\tkey?: string | number | undefined;\n\t}\n\n\texport type ElementType =\n\t\t| string\n\t\t| BlueprintDef\n\t\t| Component\n\t\t| FragmentComponent\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t| ((props: any) => EffuseNode);\n\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\texport type LibraryManagedAttributes<_C, P> = P & IntrinsicAttributes;\n\n\t// eslint-disable-next-line @typescript-eslint/no-empty-object-type\n\texport interface IntrinsicElements extends BaseIntrinsicElements {}\n\n\texport interface ElementChildrenAttribute {\n\t\tchildren: unknown;\n\t}\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport type { LayerProps } from '../types.js';\n\nexport interface PropsRegistry {\n\treadonly props: Map<string, LayerProps>;\n\tget: (layerName: string) => LayerProps | undefined;\n\tset: (layerName: string, props: LayerProps) => void;\n\thas: (layerName: string) => boolean;\n}\n\nconst createPropsRegistry = (): PropsRegistry => {\n\tconst props = new Map<string, LayerProps>();\n\n\treturn {\n\t\tprops,\n\t\tget: (layerName) => props.get(layerName),\n\t\tset: (layerName, layerProps) => props.set(layerName, layerProps),\n\t\thas: (layerName) => props.has(layerName),\n\t};\n};\n\nexport class PropsService extends Effect.Service<PropsService>()(\n\t'effuse/layer/Props',\n\t{\n\t\teffect: Effect.succeed(createPropsRegistry()),\n\t}\n) {}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect } from 'effect';\nimport type { Component } from '../../render/node.js';\nimport type { AnyResolvedLayer } from '../types.js';\n\nexport interface LayerRegistry {\n\treadonly layers: Map<string, AnyResolvedLayer>;\n\treadonly components: Map<string, Component>;\n\treadonly services: Map<string, unknown>;\n\n\tgetLayer: (name: string) => AnyResolvedLayer | undefined;\n\tgetComponent: (name: string) => Component | undefined;\n\tgetService: (key: string) => unknown;\n\n\tregisterLayer: (layer: AnyResolvedLayer) => void;\n\tregisterComponent: (name: string, component: Component) => void;\n\tregisterService: (key: string, value: unknown) => void;\n\n\thasLayer: (name: string) => boolean;\n\thasComponent: (name: string) => boolean;\n\thasService: (key: string) => boolean;\n}\n\nconst createLayerRegistry = (): LayerRegistry => {\n\tconst layers = new Map<string, AnyResolvedLayer>();\n\tconst components = new Map<string, Component>();\n\tconst services = new Map<string, unknown>();\n\n\treturn {\n\t\tlayers,\n\t\tcomponents,\n\t\tservices,\n\n\t\tgetLayer: (name) => layers.get(name),\n\t\tgetComponent: (name) => components.get(name),\n\t\tgetService: (key) => services.get(key),\n\n\t\tregisterLayer: (layer) => {\n\t\t\tif (layer.name) {\n\t\t\t\tlayers.set(layer.name, layer);\n\t\t\t}\n\t\t},\n\t\tregisterComponent: (name, component) => components.set(name, component),\n\t\tregisterService: (key, value) => services.set(key, value),\n\n\t\thasLayer: (name) => layers.has(name),\n\t\thasComponent: (name) => components.has(name),\n\t\thasService: (key) => services.has(key),\n\t};\n};\n\nexport class RegistryService extends Effect.Service<RegistryService>()(\n\t'effuse/layer/Registry',\n\t{\n\t\teffect: Effect.succeed(createLayerRegistry()),\n\t}\n) {}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Array as Arr, pipe, Option } from 'effect';\nimport type {\n\tAnyLayer,\n\tAnyResolvedLayer,\n\tRouteConfig,\n\tGuard,\n\tMergedConfig,\n\tLayerSetupFn,\n\tPluginFn,\n\tStoreConfig,\n} from '../types.js';\nimport { CircularDependencyError } from '../errors.js';\nimport type { Component } from '../../render/node.js';\n\nexport const resolveLayerOrder = (\n\tlayers: readonly AnyLayer[],\n\tvisited = new Set<AnyLayer>(),\n\tpath: string[] = []\n): AnyResolvedLayer[] => {\n\tconst resolved: AnyResolvedLayer[] = [];\n\tlet order = 0;\n\n\tfor (const layer of layers) {\n\t\tconst layerName = layer.name;\n\n\t\tif (visited.has(layer)) {\n\t\t\tthrow new CircularDependencyError({\n\t\t\t\tlayerName,\n\t\t\t\tdependencyChain: path,\n\t\t\t});\n\t\t}\n\n\t\tvisited.add(layer);\n\n\t\tif (layer.extends && layer.extends.length > 0) {\n\t\t\tconst extended = resolveLayerOrder(layer.extends, visited, [\n\t\t\t\t...path,\n\t\t\t\tlayerName,\n\t\t\t]);\n\t\t\tresolved.push(...extended);\n\t\t\torder = extended.length;\n\t\t}\n\n\t\tresolved.push({\n\t\t\t...layer,\n\t\t\t_resolved: true,\n\t\t\t_order: order++,\n\t\t});\n\t}\n\n\treturn resolved;\n};\n\nexport const prefixRoutes = (\n\troutes: readonly RouteConfig[],\n\tdomain: string\n): RouteConfig[] => {\n\treturn routes.map((route): RouteConfig => {\n\t\tconst prefixed: RouteConfig = {\n\t\t\t...route,\n\t\t\tpath: `/${domain}${route.path === '/' ? '' : route.path}`,\n\t\t};\n\n\t\tif (route.children && route.children.length > 0) {\n\t\t\treturn { ...prefixed, children: prefixRoutes(route.children, domain) };\n\t\t}\n\n\t\treturn prefixed;\n\t});\n};\n\nexport const mergeLayerConfigs = (\n\tlayers: readonly AnyResolvedLayer[]\n): MergedConfig => {\n\tconst routes: RouteConfig[] = [];\n\tconst guards: Guard[] = [];\n\tconst stores: StoreConfig[] = [];\n\tconst providers: Component[] = [];\n\tconst plugins: PluginFn[] = [];\n\tconst setups: LayerSetupFn[] = [];\n\n\tfor (const layer of layers) {\n\t\tif (layer.routes) {\n\t\t\tconst layerRoutes = layer.domain\n\t\t\t\t? prefixRoutes(layer.routes, layer.domain)\n\t\t\t\t: [...layer.routes];\n\t\t\troutes.push(...layerRoutes);\n\t\t}\n\n\t\tpipe(\n\t\t\tOption.fromNullable(layer.routeOptions),\n\t\t\tOption.flatMap((opts) => Option.fromNullable(opts.guards)),\n\t\t\tOption.map((layerGuards) => {\n\t\t\t\tguards.push(...layerGuards);\n\t\t\t})\n\t\t);\n\n\t\tif (layer.stores) {\n\t\t\tstores.push(...layer.stores);\n\t\t}\n\n\t\tif (layer.providers) {\n\t\t\tproviders.push(...layer.providers);\n\t\t}\n\n\t\tif (layer.plugins) {\n\t\t\tplugins.push(...layer.plugins);\n\t\t}\n\n\t\tif (layer.setup) {\n\t\t\tsetups.push(layer.setup);\n\t\t}\n\t}\n\n\treturn {\n\t\troutes,\n\t\tguards,\n\t\tstores,\n\t\tproviders,\n\t\tplugins,\n\t\tsetups,\n\t\tlazy: Arr.some(layers, (l) =>\n\t\t\tpipe(\n\t\t\t\tOption.fromNullable(l.routeOptions),\n\t\t\t\tOption.flatMap((opts) => Option.fromNullable(opts.lazy)),\n\t\t\t\tOption.getOrElse(() => false)\n\t\t\t)\n\t\t),\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Layer, Effect, Context, Scope } from 'effect';\nimport type { EffuseLayer, LayerProvides } from '../types.js';\n\nconst TAG_NS = 'effuse/layer/';\n\ntype ResultOf<T> = T extends () => infer R ? R : never;\n\nexport type EffuseServices<T extends EffuseLayer> =\n\tT['provides'] extends infer P extends LayerProvides\n\t\t? { [K in keyof P]: ResultOf<P[K]> }\n\t\t: {};\n\nexport interface CompiledLayer<T extends EffuseLayer> extends EffuseLayer {\n\treadonly effectLayer: Layer.Layer<EffuseServices<T>, never, Scope.Scope>;\n\treadonly tags: {\n\t\treadonly [K in keyof EffuseServices<T>]: Context.Tag<\n\t\t\tstring,\n\t\t\tEffuseServices<T>[K]\n\t\t>;\n\t};\n\treadonly _resolved: true;\n}\n\nexport function defineLayer<T extends EffuseLayer>(\n\tdefinition: T\n): CompiledLayer<T> {\n\tconst provides = definition.provides ?? ({} as LayerProvides);\n\tconst keys = Object.keys(provides) as (keyof LayerProvides)[];\n\n\tif (keys.length === 0) {\n\t\tconst emptyCtx = Context.empty() as Context.Context<{}>;\n\t\tconst emptyLayer = Layer.succeedContext(emptyCtx) as unknown as Layer.Layer<\n\t\t\tEffuseServices<T>,\n\t\t\tnever,\n\t\t\tScope.Scope\n\t\t>;\n\t\treturn {\n\t\t\tname: definition.name,\n\t\t\teffectLayer: emptyLayer,\n\t\t\ttags: {} as {\n\t\t\t\treadonly [K in keyof EffuseServices<T>]: Context.Tag<\n\t\t\t\t\tstring,\n\t\t\t\t\tEffuseServices<T>[K]\n\t\t\t\t>;\n\t\t\t},\n\t\t\t_resolved: true as const,\n\t\t};\n\t}\n\n\tconst entries = keys.map((k) => ({\n\t\tkey: k as string,\n\t\ttag: Context.GenericTag<unknown>(\n\t\t\t`${TAG_NS}${definition.name}/${String(k)}`\n\t\t) as Context.Tag<string, unknown>,\n\t\tfactory: provides[k]!,\n\t}));\n\n\tconst layers = entries.map((e) =>\n\t\tLayer.scoped(e.tag, Effect.sync(e.factory))\n\t);\n\n\tlet merged: Layer.Layer<any, never, any> = layers[0]!;\n\tfor (let i = 1; i < layers.length; i++) {\n\t\tconst next = layers[i]!;\n\t\tmerged = Layer.merge(merged, next);\n\t}\n\n\tconst build = Effect.flatMap(Layer.build(merged), (ctx) => {\n\t\tconst obj: Record<string, unknown> = {};\n\t\tfor (const e of entries) {\n\t\t\tobj[e.key] = Context.get(ctx, e.tag);\n\t\t}\n\t\tlet c = Context.empty() as Context.Context<typeof obj>;\n\t\tfor (const [k, v] of Object.entries(obj)) {\n\t\t\tc = Context.add(c, k as any, v);\n\t\t}\n\t\treturn Effect.succeed(c);\n\t});\n\n\tconst final = Layer.scopedContext(build);\n\n\tconst tagMap = entries.reduce(\n\t\t(acc, e) => Object.assign(acc, { [e.key]: e.tag }),\n\t\t{} as {\n\t\t\treadonly [K in keyof EffuseServices<T>]: Context.Tag<\n\t\t\t\tstring,\n\t\t\t\tEffuseServices<T>[K]\n\t\t\t>;\n\t\t}\n\t);\n\n\treturn {\n\t\t...definition,\n\t\teffectLayer: final as Layer.Layer<EffuseServices<T>, never, Scope.Scope>,\n\t\ttags: tagMap,\n\t\t_resolved: true as const,\n\t};\n}\n\nexport type MergeServices<Layers extends readonly CompiledLayer<any>[]> =\n\tLayers extends readonly [infer L, ...infer R]\n\t\t? L extends CompiledLayer<infer T>\n\t\t\t? EffuseServices<T> &\n\t\t\t\t\t(R extends readonly CompiledLayer<any>[] ? MergeServices<R> : {})\n\t\t\t: never\n\t\t: {};\n\nexport function combineLayers<Layers extends readonly CompiledLayer<any>[]>(\n\t...layers: Layers\n): Layer.Layer<MergeServices<Layers>, never, Scope.Scope> {\n\tif (layers.length === 0) {\n\t\treturn Layer.succeedContext(Context.empty()) as unknown as Layer.Layer<\n\t\t\t{},\n\t\t\tnever,\n\t\t\tScope.Scope\n\t\t>;\n\t}\n\n\tconst first = layers[0]!.effectLayer;\n\tif (layers.length === 1) {\n\t\treturn Layer.merge(first, Layer.scope);\n\t}\n\n\tlet m = first;\n\tfor (let i = 1; i < layers.length; i++) {\n\t\tm = Layer.merge(m, layers[i]!.effectLayer);\n\t}\n\treturn Layer.merge(m, Layer.scope);\n}\n\nexport type LayerServicesFrom<T extends CompiledLayer<any>> =\n\tT extends CompiledLayer<infer L> ? EffuseServices<L> : never;\n\nexport type ExtractServices<T> =\n\tT extends CompiledLayer<infer L> ? EffuseServices<L> : never;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport type TracingCategory =\n\t| 'layers'\n\t| 'router'\n\t| 'components'\n\t| 'effects'\n\t| 'signals'\n\t| 'suspense'\n\t| 'emit'\n\t| 'store'\n\t| 'fibers'\n\t| 'hooks';\n\nexport interface UseHooksCategories {\n\treadonly useWindowSize: boolean;\n\treadonly useLocalStorage: boolean;\n\treadonly useEventListener: boolean;\n\treadonly useMediaQuery: boolean;\n\treadonly useOnline: boolean;\n\treadonly useInterval: boolean;\n\treadonly useDebounce: boolean;\n\treadonly useThrottle: boolean;\n}\n\nexport const defaultUseHooksCategories: UseHooksCategories = {\n\tuseWindowSize: true,\n\tuseLocalStorage: true,\n\tuseEventListener: true,\n\tuseMediaQuery: true,\n\tuseOnline: true,\n\tuseInterval: true,\n\tuseDebounce: true,\n\tuseThrottle: true,\n};\n\nexport interface TracingCategories {\n\treadonly layers: boolean;\n\treadonly router: boolean;\n\treadonly components: boolean;\n\treadonly effects: boolean;\n\treadonly signals: boolean;\n\treadonly suspense: boolean;\n\treadonly emit: boolean;\n\treadonly store: boolean;\n\treadonly fibers: boolean;\n\treadonly hooks: boolean;\n\treadonly useHooks?: Partial<UseHooksCategories>;\n}\n\nexport const defaultCategories: TracingCategories = {\n\tlayers: true,\n\trouter: true,\n\tcomponents: true,\n\teffects: true,\n\tsignals: false,\n\tsuspense: true,\n\temit: true,\n\tstore: true,\n\tfibers: true,\n\thooks: true,\n\tuseHooks: defaultUseHooksCategories,\n};\n\nexport const isCategoryEnabled = (\n\tcategories: Partial<TracingCategories> | undefined,\n\tcategory: TracingCategory\n): boolean => {\n\tif (!categories) return defaultCategories[category];\n\treturn categories[category] ?? defaultCategories[category];\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/* eslint-disable no-console */\nimport { Context, Effect, Layer, Option, pipe } from 'effect';\nimport {\n\ttype TracingCategories,\n\ttype TracingCategory,\n\tdefaultCategories,\n\tisCategoryEnabled,\n} from './categories.js';\n\nexport interface TracingConfig {\n\treadonly enabled: boolean;\n\treadonly serviceName: string;\n\treadonly console: boolean;\n\treadonly verbose: boolean;\n\treadonly categories?: Partial<TracingCategories>;\n}\n\nconst defaultConfig: TracingConfig = {\n\tenabled: false,\n\tserviceName: 'effuse-app',\n\tconsole: true,\n\tverbose: false,\n\tcategories: defaultCategories,\n};\n\nconst styles = {\n\tlabel: 'color: gray; font-weight: lighter;',\n\tname: 'color: inherit; font-weight: bold;',\n\ttime: 'color: gray; font-weight: lighter;',\n\tprevState: 'color: #9E9E9E; font-weight: bold;',\n\taction: 'color: #03A9F4; font-weight: bold;',\n\tnextState: 'color: #4CAF50; font-weight: bold;',\n};\n\nexport interface TracingServiceApi {\n\treadonly config: TracingConfig;\n\treadonly isEnabled: () => boolean;\n\treadonly isCategoryEnabled: (category: TracingCategory) => boolean;\n\treadonly startSpan: (\n\t\tname: string,\n\t\tattributes?: Record<string, unknown>\n\t) => void;\n\treadonly endSpan: (name: string) => void;\n\treadonly logSpan: (\n\t\tname: string,\n\t\tduration: number,\n\t\tattributes?: Record<string, unknown>,\n\t\tdepth?: number\n\t) => void;\n\treadonly log: (\n\t\tcategory: TracingCategory,\n\t\ttype: string,\n\t\tname: string,\n\t\tdata?: Record<string, unknown>\n\t) => void;\n\treadonly logWithDuration: (\n\t\tcategory: TracingCategory,\n\t\ttype: string,\n\t\tname: string,\n\t\tduration: number,\n\t\tdata?: Record<string, unknown>\n\t) => void;\n}\n\nexport class TracingService extends Context.Tag('TracingService')<\n\tTracingService,\n\tTracingServiceApi\n>() {}\n\nexport const createTracingService = (\n\tconfig: Partial<TracingConfig> = {}\n): TracingServiceApi => {\n\tconst mergedConfig: TracingConfig = {\n\t\t...defaultConfig,\n\t\t...config,\n\t\tcategories: { ...defaultCategories, ...config.categories },\n\t};\n\tconst spans = new Map<\n\t\tstring,\n\t\t{ start: number; attributes: Record<string, unknown> | undefined }\n\t>();\n\n\tconst checkCategory = (category: TracingCategory): boolean =>\n\t\tmergedConfig.enabled &&\n\t\tmergedConfig.console &&\n\t\tisCategoryEnabled(mergedConfig.categories, category);\n\n\treturn {\n\t\tconfig: mergedConfig,\n\n\t\tisEnabled: () => mergedConfig.enabled,\n\n\t\tisCategoryEnabled: (category: TracingCategory) => checkCategory(category),\n\n\t\tstartSpan: (name: string, attributes?: Record<string, unknown>) => {\n\t\t\tif (!mergedConfig.enabled) return;\n\t\t\tspans.set(name, { start: performance.now(), attributes });\n\t\t},\n\n\t\tendSpan: (name: string) => {\n\t\t\tif (!mergedConfig.enabled) return;\n\t\t\tspans.delete(name);\n\t\t},\n\n\t\tlogSpan: (\n\t\t\tname: string,\n\t\t\tduration: number,\n\t\t\tattributes?: Record<string, unknown>,\n\t\t\t_depth = 0\n\t\t) => {\n\t\t\tif (!checkCategory('layers')) return;\n\n\t\t\tconst time = new Date().toLocaleTimeString();\n\t\t\tconst depsAttr = pipe(\n\t\t\t\tOption.fromNullable(attributes),\n\t\t\t\tOption.flatMap((attrs) => Option.fromNullable(attrs['depends'])),\n\t\t\t\tOption.getOrElse(() => undefined)\n\t\t\t) as string[] | undefined;\n\t\t\tconst depsStr = depsAttr ? ` <- [${depsAttr.join(', ')}]` : '';\n\n\t\t\tconsole.groupCollapsed(\n\t\t\t\t`%clayer %c${name}${depsStr} %c@ ${time} (${duration.toFixed(2)}ms)`,\n\t\t\t\tstyles.label,\n\t\t\t\tstyles.name,\n\t\t\t\tstyles.time\n\t\t\t);\n\n\t\t\tif (attributes) {\n\t\t\t\tif (attributes['layer']) {\n\t\t\t\t\tconsole.log('%clayer', styles.prevState, attributes['layer']);\n\t\t\t\t}\n\t\t\t\tif (depsAttr) {\n\t\t\t\t\tconsole.log('%cdepends', styles.action, depsAttr);\n\t\t\t\t}\n\t\t\t\tif (attributes['provides']) {\n\t\t\t\t\tconsole.log('%cprovides', styles.nextState, attributes['provides']);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('%cduration', styles.nextState, `${duration.toFixed(2)}ms`);\n\t\t\tconsole.groupEnd();\n\t\t},\n\n\t\tlog: (\n\t\t\tcategory: TracingCategory,\n\t\t\ttype: string,\n\t\t\tname: string,\n\t\t\tdata?: Record<string, unknown>\n\t\t) => {\n\t\t\tif (!checkCategory(category)) return;\n\n\t\t\tconst time = new Date().toLocaleTimeString();\n\n\t\t\tconsole.groupCollapsed(\n\t\t\t\t`%c${category} %c${type} %c${name} %c@ ${time}`,\n\t\t\t\tstyles.label,\n\t\t\t\tstyles.action,\n\t\t\t\tstyles.name,\n\t\t\t\tstyles.time\n\t\t\t);\n\n\t\t\tif (data) {\n\t\t\t\tfor (const [key, value] of Object.entries(data)) {\n\t\t\t\t\tconsole.log(`%c${key}`, styles.action, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.groupEnd();\n\t\t},\n\n\t\tlogWithDuration: (\n\t\t\tcategory: TracingCategory,\n\t\t\ttype: string,\n\t\t\tname: string,\n\t\t\tduration: number,\n\t\t\tdata?: Record<string, unknown>\n\t\t) => {\n\t\t\tif (!checkCategory(category)) return;\n\n\t\t\tconst time = new Date().toLocaleTimeString();\n\n\t\t\tconsole.groupCollapsed(\n\t\t\t\t`%c${category} %c${type} %c${name} %c@ ${time} (${duration.toFixed(2)}ms)`,\n\t\t\t\tstyles.label,\n\t\t\t\tstyles.action,\n\t\t\t\tstyles.name,\n\t\t\t\tstyles.time\n\t\t\t);\n\n\t\t\tif (data) {\n\t\t\t\tfor (const [key, value] of Object.entries(data)) {\n\t\t\t\t\tconsole.log(`%c${key}`, styles.action, value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.log('%cduration', styles.nextState, `${duration.toFixed(2)}ms`);\n\t\t\tconsole.groupEnd();\n\t\t},\n\t};\n};\n\nexport const TracingServiceLive = (\n\tconfig: Partial<TracingConfig> = {}\n): Layer.Layer<TracingService> =>\n\tLayer.succeed(TracingService, createTracingService(config));\n\nexport const withTracing = <A, E, R>(\n\tname: string,\n\teffect: Effect.Effect<A, E, R>,\n\tattributes?: Record<string, unknown>\n): Effect.Effect<A, E, R | TracingService> =>\n\tEffect.gen(function* () {\n\t\tconst tracing = yield* TracingService;\n\t\tif (!tracing.isEnabled()) {\n\t\t\treturn yield* effect;\n\t\t}\n\n\t\tconst start = performance.now();\n\t\ttracing.startSpan(name, attributes);\n\n\t\ttry {\n\t\t\tconst result = yield* effect;\n\t\t\tconst duration = performance.now() - start;\n\t\t\ttracing.logSpan(name, duration, attributes);\n\t\t\treturn result;\n\t\t} finally {\n\t\t\ttracing.endSpan(name);\n\t\t}\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/* eslint-disable no-console */\nimport { Effect } from 'effect';\nimport { TracingService } from './TracingService.js';\nimport type { AnyResolvedLayer } from '../types.js';\n\nexport const withLayerSpan = <A, E, R>(\n\tlayer: AnyResolvedLayer,\n\teffect: Effect.Effect<A, E, R>\n): Effect.Effect<A, E, R | TracingService> =>\n\tEffect.gen(function* () {\n\t\tconst tracing = yield* TracingService;\n\t\tif (!tracing.isEnabled()) {\n\t\t\treturn yield* effect;\n\t\t}\n\n\t\tconst attributes: Record<string, unknown> = {\n\t\t\tlayer: layer.name,\n\t\t};\n\n\t\tif (\n\t\t\tlayer.dependencies &&\n\t\t\t(layer.dependencies as readonly string[]).length > 0\n\t\t) {\n\t\t\tattributes['depends'] = layer.dependencies;\n\t\t}\n\n\t\tif (layer.provides) {\n\t\t\tconst provides = Object.keys(layer.provides);\n\t\t\tif (provides.length > 0) {\n\t\t\t\tattributes['provides'] = provides;\n\t\t\t}\n\t\t}\n\n\t\tconst start = performance.now();\n\t\ttracing.startSpan(`Layer: ${layer.name}`, attributes);\n\n\t\ttry {\n\t\t\tconst result = yield* effect;\n\t\t\tconst duration = performance.now() - start;\n\t\t\ttracing.logSpan(`Layer: ${layer.name}`, duration, attributes, 1);\n\t\t\treturn result;\n\t\t} finally {\n\t\t\ttracing.endSpan(`Layer: ${layer.name}`);\n\t\t}\n\t});\n\nexport const withRuntimeSpan = <A, E, R>(\n\teffect: Effect.Effect<A, E, R>,\n\tlayerCount: number\n): Effect.Effect<A, E, R | TracingService> =>\n\tEffect.gen(function* () {\n\t\tconst tracing = yield* TracingService;\n\t\tif (!tracing.isEnabled()) {\n\t\t\treturn yield* effect;\n\t\t}\n\n\t\tconst start = performance.now();\n\t\ttracing.startSpan('LayerRuntime.init', { layers: layerCount });\n\n\t\ttry {\n\t\t\tconst result = yield* effect;\n\t\t\tconst duration = performance.now() - start;\n\t\t\ttracing.logSpan('LayerRuntime.init', duration, { layers: layerCount }, 0);\n\t\t\treturn result;\n\t\t} finally {\n\t\t\ttracing.endSpan('LayerRuntime.init');\n\t\t}\n\t});\n\nexport const logDependencyGraph = (\n\tlayers: readonly AnyResolvedLayer[]\n): Effect.Effect<void, never, TracingService> =>\n\tEffect.gen(function* () {\n\t\tconst tracing = yield* TracingService;\n\t\tif (!tracing.isEnabled() || !tracing.config.verbose) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst styles = {\n\t\t\tlabel: 'color: gray; font-weight: lighter;',\n\t\t\tname: 'color: inherit; font-weight: bold;',\n\t\t\ttime: 'color: gray; font-weight: lighter;',\n\t\t\tlayer: 'color: #03A9F4; font-weight: bold;',\n\t\t\tdeps: 'color: #9E9E9E;',\n\t\t};\n\n\t\tconst time = new Date().toLocaleTimeString();\n\t\tconsole.groupCollapsed(\n\t\t\t`%clayers %c${String(layers.length)} registered %c@ ${time}`,\n\t\t\tstyles.label,\n\t\t\tstyles.name,\n\t\t\tstyles.time\n\t\t);\n\n\t\tfor (const layer of layers) {\n\t\t\tconst deps =\n\t\t\t\tlayer.dependencies &&\n\t\t\t\t(layer.dependencies as readonly string[]).length > 0\n\t\t\t\t\t? ` <- [${(layer.dependencies as string[]).join(', ')}]`\n\t\t\t\t\t: '';\n\t\t\tconsole.log(`%c${layer.name}%c${deps}`, styles.layer, styles.deps);\n\t\t}\n\n\t\tconsole.groupEnd();\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data, Predicate } from 'effect';\nimport { getGlobalTracing } from './global.js';\n\nexport type ResourceStatus = Data.TaggedEnum<{\n\tLoading: object;\n\tSuccess: { readonly itemCount?: number };\n\tError: { readonly error: string };\n\tStale: object;\n}>;\n\nconst { Loading, Success, Error, Stale, $match, $is } =\n\tData.taggedEnum<ResourceStatus>();\n\nexport const ResourceStatus = { Loading, Success, Error, Stale, $match, $is };\n\nexport const isResourceLoading = $is('Loading');\nexport const isResourceSuccess = $is('Success');\nexport const isResourceError = $is('Error');\nexport const isResourceStale = $is('Stale');\n\nexport const matchResourceStatus = $match;\n\nexport interface ResourceTraceData {\n\treadonly key: string;\n\treadonly status: ResourceStatus;\n}\n\nexport const traceResourceLoading = (key: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (\n\t\t!Predicate.isNotNullable(tracing) ||\n\t\t!tracing.isCategoryEnabled('suspense')\n\t)\n\t\treturn;\n\n\ttracing.log('suspense', 'resource', key, {\n\t\tstatus: Loading(),\n\t});\n};\n\nexport const traceResourceSuccess = (\n\tkey: string,\n\tduration: number,\n\titemCount?: number\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (\n\t\t!Predicate.isNotNullable(tracing) ||\n\t\t!tracing.isCategoryEnabled('suspense')\n\t)\n\t\treturn;\n\n\tconst status = Predicate.isNotNullable(itemCount)\n\t\t? Success({ itemCount })\n\t\t: Success({});\n\n\ttracing.logWithDuration('suspense', 'resource', key, duration, {\n\t\tstatus,\n\t});\n};\n\nexport const traceResourceError = (\n\tkey: string,\n\terror: string,\n\tduration: number\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (\n\t\t!Predicate.isNotNullable(tracing) ||\n\t\t!tracing.isCategoryEnabled('suspense')\n\t)\n\t\treturn;\n\n\ttracing.logWithDuration('suspense', 'resource', key, duration, {\n\t\tstatus: Error({ error }),\n\t});\n};\n\nexport type SuspenseBoundaryAction = Data.TaggedEnum<{\n\tSuspend: object;\n\tResolve: object;\n}>;\n\nconst boundaryActionEnum = Data.taggedEnum<SuspenseBoundaryAction>();\nexport const SuspenseBoundaryAction = {\n\tSuspend: boundaryActionEnum.Suspend,\n\tResolve: boundaryActionEnum.Resolve,\n\t$match: boundaryActionEnum.$match,\n\t$is: boundaryActionEnum.$is,\n};\n\nexport const traceSuspenseBoundary = (\n\tname: string,\n\taction: SuspenseBoundaryAction\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (\n\t\t!Predicate.isNotNullable(tracing) ||\n\t\t!tracing.isCategoryEnabled('suspense')\n\t)\n\t\treturn;\n\n\ttracing.log('suspense', 'boundary', name, {\n\t\taction,\n\t});\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport { getGlobalTracing } from './global.js';\n\nexport const traceEmit = (\n\tevent: string,\n\tpayload: unknown,\n\tsubscriberCount: number\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('emit'))\n\t\treturn;\n\n\ttracing.log('emit', 'event', event, {\n\t\tpayload,\n\t\tsubscribers: subscriberCount,\n\t});\n};\n\nexport const traceEmitSubscribe = (event: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('emit'))\n\t\treturn;\n\n\ttracing.log('emit', 'subscribe', event);\n};\n\nexport const traceEmitUnsubscribe = (event: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('emit'))\n\t\treturn;\n\n\ttracing.log('emit', 'unsubscribe', event);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate } from 'effect';\nimport { getGlobalTracing } from './global.js';\n\nexport const traceFiberCreated = (fiberId: string, parentId?: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('fibers'))\n\t\treturn;\n\n\tconst data: Record<string, unknown> = {};\n\tif (Predicate.isNotNullable(parentId)) {\n\t\tdata['parent'] = parentId;\n\t}\n\n\ttracing.log('fibers', 'created', fiberId, data);\n};\n\nexport const traceFiberDone = (fiberId: string, duration: number): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('fibers'))\n\t\treturn;\n\n\ttracing.logWithDuration('fibers', 'done', fiberId, duration);\n};\n\nexport const traceFiberInterrupted = (fiberId: string): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('fibers'))\n\t\treturn;\n\n\ttracing.log('fibers', 'interrupted', fiberId);\n};\n\nexport const traceFiberCount = (count: number, peak: number): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('fibers'))\n\t\treturn;\n\n\ttracing.log('fibers', 'snapshot', `${String(count)} active`, {\n\t\tcurrent: count,\n\t\tpeak,\n\t});\n};\n\nexport const traceFiberBuildPhase = (\n\tphase: number,\n\tlayerNames: string[]\n): void => {\n\tconst tracing = getGlobalTracing();\n\tif (!Predicate.isNotNullable(tracing) || !tracing.isCategoryEnabled('fibers'))\n\t\treturn;\n\n\ttracing.log('fibers', 'build-phase', `level ${String(phase)}`, {\n\t\tlayers: layerNames,\n\t\tparallel: layerNames.length,\n\t});\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Option, Predicate } from 'effect';\nimport type { AnyResolvedLayer } from '../types.js';\nimport { CircularDependencyError } from '../errors.js';\n\nexport interface TopologyLevel {\n\treadonly level: number;\n\treadonly layers: readonly AnyResolvedLayer[];\n}\n\ntype LayerMap = Map<string, AnyResolvedLayer>;\n\nconst enum NodeState {\n\tUnvisited = 0,\n\tVisiting = 1,\n\tVisited = 2,\n}\n\nconst detectCycle = (\n\tnode: string,\n\tlayerMap: LayerMap,\n\tstate: Map<string, NodeState>,\n\tpath: string[]\n): Option.Option<readonly string[]> => {\n\tstate.set(node, NodeState.Visiting);\n\tpath.push(node);\n\n\tconst layer = layerMap.get(node);\n\tconst deps: string[] = Predicate.isNotNullable(layer)\n\t\t? ((layer.dependencies as string[] | undefined) ?? [])\n\t\t: [];\n\n\tfor (const dep of deps) {\n\t\tconst depState = state.get(dep) ?? NodeState.Unvisited;\n\n\t\tif (depState === NodeState.Visiting) {\n\t\t\tconst cycleStart = path.indexOf(dep);\n\t\t\treturn Option.some(path.slice(cycleStart));\n\t\t}\n\n\t\tif (depState === NodeState.Unvisited && layerMap.has(dep)) {\n\t\t\tconst cycle = detectCycle(dep, layerMap, state, path);\n\t\t\tif (Option.isSome(cycle)) {\n\t\t\t\treturn cycle;\n\t\t\t}\n\t\t}\n\t}\n\n\tpath.pop();\n\tstate.set(node, NodeState.Visited);\n\treturn Option.none();\n};\n\nconst detectCircularDependencies = (\n\tlayers: readonly AnyResolvedLayer[]\n): Effect.Effect<void, CircularDependencyError> =>\n\tEffect.gen(function* () {\n\t\tconst layerMap: LayerMap = new Map();\n\t\tfor (const layer of layers) {\n\t\t\tlayerMap.set(layer.name, layer);\n\t\t}\n\n\t\tconst state = new Map<string, NodeState>();\n\n\t\tfor (const layer of layers) {\n\t\t\tif (\n\t\t\t\t(state.get(layer.name) ?? NodeState.Unvisited) === NodeState.Unvisited\n\t\t\t) {\n\t\t\t\tconst cycle = detectCycle(layer.name, layerMap, state, []);\n\n\t\t\t\tif (Option.isSome(cycle)) {\n\t\t\t\t\tconst cyclePath = cycle.value;\n\t\t\t\t\tconst lastNode = cyclePath[cyclePath.length - 1] ?? layer.name;\n\t\t\t\t\tyield* Effect.fail(\n\t\t\t\t\t\tnew CircularDependencyError({\n\t\t\t\t\t\t\tlayerName: lastNode,\n\t\t\t\t\t\t\tdependencyChain: cyclePath.slice(0, -1),\n\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\nconst buildLevelsFromLayers = (\n\tlayers: readonly AnyResolvedLayer[]\n): readonly TopologyLevel[] => {\n\tconst layerMap: LayerMap = new Map();\n\tfor (const layer of layers) {\n\t\tlayerMap.set(layer.name, layer);\n\t}\n\n\tconst levels: TopologyLevel[] = [];\n\tconst built = new Set<string>();\n\tconst remaining = new Set(layers.map((l) => l.name));\n\n\twhile (remaining.size > 0) {\n\t\tconst readyLayers: AnyResolvedLayer[] = [];\n\n\t\tfor (const name of remaining) {\n\t\t\tconst layer = layerMap.get(name);\n\t\t\tif (!layer) continue;\n\n\t\t\tconst deps = (layer.dependencies as string[] | undefined) ?? [];\n\t\t\tconst allDepsBuilt = deps.every((dep) => built.has(dep));\n\n\t\t\tif (allDepsBuilt) {\n\t\t\t\treadyLayers.push(layer);\n\t\t\t}\n\t\t}\n\n\t\tfor (const layer of readyLayers) {\n\t\t\tbuilt.add(layer.name);\n\t\t\tremaining.delete(layer.name);\n\t\t}\n\n\t\tif (readyLayers.length > 0) {\n\t\t\tlevels.push({\n\t\t\t\tlevel: levels.length,\n\t\t\t\tlayers: readyLayers,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn levels;\n};\n\nexport const buildTopologyLevels = (\n\tlayers: readonly AnyResolvedLayer[]\n): Effect.Effect<readonly TopologyLevel[], CircularDependencyError> =>\n\tEffect.gen(function* () {\n\t\tyield* detectCircularDependencies(layers);\n\t\treturn buildLevelsFromLayers(layers);\n\t});\n\nexport const getMaxParallelism = (levels: readonly TopologyLevel[]): number =>\n\tlevels.reduce((max, level) => Math.max(max, level.layers.length), 0);\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument */\nimport { Effect, Fiber, Predicate } from 'effect';\nimport type {\n\tAnyResolvedLayer,\n\tSetupContext,\n\tLayerDependency,\n\tCleanupFn,\n\tLayerProps,\n} from '../types.js';\nimport { PropsService, type PropsRegistry } from '../services/PropsService.js';\nimport {\n\tRegistryService,\n\ttype LayerRegistry,\n} from '../services/RegistryService.js';\nimport type { Component } from '../../render/node.js';\nimport { DependencyNotFoundError } from '../errors.js';\nimport {\n\twithLayerSpan,\n\ttype TracingService,\n\ttraceFiberBuildPhase,\n} from '../tracing/index.js';\nimport { buildTopologyLevels, getMaxParallelism } from './topology.js';\n\nexport const createSetupContext = (\n\tlayer: AnyResolvedLayer,\n\tpropsRegistry: PropsRegistry,\n\tregistry: LayerRegistry,\n\tallLayers: readonly AnyResolvedLayer[]\n): SetupContext => {\n\tlet layerProps: LayerProps;\n\n\tif (layer.deriveProps && layer.store) {\n\t\tlayerProps = layer.deriveProps(layer.store);\n\t} else {\n\t\tlayerProps = layer.props ?? ({} as LayerProps);\n\t}\n\n\tconst getLayerDependency = (name: string): LayerDependency => {\n\t\tconst depLayer = registry.getLayer(name);\n\t\tif (!depLayer) {\n\t\t\tthrow new DependencyNotFoundError({\n\t\t\t\tlayerName: layer.name,\n\t\t\t\tdependencyName: name,\n\t\t\t});\n\t\t}\n\n\t\tconst depProps = propsRegistry.get(name) ?? ({} as LayerProps);\n\n\t\treturn {\n\t\t\tname,\n\t\t\tprops: depProps,\n\t\t\tget: (key: string) => registry.getService(key),\n\t\t\tcomponent: (componentName: string) =>\n\t\t\t\tregistry.getComponent(componentName),\n\t\t};\n\t};\n\n\tconst deps: Record<string, LayerDependency> = {};\n\tif (layer.dependencies) {\n\t\tfor (const depName of layer.dependencies) {\n\t\t\tdeps[depName] = getLayerDependency(depName);\n\t\t}\n\t}\n\n\treturn {\n\t\tprops: layerProps,\n\t\tstore: layer.store,\n\t\tdeps,\n\t\tget: getLayerDependency,\n\t\tgetService: (key: string) => registry.getService(key),\n\t\tcomponent: (name: string) => registry.getComponent(name),\n\t\tlayers: allLayers,\n\t};\n};\n\nexport const buildLayerEffect = (\n\tlayer: AnyResolvedLayer,\n\tallLayers: readonly AnyResolvedLayer[]\n) =>\n\twithLayerSpan(\n\t\tlayer,\n\t\tEffect.gen(function* () {\n\t\t\tconst propsRegistry = yield* PropsService;\n\t\t\tconst registry = yield* RegistryService;\n\n\t\t\tregistry.registerLayer(layer);\n\n\t\t\tlet derivedProps: LayerProps;\n\n\t\t\tif (layer.deriveProps && layer.store) {\n\t\t\t\tderivedProps = layer.deriveProps(layer.store);\n\t\t\t} else {\n\t\t\t\tderivedProps = layer.props ?? ({} as LayerProps);\n\t\t\t}\n\n\t\t\tpropsRegistry.set(layer.name, derivedProps);\n\n\t\t\tif (layer.components) {\n\t\t\t\tfor (const [name, component] of Object.entries(layer.components)) {\n\t\t\t\t\tregistry.registerComponent(name, component as Component);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (layer.provides) {\n\t\t\t\tfor (const [key, factory] of Object.entries(layer.provides)) {\n\t\t\t\t\tregistry.registerService(key, factory());\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst ctx = yield* Effect.try({\n\t\t\t\ttry: () =>\n\t\t\t\t\tcreateSetupContext(layer, propsRegistry, registry, allLayers),\n\t\t\t\tcatch: (error) => error as DependencyNotFoundError,\n\t\t\t});\n\t\t\tconst cleanups: CleanupFn[] = [];\n\n\t\t\tconst handleError = (error: unknown) => {\n\t\t\t\tif (layer.onError && error instanceof Error) {\n\t\t\t\t\tlayer.onError(error, ctx);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tif (layer.onMount) {\n\t\t\t\tconst onMountFn = layer.onMount;\n\t\t\t\tyield* Effect.tryPromise({\n\t\t\t\t\ttry: () => Promise.resolve(onMountFn(ctx)),\n\t\t\t\t\tcatch: (error: unknown) => {\n\t\t\t\t\t\thandleError(error);\n\t\t\t\t\t\treturn error;\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (layer.setup) {\n\t\t\t\tconst setupFn = layer.setup;\n\n\t\t\t\tconst result = yield* Effect.tryPromise({\n\t\t\t\t\ttry: () => Promise.resolve(setupFn(ctx)),\n\t\t\t\t\tcatch: (error: unknown) => {\n\t\t\t\t\t\thandleError(error);\n\t\t\t\t\t\treturn error;\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (Predicate.isFunction(result)) {\n\t\t\t\t\tcleanups.push(result);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (layer.onUnmount) {\n\t\t\t\tconst onUnmountFn = layer.onUnmount;\n\t\t\t\tcleanups.push(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst maybePromise = onUnmountFn(ctx);\n\t\t\t\t\t\tif (maybePromise instanceof Promise) {\n\t\t\t\t\t\t\tvoid maybePromise.catch(() => {});\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\thandleError(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst cleanup: CleanupFn | undefined =\n\t\t\t\tcleanups.length > 0\n\t\t\t\t\t? () => {\n\t\t\t\t\t\t\tconst reversed = cleanups.slice().reverse();\n\t\t\t\t\t\t\tfor (const cleanupFn of reversed) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcleanupFn();\n\t\t\t\t\t\t\t\t} catch (error: unknown) {\n\t\t\t\t\t\t\t\t\thandleError(error);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined;\n\n\t\t\tconst layerOnReady = layer.onReady;\n\t\t\tconst onReady = Predicate.isNotNullable(layerOnReady)\n\t\t\t\t? () => layerOnReady(ctx, allLayers)\n\t\t\t\t: undefined;\n\n\t\t\treturn { layer, cleanup, onReady };\n\t\t})\n\t);\n\nexport interface LayerBuildResult {\n\treadonly layer: AnyResolvedLayer;\n\treadonly cleanup: CleanupFn | undefined;\n\treadonly onReady: (() => void | Promise<void>) | undefined;\n}\n\nexport interface AllLayersBuildResult {\n\treadonly results: readonly LayerBuildResult[];\n\treadonly cleanup: CleanupFn | undefined;\n\treadonly metrics: BuildMetrics;\n}\n\nexport interface BuildMetrics {\n\treadonly totalLayers: number;\n\treadonly levels: number;\n\treadonly maxParallelism: number;\n}\n\nexport const buildAllLayersEffect = (\n\tlayers: readonly AnyResolvedLayer[]\n): Effect.Effect<\n\tAllLayersBuildResult,\n\tunknown,\n\tPropsService | RegistryService | TracingService\n> =>\n\tEffect.gen(function* () {\n\t\tconst topology = yield* buildTopologyLevels(layers);\n\t\tconst results: LayerBuildResult[] = [];\n\n\t\tfor (const level of topology) {\n\t\t\ttraceFiberBuildPhase(\n\t\t\t\tlevel.level,\n\t\t\t\tlevel.layers.map((l) => l.name)\n\t\t\t);\n\n\t\t\tif (level.layers.length === 1) {\n\t\t\t\tconst singleLayer = level.layers[0];\n\t\t\t\tif (singleLayer) {\n\t\t\t\t\tconst result = yield* buildLayerEffect(singleLayer, layers);\n\t\t\t\t\tresults.push(result);\n\t\t\t\t}\n\t\t\t} else if (level.layers.length > 1) {\n\t\t\t\tconst fibers = yield* Effect.all(\n\t\t\t\t\tlevel.layers.map((layer) =>\n\t\t\t\t\t\tEffect.fork(buildLayerEffect(layer, layers))\n\t\t\t\t\t)\n\t\t\t\t) as Effect.Effect<\n\t\t\t\t\tFiber.Fiber<LayerBuildResult, unknown>[],\n\t\t\t\t\tnever,\n\t\t\t\t\tPropsService | RegistryService | TracingService\n\t\t\t\t>;\n\n\t\t\t\tconst levelResults = yield* Fiber.joinAll(fibers);\n\t\t\t\tresults.push(...levelResults);\n\t\t\t}\n\t\t}\n\n\t\tconst onReadyCallbacks = results.flatMap((r) =>\n\t\t\tr.onReady ? [r.onReady] : []\n\t\t);\n\n\t\tif (onReadyCallbacks.length > 0) {\n\t\t\tyield* Effect.all(\n\t\t\t\tonReadyCallbacks.map((cb) =>\n\t\t\t\t\tEffect.tryPromise({\n\t\t\t\t\t\ttry: () => Promise.resolve(cb()),\n\t\t\t\t\t\tcatch: () => undefined,\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t\t{ concurrency: 'unbounded' }\n\t\t\t);\n\t\t}\n\n\t\tconst aggregatedCleanup: CleanupFn | undefined =\n\t\t\tresults.length > 0\n\t\t\t\t? () => {\n\t\t\t\t\t\tfor (const { cleanup } of results.slice().reverse()) {\n\t\t\t\t\t\t\tif (cleanup) {\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tcleanup();\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tvoid 0;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t: undefined;\n\n\t\tconst metrics: BuildMetrics = {\n\t\t\ttotalLayers: layers.length,\n\t\t\tlevels: topology.length,\n\t\t\tmaxParallelism: getMaxParallelism(topology),\n\t\t};\n\n\t\treturn {\n\t\t\tresults,\n\t\t\tcleanup: aggregatedCleanup,\n\t\t\tmetrics,\n\t\t};\n\t});\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Layer, ManagedRuntime } from 'effect';\nimport type { AnyResolvedLayer, CleanupFn } from '../types.js';\nimport { PropsService } from '../services/PropsService.js';\nimport { RegistryService } from '../services/RegistryService.js';\nimport { buildAllLayersEffect } from './builder.js';\nimport { initGlobalLayerContext, clearGlobalLayerContext } from '../context.js';\nimport {\n\tTracingService,\n\tTracingServiceLive,\n\tlogDependencyGraph,\n\tsetGlobalTracing,\n\tclearGlobalTracing,\n\ttype TracingConfig,\n} from '../tracing/index.js';\n\nexport type LayerRuntimeServices =\n\t| PropsService\n\t| RegistryService\n\t| TracingService;\n\nexport const CoreServicesLive = Layer.mergeAll(\n\tPropsService.Default,\n\tRegistryService.Default\n);\n\nexport interface LayerRuntimeOptions {\n\ttracing?: Partial<TracingConfig>;\n}\n\nexport interface LayerRuntime {\n\treadonly runtime: ManagedRuntime.ManagedRuntime<LayerRuntimeServices, never>;\n\treadonly cleanups: readonly CleanupFn[];\n\tdispose: () => Promise<void>;\n}\n\nexport const createLayerRuntime = async (\n\tlayers: readonly AnyResolvedLayer[],\n\toptions: LayerRuntimeOptions = {}\n): Promise<LayerRuntime> => {\n\tconst tracingLayer = TracingServiceLive(options.tracing ?? {});\n\tconst servicesLayer = Layer.mergeAll(CoreServicesLive, tracingLayer);\n\tconst runtime = ManagedRuntime.make(servicesLayer);\n\n\tconst runEffect = Effect.gen(function* () {\n\t\tconst layerRegistry = yield* RegistryService;\n\t\tconst tracingService = yield* TracingService;\n\n\t\tlayerRegistry.registerService('tracing', tracingService);\n\t\tsetGlobalTracing(tracingService);\n\n\t\tyield* logDependencyGraph(layers);\n\t\treturn yield* buildAllLayersEffect(layers);\n\t});\n\n\tconst buildResult = await runtime.runPromise(runEffect);\n\n\tconst initContextEffect = Effect.gen(function* () {\n\t\tconst propsRegistry = yield* PropsService;\n\t\tconst layerRegistry = yield* RegistryService;\n\t\tinitGlobalLayerContext(propsRegistry, layerRegistry, layers);\n\t});\n\n\tawait runtime.runPromise(initContextEffect);\n\n\tconst cleanups = buildResult.results\n\t\t.map((r) => r.cleanup)\n\t\t.filter((c): c is CleanupFn => c !== undefined);\n\n\treturn {\n\t\truntime,\n\t\tcleanups,\n\t\tdispose: async () => {\n\t\t\tclearGlobalLayerContext();\n\t\t\tclearGlobalTracing();\n\n\t\t\tif (buildResult.cleanup) {\n\t\t\t\tbuildResult.cleanup();\n\t\t\t}\n\t\t\tawait runtime.dispose();\n\t\t},\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Component } from '../render/node.js';\nimport type { AnyLayer, AnyResolvedLayer } from '../layers/types.js';\nimport {\n\tdefineLayer,\n\ttype CompiledLayer,\n\tcreateLayerRuntime,\n\ttype LayerRuntime,\n\ttype LayerRuntimeOptions,\n} from '../layers/index.js';\nimport { Predicate } from 'effect';\nimport { mount as mountComponent } from '../canvas/canvas.js';\n\nexport interface AppInstance {\n\tunmount: () => Promise<void>;\n}\n\nexport type MountOptions = LayerRuntimeOptions;\n\nexport class EffuseApp {\n\tprivate layers: Array<AnyLayer | CompiledLayer<any>> = [];\n\tprivate rootComponent: Component;\n\tprivate layerRuntime: LayerRuntime | null = null;\n\n\tconstructor(root: Component) {\n\t\tthis.rootComponent = root;\n\t}\n\n\tasync useLayers(\n\t\tlayers: (AnyLayer | CompiledLayer<any> | (() => Promise<AnyLayer | CompiledLayer<any>>))[]\n\t): Promise<this> {\n\t\tconst resolved = await Promise.all(\n\t\t\tlayers.map((l) => (Predicate.isFunction(l) ? l() : Promise.resolve(l)))\n\t\t);\n\t\tthis.layers = resolved;\n\t\treturn this;\n\t}\n\n\tasync mount(\n\t\tselector: string,\n\t\toptions: MountOptions = {}\n\t): Promise<AppInstance> {\n\t\tthis.layers = this.layers.map((l) =>\n\t\t\t'effectLayer' in l && 'tags' in l ? l : defineLayer(l as AnyLayer)\n\t\t);\n\n\t\tthis.layerRuntime = await createLayerRuntime(\n\t\t\tthis.layers as AnyResolvedLayer[],\n\t\t\toptions\n\t\t);\n\n\t\tmountComponent(this.rootComponent, selector);\n\n\t\treturn {\n\t\t\tunmount: async () => {\n\t\t\t\tawait this.cleanup();\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate async cleanup(): Promise<void> {\n\t\tif (this.layerRuntime) {\n\t\t\tawait this.layerRuntime.dispose();\n\t\t\tthis.layerRuntime = null;\n\t\t}\n\t}\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Component } from '../render/node.js';\nimport { EffuseApp } from './EffuseApp.js';\n\nexport const createApp = (root: Component): EffuseApp => {\n\treturn new EffuseApp(root);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\n\nexport class CycleError extends Data.TaggedError('CycleError')<{\n\treadonly message: string;\n\treadonly layers: readonly string[];\n}> {}\n\nexport class RenderError extends Data.TaggedError('RenderError')<{\n\treadonly message: string;\n\treadonly url: string;\n\treadonly cause?: unknown;\n}> {}\n\nexport class ValidationError extends Data.TaggedError('ValidationError')<{\n\treadonly message: string;\n\treadonly path?: readonly string[];\n\treadonly expected?: string;\n\treadonly received?: string;\n}> {}\n\nexport class HydrationError extends Data.TaggedError('HydrationError')<{\n\treadonly message: string;\n\treadonly serverState: unknown;\n\treadonly clientState: unknown;\n}> {}\n\nexport class HeadMergeError extends Data.TaggedError('HeadMergeError')<{\n\treadonly message: string;\n\treadonly conflictingKeys: readonly string[];\n}> {}\n\nexport class PluginError extends Data.TaggedError('PluginError')<{\n\treadonly message: string;\n\treadonly pluginName?: string;\n\treadonly cause?: unknown;\n}> {}\n\nexport type SSRError =\n\t| CycleError\n\t| RenderError\n\t| ValidationError\n\t| HydrationError\n\t| HeadMergeError\n\t| PluginError;\n\nexport const createErrorHtml = (error: SSRError): string => {\n\tconst isDev = process.env.NODE_ENV !== 'production';\n\n\tif (isDev) {\n\t\treturn `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<title>SSR Error</title>\n\t<style>\n\t\tbody { font-family: system-ui, sans-serif; padding: 2rem; background: #1a1a2e; color: #eee; }\n\t\t.error { background: #16213e; padding: 1.5rem; border-radius: 8px; border-left: 4px solid #e94560; }\n\t\tpre { background: #0f0f23; padding: 1rem; border-radius: 4px; overflow-x: auto; }\n\t</style>\n</head>\n<body>\n\t<div class=\"error\">\n\t\t<h1>${error._tag}</h1>\n\t\t<p>${error.message}</p>\n\t\t<pre>${JSON.stringify(error, null, 2)}</pre>\n\t</div>\n</body>\n</html>`;\n\t}\n\n\treturn `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\t<title>Error</title>\n</head>\n<body>\n\t<h1>Something went wrong</h1>\n\t<p>Please try again later.</p>\n</body>\n</html>`;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport {\n\tEffect,\n\tContext,\n\tRef,\n\tLayer,\n\tOption as EffectOption,\n\tpipe,\n} from 'effect';\nimport type { HeadProps, MetaTag, LinkTag, ScriptTag } from './types.js';\n\nexport class HeadRegistry extends Context.Tag('HeadRegistry')<\n\tHeadRegistry,\n\t{\n\t\treadonly push: (head: HeadProps) => Effect.Effect<void>;\n\n\t\treadonly getMerged: () => Effect.Effect<HeadProps>;\n\n\t\treadonly clear: () => Effect.Effect<void>;\n\t}\n>() {}\n\nexport const mergeHeadProps = (\n\tbase: HeadProps,\n\toverride: HeadProps\n): HeadProps => {\n\tconst merged: HeadProps = { ...base };\n\tconst mutable = merged as Record<string, unknown>;\n\n\tconst scalars: (keyof HeadProps)[] = [\n\t\t'title',\n\t\t'description',\n\t\t'canonical',\n\t\t'viewport',\n\t\t'charset',\n\t\t'lang',\n\t\t'themeColor',\n\t\t'favicon',\n\t\t'base',\n\t\t'robots',\n\t];\n\n\tfor (const key of scalars) {\n\t\tif (override[key] !== undefined) {\n\t\t\tmutable[key] = override[key];\n\t\t}\n\t}\n\n\tif (override.og) {\n\t\tmutable.og = { ...base.og, ...override.og };\n\t}\n\tif (override.twitter) {\n\t\tmutable.twitter = { ...base.twitter, ...override.twitter };\n\t}\n\n\tif (override.meta) {\n\t\tconst existing = base.meta ?? [];\n\t\tconst newMeta = dedupeMetaTags([...existing, ...override.meta]);\n\t\tmutable.meta = newMeta;\n\t}\n\tif (override.link) {\n\t\tconst existing = base.link ?? [];\n\t\tconst newLinks = dedupeLinkTags([...existing, ...override.link]);\n\t\tmutable.link = newLinks;\n\t}\n\tif (override.script) {\n\t\tconst existing = base.script ?? [];\n\t\tconst newScripts = dedupeScriptTags([...existing, ...override.script]);\n\t\tmutable.script = newScripts;\n\t}\n\n\treturn merged;\n};\n\nconst dedupeMetaTags = (tags: readonly MetaTag[]): MetaTag[] => {\n\tconst seen = new Map<string, MetaTag>();\n\tfor (const tag of tags) {\n\t\tconst key = tag.name ?? tag.property ?? tag.content;\n\t\tseen.set(key, tag);\n\t}\n\treturn Array.from(seen.values());\n};\n\nconst dedupeLinkTags = (tags: readonly LinkTag[]): LinkTag[] => {\n\tconst seen = new Map<string, LinkTag>();\n\tfor (const tag of tags) {\n\t\tconst key = `${tag.rel}:${tag.href}`;\n\t\tseen.set(key, tag);\n\t}\n\treturn Array.from(seen.values());\n};\n\nconst dedupeScriptTags = (tags: readonly ScriptTag[]): ScriptTag[] => {\n\tconst seen = new Map<string, ScriptTag>();\n\tfor (const tag of tags) {\n\t\tconst key = pipe(\n\t\t\tEffectOption.fromNullable(tag.src),\n\t\t\tEffectOption.orElse(() => EffectOption.fromNullable(tag.id)),\n\t\t\tEffectOption.orElse(() =>\n\t\t\t\tpipe(\n\t\t\t\t\tEffectOption.fromNullable(tag.content),\n\t\t\t\t\tEffectOption.map((c) => c.slice(0, 50))\n\t\t\t\t)\n\t\t\t),\n\t\t\tEffectOption.getOrElse(() => '')\n\t\t);\n\t\tif (key) {\n\t\t\tseen.set(key, tag);\n\t\t}\n\t}\n\treturn Array.from(seen.values());\n};\n\nexport const HeadRegistryLive = Layer.effect(\n\tHeadRegistry,\n\tEffect.gen(function* () {\n\t\tconst stackRef = yield* Ref.make<HeadProps[]>([]);\n\n\t\treturn {\n\t\t\tpush: (head: HeadProps) =>\n\t\t\t\tRef.update(stackRef, (stack) => [...stack, head]),\n\n\t\t\tgetMerged: () =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst stack = yield* Ref.get(stackRef);\n\t\t\t\t\treturn stack.reduce<HeadProps>(\n\t\t\t\t\t\t(acc, head) => mergeHeadProps(acc, head),\n\t\t\t\t\t\t{}\n\t\t\t\t\t);\n\t\t\t\t}),\n\n\t\t\tclear: () => Ref.set(stackRef, []),\n\t\t};\n\t})\n);\n\nexport const mergeLayerHeads = (heads: readonly HeadProps[]): HeadProps => {\n\treturn heads.reduce<HeadProps>((acc, head) => mergeHeadProps(acc, head), {});\n};\n\nexport const headToHtml = (head: HeadProps): string => {\n\tconst parts: string[] = [];\n\n\tif (head.charset) {\n\t\tparts.push(`<meta charset=\"${escapeAttr(head.charset)}\">`);\n\t} else {\n\t\tparts.push('<meta charset=\"utf-8\">');\n\t}\n\n\tif (head.viewport) {\n\t\tparts.push(`<meta name=\"viewport\" content=\"${escapeAttr(head.viewport)}\">`);\n\t} else {\n\t\tparts.push(\n\t\t\t'<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">'\n\t\t);\n\t}\n\n\tif (head.title) {\n\t\tparts.push(`<title>${escapeHtml(head.title)}</title>`);\n\t}\n\n\tif (head.description) {\n\t\tparts.push(\n\t\t\t`<meta name=\"description\" content=\"${escapeAttr(head.description)}\">`\n\t\t);\n\t}\n\n\tif (head.canonical) {\n\t\tparts.push(`<link rel=\"canonical\" href=\"${escapeAttr(head.canonical)}\">`);\n\t}\n\n\tif (head.base) {\n\t\tparts.push(`<base href=\"${escapeAttr(head.base)}\">`);\n\t}\n\n\tif (head.themeColor) {\n\t\tparts.push(\n\t\t\t`<meta name=\"theme-color\" content=\"${escapeAttr(head.themeColor)}\">`\n\t\t);\n\t}\n\n\tif (head.favicon) {\n\t\tparts.push(`<link rel=\"icon\" href=\"${escapeAttr(head.favicon)}\">`);\n\t}\n\n\tif (head.robots) {\n\t\tparts.push(`<meta name=\"robots\" content=\"${escapeAttr(head.robots)}\">`);\n\t}\n\n\tif (head.og) {\n\t\tfor (const [key, value] of Object.entries(head.og)) {\n\t\t\tif (value) {\n\t\t\t\tparts.push(\n\t\t\t\t\t`<meta property=\"og:${escapeAttr(key)}\" content=\"${escapeAttr(value)}\">`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (head.twitter) {\n\t\tfor (const [key, value] of Object.entries(head.twitter)) {\n\t\t\tif (value) {\n\t\t\t\tparts.push(\n\t\t\t\t\t`<meta name=\"twitter:${escapeAttr(key)}\" content=\"${escapeAttr(value)}\">`\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (head.meta) {\n\t\tfor (const tag of head.meta) {\n\t\t\tconst attrs: string[] = [];\n\t\t\tif (tag.name) attrs.push(`name=\"${escapeAttr(tag.name)}\"`);\n\t\t\tif (tag.property) attrs.push(`property=\"${escapeAttr(tag.property)}\"`);\n\t\t\tif (tag.httpEquiv)\n\t\t\t\tattrs.push(`http-equiv=\"${escapeAttr(tag.httpEquiv)}\"`);\n\t\t\tattrs.push(`content=\"${escapeAttr(tag.content)}\"`);\n\t\t\tparts.push(`<meta ${attrs.join(' ')}>`);\n\t\t}\n\t}\n\n\tif (head.link) {\n\t\tfor (const tag of head.link) {\n\t\t\tconst attrs = Object.entries(tag)\n\t\t\t\t.filter(([, v]) => v !== undefined)\n\t\t\t\t.map(([k, v]) => `${k}=\"${escapeAttr(String(v))}\"`)\n\t\t\t\t.join(' ');\n\t\t\tparts.push(`<link ${attrs}>`);\n\t\t}\n\t}\n\n\tif (head.script) {\n\t\tfor (const tag of head.script) {\n\t\t\tconst attrs: string[] = [];\n\t\t\tif (tag.src) attrs.push(`src=\"${escapeAttr(tag.src)}\"`);\n\t\t\tif (tag.type) attrs.push(`type=\"${escapeAttr(tag.type)}\"`);\n\t\t\tif (tag.async) attrs.push('async');\n\t\t\tif (tag.defer) attrs.push('defer');\n\t\t\tif (tag.id) attrs.push(`id=\"${escapeAttr(tag.id)}\"`);\n\n\t\t\tconst attrStr = attrs.length > 0 ? ` ${attrs.join(' ')}` : '';\n\t\t\tconst content = tag.content ? escapeHtml(tag.content) : '';\n\t\t\tparts.push(`<script${attrStr}>${content}</script>`);\n\t\t}\n\t}\n\n\treturn parts.join('\\n\\t');\n};\n\nconst escapeHtml = (str: string): string => {\n\treturn str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n};\n\nconst escapeAttr = (str: string): string => {\n\treturn str\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/\"/g, '&quot;')\n\t\t.replace(/'/g, '&#39;');\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { HeadProps } from './types.js';\nimport { Predicate } from 'effect';\n\nlet ssrContext: { push: (head: HeadProps) => void } | null = null;\n\nexport const setSSRContext = (\n\tctx: { push: (head: HeadProps) => void } | null\n): void => {\n\tssrContext = ctx;\n};\n\nexport const getSSRContext = (): { push: (head: HeadProps) => void } | null => {\n\treturn ssrContext;\n};\n\nexport const isServer = (): boolean => {\n\treturn Predicate.isNotNullable(ssrContext);\n};\n\nexport const useHead = (head: HeadProps): void => {\n\tif (ssrContext) {\n\t\tssrContext.push(head);\n\t} else if (typeof document !== 'undefined') {\n\t\tupdateClientHead(head);\n\t}\n};\n\nconst updateClientHead = (head: HeadProps): void => {\n\tif (head.title) {\n\t\tdocument.title = head.title;\n\t}\n\n\tif (head.description) {\n\t\tupdateMetaTag('name', 'description', head.description);\n\t}\n\n\tif (head.canonical) {\n\t\tupdateLinkTag('canonical', head.canonical);\n\t}\n\n\tif (head.themeColor) {\n\t\tupdateMetaTag('name', 'theme-color', head.themeColor);\n\t}\n\n\tif (head.robots) {\n\t\tupdateMetaTag('name', 'robots', head.robots);\n\t}\n\n\tif (head.og) {\n\t\tfor (const [key, value] of Object.entries(head.og)) {\n\t\t\tif (value) {\n\t\t\t\tupdateMetaTag('property', `og:${key}`, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (head.twitter) {\n\t\tfor (const [key, value] of Object.entries(head.twitter)) {\n\t\t\tif (value) {\n\t\t\t\tupdateMetaTag('name', `twitter:${key}`, value);\n\t\t\t}\n\t\t}\n\t}\n\n\tif (head.meta) {\n\t\tfor (const tag of head.meta) {\n\t\t\tif (tag.name) {\n\t\t\t\tupdateMetaTag('name', tag.name, tag.content);\n\t\t\t} else if (tag.property) {\n\t\t\t\tupdateMetaTag('property', tag.property, tag.content);\n\t\t\t}\n\t\t}\n\t}\n};\n\nconst updateMetaTag = (\n\tattr: 'name' | 'property',\n\tname: string,\n\tcontent: string\n): void => {\n\tlet meta = document.querySelector<HTMLMetaElement>(`meta[${attr}=\"${name}\"]`);\n\n\tif (!meta) {\n\t\tmeta = document.createElement('meta');\n\t\tmeta.setAttribute(attr, name);\n\t\tdocument.head.appendChild(meta);\n\t}\n\n\tmeta.content = content;\n};\n\nconst updateLinkTag = (rel: string, href: string): void => {\n\tlet link = document.querySelector<HTMLLinkElement>(`link[rel=\"${rel}\"]`);\n\n\tif (!link) {\n\t\tlink = document.createElement('link');\n\t\tlink.rel = rel;\n\t\tdocument.head.appendChild(link);\n\t}\n\n\tlink.href = href;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Predicate, Scope, Exit, pipe } from 'effect';\nimport type { EffuseNode, Component, BlueprintDef } from '../render/node.js';\nimport { isEffuseNode, matchEffuseNode } from '../render/node.js';\nimport { isSignal } from '../reactivity/index.js';\nimport type { HeadProps, RenderResult } from './types.js';\nimport { RenderError } from './errors.js';\nimport { headToHtml, mergeLayerHeads } from './head-registry.js';\nimport { setSSRContext } from './use-head.js';\n\nexport const renderToString = (\n\troot: Component | EffuseNode,\n\turl: string,\n\tlayerHeads: HeadProps[] = []\n): Effect.Effect<RenderResult, RenderError> =>\n\tEffect.gen(function* () {\n\t\tconst startTime = Date.now();\n\n\t\tconst scope = yield* Scope.make();\n\n\t\tconst baseHead = mergeLayerHeads(layerHeads);\n\n\t\tconst headStack: HeadProps[] = [baseHead];\n\n\t\tsetSSRContext({\n\t\t\tpush: (head: HeadProps) => {\n\t\t\t\theadStack.push(head);\n\t\t\t},\n\t\t});\n\n\t\ttry {\n\t\t\tconst html = yield* Effect.try({\n\t\t\t\ttry: () => renderNodeToString(root),\n\t\t\t\tcatch: (error) =>\n\t\t\t\t\tnew RenderError({\n\t\t\t\t\t\tmessage: `Render failed: ${String(error)}`,\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tcause: error,\n\t\t\t\t\t}),\n\t\t\t});\n\n\t\t\tconst mergedHead = headStack.reduce<HeadProps>(\n\t\t\t\t(acc, head) => ({ ...acc, ...head }),\n\t\t\t\t{}\n\t\t\t);\n\n\t\t\tconst fullHtml = generateFullHtml(html, mergedHead, {});\n\n\t\t\tconst timing = Date.now() - startTime;\n\n\t\t\treturn {\n\t\t\t\thtml: fullHtml,\n\t\t\t\thead: mergedHead,\n\t\t\t\tstate: {},\n\t\t\t\ttiming,\n\t\t\t};\n\t\t} finally {\n\t\t\tsetSSRContext(null);\n\t\t\tyield* Scope.close(scope, Exit.succeed(undefined));\n\t\t}\n\t});\n\nconst renderNodeToString = (node: unknown): string => {\n\tif (node == null) {\n\t\treturn '';\n\t}\n\n\tif (Predicate.isString(node)) {\n\t\treturn escapeHtml(node);\n\t}\n\tif (Predicate.isNumber(node)) {\n\t\treturn String(node);\n\t}\n\n\tif (Predicate.isBoolean(node)) {\n\t\treturn '';\n\t}\n\n\tif (isSignal(node)) {\n\t\treturn renderNodeToString((node as { value: unknown }).value);\n\t}\n\n\tif (Array.isArray(node)) {\n\t\treturn node.map(renderNodeToString).join('');\n\t}\n\n\tif (isEffuseNode(node)) {\n\t\treturn renderEffuseNode(node);\n\t}\n\n\tif (Predicate.isFunction(node)) {\n\t\ttry {\n\t\t\tconst result = (node as () => unknown)();\n\t\t\treturn renderNodeToString(result);\n\t\t} catch {\n\t\t\treturn '';\n\t\t}\n\t}\n\n\tif (\n\t\tPredicate.isObject(node) &&\n\t\tPredicate.hasProperty(node, '_tag') &&\n\t\tnode._tag === 'Blueprint'\n\t) {\n\t\treturn renderBlueprint(node as BlueprintDef, {});\n\t}\n\n\treturn '';\n};\n\nconst renderEffuseNode = (node: EffuseNode): string => {\n\treturn pipe(\n\t\tnode,\n\t\tmatchEffuseNode({\n\t\t\tText: (node) => escapeHtml(node.text),\n\t\t\tElement: (node) => {\n\t\t\t\tconst tag = node.tag;\n\t\t\t\tconst props = node.props ?? {};\n\t\t\t\tconst children = node.children;\n\n\t\t\t\tconst attrs = renderAttributes(props);\n\t\t\t\tconst attrStr = attrs ? ` ${attrs}` : '';\n\n\t\t\t\tconst selfClosing = [\n\t\t\t\t\t'area',\n\t\t\t\t\t'base',\n\t\t\t\t\t'br',\n\t\t\t\t\t'col',\n\t\t\t\t\t'embed',\n\t\t\t\t\t'hr',\n\t\t\t\t\t'img',\n\t\t\t\t\t'input',\n\t\t\t\t\t'link',\n\t\t\t\t\t'meta',\n\t\t\t\t\t'param',\n\t\t\t\t\t'source',\n\t\t\t\t\t'track',\n\t\t\t\t\t'wbr',\n\t\t\t\t];\n\n\t\t\t\tif (selfClosing.includes(tag)) {\n\t\t\t\t\treturn `<${tag}${attrStr}>`;\n\t\t\t\t}\n\n\t\t\t\tconst childHtml = children.map(renderNodeToString).join('');\n\t\t\t\treturn `<${tag}${attrStr}>${childHtml}</${tag}>`;\n\t\t\t},\n\t\t\tBlueprint: (node) => renderBlueprint(node.blueprint, node.props),\n\t\t\tFragment: (node) => node.children.map(renderNodeToString).join(''),\n\t\t\tList: (node) => node.children.map(renderNodeToString).join(''),\n\t\t})\n\t);\n};\n\nconst renderBlueprint = (\n\tdef: BlueprintDef,\n\tprops: Record<string, unknown>\n): string => {\n\tconst state = def.state ? def.state(props) : {};\n\n\tconst context = {\n\t\tprops,\n\t\tstate,\n\t\tportals: {},\n\t};\n\n\tconst viewResult = def.view(context);\n\treturn renderNodeToString(viewResult);\n};\n\nconst renderAttributes = (props: Record<string, unknown>): string => {\n\tconst parts: string[] = [];\n\n\tfor (const [key, value] of Object.entries(props)) {\n\t\tif (key === 'children' || key.startsWith('_')) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (key.startsWith('on') && Predicate.isFunction(value)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (value == null) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst actualValue = isSignal(value)\n\t\t\t? (value as { value: unknown }).value\n\t\t\t: value;\n\n\t\tif (Predicate.isBoolean(actualValue)) {\n\t\t\tif (actualValue) {\n\t\t\t\tparts.push(\n\t\t\t\t\tescapeAttrName(key === 'className' ? 'class' : camelToKebab(key))\n\t\t\t\t);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst attrName = escapeAttrName(\n\t\t\tkey === 'className' ? 'class' : camelToKebab(key)\n\t\t);\n\n\t\tif (key === 'style' && Predicate.isObject(actualValue)) {\n\t\t\tconst styleStr = Object.entries(\n\t\t\t\tactualValue as Record<string, string | number>\n\t\t\t)\n\t\t\t\t.map(([k, v]) => `${camelToKebab(k)}: ${String(v)}`)\n\t\t\t\t.join('; ');\n\t\t\tparts.push(`style=\"${escapeAttr(styleStr)}\"`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tparts.push(`${attrName}=\"${escapeAttr(String(actualValue))}\"`);\n\t}\n\n\treturn parts.join(' ');\n};\n\nconst generateFullHtml = (\n\tbodyHtml: string,\n\thead: HeadProps,\n\tstate: Record<string, unknown>\n): string => {\n\tconst headHtml = headToHtml(head);\n\tconst lang = head.lang ?? 'en';\n\tconst stateScript =\n\t\tObject.keys(state).length > 0\n\t\t\t? `<script id=\"__EFFUSE_DATA__\" type=\"application/json\">${JSON.stringify(state)}</script>`\n\t\t\t: '';\n\n\treturn `<!DOCTYPE html>\n<html lang=\"${lang}\">\n<head>\n\t${headHtml}\n</head>\n<body>\n\t<div id=\"app\">${bodyHtml}</div>\n\t${stateScript}\n</body>\n</html>`;\n};\n\nconst escapeHtml = (str: string): string => {\n\treturn str.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n};\n\nconst escapeAttr = (str: string): string => {\n\treturn str\n\t\t.replace(/&/g, '&amp;')\n\t\t.replace(/</g, '&lt;')\n\t\t.replace(/>/g, '&gt;')\n\t\t.replace(/\"/g, '&quot;')\n\t\t.replace(/'/g, '&#39;');\n};\n\nconst escapeAttrName = (str: string): string => {\n\treturn escapeAttr(str)\n\t\t.replace(/\\//g, '&#47;')\n\t\t.replace(/\\s/g, '&#32;')\n\t\t.replace(/=/g, '&#61;');\n};\n\nconst camelToKebab = (str: string): string => {\n\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, pipe } from 'effect';\nimport type { Component } from '../render/node.js';\nimport type { EffuseLayer } from '../layers/types.js';\nimport type { HeadProps, RenderResult, ServerAppOptions } from './types.js';\nimport { renderToString } from './render.js';\nimport { RenderError, createErrorHtml } from './errors.js';\nimport { mapEffuseErrors } from '../errors.js';\n\nexport interface ServerApp {\n\tuseLayers(layers: readonly EffuseLayer[]): ServerApp;\n\n\tconfigure(options: ServerAppOptions): ServerApp;\n\n\trenderToString(url: string): Promise<RenderResult>;\n\n\trenderToHtml(url: string): Promise<string>;\n}\n\nexport const createServerApp = (root: Component): ServerApp => {\n\tlet layers: readonly EffuseLayer[] = [];\n\tlet options: ServerAppOptions = { hydrate: true };\n\n\tconst app: ServerApp = {\n\t\tuseLayers(newLayers) {\n\t\t\tlayers = newLayers;\n\t\t\treturn app;\n\t\t},\n\n\t\tconfigure(newOptions) {\n\t\t\toptions = { ...options, ...newOptions };\n\t\t\treturn app;\n\t\t},\n\n\t\tasync renderToString(url: string): Promise<RenderResult> {\n\t\t\tconst layerHeads = collectLayerHeads(layers);\n\n\t\t\tconst effect = renderToString(root, url, layerHeads);\n\t\t\tconst result = await Effect.runPromise(pipe(effect, mapEffuseErrors));\n\n\t\t\treturn result;\n\t\t},\n\n\t\tasync renderToHtml(url: string): Promise<string> {\n\t\t\ttry {\n\t\t\t\tconst result = await app.renderToString(url);\n\t\t\t\treturn result.html;\n\t\t\t} catch (error) {\n\t\t\t\tconst renderError =\n\t\t\t\t\terror instanceof RenderError\n\t\t\t\t\t\t? error\n\t\t\t\t\t\t: new RenderError({\n\t\t\t\t\t\t\t\tmessage: String(error),\n\t\t\t\t\t\t\t\turl,\n\t\t\t\t\t\t\t\tcause: error,\n\t\t\t\t\t\t\t});\n\t\t\t\treturn createErrorHtml(renderError);\n\t\t\t}\n\t\t},\n\t};\n\n\treturn app;\n};\n\nconst collectLayerHeads = (\n\tlayers: readonly EffuseLayer[],\n\tvisited = new Set<EffuseLayer>()\n): HeadProps[] => {\n\tconst heads: HeadProps[] = [];\n\n\tfor (const layer of layers) {\n\t\tif (visited.has(layer)) continue;\n\t\tvisited.add(layer);\n\n\t\tif (layer.extends) {\n\t\t\theads.push(...collectLayerHeads(layer.extends, visited));\n\t\t}\n\n\t\tif (layer.head) {\n\t\t\theads.push(layer.head);\n\t\t}\n\t}\n\n\treturn heads;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { useHead, isServer } from './use-head.js';\nimport type { HeadProps, MetaTag } from './types.js';\n\nexport interface SeoMetaInput {\n\ttitle?: string;\n\tdescription?: string;\n\tkeywords?: string;\n\tauthor?: string;\n\trobots?: string;\n\tgenerator?: string;\n\tapplicationName?: string;\n\treferrer?:\n\t\t| 'no-referrer'\n\t\t| 'no-referrer-when-downgrade'\n\t\t| 'origin'\n\t\t| 'origin-when-cross-origin'\n\t\t| 'same-origin'\n\t\t| 'strict-origin'\n\t\t| 'strict-origin-when-cross-origin'\n\t\t| 'unsafe-url';\n\n\tthemeColor?: string;\n\tcolorScheme?: 'normal' | 'light' | 'dark' | 'light dark' | 'dark light';\n\n\togTitle?: string;\n\togDescription?: string;\n\togType?: string;\n\togUrl?: string;\n\togImage?: string;\n\togImageAlt?: string;\n\togImageWidth?: string | number;\n\togImageHeight?: string | number;\n\togImageType?: string;\n\togLocale?: string;\n\togLocaleAlternate?: string[];\n\togSiteName?: string;\n\togDeterminer?: 'a' | 'an' | 'the' | '' | 'auto';\n\n\tarticlePublishedTime?: string;\n\tarticleModifiedTime?: string;\n\tarticleExpirationTime?: string;\n\tarticleAuthor?: string | string[];\n\tarticleSection?: string;\n\tarticleTag?: string | string[];\n\n\ttwitterCard?: 'summary' | 'summary_large_image' | 'app' | 'player';\n\ttwitterSite?: string;\n\ttwitterSiteId?: string;\n\ttwitterCreator?: string;\n\ttwitterCreatorId?: string;\n\ttwitterTitle?: string;\n\ttwitterDescription?: string;\n\ttwitterImage?: string;\n\ttwitterImageAlt?: string;\n\n\tfbAppId?: string;\n\n\tgoogleSiteVerification?: string;\n\tyandexVerification?: string;\n\tmsValidate?: string;\n\n\tappleItunesApp?: string;\n\tappleMobileWebAppCapable?: 'yes' | 'no';\n\tappleMobileWebAppStatusBarStyle?: 'default' | 'black' | 'black-translucent';\n\tappleMobileWebAppTitle?: string;\n\n\tformatDetection?: string;\n}\n\nconst seoMetaToHeadProps = (input: SeoMetaInput): HeadProps => {\n\tconst meta: MetaTag[] = [];\n\tconst head: HeadProps = {};\n\n\tif (input.title) (head as Record<string, unknown>).title = input.title;\n\tif (input.description) {\n\t\t(head as Record<string, unknown>).description = input.description;\n\t\tmeta.push({ name: 'description', content: input.description });\n\t}\n\tif (input.keywords) meta.push({ name: 'keywords', content: input.keywords });\n\tif (input.author) meta.push({ name: 'author', content: input.author });\n\tif (input.robots) (head as Record<string, unknown>).robots = input.robots;\n\tif (input.generator)\n\t\tmeta.push({ name: 'generator', content: input.generator });\n\tif (input.applicationName)\n\t\tmeta.push({ name: 'application-name', content: input.applicationName });\n\tif (input.referrer) meta.push({ name: 'referrer', content: input.referrer });\n\n\tif (input.themeColor)\n\t\t(head as Record<string, unknown>).themeColor = input.themeColor;\n\tif (input.colorScheme)\n\t\tmeta.push({ name: 'color-scheme', content: input.colorScheme });\n\n\tif (input.ogTitle)\n\t\tmeta.push({ property: 'og:title', content: input.ogTitle });\n\tif (input.ogDescription)\n\t\tmeta.push({ property: 'og:description', content: input.ogDescription });\n\tif (input.ogType) meta.push({ property: 'og:type', content: input.ogType });\n\tif (input.ogUrl) meta.push({ property: 'og:url', content: input.ogUrl });\n\tif (input.ogImage)\n\t\tmeta.push({ property: 'og:image', content: input.ogImage });\n\tif (input.ogImageAlt)\n\t\tmeta.push({ property: 'og:image:alt', content: input.ogImageAlt });\n\tif (input.ogImageWidth)\n\t\tmeta.push({\n\t\t\tproperty: 'og:image:width',\n\t\t\tcontent: String(input.ogImageWidth),\n\t\t});\n\tif (input.ogImageHeight)\n\t\tmeta.push({\n\t\t\tproperty: 'og:image:height',\n\t\t\tcontent: String(input.ogImageHeight),\n\t\t});\n\tif (input.ogImageType)\n\t\tmeta.push({ property: 'og:image:type', content: input.ogImageType });\n\tif (input.ogLocale)\n\t\tmeta.push({ property: 'og:locale', content: input.ogLocale });\n\tif (input.ogSiteName)\n\t\tmeta.push({ property: 'og:site_name', content: input.ogSiteName });\n\tif (input.ogDeterminer)\n\t\tmeta.push({ property: 'og:determiner', content: input.ogDeterminer });\n\n\tif (input.articlePublishedTime)\n\t\tmeta.push({\n\t\t\tproperty: 'article:published_time',\n\t\t\tcontent: input.articlePublishedTime,\n\t\t});\n\tif (input.articleModifiedTime)\n\t\tmeta.push({\n\t\t\tproperty: 'article:modified_time',\n\t\t\tcontent: input.articleModifiedTime,\n\t\t});\n\tif (input.articleExpirationTime)\n\t\tmeta.push({\n\t\t\tproperty: 'article:expiration_time',\n\t\t\tcontent: input.articleExpirationTime,\n\t\t});\n\tif (input.articleSection)\n\t\tmeta.push({ property: 'article:section', content: input.articleSection });\n\n\tif (input.articleAuthor) {\n\t\tconst authors = Array.isArray(input.articleAuthor)\n\t\t\t? input.articleAuthor\n\t\t\t: [input.articleAuthor];\n\t\tauthors.forEach((author) =>\n\t\t\tmeta.push({ property: 'article:author', content: author })\n\t\t);\n\t}\n\n\tif (input.articleTag) {\n\t\tconst tags = Array.isArray(input.articleTag)\n\t\t\t? input.articleTag\n\t\t\t: [input.articleTag];\n\t\ttags.forEach((tag) => meta.push({ property: 'article:tag', content: tag }));\n\t}\n\n\tif (input.twitterCard)\n\t\tmeta.push({ name: 'twitter:card', content: input.twitterCard });\n\tif (input.twitterSite)\n\t\tmeta.push({ name: 'twitter:site', content: input.twitterSite });\n\tif (input.twitterSiteId)\n\t\tmeta.push({ name: 'twitter:site:id', content: input.twitterSiteId });\n\tif (input.twitterCreator)\n\t\tmeta.push({ name: 'twitter:creator', content: input.twitterCreator });\n\tif (input.twitterCreatorId)\n\t\tmeta.push({ name: 'twitter:creator:id', content: input.twitterCreatorId });\n\tif (input.twitterTitle)\n\t\tmeta.push({ name: 'twitter:title', content: input.twitterTitle });\n\tif (input.twitterDescription)\n\t\tmeta.push({\n\t\t\tname: 'twitter:description',\n\t\t\tcontent: input.twitterDescription,\n\t\t});\n\tif (input.twitterImage)\n\t\tmeta.push({ name: 'twitter:image', content: input.twitterImage });\n\tif (input.twitterImageAlt)\n\t\tmeta.push({ name: 'twitter:image:alt', content: input.twitterImageAlt });\n\n\tif (input.fbAppId)\n\t\tmeta.push({ property: 'fb:app_id', content: input.fbAppId });\n\n\tif (input.googleSiteVerification)\n\t\tmeta.push({\n\t\t\tname: 'google-site-verification',\n\t\t\tcontent: input.googleSiteVerification,\n\t\t});\n\tif (input.yandexVerification)\n\t\tmeta.push({\n\t\t\tname: 'yandex-verification',\n\t\t\tcontent: input.yandexVerification,\n\t\t});\n\tif (input.msValidate)\n\t\tmeta.push({ name: 'msvalidate.01', content: input.msValidate });\n\n\tif (input.appleItunesApp)\n\t\tmeta.push({ name: 'apple-itunes-app', content: input.appleItunesApp });\n\tif (input.appleMobileWebAppCapable)\n\t\tmeta.push({\n\t\t\tname: 'apple-mobile-web-app-capable',\n\t\t\tcontent: input.appleMobileWebAppCapable,\n\t\t});\n\tif (input.appleMobileWebAppStatusBarStyle)\n\t\tmeta.push({\n\t\t\tname: 'apple-mobile-web-app-status-bar-style',\n\t\t\tcontent: input.appleMobileWebAppStatusBarStyle,\n\t\t});\n\tif (input.appleMobileWebAppTitle)\n\t\tmeta.push({\n\t\t\tname: 'apple-mobile-web-app-title',\n\t\t\tcontent: input.appleMobileWebAppTitle,\n\t\t});\n\n\tif (input.formatDetection)\n\t\tmeta.push({ name: 'format-detection', content: input.formatDetection });\n\n\tif (meta.length > 0) {\n\t\t(head as Record<string, unknown>).meta = meta;\n\t}\n\n\treturn head;\n};\n\nexport const useSeoMeta = (input: SeoMetaInput): void => {\n\tconst headProps = seoMetaToHeadProps(input);\n\tuseHead(headProps);\n};\n\nexport const useServerSeoMeta = (input: SeoMetaInput): void => {\n\tif (!isServer()) return;\n\n\tconst headProps = seoMetaToHeadProps(input);\n\tuseHead(headProps);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { Component } from '../render/node.js';\nimport type { EffuseLayer } from '../layers/types.js';\nimport type { RequestContext, ServerAppOptions } from './types.js';\nimport { createServerApp } from './server-app.js';\n\nexport interface HandlerConfig {\n\troot: Component;\n\tlayers?: readonly EffuseLayer[];\n\toptions?: ServerAppOptions;\n\ttransform?: (req: Request) => Request;\n\tnotFound?: () => Response;\n}\n\nexport const createHandler = (config: HandlerConfig) => {\n\tconst serverApp = createServerApp(config.root)\n\t\t.useLayers(config.layers ?? [])\n\t\t.configure(config.options ?? {});\n\n\treturn async (request: Request): Promise<Response> => {\n\t\ttry {\n\t\t\tconst req = config.transform ? config.transform(request) : request;\n\n\t\t\tconst url = new URL(req.url);\n\t\t\tconst pathname = url.pathname;\n\n\t\t\tif (shouldSkip(pathname)) {\n\t\t\t\treturn new Response(null, { status: 404 });\n\t\t\t}\n\n\t\t\tconst html = await serverApp.renderToHtml(pathname);\n\n\t\t\treturn new Response(html, {\n\t\t\t\tstatus: 200,\n\t\t\t\theaders: {\n\t\t\t\t\t'Content-Type': 'text/html; charset=utf-8',\n\t\t\t\t\t'Cache-Control': 'public, max-age=0, must-revalidate',\n\t\t\t\t},\n\t\t\t});\n\t\t} catch {\n\t\t\treturn new Response(\n\t\t\t\t`<!DOCTYPE html><html><head><title>Error</title></head><body><h1>Server Error</h1></body></html>`,\n\t\t\t\t{\n\t\t\t\t\tstatus: 500,\n\t\t\t\t\theaders: { 'Content-Type': 'text/html; charset=utf-8' },\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\t};\n};\n\nconst shouldSkip = (pathname: string): boolean => {\n\tconst staticExtensions = [\n\t\t'.js',\n\t\t'.css',\n\t\t'.json',\n\t\t'.ico',\n\t\t'.png',\n\t\t'.jpg',\n\t\t'.jpeg',\n\t\t'.gif',\n\t\t'.svg',\n\t\t'.webp',\n\t\t'.woff',\n\t\t'.woff2',\n\t\t'.ttf',\n\t\t'.eot',\n\t\t'.map',\n\t\t'.txt',\n\t\t'.xml',\n\t\t'.webmanifest',\n\t];\n\n\treturn staticExtensions.some((ext) => pathname.endsWith(ext));\n};\n\nexport const parseQuery = (url: URL): Record<string, string> => {\n\tconst query: Record<string, string> = {};\n\turl.searchParams.forEach((value, key) => {\n\t\tquery[key] = value;\n\t});\n\treturn query;\n};\n\nexport const createRequestContext = (\n\trequest: Request,\n\tparams: Record<string, string> = {}\n): RequestContext => {\n\tconst url = new URL(request.url);\n\treturn {\n\t\trequest,\n\t\turl,\n\t\tparams,\n\t\tquery: parseQuery(url),\n\t};\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { HeadProps } from './types.js';\nimport { HYDRATION_SCRIPT_ID } from '../constants.js';\n\nexport { HYDRATION_SCRIPT_ID };\n\nexport interface HydrationData {\n\thead: HeadProps;\n\tstate: Record<string, unknown>;\n\turl: string;\n\ttimestamp: number;\n}\n\nexport const serializeHydrationData = (data: HydrationData): string => {\n\tconst json = JSON.stringify(data);\n\tconst escaped = json.replace(/<\\/script/gi, '<\\\\/script');\n\treturn `<script id=\"${HYDRATION_SCRIPT_ID}\" type=\"application/json\">${escaped}</script>`;\n};\n\nexport const getHydrationData = (): HydrationData | null => {\n\tif (typeof document === 'undefined') {\n\t\treturn null;\n\t}\n\n\tconst script = document.getElementById(HYDRATION_SCRIPT_ID);\n\tif (!script) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst content = script.textContent;\n\t\tif (!content) return null;\n\t\treturn JSON.parse(content) as HydrationData;\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const checkHydrationMatch = (\n\tclientState: Record<string, unknown>,\n\tserverState: Record<string, unknown>\n): boolean => {\n\treturn JSON.stringify(clientState) === JSON.stringify(serverState);\n};\n\nexport const applyHydratedHead = (head: HeadProps): void => {\n\tif (typeof document === 'undefined') return;\n\n\tif (head.title && document.title !== head.title) {\n\t\tdocument.title = head.title;\n\t}\n};\n\nexport const cleanupHydrationScript = (): void => {\n\tif (typeof document === 'undefined') return;\n\n\tconst script = document.getElementById(HYDRATION_SCRIPT_ID);\n\tif (script) {\n\t\tscript.remove();\n\t}\n};\n\nexport const initHydration = (): HydrationData | null => {\n\tconst data = getHydrationData();\n\n\tif (data) {\n\t\tapplyHydratedHead(data.head);\n\t}\n\n\treturn data;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FormValidators, FormErrors } from './types.js';\n\n/** Single field validation. Returns error message or undefined. */\nexport function validateField<T>(\n\tvalidator: ((value: T) => string | undefined) | undefined,\n\tvalue: T\n): string | undefined {\n\tif (!validator) {\n\t\treturn undefined;\n\t}\n\treturn validator(value);\n}\n\n/** Full form validation. Returns error map. */\nexport function validateForm<T extends Record<string, unknown>>(\n\tvalidators: FormValidators<T>,\n\tvalues: T\n): FormErrors<T> {\n\tconst errors: FormErrors<T> = {};\n\n\tfor (const key of Object.keys(validators) as Array<keyof T>) {\n\t\tconst validator = validators[key];\n\t\tconst value = values[key];\n\t\tconst error = validateField(validator, value);\n\n\t\tif (error !== undefined) {\n\t\t\terrors[key] = error;\n\t\t}\n\t}\n\n\treturn errors;\n}\n\n/** Check if error map contains any errors. */\nexport function hasErrors<T extends Record<string, unknown>>(\n\terrors: FormErrors<T>\n): boolean {\n\treturn Object.keys(errors).some(\n\t\t(key) => errors[key as keyof T] !== undefined\n\t);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Schema as S } from 'effect';\n\n/** Form configuration defaults as Effect Schema. */\nexport const FormConfigSchema = S.Struct({\n\tdebounceMs: S.optionalWith(S.Number, { default: () => 0 }),\n\tvalidateOn: S.optionalWith(S.Literal('change', 'blur', 'submit'), {\n\t\tdefault: () => 'change' as const,\n\t}),\n});\n\n/** Form configuration type. */\nexport type FormConfig = S.Schema.Type<typeof FormConfigSchema>;\n\n/** Default form configuration. */\nexport const DEFAULT_FORM_CONFIG: FormConfig = {\n\tdebounceMs: 0,\n\tvalidateOn: 'change',\n};\n\n/** Default error messages. */\nexport const ERROR_MESSAGES = {\n\tVALIDATION_FAILED: 'Validation failed',\n\tREQUIRED: 'Required',\n\tINVALID_FORMAT: 'Invalid format',\n\tINVALID_EMAIL: 'Invalid email',\n\tINVALID_URL: 'Invalid URL',\n\tINVALID_UUID: 'Invalid UUID',\n\tINVALID_ULID: 'Invalid ULID',\n\tINVALID_JSON: 'Invalid JSON',\n\tINVALID_BASE64: 'Invalid Base64',\n\tINVALID_HEX: 'Invalid hex string',\n\tMUST_BE_NUMERIC: 'Must contain only numbers',\n\tMUST_BE_ALPHANUMERIC: 'Must be alphanumeric',\n\tMUST_BE_LOWERCASE: 'Must be lowercase',\n\tMUST_BE_UPPERCASE: 'Must be uppercase',\n\tMUST_BE_CAPITALIZED: 'Must be capitalized',\n\tMUST_BE_UNCAPITALIZED: 'Must be uncapitalized',\n\tMUST_BE_TRIMMED: 'Must not have leading or trailing spaces',\n\tMUST_BE_INTEGER: 'Must be a whole number',\n\tMUST_BE_FINITE: 'Must be a finite number',\n\tMUST_BE_POSITIVE: 'Must be positive',\n\tMUST_BE_NEGATIVE: 'Must be negative',\n\tMUST_BE_NON_NEGATIVE: 'Must be zero or positive',\n\tMUST_BE_NON_POSITIVE: 'Must be zero or negative',\n\tMUST_BE_ARRAY: 'Must be an array',\n\tNO_DUPLICATES: 'Must not contain duplicates',\n\tAT_LEAST_ONE_VALID: 'At least one item must be valid',\n\tMUST_BE_VALID_DATE: 'Must be a valid date',\n\tMUST_BE_IN_PAST: 'Must be in the past',\n\tMUST_BE_IN_FUTURE: 'Must be in the future',\n} as const;\n\n/** Validation regex patterns. */\nexport const PATTERNS = {\n\tEMAIL: /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/,\n\tUUID: /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n\tULID: /^[0-9A-HJKMNP-TV-Z]{26}$/i,\n\tHEX: /^[0-9a-fA-F]+$/,\n\tNUMERIC: /^\\d+$/,\n\tALPHANUMERIC: /^[a-zA-Z0-9]+$/,\n} as const;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Predicate, Option, pipe } from 'effect';\nimport { signal } from '../reactivity/signal.js';\nimport { computed } from '../reactivity/computed.js';\nimport { watchEffect } from '../effects/effect.js';\nimport { validateForm, hasErrors } from './validation.js';\nimport type {\n\tFormOptions,\n\tFormFields,\n\tFormTouched,\n\tFormErrors,\n\tUseFormReturn,\n\tBindResult,\n} from './types.js';\nimport type { ReadonlySignal } from '../types/index.js';\nimport { DEFAULT_FORM_CONFIG } from './config.js';\n\n/**\n * Reactive form state with validation.\n */\nexport function useForm<T extends Record<string, unknown>>(\n\toptions: FormOptions<T>\n): UseFormReturn<T> {\n\tconst { initial, validators, onSubmit, validationOptions } = options;\n\tconst debounceMs = pipe(\n\t\tOption.fromNullable(validationOptions),\n\t\tOption.flatMap((o) => Option.fromNullable(o.debounce)),\n\t\tOption.getOrElse(() => DEFAULT_FORM_CONFIG.debounceMs)\n\t);\n\tconst validateOn = pipe(\n\t\tOption.fromNullable(validationOptions),\n\t\tOption.flatMap((o) => Option.fromNullable(o.validateOn)),\n\t\tOption.getOrElse(() => DEFAULT_FORM_CONFIG.validateOn)\n\t);\n\n\tconst initialValues = {} as T;\n\tfor (const key of Object.keys(initial) as Array<keyof T>) {\n\t\tinitialValues[key] = initial[key].value;\n\t}\n\n\tconst fields = initial as unknown as FormFields<T>;\n\n\tconst touched = {} as FormTouched<T>;\n\tfor (const key of Object.keys(initial) as Array<keyof T>) {\n\t\ttouched[key] = signal(false);\n\t}\n\n\tconst errorsSignal = signal<FormErrors<T>>({});\n\tconst isSubmittingSignal = signal(false);\n\n\tconst getValues = (): T => {\n\t\tconst values = {} as T;\n\t\tfor (const key of Object.keys(fields) as Array<keyof T>) {\n\t\t\tvalues[key] = fields[key].value;\n\t\t}\n\t\treturn values;\n\t};\n\n\tconst runValidation = (): FormErrors<T> => {\n\t\tif (!validators) {\n\t\t\treturn {};\n\t\t}\n\t\tconst values = getValues();\n\t\treturn validateForm(validators, values);\n\t};\n\n\tconst isDirty: ReadonlySignal<boolean> = computed(() => {\n\t\tfor (const key of Object.keys(fields) as Array<keyof T>) {\n\t\t\tif (!Object.is(fields[key].value, initialValues[key])) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t});\n\n\tconst isValid: ReadonlySignal<boolean> = computed(() => {\n\t\tif (!validators) {\n\t\t\treturn true;\n\t\t}\n\t\tconst values = getValues();\n\t\tconst errors = validateForm(validators, values);\n\t\treturn !hasErrors(errors);\n\t});\n\n\tif (validators && (validateOn === 'change' || validateOn === 'blur')) {\n\t\tconst effectOptions =\n\t\t\tdebounceMs > 0 ? { debounce: { wait: debounceMs } } : {};\n\n\t\twatchEffect(() => {\n\t\t\tconst values = getValues();\n\n\t\t\tconst newErrors = validateForm(validators, values);\n\n\t\t\tif (validateOn === 'blur') {\n\t\t\t\tconst filteredErrors: FormErrors<T> = {};\n\t\t\t\tfor (const key of Object.keys(newErrors) as Array<keyof T>) {\n\t\t\t\t\tif (touched[key].value) {\n\t\t\t\t\t\tfilteredErrors[key] = newErrors[key];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\terrorsSignal.value = filteredErrors;\n\t\t\t} else {\n\t\t\t\terrorsSignal.value = newErrors;\n\t\t\t}\n\t\t}, effectOptions);\n\t}\n\n\tconst validate = (): boolean => {\n\t\tconst newErrors = runValidation();\n\t\terrorsSignal.value = newErrors;\n\t\treturn !hasErrors(newErrors);\n\t};\n\n\tconst submit = async (e?: Event): Promise<void> => {\n\t\tif (Predicate.isNotNullable(e)) {\n\t\t\te.preventDefault();\n\t\t}\n\n\t\tfor (const key of Object.keys(touched) as Array<keyof T>) {\n\t\t\ttouched[key].value = true;\n\t\t}\n\n\t\tconst isFormValid = validate();\n\t\tif (!isFormValid) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!onSubmit) {\n\t\t\treturn;\n\t\t}\n\n\t\tisSubmittingSignal.value = true;\n\n\t\ttry {\n\t\t\tconst values = getValues();\n\t\t\tawait onSubmit(values);\n\t\t} finally {\n\t\t\tisSubmittingSignal.value = false;\n\t\t}\n\t};\n\n\tconst reset = (): void => {\n\t\tfor (const key of Object.keys(fields) as Array<keyof T>) {\n\t\t\tfields[key].value = initialValues[key];\n\t\t\ttouched[key].value = false;\n\t\t}\n\t\terrorsSignal.value = {};\n\t};\n\n\tconst bind = <K extends keyof T>(name: K): BindResult<T[K]> => {\n\t\tconst fieldSignal = fields[name];\n\t\tconst touchedSignal = touched[name];\n\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn fieldSignal.value;\n\t\t\t},\n\t\t\tonInput: (e: Event) => {\n\t\t\t\tconst target = e.target as HTMLInputElement;\n\t\t\t\tfieldSignal.value = target.value as T[K];\n\t\t\t},\n\t\t\tonBlur: () => {\n\t\t\t\ttouchedSignal.value = true;\n\n\t\t\t\tif (validateOn === 'blur' && validators) {\n\t\t\t\t\tconst newErrors = runValidation();\n\t\t\t\t\tconst filteredErrors: FormErrors<T> = { ...errorsSignal.value };\n\t\t\t\t\tif (newErrors[name] !== undefined) {\n\t\t\t\t\t\tfilteredErrors[name] = newErrors[name];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfilteredErrors[name] = undefined;\n\t\t\t\t\t}\n\t\t\t\t\terrorsSignal.value = filteredErrors;\n\t\t\t\t}\n\t\t\t},\n\t\t\tname: String(name),\n\t\t};\n\t};\n\n\tconst setFieldValue = (name: keyof T, value: T[keyof T]): void => {\n\t\tif (name in fields) {\n\t\t\tfields[name].value = value;\n\t\t}\n\t};\n\n\tconst setFieldError = (name: keyof T, error: string | undefined): void => {\n\t\tconst currentErrors = { ...errorsSignal.value };\n\t\tcurrentErrors[name] = error;\n\t\terrorsSignal.value = currentErrors;\n\t};\n\n\tconst clearErrors = (): void => {\n\t\terrorsSignal.value = {};\n\t};\n\n\treturn {\n\t\tfields,\n\t\terrors: errorsSignal as ReadonlySignal<FormErrors<T>>,\n\t\ttouched,\n\t\tisValid,\n\t\tisDirty,\n\t\tisSubmitting: isSubmittingSignal as ReadonlySignal<boolean>,\n\t\tsubmit,\n\t\treset,\n\t\tbind,\n\t\tsetFieldValue,\n\t\tsetFieldError,\n\t\tclearErrors,\n\t\tvalidate,\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport {\n\tcompose,\n\trequired,\n\tcustom,\n\tequals,\n\toneOf,\n\tnotOneOf,\n\twhen,\n} from './common.js';\n\nexport {\n\tminLength,\n\tmaxLength,\n\tlength,\n\tlengthBetween,\n\tnonEmpty,\n\tpattern,\n\tstartsWith,\n\tendsWith,\n\tincludes,\n\ttrimmed,\n\tlowercased,\n\tuppercased,\n\tcapitalized,\n\tuncapitalized,\n} from './string.js';\n\nexport {\n\tgreaterThan,\n\tgreaterThanOrEqualTo,\n\tlessThan,\n\tlessThanOrEqualTo,\n\tbetween,\n\tinteger,\n\tfinite,\n\tpositive,\n\tnonNegative,\n\tnegative,\n\tnonPositive,\n\tmultipleOf,\n} from './number.js';\n\nexport {\n\temail,\n\turl,\n\tuuid,\n\tulid,\n\tjson,\n\tbase64,\n\thex,\n\tnumeric,\n\talphanumeric,\n} from './format.js';\n\nexport {\n\tminItems,\n\tmaxItems,\n\titemCount,\n\tnonEmptyArray,\n\tuniqueItems,\n\teveryItem,\n\tsomeItem,\n} from './array.js';\n\nexport { before, after, dateBetween, past, future, validDate } from './date.js';\n\nexport {\n\tgreaterThanBigInt,\n\tgreaterThanOrEqualToBigInt,\n\tlessThanBigInt,\n\tlessThanOrEqualToBigInt,\n\tbetweenBigInt,\n\tpositiveBigInt,\n\tnonNegativeBigInt,\n\tnegativeBigInt,\n\tnonPositiveBigInt,\n} from './bigint.js';\n\nexport { fromSchema, extractSchemaError } from './schema.js';\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator, ValidationResult } from '../types.js';\n\n/** Compose multiple validators into one. */\nexport function compose<T>(\n\t...validators: FieldValidator<T>[]\n): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tfor (const validator of validators) {\n\t\t\tconst result = validator(value);\n\t\t\tif (result !== undefined) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Required field (not null, undefined, or empty string). */\nexport function required(message = 'Required'): FieldValidator<unknown> {\n\treturn (value: unknown): ValidationResult => {\n\t\tif (value === undefined || value === null || value === '') {\n\t\t\treturn message;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Custom validation with predicate function. */\nexport function custom<T>(\n\tpredicate: (value: T) => boolean,\n\tmessage = 'Invalid value'\n): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tif (!predicate(value)) {\n\t\t\treturn message;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Validate if value equals expected. */\nexport function equals<T>(expected: T, message?: string): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tif (!Object.is(value, expected)) {\n\t\t\treturn message ?? `Must equal ${String(expected)}`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Validate if value is one of allowed values. */\nexport function oneOf<T>(\n\tallowed: readonly T[],\n\tmessage?: string\n): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tif (!allowed.includes(value)) {\n\t\t\treturn message ?? `Must be one of: ${allowed.map(String).join(', ')}`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Validate if value is not one of forbidden values. */\nexport function notOneOf<T>(\n\tforbidden: readonly T[],\n\tmessage?: string\n): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tif (forbidden.includes(value)) {\n\t\t\treturn (\n\t\t\t\tmessage ?? `Must not be one of: ${forbidden.map(String).join(', ')}`\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Conditional validation. */\nexport function when<T>(\n\tcondition: (value: T) => boolean,\n\tvalidator: FieldValidator<T>\n): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tif (condition(value)) {\n\t\t\treturn validator(value);\n\t\t}\n\t\treturn undefined;\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator, ValidationResult } from '../types.js';\nimport { Schema, Either } from 'effect';\nimport { ArrayFormatter } from 'effect/ParseResult';\nimport { ERROR_MESSAGES } from '../config.js';\n\n/** Extract error message from Effect Schema validation result. */\nexport function extractSchemaError<T>(\n\tschema: Schema.Schema<T>,\n\tvalue: unknown\n): ValidationResult {\n\tconst result = Schema.decodeUnknownEither(schema)(value);\n\tif (Either.isRight(result)) {\n\t\treturn undefined;\n\t}\n\tconst formatted = ArrayFormatter.formatErrorSync(result.left);\n\tif (formatted.length > 0 && formatted[0] !== undefined) {\n\t\treturn formatted[0].message;\n\t}\n\treturn ERROR_MESSAGES.VALIDATION_FAILED;\n}\n\n/** Validates values. */\nexport function fromSchema<T>(\n\tschema: Schema.Schema<T>,\n\tmessage?: string\n): FieldValidator<T> {\n\treturn (value: T): ValidationResult => {\n\t\tconst error = extractSchemaError(schema, value);\n\t\tif (error !== undefined && message !== undefined) {\n\t\t\treturn message;\n\t\t}\n\t\treturn error;\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator } from '../types.js';\nimport { Schema } from 'effect';\nimport { fromSchema } from './schema.js';\nimport { ERROR_MESSAGES } from '../config.js';\n\n/** Minimum string length. */\nexport function minLength(\n\tmin: number,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.minLength(min));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be at least ${String(min)} characters`\n\t);\n}\n\n/** Maximum string length. */\nexport function maxLength(\n\tmax: number,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.maxLength(max));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be at most ${String(max)} characters`\n\t);\n}\n\n/** Exact string length. */\nexport function length(len: number, message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.length(len));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be exactly ${String(len)} characters`\n\t);\n}\n\n/** String length range. */\nexport function lengthBetween(\n\tmin: number,\n\tmax: number,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.length({ min, max }));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be between ${String(min)} and ${String(max)} characters`\n\t);\n}\n\n/** Non empty string. */\nexport function nonEmpty(message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.nonEmptyString());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.REQUIRED);\n}\n\n/** Regex pattern match. */\nexport function pattern(\n\tregex: RegExp,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.pattern(regex));\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.INVALID_FORMAT);\n}\n\n/** String starts with prefix. */\nexport function startsWith(\n\tprefix: string,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.startsWith(prefix));\n\treturn fromSchema(schema, message ?? `Must start with \"${prefix}\"`);\n}\n\n/** String ends with suffix. */\nexport function endsWith(\n\tsuffix: string,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.endsWith(suffix));\n\treturn fromSchema(schema, message ?? `Must end with \"${suffix}\"`);\n}\n\n/** String includes substring. */\nexport function includes(\n\tsubstring: string,\n\tmessage?: string\n): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.includes(substring));\n\treturn fromSchema(schema, message ?? `Must contain \"${substring}\"`);\n}\n\n/** Trimmed string (no leading/trailing whitespace). */\nexport function trimmed(message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.trimmed());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_TRIMMED);\n}\n\n/** Lowercase string. */\nexport function lowercased(message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.lowercased());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_LOWERCASE);\n}\n\n/** Uppercase string. */\nexport function uppercased(message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.uppercased());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_UPPERCASE);\n}\n\n/** Capitalized string. */\nexport function capitalized(message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.capitalized());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_CAPITALIZED);\n}\n\n/** Uncapitalized string. */\nexport function uncapitalized(message?: string): FieldValidator<string> {\n\tconst schema = Schema.String.pipe(Schema.uncapitalized());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_UNCAPITALIZED);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator } from '../types.js';\nimport { Schema } from 'effect';\nimport { fromSchema } from './schema.js';\nimport { ERROR_MESSAGES } from '../config.js';\n\n/** Greater than value. */\nexport function greaterThan(\n\tmin: number,\n\tmessage?: string\n): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.greaterThan(min));\n\treturn fromSchema(schema, message ?? `Must be greater than ${String(min)}`);\n}\n\n/** Greater than or equal to value. */\nexport function greaterThanOrEqualTo(\n\tmin: number,\n\tmessage?: string\n): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.greaterThanOrEqualTo(min));\n\treturn fromSchema(schema, message ?? `Must be at least ${String(min)}`);\n}\n\n/** Less than value. */\nexport function lessThan(\n\tmax: number,\n\tmessage?: string\n): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.lessThan(max));\n\treturn fromSchema(schema, message ?? `Must be less than ${String(max)}`);\n}\n\n/** Less than or equal to value. */\nexport function lessThanOrEqualTo(\n\tmax: number,\n\tmessage?: string\n): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.lessThanOrEqualTo(max));\n\treturn fromSchema(schema, message ?? `Must be at most ${String(max)}`);\n}\n\n/** Value between min and max inclusive. */\nexport function between(\n\tmin: number,\n\tmax: number,\n\tmessage?: string\n): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.between(min, max));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be between ${String(min)} and ${String(max)}`\n\t);\n}\n\n/** Integer value. */\nexport function integer(message?: string): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.int());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_INTEGER);\n}\n\n/** Finite number (excludes NaN, Infinity). */\nexport function finite(message?: string): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.finite());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_FINITE);\n}\n\n/** Positive number (> 0). */\nexport function positive(message?: string): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.positive());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_POSITIVE);\n}\n\n/** Non negative number (>= 0). */\nexport function nonNegative(message?: string): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.nonNegative());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_NON_NEGATIVE);\n}\n\n/** Negative number (< 0). */\nexport function negative(message?: string): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.negative());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_NEGATIVE);\n}\n\n/** Non positive number (<= 0). */\nexport function nonPositive(message?: string): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.nonPositive());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_NON_POSITIVE);\n}\n\n/** Multiple of divisor. */\nexport function multipleOf(\n\tdivisor: number,\n\tmessage?: string\n): FieldValidator<number> {\n\tconst schema = Schema.Number.pipe(Schema.multipleOf(divisor));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be a multiple of ${String(divisor)}`\n\t);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator, ValidationResult } from '../types.js';\nimport { ERROR_MESSAGES, PATTERNS } from '../config.js';\n\n/** Email format validation. */\nexport function email(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\tif (typeof value !== 'string' || !PATTERNS.EMAIL.test(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_EMAIL;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** URL format validation. */\nexport function url(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\ttry {\n\t\t\tnew URL(value);\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_URL;\n\t\t}\n\t};\n}\n\n/** UUID format validation. */\nexport function uuid(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\tif (typeof value !== 'string' || !PATTERNS.UUID.test(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_UUID;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** ULID format validation. */\nexport function ulid(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\tif (typeof value !== 'string' || !PATTERNS.ULID.test(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_ULID;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** JSON parseable string validation. */\nexport function json(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\ttry {\n\t\t\tJSON.parse(value);\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_JSON;\n\t\t}\n\t};\n}\n\n/** Base64 encoded string validation. */\nexport function base64(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\ttry {\n\t\t\tif (typeof value !== 'string' || value.length === 0) {\n\t\t\t\treturn message ?? ERROR_MESSAGES.INVALID_BASE64;\n\t\t\t}\n\t\t\tatob(value);\n\t\t\treturn undefined;\n\t\t} catch {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_BASE64;\n\t\t}\n\t};\n}\n\n/** Hex string validation. */\nexport function hex(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\tif (typeof value !== 'string' || !PATTERNS.HEX.test(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.INVALID_HEX;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Numeric string validation (string containing only digits). */\nexport function numeric(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\tif (typeof value !== 'string' || !PATTERNS.NUMERIC.test(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_NUMERIC;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Alphanumeric string validation. */\nexport function alphanumeric(message?: string): FieldValidator<string> {\n\treturn (value: string): ValidationResult => {\n\t\tif (typeof value !== 'string' || !PATTERNS.ALPHANUMERIC.test(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_ALPHANUMERIC;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator, ValidationResult } from '../types.js';\nimport { ERROR_MESSAGES } from '../config.js';\n\n/** Minimum array length. */\nexport function minItems<T>(\n\tmin: number,\n\tmessage?: string\n): FieldValidator<readonly T[]> {\n\treturn (value: readonly T[]): ValidationResult => {\n\t\tif (!Array.isArray(value) || value.length < min) {\n\t\t\treturn message ?? `Must have at least ${String(min)} items`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Maximum array length. */\nexport function maxItems<T>(\n\tmax: number,\n\tmessage?: string\n): FieldValidator<readonly T[]> {\n\treturn (value: readonly T[]): ValidationResult => {\n\t\tif (!Array.isArray(value) || value.length > max) {\n\t\t\treturn message ?? `Must have at most ${String(max)} items`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Exact array length. */\nexport function itemCount<T>(\n\tcount: number,\n\tmessage?: string\n): FieldValidator<readonly T[]> {\n\treturn (value: readonly T[]): ValidationResult => {\n\t\tif (!Array.isArray(value) || value.length !== count) {\n\t\t\treturn message ?? `Must have exactly ${String(count)} items`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Non empty array. */\nexport function nonEmptyArray<T>(\n\tmessage?: string\n): FieldValidator<readonly T[]> {\n\treturn minItems(1, message ?? 'Must have at least one item');\n}\n\n/** Unique items (no duplicates). */\nexport function uniqueItems<T>(message?: string): FieldValidator<readonly T[]> {\n\treturn (value: readonly T[]): ValidationResult => {\n\t\tif (!Array.isArray(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_ARRAY;\n\t\t}\n\t\tconst unique = new Set(value);\n\t\tif (unique.size !== value.length) {\n\t\t\treturn message ?? ERROR_MESSAGES.NO_DUPLICATES;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Validate each item in array. */\nexport function everyItem<T>(\n\titemValidator: FieldValidator<T>,\n\tmessage?: string\n): FieldValidator<readonly T[]> {\n\treturn (value: readonly T[]): ValidationResult => {\n\t\tif (!Array.isArray(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_ARRAY;\n\t\t}\n\t\tconst typedArray = value as readonly T[];\n\t\tfor (let i = 0; i < typedArray.length; i++) {\n\t\t\tconst error = itemValidator(typedArray[i] as T);\n\t\t\tif (error !== undefined) {\n\t\t\t\treturn message ?? `Item ${String(i)}: ${error}`;\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Validate at least one item in array passes. */\nexport function someItem<T>(\n\titemValidator: FieldValidator<T>,\n\tmessage?: string\n): FieldValidator<readonly T[]> {\n\treturn (value: readonly T[]): ValidationResult => {\n\t\tif (!Array.isArray(value)) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_ARRAY;\n\t\t}\n\t\tconst typedArray = value as readonly T[];\n\t\tfor (const item of typedArray) {\n\t\t\tconst error = itemValidator(item);\n\t\t\tif (error === undefined) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t\treturn message ?? ERROR_MESSAGES.AT_LEAST_ONE_VALID;\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator, ValidationResult } from '../types.js';\nimport { ERROR_MESSAGES } from '../config.js';\n\n/** Date is before target date. */\nexport function before(target: Date, message?: string): FieldValidator<Date> {\n\treturn (value: Date): ValidationResult => {\n\t\tif (!(value instanceof Date) || value.getTime() >= target.getTime()) {\n\t\t\treturn message ?? `Must be before ${target.toISOString()}`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Date is after target date. */\nexport function after(target: Date, message?: string): FieldValidator<Date> {\n\treturn (value: Date): ValidationResult => {\n\t\tif (!(value instanceof Date) || value.getTime() <= target.getTime()) {\n\t\t\treturn message ?? `Must be after ${target.toISOString()}`;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Date is between two dates. */\nexport function dateBetween(\n\tstart: Date,\n\tend: Date,\n\tmessage?: string\n): FieldValidator<Date> {\n\treturn (value: Date): ValidationResult => {\n\t\tif (!(value instanceof Date)) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_VALID_DATE;\n\t\t}\n\t\tconst time = value.getTime();\n\t\tif (time < start.getTime() || time > end.getTime()) {\n\t\t\treturn (\n\t\t\t\tmessage ??\n\t\t\t\t`Must be between ${start.toISOString()} and ${end.toISOString()}`\n\t\t\t);\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Date is in the past. */\nexport function past(message?: string): FieldValidator<Date> {\n\treturn (value: Date): ValidationResult => {\n\t\tif (!(value instanceof Date) || value.getTime() >= Date.now()) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_IN_PAST;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Date is in the future. */\nexport function future(message?: string): FieldValidator<Date> {\n\treturn (value: Date): ValidationResult => {\n\t\tif (!(value instanceof Date) || value.getTime() <= Date.now()) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_IN_FUTURE;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n\n/** Valid Date object (not Invalid Date). */\nexport function validDate(message?: string): FieldValidator<Date> {\n\treturn (value: Date): ValidationResult => {\n\t\tif (!(value instanceof Date) || isNaN(value.getTime())) {\n\t\t\treturn message ?? ERROR_MESSAGES.MUST_BE_VALID_DATE;\n\t\t}\n\t\treturn undefined;\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport type { FieldValidator } from '../types.js';\nimport { Schema } from 'effect';\nimport { fromSchema } from './schema.js';\nimport { ERROR_MESSAGES } from '../config.js';\n\n/** Greater than value. */\nexport function greaterThanBigInt(\n\tmin: bigint,\n\tmessage?: string\n): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.greaterThanBigInt(min));\n\treturn fromSchema(schema, message ?? `Must be greater than ${String(min)}`);\n}\n\n/** Greater than or equal to value. */\nexport function greaterThanOrEqualToBigInt(\n\tmin: bigint,\n\tmessage?: string\n): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(\n\t\tSchema.greaterThanOrEqualToBigInt(min)\n\t);\n\treturn fromSchema(schema, message ?? `Must be at least ${String(min)}`);\n}\n\n/** Less than value. */\nexport function lessThanBigInt(\n\tmax: bigint,\n\tmessage?: string\n): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.lessThanBigInt(max));\n\treturn fromSchema(schema, message ?? `Must be less than ${String(max)}`);\n}\n\n/** Less than or equal to value. */\nexport function lessThanOrEqualToBigInt(\n\tmax: bigint,\n\tmessage?: string\n): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(\n\t\tSchema.lessThanOrEqualToBigInt(max)\n\t);\n\treturn fromSchema(schema, message ?? `Must be at most ${String(max)}`);\n}\n\n/** Value between min and max inclusive. */\nexport function betweenBigInt(\n\tmin: bigint,\n\tmax: bigint,\n\tmessage?: string\n): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.betweenBigInt(min, max));\n\treturn fromSchema(\n\t\tschema,\n\t\tmessage ?? `Must be between ${String(min)} and ${String(max)}`\n\t);\n}\n\n/** Positive bigint (> 0n). */\nexport function positiveBigInt(message?: string): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.positiveBigInt());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_POSITIVE);\n}\n\n/** Non negative bigint (>= 0n). */\nexport function nonNegativeBigInt(message?: string): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.nonNegativeBigInt());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_NON_NEGATIVE);\n}\n\n/** Negative bigint (< 0n). */\nexport function negativeBigInt(message?: string): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.negativeBigInt());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_NEGATIVE);\n}\n\n/** Non positive bigint (<= 0n). */\nexport function nonPositiveBigInt(message?: string): FieldValidator<bigint> {\n\tconst schema = Schema.BigIntFromSelf.pipe(Schema.nonPositiveBigInt());\n\treturn fromSchema(schema, message ?? ERROR_MESSAGES.MUST_BE_NON_POSITIVE);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport const DEFAULT_DEBOUNCE_MS = 300;\nexport const DEFAULT_THROTTLE_MS = 100;\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Option, pipe } from 'effect';\nimport { signal } from '../../reactivity/signal.js';\nimport { batch } from '../../reactivity/dep.js';\nimport type { Signal } from '../../types/index.js';\nimport type { EmitHandler, EmitContextData, EventMap } from '../types/index.js';\nimport {\n\ttraceEmit,\n\ttraceEmitSubscribe,\n\ttraceEmitUnsubscribe,\n} from '../../layers/tracing/emit.js';\n\nexport interface EmitServiceApi {\n\tcreateContext: <T extends EventMap>() => EmitContextData<T>;\n\tregisterHandler: <T extends EventMap>(\n\t\tctx: EmitContextData<T>,\n\t\tevent: string,\n\t\thandler: EmitHandler<unknown>\n\t) => () => void;\n\temit: <T extends EventMap>(\n\t\tctx: EmitContextData<T>,\n\t\tevent: string,\n\t\tpayload: unknown\n\t) => void;\n\tgetSignal: <T extends EventMap>(\n\t\tctx: EmitContextData<T>,\n\t\tevent: string\n\t) => Signal<unknown>;\n}\n\nconst defaultService: EmitServiceApi = {\n\tcreateContext: <T extends EventMap>(): EmitContextData<T> => ({\n\t\thandlers: new Map(),\n\t\tsignals: new Map(),\n\t}),\n\n\tregisterHandler: <T extends EventMap>(\n\t\tctx: EmitContextData<T>,\n\t\tevent: string,\n\t\thandler: EmitHandler<unknown>\n\t): (() => void) => {\n\t\tlet handlersSet = ctx.handlers.get(event);\n\t\tif (!handlersSet) {\n\t\t\thandlersSet = new Set();\n\t\t\tctx.handlers.set(event, handlersSet);\n\t\t}\n\t\thandlersSet.add(handler);\n\t\tconst storedHandlers = handlersSet;\n\n\t\ttraceEmitSubscribe(event);\n\n\t\treturn () => {\n\t\t\tstoredHandlers.delete(handler);\n\t\t\ttraceEmitUnsubscribe(event);\n\t\t};\n\t},\n\n\temit: <T extends EventMap>(\n\t\tctx: EmitContextData<T>,\n\t\tevent: string,\n\t\tpayload: unknown\n\t): void => {\n\t\tbatch(() => {\n\t\t\tconst handlers = ctx.handlers.get(event);\n\t\t\tif (handlers) {\n\t\t\t\tfor (const handler of handlers) {\n\t\t\t\t\thandler(payload);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sig = ctx.signals.get(event);\n\t\t\tif (!sig) {\n\t\t\t\tsig = signal<unknown>(undefined);\n\t\t\t\tctx.signals.set(event, sig);\n\t\t\t}\n\t\t\tsig.value = payload;\n\t\t});\n\n\t\tconst handlers = ctx.handlers.get(event);\n\t\tconst handlerCount = pipe(\n\t\t\tOption.fromNullable(handlers),\n\t\t\tOption.map((h) => h.size),\n\t\t\tOption.getOrElse(() => 0)\n\t\t);\n\t\ttraceEmit(event, payload, handlerCount);\n\t},\n\n\tgetSignal: <T extends EventMap>(\n\t\tctx: EmitContextData<T>,\n\t\tevent: string\n\t): Signal<unknown> => {\n\t\tlet sig = ctx.signals.get(event);\n\t\tif (!sig) {\n\t\t\tsig = signal<unknown>(undefined);\n\t\t\tctx.signals.set(event, sig);\n\t\t}\n\t\treturn sig;\n\t},\n};\n\nexport const getEmitService = (): EmitServiceApi => defaultService;\n\nexport const useEmitService = (fn: (service: EmitServiceApi) => void): void => {\n\tfn(defaultService);\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Option, pipe } from 'effect';\nimport { signal } from '../../reactivity/signal.js';\nimport { batch } from '../../reactivity/dep.js';\nimport type {\n\tEmitContextData,\n\tEmitFn,\n\tEmitFnAsync,\n\tEmitHandler,\n\tSubscribeFn,\n\tEventMap,\n} from '../types/index.js';\nimport {\n\ttraceEmit,\n\ttraceEmitSubscribe,\n\ttraceEmitUnsubscribe,\n} from '../../layers/tracing/emit.js';\n\nexport function useEmits<T extends EventMap>(\n\tinitialHandlers?: Partial<{ [K in keyof T]: EmitHandler<T[K]> }>\n): {\n\temit: EmitFn<T>;\n\temitAsync: EmitFnAsync<T>;\n\ton: SubscribeFn<T>;\n\toff: <K extends keyof T & string>(\n\t\tevent: K,\n\t\thandler: EmitHandler<T[K]>\n\t) => void;\n\tcontext: EmitContextData<T>;\n} {\n\tconst ctx: EmitContextData<T> = {\n\t\thandlers: new Map(),\n\t\tsignals: new Map(),\n\t};\n\n\tif (initialHandlers) {\n\t\tfor (const [event, handler] of Object.entries(initialHandlers)) {\n\t\t\tif (handler) {\n\t\t\t\tlet handlers = ctx.handlers.get(event);\n\t\t\t\tif (!handlers) {\n\t\t\t\t\thandlers = new Set();\n\t\t\t\t\tctx.handlers.set(event, handlers);\n\t\t\t\t}\n\t\t\t\thandlers.add(handler as EmitHandler<unknown>);\n\t\t\t\ttraceEmitSubscribe(event);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst emit = <K extends keyof T & string>(event: K, payload: T[K]): void => {\n\t\tbatch(() => {\n\t\t\tconst handlers = ctx.handlers.get(event);\n\t\t\tif (handlers) {\n\t\t\t\tfor (const handler of handlers) {\n\t\t\t\t\thandler(payload);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet sig = ctx.signals.get(event);\n\t\t\tif (!sig) {\n\t\t\t\tsig = signal<unknown>(undefined);\n\t\t\t\tctx.signals.set(event, sig);\n\t\t\t}\n\t\t\tsig.value = payload;\n\t\t});\n\n\t\tconst handlers = ctx.handlers.get(event);\n\t\tconst handlerCount = pipe(\n\t\t\tOption.fromNullable(handlers),\n\t\t\tOption.map((h) => h.size),\n\t\t\tOption.getOrElse(() => 0)\n\t\t);\n\t\ttraceEmit(event, payload, handlerCount);\n\t};\n\n\tconst emitAsync = <K extends keyof T & string>(\n\t\tevent: K,\n\t\tpayload: T[K]\n\t): Promise<void> => {\n\t\treturn new Promise((resolve) => {\n\t\t\tqueueMicrotask(() => {\n\t\t\t\temit(event, payload);\n\t\t\t\tresolve();\n\t\t\t});\n\t\t});\n\t};\n\n\tconst on: SubscribeFn<T> = <K extends keyof T & string>(\n\t\tevent: K,\n\t\thandler: EmitHandler<T[K]>\n\t): (() => void) => {\n\t\tlet handlersSet = ctx.handlers.get(event);\n\t\tif (!handlersSet) {\n\t\t\thandlersSet = new Set();\n\t\t\tctx.handlers.set(event, handlersSet);\n\t\t}\n\t\tconst typedHandler = handler as EmitHandler<unknown>;\n\t\thandlersSet.add(typedHandler);\n\n\t\ttraceEmitSubscribe(event);\n\n\t\tconst storedHandlers = handlersSet;\n\t\treturn () => {\n\t\t\tstoredHandlers.delete(typedHandler);\n\t\t\ttraceEmitUnsubscribe(event);\n\t\t};\n\t};\n\n\tconst off = <K extends keyof T & string>(\n\t\tevent: K,\n\t\thandler: EmitHandler<T[K]>\n\t): void => {\n\t\tconst handlers = ctx.handlers.get(event);\n\t\tif (handlers) {\n\t\t\thandlers.delete(handler as EmitHandler<unknown>);\n\t\t\ttraceEmitUnsubscribe(event);\n\t\t}\n\t};\n\n\treturn { emit, emitAsync, on, off, context: ctx };\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { signal } from '../../reactivity/signal.js';\nimport { watchEffect } from '../../effects/effect.js';\nimport type { Signal } from '../../types/index.js';\nimport type {\n\tEmitContextData,\n\tEmitOptions,\n\tEventSignal,\n\tEventMap,\n} from '../types/index.js';\n\nexport function useEventSignal<T extends EventMap, P>(\n\tctx: EmitContextData<T>,\n\tevent: string,\n\toptions: EmitOptions = {}\n): EventSignal<P> {\n\tlet sourceSig = ctx.signals.get(event) as Signal<P | undefined> | undefined;\n\tif (!sourceSig) {\n\t\tsourceSig = signal<P | undefined>(undefined);\n\t\tctx.signals.set(event, sourceSig as Signal<unknown>);\n\t}\n\n\tif (\n\t\t!options.debounce &&\n\t\t!options.throttle &&\n\t\t!options.once &&\n\t\t!options.filter\n\t) {\n\t\tconst sig = sourceSig;\n\t\treturn {\n\t\t\tget value() {\n\t\t\t\treturn sig.value;\n\t\t\t},\n\t\t};\n\t}\n\n\tconst resultSig = signal<P | undefined>(undefined);\n\tlet lastUpdateTime = 0;\n\tlet debounceTimer: ReturnType<typeof setTimeout> | null = null;\n\tlet hasFired = false;\n\tconst source = sourceSig;\n\n\twatchEffect(() => {\n\t\tconst value = source.value;\n\t\tif (value === undefined) return;\n\n\t\tif (options.once && hasFired) return;\n\n\t\tif (options.filter && !options.filter(value)) return;\n\n\t\tconst now = Date.now();\n\n\t\tif (typeof options.throttle === 'number') {\n\t\t\tif (now - lastUpdateTime < options.throttle) return;\n\t\t\tlastUpdateTime = now;\n\t\t}\n\n\t\tif (typeof options.debounce === 'number') {\n\t\t\tif (debounceTimer) clearTimeout(debounceTimer);\n\t\t\tdebounceTimer = setTimeout(() => {\n\t\t\t\tresultSig.value = value;\n\t\t\t\tif (options.once) hasFired = true;\n\t\t\t}, options.debounce);\n\t\t\treturn;\n\t\t}\n\n\t\tresultSig.value = value;\n\t\tif (options.once) hasFired = true;\n\t});\n\n\treturn {\n\t\tget value() {\n\t\t\treturn resultSig.value;\n\t\t},\n\t};\n}\n\nexport function createEventSignal<P>(initialValue?: P): Signal<P | undefined> {\n\treturn signal<P | undefined>(initialValue);\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { DEFAULT_DEBOUNCE_MS } from '../config/index.js';\n\nexport function createDebounce<T>(ms: number = DEFAULT_DEBOUNCE_MS): {\n\tapply: (value: T, callback: (v: T) => void) => void;\n\tcancel: () => void;\n} {\n\tlet timer: ReturnType<typeof setTimeout> | null = null;\n\n\treturn {\n\t\tapply: (value: T, callback: (v: T) => void) => {\n\t\t\tif (timer) clearTimeout(timer);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tcallback(value);\n\t\t\t\ttimer = null;\n\t\t\t}, ms);\n\t\t},\n\t\tcancel: () => {\n\t\t\tif (timer) {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = null;\n\t\t\t}\n\t\t},\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { DEFAULT_THROTTLE_MS } from '../config/index.js';\n\nexport function createThrottle<T>(ms: number = DEFAULT_THROTTLE_MS): {\n\tapply: (value: T, callback: (v: T) => void) => boolean;\n\treset: () => void;\n} {\n\tlet lastTime = 0;\n\n\treturn {\n\t\tapply: (value: T, callback: (v: T) => void) => {\n\t\t\tconst now = Date.now();\n\t\t\tif (now - lastTime >= ms) {\n\t\t\t\tlastTime = now;\n\t\t\t\tcallback(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\treset: () => {\n\t\t\tlastTime = 0;\n\t\t},\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport function createOnce<T>(): {\n\tapply: (value: T, callback: (v: T) => void) => boolean;\n\treset: () => void;\n\thasFired: () => boolean;\n} {\n\tlet fired = false;\n\n\treturn {\n\t\tapply: (value: T, callback: (v: T) => void) => {\n\t\t\tif (!fired) {\n\t\t\t\tfired = true;\n\t\t\t\tcallback(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\treset: () => {\n\t\t\tfired = false;\n\t\t},\n\t\thasFired: () => fired,\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nexport type FilterPredicate<T> = (value: T) => boolean;\n\nexport function createFilter<T>(predicate: FilterPredicate<T>): {\n\tapply: (value: T, callback: (v: T) => void) => boolean;\n} {\n\treturn {\n\t\tapply: (value: T, callback: (v: T) => void) => {\n\t\t\tif (predicate(value)) {\n\t\t\t\tcallback(value);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t};\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Ref, Option, pipe, HashMap } from 'effect';\n\ntype ContextStack = HashMap.HashMap<string, readonly unknown[]>;\n\ninterface ContextRegistryService {\n\treadonly push: (id: string, value: unknown) => Effect.Effect<void>;\n\treadonly pop: (id: string) => Effect.Effect<void>;\n\treadonly get: <T>(id: string) => Effect.Effect<Option.Option<T>>;\n\treadonly has: (id: string) => Effect.Effect<boolean>;\n\treadonly getAll: () => Effect.Effect<readonly string[]>;\n\treadonly clear: () => Effect.Effect<void>;\n}\n\nconst makeContextRegistry = Effect.gen(function* () {\n\tconst stackRef = yield* Ref.make<ContextStack>(HashMap.empty());\n\n\tconst push = (id: string, value: unknown): Effect.Effect<void> =>\n\t\tRef.update(stackRef, (stacks) => {\n\t\t\tconst current = pipe(\n\t\t\t\tHashMap.get(stacks, id),\n\t\t\t\tOption.getOrElse(() => [] as readonly unknown[])\n\t\t\t);\n\t\t\treturn HashMap.set(stacks, id, [...current, value]);\n\t\t});\n\n\tconst pop = (id: string): Effect.Effect<void> =>\n\t\tRef.update(stackRef, (stacks) =>\n\t\t\tpipe(\n\t\t\t\tHashMap.get(stacks, id),\n\t\t\t\tOption.match({\n\t\t\t\t\tonNone: () => stacks,\n\t\t\t\t\tonSome: (stack) => {\n\t\t\t\t\t\tconst newStack = stack.slice(0, -1);\n\t\t\t\t\t\treturn newStack.length === 0\n\t\t\t\t\t\t\t? HashMap.remove(stacks, id)\n\t\t\t\t\t\t\t: HashMap.set(stacks, id, newStack);\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t)\n\t\t);\n\n\tconst get = <T>(id: string): Effect.Effect<Option.Option<T>> =>\n\t\tRef.get(stackRef).pipe(\n\t\t\tEffect.map((stacks) =>\n\t\t\t\tpipe(\n\t\t\t\t\tHashMap.get(stacks, id),\n\t\t\t\t\tOption.flatMap((stack) =>\n\t\t\t\t\t\tstack.length > 0\n\t\t\t\t\t\t\t? Option.some(stack[stack.length - 1] as T)\n\t\t\t\t\t\t\t: Option.none()\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\tconst has = (id: string): Effect.Effect<boolean> =>\n\t\tRef.get(stackRef).pipe(\n\t\t\tEffect.map((stacks) =>\n\t\t\t\tpipe(\n\t\t\t\t\tHashMap.get(stacks, id),\n\t\t\t\t\tOption.match({\n\t\t\t\t\t\tonNone: () => false,\n\t\t\t\t\t\tonSome: (stack) => stack.length > 0,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\tconst getAll = (): Effect.Effect<readonly string[]> =>\n\t\tRef.get(stackRef).pipe(\n\t\t\tEffect.map((stacks) => Array.from(HashMap.keys(stacks)))\n\t\t);\n\n\tconst clear = (): Effect.Effect<void> => Ref.set(stackRef, HashMap.empty());\n\n\treturn {\n\t\tpush,\n\t\tpop,\n\t\tget,\n\t\thas,\n\t\tgetAll,\n\t\tclear,\n\t} satisfies ContextRegistryService;\n});\n\nexport { makeContextRegistry };\n\nlet globalRegistry: ContextRegistryService | null = null;\n\nconst initializeRegistry = (): ContextRegistryService => {\n\tif (!globalRegistry) {\n\t\tglobalRegistry = Effect.runSync(makeContextRegistry);\n\t}\n\treturn globalRegistry;\n};\n\nexport const pushContext = (id: string, value: unknown): void => {\n\tEffect.runSync(initializeRegistry().push(id, value));\n};\n\nexport const popContext = (id: string): void => {\n\tEffect.runSync(initializeRegistry().pop(id));\n};\n\nexport const getContext = <T>(id: string): Option.Option<T> => {\n\treturn Effect.runSync(initializeRegistry().get<T>(id));\n};\n\nexport const hasContext = (id: string): boolean => {\n\treturn Effect.runSync(initializeRegistry().has(id));\n};\n\nexport const getRegisteredContexts = (): readonly string[] => {\n\treturn Effect.runSync(initializeRegistry().getAll());\n};\n\nexport const clearAllContexts = (): void => {\n\tEffect.runSync(initializeRegistry().clear());\n\tglobalRegistry = null;\n};\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { TaggedError } from '../errors/index.js';\n\nexport class ContextNotFoundError extends TaggedError('ContextNotFoundError')<{\n\treadonly contextId: string;\n\treadonly componentName?: string;\n}> {\n\tget message(): string {\n\t\tconst location = this.componentName\n\t\t\t? ` in component \"${this.componentName}\"`\n\t\t\t: '';\n\t\treturn `Context \"${this.contextId}\" not found${location}. Did you forget to wrap your component in a Provider?`;\n\t}\n}\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Effect, Option, pipe, Predicate, Context } from 'effect';\nimport type { EffuseChild } from '../render/node.js';\nimport { define } from '../blueprint/define.js';\nimport { pushContext, popContext, getContext } from './registry.js';\nimport { ContextNotFoundError } from './errors.js';\n\nexport interface ContextOptions<T> {\n\treadonly id: string;\n\treadonly defaultValue?: T | (() => T);\n\treadonly displayName?: string;\n}\n\nexport interface ProviderProps<T> {\n\treadonly value: T;\n\treadonly children: EffuseChild;\n}\n\nexport interface EffuseContext<T> {\n\treadonly id: string;\n\treadonly displayName: string;\n\treadonly Provider: ReturnType<typeof define>;\n\treadonly defaultValue: T | undefined;\n\treadonly hasDefault: boolean;\n\treadonly _effectTag: Context.Tag<string, T>;\n\treadonly _tag: 'EffuseContext';\n}\n\nconst createdContexts = new Map<string, EffuseContext<unknown>>();\n\nconst resolveDefaultValue = <T>(defaultValue?: T | (() => T)): T | undefined =>\n\tPredicate.isFunction(defaultValue)\n\t\t? (defaultValue as () => T)()\n\t\t: defaultValue;\n\nexport function createContext<T>(options: ContextOptions<T>): EffuseContext<T> {\n\tconst { id, defaultValue, displayName = id } = options;\n\n\tconst existing = createdContexts.get(id);\n\tif (existing && typeof window !== 'undefined') {\n\t\treturn existing as EffuseContext<T>;\n\t}\n\n\tconst resolvedDefault = resolveDefaultValue(defaultValue);\n\n\tconst Provider = define<ProviderProps<T>>({\n\t\tscript: ({ props, onMount }) => {\n\t\t\tonMount(() => {\n\t\t\t\tpushContext(id, props.value);\n\n\t\t\t\treturn () => {\n\t\t\t\t\tpopContext(id);\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {};\n\t\t},\n\t\ttemplate: ({ children }) => children,\n\t});\n\n\tconst context: EffuseContext<T> = {\n\t\tid,\n\t\tdisplayName,\n\t\tProvider: Provider as ReturnType<typeof define>,\n\t\tdefaultValue: resolvedDefault,\n\t\thasDefault: defaultValue !== undefined,\n\t\t_effectTag: Context.GenericTag<string, T>(id),\n\t\t_tag: 'EffuseContext',\n\t};\n\n\tcreatedContexts.set(id, context as EffuseContext<unknown>);\n\n\treturn context;\n}\n\nconst getContextValue = <T>(\n\tcontext: EffuseContext<T>\n): Effect.Effect<T, ContextNotFoundError> =>\n\tEffect.gen(function* () {\n\t\t// effect context\n\t\tconst inEffectContext = yield* Effect.serviceOption(context._effectTag);\n\t\tif (Option.isSome(inEffectContext)) {\n\t\t\treturn inEffectContext.value;\n\t\t}\n\n\t\t// fallback to UI context\n\t\tconst value = getContext<T>(context.id);\n\n\t\treturn yield* pipe(\n\t\t\tvalue,\n\t\t\tOption.match({\n\t\t\t\tonSome: (v) => Effect.succeed(v),\n\t\t\t\tonNone: () =>\n\t\t\t\t\tcontext.hasDefault\n\t\t\t\t\t\t? Effect.succeed(context.defaultValue as T)\n\t\t\t\t\t\t: Effect.fail(new ContextNotFoundError({ contextId: context.id })),\n\t\t\t})\n\t\t);\n\t});\n\nexport function useContext<T>(\n\tcontext: EffuseContext<T>,\n\tcomponentName?: string\n): T {\n\treturn Effect.runSync(\n\t\tpipe(\n\t\t\tgetContextValue(context),\n\t\t\tEffect.mapError((error) =>\n\t\t\t\tcomponentName\n\t\t\t\t\t? new ContextNotFoundError({\n\t\t\t\t\t\tcontextId: error.contextId,\n\t\t\t\t\t\tcomponentName,\n\t\t\t\t\t})\n\t\t\t\t\t: error\n\t\t\t)\n\t\t)\n\t);\n}\n\nexport function hasContextValue<T>(context: EffuseContext<T>): boolean {\n\treturn Effect.runSync(\n\t\tEffect.sync(() => {\n\t\t\tconst value = getContext<T>(context.id);\n\t\t\treturn Option.isSome(value) || context.hasDefault;\n\t\t})\n\t);\n}\n\nexport const isEffuseContext = (\n\tvalue: unknown\n): value is EffuseContext<unknown> =>\n\tPredicate.isObject(value) &&\n\tPredicate.hasProperty(value, '_tag') &&\n\tvalue._tag === 'EffuseContext';\n","/**\n * MIT License\n *\n * Copyright (c) 2025 Chris M. Perez\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport { Data } from 'effect';\n\nexport class RefNotAttachedError extends Data.TaggedError(\n\t'RefNotAttachedError'\n)<{\n\treadonly message: string;\n\treadonly refName?: string;\n}> {}\n\nexport class DirectiveError extends Data.TaggedError('DirectiveError')<{\n\treadonly message: string;\n\treadonly directiveName?: string;\n\treadonly cause?: unknown;\n}> {}\n"]}