@estjs/template 0.0.17-beta.4 → 0.0.17-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/operations/attr.ts","../src/operations/class.ts","../src/operations/style.ts","../src/hydration.ts","../src/reconcile.ts","../src/dom.ts","../src/operations/event.ts","../src/lifecycle.ts","../src/component.ts","../src/renderer.ts","../src/provide.ts","../src/events.ts","../src/binding.ts","../src/utils.ts","../src/components/Fragment.ts","../src/components/Portal.ts","../src/components/Suspense.ts","../src/components/createResource.ts","../src/components/AsyncComponent.ts","../src/components/For.ts","../src/components/Transition.ts","../src/components/TransitionGroup.ts"],"names":["next","isString","isObject","startsWith","_a","warn","HYDRATION_ANCHOR_ATTR","child","error","isFunction","template","document","isArray","effect","isSignal","isComputed","isBrowser","children","isPromise","batchFragment","resolve","_b","_c"],"mappings":"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","file":"template.dev.js","sourcesContent":["/**\n * event prefix, used to distinguish event handler properties\n */\nexport const EVENT_PREFIX = 'on';\n\n/**\n * children property name\n */\nexport const CHILDREN_PROP = 'children';\n\nexport { HYDRATION_ANCHOR_ATTR, SPREAD_NAME } from '@estjs/shared';\n\n/**\n * used to get the DOM element reference\n */\nexport const REF_KEY = 'ref';\n/**\n * Component key property name\n */\nexport const KEY_PROP = 'key' as const;\n\n/**\n * SVG namespace constant\n */\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\n/**\n * XML namespace for xlink attributes\n */\nexport const XLINK_NAMESPACE = 'http://www.w3.org/2000/xlink';\n\n/**\n * xmlns namespace for SVG elements\n */\nexport const XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/';\n\nexport const NORMAL_COMPONENT = Symbol(__DEV__ ? 'Normal Component' : '');\nexport const FRAGMENT_COMPONENT = Symbol(__DEV__ ? 'Fragment Component' : '');\nexport const PORTAL_COMPONENT = Symbol(__DEV__ ? 'Portal Component' : '');\nexport const SUSPENSE_COMPONENT = Symbol(__DEV__ ? 'Suspense Component' : '');\nexport const FOR_COMPONENT = Symbol(__DEV__ ? 'For Component' : '');\nexport const TRANSITION_COMPONENT = Symbol(__DEV__ ? 'Transition Component' : '');\nexport const TRANSITION_GROUP_COMPONENT = Symbol(__DEV__ ? 'TransitionGroup Component' : '');\nexport enum COMPONENT_STATE {\n /** Initial state */\n INITIAL,\n /** Mounting */\n MOUNTING,\n /** MOUNTED */\n MOUNTED,\n /** Updating */\n UPDATING,\n /** Destroying */\n DESTROYING,\n /** destroy */\n DESTROYED,\n}\nexport enum COMPONENT_TYPE {\n NORMAL = 'normal',\n FRAGMENT = 'fragment',\n PORTAL = 'portal',\n SUSPENSE = 'suspense',\n FOR = 'for',\n TRANSITION = 'transition',\n TRANSITION_GROUP = 'transition-group',\n}\n","import {\n includeBooleanAttr,\n isBooleanAttr,\n isObject,\n isSpecialBooleanAttr,\n isString,\n isSymbol,\n startsWith,\n warn,\n} from '@estjs/shared';\nimport {\n KEY_PROP,\n SPREAD_NAME,\n SVG_NAMESPACE,\n XLINK_NAMESPACE,\n XMLNS_NAMESPACE,\n} from '../constants';\n\n/**\n * Supported value types for the attribute patch layer.\n *\n * In addition to primitive values, spread objects are also accepted, so the\n * type keeps `Record<string, unknown>`.\n */\nexport type AttrValue = string | boolean | number | null | undefined | Record<string, unknown>;\n\n/**\n * MIME types that can carry executable / markup payloads inside a `data:` URL.\n * These are the only `data:` URLs we block — inline images, fonts, audio,\n * video, etc. (e.g. `data:image/png;base64,...`) are legitimate and allowed.\n */\nconst DANGEROUS_DATA_MIME_RE =\n /^data:\\s*(?:text\\/html|text\\/xml|application\\/xhtml\\+xml|image\\/svg\\+xml|application\\/xml)/;\n\n/**\n * Returns true when a URL-bearing attribute value uses a protocol/payload that\n * could execute script in the document.\n *\n * Blocked:\n * - `javascript:` / `vbscript:` pseudo-protocols\n * - `data:` URLs whose MIME type can carry markup or script\n * (`text/html`, `image/svg+xml`, `*xml`)\n *\n * Allowed:\n * - All other `data:` URLs (images, fonts, audio, video, …)\n * - Ordinary http(s)/relative/mailto/tel URLs\n *\n * Note: leading control characters / whitespace are stripped before matching\n * so that `java\\tscript:` style obfuscation cannot slip through.\n */\nfunction isUnsafeUrl(value: string): boolean {\n // Strip ASCII whitespace and control chars (incl. NUL, tab, newline) that\n // browsers ignore when resolving the protocol, then lowercase for matching.\n // eslint-disable-next-line no-control-regex\n const v = value.replaceAll(/[\\u0000-\\u0020]+/g, '').toLowerCase();\n if (startsWith(v, 'javascript:') || startsWith(v, 'vbscript:')) {\n return true;\n }\n return DANGEROUS_DATA_MIME_RE.test(v);\n}\n\n/**\n * Applies a minimal attribute update to an element.\n *\n * This is the most general-purpose attribute updater in the template runtime.\n * It is responsible for:\n * - skipping internal reserved fields;\n * - expanding spread attribute objects;\n * - handling boolean attributes and SVG / xlink / xmlns namespaces;\n * - applying basic dangerous-URL protection;\n * - refusing raw HTML sinks such as `innerHTML` / `srcdoc`;\n * - staying silent during hydration to avoid overwriting SSR DOM.\n *\n * @param el - The element to patch.\n * @param key - The attribute key.\n * @param prev - Previous attribute value.\n * @param next - Next attribute value.\n */\nexport function patchAttr(el: Element, key: string, prev: AttrValue, next: AttrValue) {\n if (key === KEY_PROP) {\n if (next == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(next));\n }\n return;\n }\n if (key === SPREAD_NAME) {\n const prevObj = isObject(prev) ? (prev as Record<string, unknown>) : null;\n const nextObj = isObject(next) ? (next as Record<string, unknown>) : null;\n\n if (__DEV__) {\n if (next != null && !nextObj) {\n warn('spread attribute must be an object');\n }\n }\n\n if (prevObj) {\n for (const attrKey in prevObj) {\n if (attrKey === SPREAD_NAME) {\n if (__DEV__) {\n warn('nested spread attributes are ignored');\n }\n continue;\n }\n if (!nextObj || !(attrKey in nextObj)) {\n patchAttr(el, attrKey, prevObj[attrKey] as AttrValue, null);\n }\n }\n }\n\n if (nextObj) {\n for (const attrKey in nextObj) {\n if (attrKey === SPREAD_NAME) {\n if (__DEV__) {\n warn('nested spread attributes are ignored');\n }\n continue;\n }\n patchAttr(el, attrKey, prevObj?.[attrKey] as AttrValue, nextObj[attrKey] as AttrValue);\n }\n }\n return;\n }\n\n const elementIsSVG = el?.namespaceURI === SVG_NAMESPACE;\n const isXlink = elementIsSVG && startsWith(key, 'xlink:');\n const isXmlns = elementIsSVG && startsWith(key, 'xmlns:');\n\n const isBoolean = isSpecialBooleanAttr(key) || isBooleanAttr(key);\n\n // Early return if values are the same\n if (prev === next) {\n return;\n }\n\n // Event attributes are handled by the dedicated event layer, so skip them here.\n if (key.length > 2 && key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110) {\n return;\n }\n\n // Lowercase only after early returns, since it is only needed for specific checks like href.\n const lowerKey = key.toLowerCase();\n\n if (lowerKey === 'innerhtml' || lowerKey === 'srcdoc') {\n if (__DEV__) {\n warn(`${key} updates are ignored by patchAttr`);\n }\n return;\n }\n\n if (next == null) {\n if (isXlink) {\n el.removeAttributeNS(XLINK_NAMESPACE, key.slice(6));\n } else if (isXmlns) {\n const localName = key.slice(6);\n el.removeAttributeNS(XMLNS_NAMESPACE, localName);\n } else {\n el.removeAttribute(key);\n }\n return;\n }\n\n if (isBoolean) {\n if (includeBooleanAttr(next)) {\n el.setAttribute(key, '');\n } else {\n el.removeAttribute(key);\n }\n return;\n }\n\n const attrValue = isSymbol(next) ? String(next) : next;\n\n // Basic safety guard: block dangerous protocols on common URL attributes.\n const isUrlAttr =\n lowerKey === 'href' ||\n lowerKey === 'src' ||\n lowerKey === 'xlink:href' ||\n lowerKey === 'action' ||\n lowerKey === 'formaction' ||\n lowerKey === 'poster';\n if (isUrlAttr && isString(attrValue) && isUnsafeUrl(attrValue)) {\n return;\n }\n\n if (isXlink) {\n el.setAttributeNS(XLINK_NAMESPACE, key, String(attrValue));\n return;\n }\n\n if (isXmlns) {\n el.setAttributeNS(XMLNS_NAMESPACE, key, String(attrValue));\n return;\n }\n\n if (elementIsSVG) {\n el.setAttribute(key, String(attrValue));\n } else {\n if (key in el) {\n try {\n el[key] = attrValue;\n } catch {\n el.setAttribute(key, String(attrValue));\n }\n } else {\n el.setAttribute(key, String(attrValue));\n }\n }\n}\n","import { isString, normalizeClassName } from '@estjs/shared';\n\n/**\n * Supported value types for the class patch layer.\n */\nexport type ClassValue = string | Record<string, boolean> | ClassValue[] | null | undefined;\n\n/**\n * Applies a minimal class update to an element.\n *\n * Class values are normalized into a string first, then written through\n * `className` or `setAttribute('class')` depending on the element type.\n * Hydration stays silent and reuses the server-rendered result by default.\n *\n * @param el - The element to patch.\n * @param prev - Previous class value.\n * @param next - Next class value.\n * @param isSVG - Whether the element is an SVG element.\n * @returns {void}\n */\nexport function patchClass(\n el: Element,\n prev: unknown,\n next: unknown,\n isSVG: boolean = false,\n): void {\n if (prev === next) {\n return;\n }\n\n const normalizedNext = normalizeClass(next);\n if (!normalizedNext) {\n el.removeAttribute('class');\n return;\n }\n\n // Skip DOM write if normalized values are identical.\n // For string prev, it's already normalized; otherwise normalize.\n const normalizedPrev = isString(prev) ? prev : normalizeClass(prev);\n if (normalizedPrev === normalizedNext) {\n return;\n }\n\n // SVG nodes cannot rely on `className` consistently, so use the attribute path.\n if (isSVG) {\n el.setAttribute('class', normalizedNext);\n } else {\n el.className = normalizedNext;\n }\n}\n\n/**\n * Normalizes supported class inputs into a single string.\n */\nexport const normalizeClass = normalizeClassName;\n","import { camelCase, capitalize, isArray, isObject, isString, kebabCase, startsWith } from '@estjs/shared';\n\n/**\n * Internal symbol used to mark raw CSS variable text in style objects.\n * @internal\n */\nexport const CSS_VAR_TEXT: unique symbol = Symbol('CSS_VAR_TEXT');\n\n// Precompile the `!important` detector to avoid recreating it on every write.\nconst importantRE = /\\s*!important$/;\n\n// Candidate vendor prefixes and their lookup cache.\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache: Record<string, string> = {};\n\n/**\n * Supported value types for the style patch layer.\n */\nexport type Style = string | Record<string, string | string[]> | null | undefined;\n\n/**\n * Applies a minimal style update to an element.\n *\n * Supports both string-based and object-based styles, while staying silent\n * during hydration so the server-rendered DOM can be reused.\n *\n * @param el - The element to patch.\n * @param prev - Previous style value.\n * @param next - Next style value.\n * @returns {void}\n */\nexport function patchStyle(el: HTMLElement, prev: unknown, next?: unknown) {\n const style = el.style;\n\n if (next && isString(next)) {\n if (prev !== next) {\n style.cssText = next;\n }\n return;\n }\n\n if (!next) {\n if (prev) {\n el.removeAttribute('style');\n }\n return;\n }\n\n // When the previous value is an object, remove keys that disappeared in the next value.\n if (prev && !isString(prev)) {\n const prevObj = prev as Record<string, unknown>;\n for (const key in prevObj) {\n if (!next || (next as Record<string, unknown>)[key] == null) {\n setStyle(style, key, '');\n }\n }\n } else if (prev && isString(prev)) {\n // When the previous value is a string, approximate its keys and remove missing ones.\n // Match only CSS property-name tokens (letters/digits/hyphens before a colon).\n // This is linear and ignores semicolons inside url() or quoted values because\n // those fragments never match /letter+:/.\n const declRE = /(?:^|;)\\s*([a-z][a-z\\d-]*)\\s*:/gi;\n let match: RegExpExecArray | null;\n while ((match = declRE.exec(prev)) !== null) {\n const key = match[1].trim();\n if (key && next && isObject(next) && (next as Record<string, unknown>)[key] == null) {\n setStyle(style, key, '');\n }\n }\n }\n\n // Apply the next style values last.\n if (next && !isString(next)) {\n const nextObj = next as Record<string, unknown>;\n for (const key in nextObj) {\n const value = nextObj[key];\n if (\n (!prev || isString(prev) || (prev as Record<string, unknown>)[key] !== value) &&\n value != null\n ) {\n setStyle(style, key, value as string | string[]);\n }\n }\n }\n}\n\n/**\n * Sets a single style property.\n *\n * Centralizes array-value expansion, CSS variable writes, vendor-prefix\n * resolution, and `!important` handling in one place.\n *\n * @param style - Target style object.\n * @param name - Style property name.\n * @param val - Style value.\n * @private\n */\nexport function setStyle(\n style: CSSStyleDeclaration,\n name: string,\n val: string | string[] | null | undefined,\n): void {\n // Array values represent multiple candidates for the same property.\n if (isArray(val)) {\n for (const element of val) {\n setStyle(style, name, element);\n }\n return;\n }\n\n if (val == null || val === '') {\n val = '';\n }\n\n const priority = isString(val) && importantRE.test(val) ? 'important' : '';\n if (priority) {\n val = val.replace(importantRE, '');\n }\n\n // CSS variables must be written through `setProperty()`.\n if (startsWith(name, '--')) {\n if (priority) {\n style.setProperty(name, val, priority);\n } else {\n style.setProperty(name, val);\n }\n return;\n }\n\n // Regular properties try vendor prefix resolution first.\n const prefixed = autoPrefix(style, name);\n\n // `!important` cannot use direct property assignment and must go through `setProperty()`.\n if (priority) {\n style.setProperty(toCssPropertyName(prefixed), val, priority);\n } else {\n style[prefixed] = val;\n }\n}\n\nfunction toCssPropertyName(name: string): string {\n const hyphenated = kebabCase(name);\n return startsWith(name, 'Webkit') || startsWith(name, 'Moz') || startsWith(name, 'ms')\n ? `-${hyphenated}`\n : hyphenated;\n}\n\n/**\n * Resolves the correct vendor-prefixed style property name.\n *\n * Results are cached in `prefixCache` to avoid repeated hot-path detection.\n *\n * @param style - Target style object.\n * @param rawName - Original property name.\n * @returns The property name that can be written to `style` directly.\n * @private\n */\nfunction autoPrefix(style: CSSStyleDeclaration, rawName: string): string {\n // Check the cache first.\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n\n // Try the standard camelCase property first.\n let name = camelCase(rawName);\n if (name !== 'filter' && name in style) {\n return (prefixCache[rawName] = name);\n }\n\n // If the standard property does not exist, try vendor-prefixed variants.\n name = capitalize(name);\n for (const prefix of prefixes) {\n const prefixed = prefix + name;\n if (prefixed in style) {\n return (prefixCache[rawName] = prefixed);\n }\n }\n\n return rawName;\n}\n","import { HYDRATION_ANCHOR_ATTR, isBrowser, warn } from '@estjs/shared';\nimport { patchAttr } from './operations/attr';\nimport { patchClass } from './operations/class';\nimport { patchStyle } from './operations/style';\nimport { template } from './renderer';\n\n// ---------------------------------------------------------------------------\n// Hydration key counter\n// ---------------------------------------------------------------------------\n\nlet _hydrationKey = 0;\n\nexport function getHydrationKey(): string {\n return String(_hydrationKey++);\n}\n\nexport function resetHydrationKey(): void {\n _hydrationKey = 0;\n}\n\n// ---------------------------------------------------------------------------\n// Hydration state + registry\n// ---------------------------------------------------------------------------\n\n/**\n * Module-private hydration flag.\n *\n * Read via `isHydrating()` instead of importing as a `let` binding — this\n * avoids cross-bundle \"live binding\" pitfalls when consumers go through a\n * barrel-export (`import { isHydrating } from '@estjs/template'`).\n */\nlet _isHydrating = false;\n\n/**\n * Returns whether the runtime is currently in the hydration first-pass.\n *\n * @returns True while hydrating, false otherwise.\n */\nexport function isHydrating(): boolean {\n return _isHydrating;\n}\n\n/**\n * Pre-built map of data-hk → Element, populated by beginHydration().\n * Mirrors SolidJS's sharedConfig.registry / gatherHydratable().\n */\nconst _registry = new Map<string, Element>();\n\n/**\n * Gather all [data-hk] elements under `root` into the registry.\n * Called once at hydration start — O(n) DOM query, then O(1) lookups.\n *\n * @param root - The root element to scan.\n */\nfunction gatherHydratable(root: Element): void {\n const nodes = root.querySelectorAll('[data-hk]');\n for (const node of nodes) {\n const key = (node as HTMLElement).dataset.hk;\n if (key != null && !_registry.has(key)) {\n _registry.set(key, node as Element);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Teleport (Portal) hydration anchors\n// ---------------------------------------------------------------------------\n\n/** FIFO queue of `<!--teleport-anchor-->` comments at Portal call sites. */\nconst _teleportCallsiteAnchors: Comment[] = [];\n\n/** Per-target FIFO of `<!--teleport-start-->` comments inside teleport targets. */\nconst _teleportTargetStarts = new Map<Element, Comment[]>();\n\n/** Scan `document.body` for teleport comment markers, classifying each into its queue. */\nfunction gatherTeleportAnchors(): void {\n if (typeof document === 'undefined') return;\n const walker = document.createNodeIterator(document.body, NodeFilter.SHOW_COMMENT);\n let node: Comment | null;\n\n while ((node = walker.nextNode() as Comment | null)) {\n const data = node.data;\n if (data === 'teleport-anchor') {\n _teleportCallsiteAnchors.push(node);\n } else if (data === 'teleport-start') {\n const parent = node.parentElement;\n if (!parent) continue;\n let bucket = _teleportTargetStarts.get(parent);\n if (!bucket) {\n bucket = [];\n _teleportTargetStarts.set(parent, bucket);\n }\n bucket.push(node);\n }\n }\n}\n\n/** Pop the next call-site anchor comment, or `null` if exhausted. */\nexport function consumeTeleportAnchor(): Comment | null {\n return _teleportCallsiteAnchors.shift() ?? null;\n}\n\n/** Pop the next teleport block from `target`, returning start/end markers and inner nodes. */\nexport function consumeTeleportBlock(\n target: Element,\n): { start: Comment; end: Comment; nodes: Node[] } | null {\n const bucket = _teleportTargetStarts.get(target);\n const start = bucket?.shift();\n if (!start) return null;\n\n const nodes: Node[] = [];\n let cursor: Node | null = start.nextSibling;\n while (cursor) {\n if (cursor.nodeType === Node.COMMENT_NODE && (cursor as Comment).data === 'teleport-end') {\n return { start, end: cursor as Comment, nodes };\n }\n nodes.push(cursor);\n cursor = cursor.nextSibling;\n }\n\n // Malformed block — no <!--teleport-end--> found. Return null to signal\n // a hydration mismatch rather than returning `{ start, end: start }` which\n // would be semantically incorrect.\n if (__DEV__) {\n warn('[Portal] hydration: orphaned <!--teleport-start--> without matching <!--teleport-end-->');\n }\n return null;\n}\n\n/**\n * Begins hydration.\n *\n * @param root - The root element to hydrate.\n */\nexport function beginHydration(root: Element): void {\n _isHydrating = true;\n _hydrationKey = 0;\n _registry.clear();\n _teleportCallsiteAnchors.length = 0;\n _teleportTargetStarts.clear();\n gatherHydratable(root);\n gatherTeleportAnchors();\n}\n\n/**\n * Ends hydration.\n *\n * @returns {void}\n */\nexport function endHydration(): void {\n _isHydrating = false;\n _registry.clear();\n _teleportCallsiteAnchors.length = 0;\n _teleportTargetStarts.clear();\n}\n\nexport function claimHydratedNodes(parent: Node, expected: Node[], before?: Node): Node[] | null {\n if (!_isHydrating || (before && before.parentNode !== parent)) return null;\n if (expected.length === 0) return [];\n\n const claimed: Node[] = new Array(expected.length);\n let cursor: Node | null = before ? before.previousSibling : parent.lastChild;\n\n for (let i = expected.length - 1; i >= 0; i--) {\n if (!cursor) return null;\n\n const expectedNode = expected[i];\n\n const expectedType = expectedNode.nodeType;\n if (expectedType === Node.TEXT_NODE) {\n const expectedText = expectedNode.textContent ?? '';\n if (!expectedText || cursor.nodeType !== Node.TEXT_NODE) return null;\n\n const existingText = cursor.textContent ?? '';\n if (existingText === expectedText) {\n claimed[i] = cursor;\n cursor = cursor.previousSibling;\n continue;\n }\n\n if (!existingText.endsWith(expectedText)) return null;\n\n const prefix = existingText.slice(0, existingText.length - expectedText.length);\n if (!prefix) return null;\n const prefixNode = document.createTextNode(prefix);\n parent.insertBefore(prefixNode, cursor);\n cursor.textContent = expectedText;\n claimed[i] = cursor;\n cursor = prefixNode;\n continue;\n }\n\n if (cursor.nodeType !== expectedType) return null;\n if (expectedType === Node.ELEMENT_NODE) {\n if ((cursor as Element).tagName !== (expectedNode as Element).tagName) return null;\n } else if (\n expectedType === Node.COMMENT_NODE &&\n (cursor as Comment).data !== (expectedNode as Comment).data\n ) {\n return null;\n }\n\n claimed[i] = cursor;\n cursor = cursor.previousSibling;\n }\n\n return claimed;\n}\n\nfunction resolveHydrationKey(parent: Element): string | null {\n const el = parent as HTMLElement;\n return el.dataset.hk ?? (parent.closest('[data-hk]') as HTMLElement | null)?.dataset.hk ?? null;\n}\n\nfunction expectedHydrationSlot(parent: Element | null, index: number): string {\n if (_isHydrating && parent) {\n const key = resolveHydrationKey(parent);\n if (key) return `${key}-${index}`;\n }\n return String(index);\n}\n\nexport function hydrationMarker(parent: Node | null, index: number): Comment | null {\n if (!parent || index < 0) return null;\n\n const expected = expectedHydrationSlot(parent instanceof Element ? parent : null, index);\n let fallbackIndex = 0;\n\n let cursor = parent.firstChild;\n while (cursor) {\n if (cursor.nodeType === Node.COMMENT_NODE) {\n const comment = cursor as Comment;\n if (comment.data === expected) return comment;\n if (!_isHydrating && comment.data === '' && fallbackIndex++ === index) return comment;\n }\n cursor = cursor.nextSibling;\n }\n\n return null;\n}\n\nexport function hydrationAnchor(parent: Node | null, index: number): Node | null {\n if (!(parent instanceof Element) || index < 0) return null;\n\n const expected = expectedHydrationSlot(parent, index);\n let cursor = parent.firstChild;\n while (cursor) {\n if (cursor instanceof Element && cursor.getAttribute(HYDRATION_ANCHOR_ATTR) === expected) {\n return cursor;\n }\n cursor = cursor.nextSibling;\n }\n return null;\n}\n\n/**\n * Returns a factory function that, when called at component render time:\n * - During hydration: increments the key, looks up the pre-built registry,\n * and returns the ACTUAL SSR DOM node (no cloneNode).\n * - During CSR: clones the parsed template as usual.\n *\n * @param html - The HTML template string.\n * @returns A factory function that returns a DOM element.\n */\nexport function getRenderedElement(html: string): () => Element {\n if (!isBrowser()) {\n return () => {\n throw new Error('[essor] getRenderedElement called in non-browser environment');\n };\n }\n\n let _csrFactory: (() => Element) | null = null;\n\n return (): Element => {\n if (!_isHydrating) {\n // CSR path — clone the template as normal\n if (!_csrFactory) _csrFactory = template(html) as () => Element;\n return _csrFactory();\n }\n\n // Hydration path — key incremented HERE (render time) to match server order\n const key = getHydrationKey();\n const node = _registry.get(key);\n\n if (node) {\n _registry.delete(key);\n return node; // TRUE DOM reuse — no cloneNode\n }\n\n // Mismatch: SSR node not found, fall back to CSR creation\n warn(`[essor] hydration mismatch: no SSR element for key \"${key}\"`);\n if (!_csrFactory) _csrFactory = template(html) as () => Element;\n return _csrFactory();\n };\n}\n\n// ---------------------------------------------------------------------------\n// Hydrate-mode patch wrappers (silence DOM writes during first hydration run)\n// ---------------------------------------------------------------------------\n\n/**\n * Patches class while considering hydration state.\n *\n * @param el - The element to patch.\n * @param prev - Previous class value.\n * @param next - Next class value.\n * @param isSVG - Whether the element is an SVG element.\n */\nexport function patchClassHydrate(\n el: Element,\n prev: unknown,\n next: unknown,\n isSVG?: boolean,\n): void {\n if (_isHydrating) return;\n patchClass(el, prev, next, isSVG);\n}\n\n/**\n * Patches attribute while considering hydration state.\n *\n * @param el - The element to patch.\n * @param key - The attribute key.\n * @param prev - Previous attribute value.\n * @param next - Next attribute value.\n */\nexport function patchAttrHydrate(el: Element, key: string, prev: unknown, next: unknown): void {\n if (_isHydrating) return;\n patchAttr(el, key, prev as never, next as never);\n}\n\n/**\n * Patches style while considering hydration state.\n *\n * @param el - The element to patch.\n * @param prev - Previous style value.\n * @param next - Next style value.\n */\nexport function patchStyleHydrate(el: HTMLElement, prev: unknown, next?: unknown): void {\n if (_isHydrating) return;\n patchStyle(el, prev, next);\n}\n","import { insertNode, removeNode } from './dom';\n\n/**\n * Resolves insert anchor.\n *\n * @param parent - The parent node.\n * @param candidate - The candidate anchor node.\n * @returns The resolved anchor node or null.\n */\nfunction resolveInsertAnchor(parent: Node, candidate?: Node | null): Node | null {\n return candidate && candidate.parentNode === parent ? candidate : null;\n}\n\n/**\n * Reconcile two arrays of real DOM nodes with minimal DOM operations.\n * This is the list reconciler for fine-grained rendering.\n *\n * @param parent - The parent node.\n * @param oldNodes - The array of current nodes.\n * @param newNodes - The array of new nodes.\n * @param anchor - Optional reference node for insertion.\n * @returns The new array of nodes.\n */\nexport function reconcileArrays(\n parent: Node,\n oldNodes: Node[],\n newNodes: Node[],\n anchor?: Node,\n): Node[] {\n const fallbackAnchor = resolveInsertAnchor(parent, anchor);\n const oldLength = oldNodes.length;\n const newLength = newNodes.length;\n\n if (oldLength === 0 && newLength === 0) return newNodes;\n\n if (oldLength === 0) {\n for (let i = 0; i < newLength; i++) {\n insertNode(parent, newNodes[i], fallbackAnchor);\n }\n return newNodes;\n }\n\n if (newLength === 0) {\n for (let i = 0; i < oldLength; i++) {\n removeNode(oldNodes[i]);\n }\n return [];\n }\n\n let start = 0;\n let oldEnd = oldLength - 1;\n let newEnd = newLength - 1;\n\n while (start <= oldEnd && start <= newEnd) {\n if (oldNodes[start] === newNodes[start]) {\n start++;\n } else {\n break;\n }\n }\n\n while (oldEnd >= start && newEnd >= start) {\n if (oldNodes[oldEnd] === newNodes[newEnd]) {\n oldEnd--;\n newEnd--;\n } else {\n break;\n }\n }\n\n if (start > oldEnd) {\n if (start <= newEnd) {\n const nextPos = newEnd + 1;\n const nextNode = resolveInsertAnchor(\n parent,\n nextPos < newLength ? newNodes[nextPos] : fallbackAnchor,\n );\n for (let i = start; i <= newEnd; i++) {\n insertNode(parent, newNodes[i], nextNode);\n }\n }\n } else if (start > newEnd) {\n for (let i = start; i <= oldEnd; i++) {\n removeNode(oldNodes[i]);\n }\n } else {\n reconcileUnknownSequence(parent, oldNodes, newNodes, start, oldEnd, newEnd, fallbackAnchor);\n }\n\n return newNodes;\n}\n\n/**\n * Reconciles unknown sequence of nodes.\n *\n * @param parent - The parent node.\n * @param oldNodes - Current nodes.\n * @param newNodes - New nodes.\n * @param start - Start index of the sequence.\n * @param oldEnd - End index of the old sequence.\n * @param newEnd - End index of the new sequence.\n * @param anchor - Optional reference node for insertion.\n * @returns {void}\n */\nfunction reconcileUnknownSequence(\n parent: Node,\n oldNodes: Node[],\n newNodes: Node[],\n start: number,\n oldEnd: number,\n newEnd: number,\n anchor?: Node | null,\n): void {\n const newLength = newEnd - start + 1;\n\n // For very short sequences, linear search beats Map allocation overhead\n const findNewIndex =\n newLength <= 4\n ? (node: Node) => {\n for (let i = start; i <= newEnd; i++) {\n if (newNodes[i] === node) return i;\n }\n return undefined;\n }\n : (() => {\n const map = new Map<Node, number>();\n for (let i = start; i <= newEnd; i++) map.set(newNodes[i], i);\n return (node: Node) => map.get(node);\n })();\n\n const newIndexToOldIndexMap = new Int32Array(newLength);\n\n let patched = 0;\n let moved = false;\n let maxNewIndexSoFar = 0;\n\n for (let i = start; i <= oldEnd; i++) {\n const oldNode = oldNodes[i];\n\n if (patched >= newLength) {\n removeNode(oldNode);\n continue;\n }\n\n const newIndex = findNewIndex(oldNode);\n\n if (newIndex === undefined) {\n removeNode(oldNode);\n } else {\n newIndexToOldIndexMap[newIndex - start] = i + 1;\n\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patched++;\n }\n }\n\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : [];\n let j = increasingNewIndexSequence.length - 1;\n\n for (let i = newLength - 1; i >= 0; i--) {\n const nextIndex = start + i;\n const nextNode = newNodes[nextIndex];\n const anchorNode = resolveInsertAnchor(\n parent,\n nextIndex + 1 < newNodes.length ? newNodes[nextIndex + 1] : anchor,\n );\n\n if (newIndexToOldIndexMap[i] === 0) {\n insertNode(parent, nextNode, anchorNode);\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n insertNode(parent, nextNode, anchorNode);\n } else {\n j--;\n }\n }\n }\n}\n\n/**\n * Compute the Longest Increasing Subsequence using patience sorting.\n * O(n log n) time, O(n) space.\n *\n * @param arr - The array of indices.\n * @returns The LIS indices.\n */\nexport function getSequence(arr: Int32Array): number[] {\n const p = new Int32Array(arr.length);\n const result = [0];\n const len = arr.length;\n let i: number;\n let j: number;\n let u: number;\n let v: number;\n let c: number;\n\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = (u + v) >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\n","import { coerceArray, error, hasOwn, isFunction, isObject, isPrimitive, warn } from '@estjs/shared';\nimport { effect } from '@estjs/signals';\nimport { isComponent } from './component';\nimport { KEY_PROP } from './constants';\nimport { type Scope, getActiveScope, onCleanup, runWithScope } from './scope';\nimport { claimHydratedNodes, isHydrating } from './hydration';\nimport { reconcileArrays } from './reconcile';\nimport type { AnyNode } from './types';\n\n/**\n * Remove node from its parent\n *\n * @param node Node to remove\n *\n * @example\n * ```typescript\n * removeNode(elementToRemove);\n * ```\n */\nexport function removeNode(node: AnyNode): void {\n if (!node) return;\n\n if (isComponent(node)) {\n node.destroy();\n } else {\n const element = node as ChildNode;\n if (element.parentNode) {\n element.remove();\n }\n }\n}\n\n/**\n * Insert child node\n * Handle insertion of component nodes and DOM nodes\n *\n * @param parent Parent node\n * @param child Child node\n * @param before Reference node for insertion\n */\nexport function insertNode(parent: Node, child: AnyNode, before?: AnyNode): void {\n if (!parent || !child) return;\n\n const beforeNode = isComponent(before) ? before.firstChild : (before as Node);\n\n if (isComponent(child)) {\n child.mount(parent, beforeNode);\n return;\n }\n\n if (beforeNode) {\n parent.insertBefore(child as Node, beforeNode);\n } else {\n if (__DEV__) {\n if (!child) {\n error('insertNode: child is not a Node', child);\n }\n }\n parent.appendChild(child as Node);\n }\n}\n\n/**\n * Replace child node\n * Handle replacement of component nodes and DOM nodes\n *\n * @param parent Parent node\n * @param newNode New node\n * @param oldNode Old node to be replaced\n */\nexport function replaceNode(parent: Node, newNode: AnyNode, oldNode: AnyNode): void {\n if (!parent || !newNode || !oldNode || newNode === oldNode) return;\n\n const beforeNode: AnyNode | undefined = isComponent(oldNode)\n ? oldNode.beforeNode\n : (oldNode as Node).nextSibling!;\n removeNode(oldNode);\n insertNode(parent, newNode, beforeNode);\n}\n\n/**\n * Check if two nodes are the same (inline for performance)\n * This combines key check and type check\n */\nexport function isSameNode(a: AnyNode, b: AnyNode): boolean {\n // Check key equality first (fast path)\n const keyA = getNodeKey(a);\n const keyB = getNodeKey(b);\n\n if (keyA !== keyB) {\n return false;\n }\n\n // Inline type check to avoid function call\n const aIsComponent = isComponent(a);\n const bIsComponent = isComponent(b);\n\n if (aIsComponent && bIsComponent) {\n return a.component === b.component;\n }\n\n if (aIsComponent !== bIsComponent) {\n return false;\n }\n\n if (isPrimitive(a) || isPrimitive(b)) {\n return a === b;\n }\n\n const aNode = a as Node;\n const bNode = b as Node;\n\n if (aNode.nodeType !== bNode.nodeType) {\n return false;\n }\n\n if (aNode.nodeType === Node.ELEMENT_NODE) {\n return (aNode as Element).tagName === (bNode as Element).tagName;\n }\n\n return true;\n}\n\n/**\n * Extract the optional stable key associated with a runtime node.\n */\nfunction getNodeKey(node: AnyNode): unknown {\n if (!node) {\n return undefined;\n }\n\n if (isComponent(node)) {\n return hasOwn(node.props, KEY_PROP) ? node.props[KEY_PROP] : undefined;\n }\n\n if (node instanceof Element) {\n return node.getAttribute(KEY_PROP);\n }\n\n if (isObject(node) && hasOwn(node, KEY_PROP)) {\n return Reflect.get(node as object, KEY_PROP);\n }\n\n return undefined;\n}\n\n/**\n * Normalize node for reconciliation.\n *\n * Performance-critical: uses inlined typeof / instanceof checks\n * instead of utility function calls in the hot path.\n */\nexport function normalizeNode(node: unknown): Node {\n // Fast path: already a DOM Node (covers Element, Text, Comment, etc.)\n if (node instanceof Node) return node;\n\n // Component instances must pass through as-is — the reconciler and\n // insertNode/removeNode handle them via isComponent() checks.\n if (isComponent(node)) return node as unknown as Node;\n\n // Primitives → text node (inlined for speed)\n const t = typeof node;\n if (node == null || t === 'string' || t === 'number' || t === 'boolean' || t === 'symbol') {\n return document.createTextNode(node === false || node == null ? '' : String(node));\n }\n\n // Plain objects should not be rendered directly — convert to text and warn\n if (__DEV__ && isObject(node)) {\n warn(\n 'Rendering a plain object as a node is not recommended. ' +\n 'The object will be converted to its string representation.',\n node,\n );\n }\n return document.createTextNode(String(node));\n}\n/**\n * Reactive node insertion with binding support\n *\n * @param parent Parent node\n * @param nodeFactory Node factory function or static node\n * @param before Reference node for insertion position\n * @example\n * ```typescript\n * insert(container, () => message.value, null);\n * insert(container, staticElement, referenceNode);\n * insert(container, \"Hello World\", null); // Direct string support\n * ```\n */\nexport function insert(parent: Node, nodeFactory: AnyNode, before?: Node) {\n if (!parent) return;\n // Capture the active scope at call time - this is critical for correct context inheritance\n // When dynamic components are created inside effects, they need to inherit from\n // the scope that was active when insert() was called, not when the effect runs\n const parentScope: Scope | null = getActiveScope();\n\n let renderedNodes: Node[] = [];\n let isFirstRun = true;\n\n /**\n * Resolves a raw node value into a flat array of DOM Nodes.\n * Fast-paths simple cases (single Node, single primitive) to avoid\n * intermediate array allocations.\n */\n const resolveNodes = (raw: unknown): Node[] => {\n // Fast path: already a DOM Node\n if (raw instanceof Node) return [raw];\n\n // Fast path: Component instance (skip normalizeNode entirely)\n if (isComponent(raw)) return [raw as unknown as Node];\n\n // Fast path: single primitive → text node (inlined typeof for speed)\n const t = typeof raw;\n if (raw == null || t === 'string' || t === 'number' || t === 'boolean') {\n return [normalizeNode(raw)];\n }\n\n // General path: coerce, resolve nested functions, flatten, normalize\n return coerceArray(raw)\n .map((item) => (isFunction(item) ? item() : item))\n .flatMap((i) => i)\n .map(normalizeNode) as Node[];\n };\n\n // Create effect for reactive updates\n const effectRunner = effect(() => {\n const executeUpdate = () => {\n const rawNodes = isFunction(nodeFactory) ? nodeFactory() : nodeFactory;\n const nodes = resolveNodes(rawNodes);\n // Hydration mode: skip DOM operations on first run only when every\n // node already exists under the target parent. Component instances and\n // fallback CSR nodes still need the normal reconcile path.\n if (\n isFirstRun &&\n isHydrating() &&\n nodes.every((node) => node instanceof Node && node.parentNode === parent)\n ) {\n renderedNodes = nodes;\n isFirstRun = false;\n return;\n }\n if (isFirstRun && isHydrating()) {\n const hydratedNodes = claimHydratedNodes(parent, nodes, before);\n if (hydratedNodes) {\n renderedNodes = hydratedNodes;\n isFirstRun = false;\n return;\n }\n }\n renderedNodes = reconcileArrays(parent, renderedNodes as Node[], nodes, before) as Node[];\n isFirstRun = false;\n };\n\n // If we have a parent scope, run within it to maintain context hierarchy\n if (parentScope && !parentScope.isDestroyed) {\n runWithScope(parentScope, executeUpdate);\n } else {\n executeUpdate();\n }\n });\n\n onCleanup(() => {\n effectRunner.stop();\n for (const node of renderedNodes) removeNode(node);\n renderedNodes = [];\n });\n\n return renderedNodes;\n}\n/**\n * Returns the first child of a node.\n *\n * @param node - The node to get the child from.\n * @returns The first child node or null.\n */\nexport function child(node: Node | null): Node | null {\n return node?.firstChild || null;\n}\n\n/**\n * Returns the next sibling after advancing by `step`.\n *\n * @param node - The starting node.\n * @param step - Number of steps to advance.\n * @returns The resulting sibling node or null.\n */\nexport function next(node: Node | null, step: number = 1): Node | null {\n while (node && step > 0) {\n node = node.nextSibling;\n step--;\n }\n return node || null;\n}\n\n/**\n * Returns the child node at the requested index.\n *\n * @param node - The parent node.\n * @param index - The child index.\n * @returns The child node at index or null.\n */\nexport function nthChild(node: Node | null, index: number): Node | null {\n if (!node || index < 0) return null;\n let current = node.firstChild;\n while (current && index > 0) {\n current = current.nextSibling;\n index--;\n }\n return current || null;\n}\n","/**\n * Extended listener options with optional event delegation support.\n */\nexport interface EventOptions extends AddEventListenerOptions {\n /**\n * Selector used for event delegation.\n *\n * When provided, the handler only runs if the event target matches the selector.\n */\n delegate?: string;\n}\n\n/**\n * Cleanup function signature for event listeners.\n */\nexport type EventCleanup = () => void;\n\n/**\n * Adds an event listener to an element with optional simple delegation.\n *\n * Without `delegate`, this is a thin wrapper around native `addEventListener()`.\n * When `delegate` is provided, the runtime first checks the selector match before\n * dispatching the real handler to the caller.\n *\n * @param el - The element to add the listener to.\n * @param event - The name of the event to listen for.\n * @param handler - The event handler function.\n * @param options - Optional event listener options.\n * @returns A cleanup function that removes the listener.\n */\nexport function addEvent(\n el: Element,\n event: string,\n handler: EventListener,\n options?: EventOptions,\n): EventCleanup {\n if (!options?.delegate) {\n el.addEventListener(event, handler, options);\n return () => el.removeEventListener(event, handler, options);\n }\n\n // Delegation path: match the selector first, then forward the event to the caller.\n const selector = options.delegate;\n /**\n * Dispatches delegated events only for matching descendants.\n */\n const wrappedHandler = (e: Event) => {\n const target = e.target as Element;\n if (target.matches(selector) || target.closest(selector)) {\n handler.call(el, e);\n }\n };\n\n // Extract delegate from options and pass the rest to addEventListener\n const { delegate: _, ...nativeOptions } = options;\n\n el.addEventListener(event, wrappedHandler, nativeOptions);\n\n return () => {\n el.removeEventListener(event, wrappedHandler, nativeOptions);\n };\n}\n","import { error, isPromise } from '@estjs/shared';\nimport { type Scope, getActiveScope, runWithScope } from './scope';\n\nexport type LifecycleHook = () => void | Promise<void>;\n\n/**\n * Registers scoped hook.\n *\n * @param scope - The scope to register the hook for.\n * @param listKey - The key of the hook list.\n * @param hook - The hook function to register.\n */\nfunction registerScopedHook(\n scope: Scope,\n listKey: 'onMount' | 'onUpdate' | 'onDestroy',\n hook: LifecycleHook,\n): void {\n let hookList = scope[listKey];\n if (!hookList) {\n hookList = [];\n scope[listKey] = hookList;\n }\n hookList.push(hook);\n}\n\n/**\n * Executes lifecycle hooks and captures async rejections in dev mode.\n *\n * @param hooks - The array of hooks to execute.\n * @param scopeId - The ID of the scope.\n * @param phase - The lifecycle phase.\n * @returns A promise if any hooks are asynchronous, or undefined.\n */\nfunction executeHooks(\n hooks: LifecycleHook[],\n scopeId: number,\n phase: 'mount' | 'update' | 'destroy',\n): void | Promise<void> {\n const len = hooks.length;\n if (len === 0) return;\n\n let pending: Promise<void>[] | undefined;\n\n for (let i = 0; i < len; i++) {\n try {\n const result = hooks[i]();\n if (isPromise(result)) {\n const safePromise = result.catch((error_) => {\n if (__DEV__) {\n error(`Scope(${scopeId}): Async ${phase} hook rejected:`, error_);\n }\n });\n (pending || (pending = [])).push(safePromise);\n }\n } catch (error_) {\n if (__DEV__) {\n error(`Scope(${scopeId}): Error in ${phase} hook:`, error_);\n }\n }\n }\n\n if (!pending) return;\n return Promise.all(pending).then(() => {});\n}\n\n/**\n * Register a mount lifecycle hook.\n * If the scope is already mounted, the hook is executed immediately.\n *\n * @param hook - The hook function to register.\n * @returns {void}\n */\nexport function onMount(hook: LifecycleHook): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) error('onMount() must be called within a scope');\n return;\n }\n\n if (scope.isMounted) {\n try {\n const result = hook();\n if (isPromise(result)) {\n result.catch((error_) => {\n if (__DEV__) error(`Scope(${scope.id}): Async mount hook rejected:`, error_);\n });\n }\n } catch (error_) {\n if (__DEV__) error(`Scope(${scope.id}): Error in mount hook:`, error_);\n }\n return;\n }\n\n registerScopedHook(scope, 'onMount', hook);\n}\n\n/**\n * Register an update lifecycle hook.\n *\n * @param hook - The hook function to register.\n * @returns {void}\n */\nexport function onUpdate(hook: LifecycleHook): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) error('onUpdate() must be called within a scope');\n return;\n }\n\n registerScopedHook(scope, 'onUpdate', hook);\n}\n\n/**\n * Register a destroy lifecycle hook.\n *\n * @param hook - The hook function to register.\n * @returns {void}\n */\nexport function onDestroy(hook: LifecycleHook): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) error('onDestroy() must be called within a scope');\n return;\n }\n\n registerScopedHook(scope, 'onDestroy', hook);\n}\n\n/**\n * Trigger mount lifecycle hooks for a scope.\n *\n * @param scope - The scope to trigger hooks for.\n * @returns A promise if any hooks are asynchronous, or undefined.\n */\nexport function triggerMountHooks(scope: Scope): void | Promise<void> {\n if (scope.isDestroyed) {\n return;\n }\n if (!scope.onMount || scope.onMount.length === 0) {\n scope.isMounted = true;\n return;\n }\n\n const mountHooks = scope.onMount;\n const result = runWithScope(scope, () => executeHooks(mountHooks, scope.id, 'mount'));\n mountHooks.length = 0;\n scope.isMounted = true;\n return result;\n}\n\n/**\n * Trigger update lifecycle hooks for a scope.\n *\n * @param scope - The scope to trigger hooks for.\n * @returns A promise if any hooks are asynchronous, or undefined.\n */\nexport function triggerUpdateHooks(scope: Scope): void | Promise<void> {\n if (scope.isDestroyed || !scope.onUpdate || scope.onUpdate.length === 0) return;\n return runWithScope(scope, () => executeHooks(scope.onUpdate!, scope.id, 'update'));\n}\n\n// NOTE: destroy hooks are executed directly inside `disposeScope` to keep\n// the teardown path synchronous and free of extra `runWithScope` frames.\n// See `./scope.ts`.\n","import { type Signal, isComputed, isSignal, shallowReactive } from '@estjs/signals';\nimport { isFunction, isOn } from '@estjs/shared';\n\nimport { COMPONENT_STATE, COMPONENT_TYPE, REF_KEY } from './constants';\nimport { insert, insertNode, removeNode } from './dom';\nimport { createScope, disposeScope, getActiveScope, runWithScope } from './scope';\nimport { type EventCleanup, addEvent } from './operations/event';\nimport { triggerMountHooks, triggerUpdateHooks } from './lifecycle';\nimport type { AnyNode, ComponentFn, ComponentProps } from './types';\nimport type { Scope } from './scope';\n\n/**\n * Install every own-key descriptor from `source` onto `target` verbatim\n * (getters stay getters), optionally deleting any target key not present\n * in the incoming source.\n *\n * Preserving getter descriptors is the whole reason the component body can\n * read `props.foo` and transparently get the latest reactive value — the\n * compiler emits dynamic props as `{ get foo() { return signal.value } }`.\n * `{ ...props }` would snapshot each getter once and kill reactivity;\n * `defineProperty` keeps it alive.\n */\nfunction syncDescriptors(target: object, source: object, pruneMissing = false): void {\n for (const key of Object.getOwnPropertyNames(source)) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)!);\n }\n if (pruneMissing) {\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (const key of Object.getOwnPropertyNames(target)) {\n if (!sourceKeys.includes(key)) delete (target as Record<string, unknown>)[key];\n }\n }\n}\n\n/**\n * Read a prop value through its descriptor so dynamic getters (ref/event\n * handlers emitted as `get onClick() { ... }`) resolve to the latest value.\n */\nfunction readProp(source: object, key: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)!;\n return descriptor.get ? descriptor.get.call(source) : descriptor.value;\n}\n\nexport class Component<P extends ComponentProps = {}> {\n public readonly [COMPONENT_TYPE.NORMAL] = true;\n\n public scope: Scope | null = null;\n public state: COMPONENT_STATE = COMPONENT_STATE.INITIAL;\n public beforeNode: Node | undefined = undefined;\n public renderedNodes: Node[] = [];\n public firstChild: Node | undefined = undefined;\n\n protected parentNode: Node | undefined = undefined;\n\n private readonly parentScope: Scope | null;\n private readonly reactiveProps: P;\n private rootEventCleanups: EventCleanup[] = [];\n private rootRefCleanup?: () => void;\n\n constructor(\n public readonly component: ComponentFn<P>,\n public props: P = {} as P,\n ) {\n this.parentScope = getActiveScope();\n // Shallow-reactive container that inherits the raw props' descriptors.\n // The component body reads from this container; `update()` re-installs\n // new descriptors in-place so existing closures keep working.\n const container = {} as P;\n syncDescriptors(container, props);\n this.reactiveProps = shallowReactive(container) as P;\n }\n\n /**\n * Mount the component into `parentNode` (optionally before `beforeNode`).\n * If already rendered, the existing DOM is re-inserted without re-running\n * the component function.\n */\n mount(parentNode: Node, beforeNode?: Node): AnyNode[] {\n this.parentNode = parentNode;\n this.beforeNode = beforeNode;\n this.state = COMPONENT_STATE.MOUNTING;\n\n // Fast path: already rendered — just move the nodes.\n if (this.renderedNodes.length > 0) {\n for (const node of this.renderedNodes) {\n insertNode(parentNode, node, beforeNode);\n }\n this.state = COMPONENT_STATE.MOUNTED;\n return this.renderedNodes;\n }\n\n const scope = createScope(this.parentScope ?? getActiveScope());\n this.scope = scope;\n\n const renderedNodes = runWithScope(scope, () => {\n let result: unknown = this.component(this.reactiveProps);\n\n // Render-function pattern: a component may return a factory instead of\n // the element directly.\n if (isFunction(result)) {\n result = (result as Function)(this.reactiveProps);\n }\n\n // Unwrap signal / computed — only their current value reaches the DOM.\n if (isSignal<Element>(result)) {\n result = result.value;\n } else if (isComputed<Element>(result)) {\n result = result.value;\n }\n\n return insert(parentNode, result as AnyNode, beforeNode) ?? [];\n });\n\n this.renderedNodes = renderedNodes;\n this.firstChild = renderedNodes[0];\n\n // Wire refs/events only after renderedNodes/firstChild are set.\n this.syncSpecialProps(this.props);\n\n this.state = COMPONENT_STATE.MOUNTED;\n triggerMountHooks(scope);\n\n return this.renderedNodes;\n }\n\n /**\n * Re-install props into the same `reactiveProps` container (preserving\n * any closures already holding a reference to it) and re-apply\n * refs/events against the current root element.\n */\n update(props: P): void {\n this.props = props;\n const scope = this.scope;\n if (!scope || scope.isDestroyed) return;\n\n syncDescriptors(this.reactiveProps as object, props ?? {}, /* pruneMissing */ true);\n this.syncSpecialProps(props);\n\n triggerUpdateHooks(scope);\n }\n\n /**\n * Tear down and re-mount the component at its current insertion point.\n * No-op if the component has never been mounted.\n */\n forceUpdate(): void {\n if (!this.parentNode) return;\n const parent = this.parentNode;\n const before = this.beforeNode;\n this.destroy();\n this.mount(parent, before);\n }\n\n /**\n * Dispose the scope, remove all rendered nodes, and clear bookkeeping.\n * Idempotent: subsequent calls are no-ops.\n */\n destroy(): void {\n const scope = this.scope;\n if (!scope || scope.isDestroyed) return;\n this.scope = null;\n this.releaseSpecialProps();\n disposeScope(scope);\n for (const node of this.renderedNodes) removeNode(node);\n this.renderedNodes = [];\n this.firstChild = undefined;\n this.parentNode = undefined;\n // Clear all descriptors to release signal getter references\n for (const key of Object.getOwnPropertyNames(this.reactiveProps)) {\n delete (this.reactiveProps as Record<string, unknown>)[key];\n }\n // Reset state so external code can detect the component is no longer mounted\n this.state = COMPONENT_STATE.INITIAL;\n }\n\n /**\n * Apply props that bind to the root DOM element rather than flowing into\n * the component body: `ref` (signal/function) and `onXxx` event handlers.\n * The render-facing `reactiveProps` already has those keys; here we just\n * wire them to the actual DOM node.\n */\n private syncSpecialProps(props: P): void {\n if (!props) return;\n const root = this.firstChild;\n if (!root || !(root instanceof Element)) return;\n\n this.releaseSpecialProps();\n\n for (const key of Object.getOwnPropertyNames(props)) {\n if (key === REF_KEY) {\n const value = readProp(props, key);\n this.rootRefCleanup = this.bindRootRef(value, root);\n continue;\n }\n\n if (isOn(key)) {\n const value = readProp(props, key);\n if (!isFunction(value)) continue;\n const eventName = key.slice(2).toLowerCase();\n const target = root as Element & Record<string, unknown> & { disabled?: boolean };\n const slot = `_$${eventName}`;\n const prev = target[slot];\n\n // Slot path — the JSX template already wired a delegated handler into\n // this element's `_$<event>` slot. babel-plugin emits the matching\n // `delegateEvents([...])` registration at module init, so the document\n // walker is guaranteed to be active. Override Solid-style (last write\n // wins) and restore the template's handler on release so a subsequent\n // update / re-mount sees a clean baseline. The delegation walk in\n // events.ts already supplies the `!node.disabled` short-circuit.\n if (isFunction(prev)) {\n target[slot] = value;\n this.rootEventCleanups.push(() => {\n if (target[slot] === value) target[slot] = prev;\n });\n continue;\n }\n\n // Native path — no JSX-bound delegated handler exists on this slot\n // (template didn't bind one, or babel-plugin's delegation is off).\n // Attach a real listener and mirror the walk's `!node.disabled`\n // short-circuit at the dispatch entry so behaviour matches the slot\n // path. The disabled check is a no-op on non-form elements.\n const fn = value as (this: Element, e: Event) => unknown;\n const handler: EventListener = (event) => {\n if (target.disabled) return;\n fn.call(target, event);\n };\n this.rootEventCleanups.push(addEvent(target, eventName, handler));\n }\n }\n }\n\n /**\n * Remove all listeners/ref bindings currently attached to the root element.\n */\n private releaseSpecialProps(): void {\n for (const cleanup of this.rootEventCleanups) {\n cleanup();\n }\n this.rootEventCleanups.length = 0;\n\n if (this.rootRefCleanup) {\n this.rootRefCleanup();\n this.rootRefCleanup = undefined;\n }\n }\n\n /**\n * Bind the root ref prop and return a cleanup that restores the previous ref state.\n */\n private bindRootRef(value: unknown, root: Element): (() => void) | undefined {\n if (isFunction(value)) {\n value(root);\n return () => value(null);\n }\n\n if (isSignal<Element | null>(value)) {\n const ref = value as Signal<Element | null>;\n const previousValue = ref.value;\n ref.value = root;\n return () => {\n if (ref.value === root) {\n ref.value = previousValue;\n }\n };\n }\n\n return undefined;\n }\n}\n\n/**\n * Check if a value is a Component instance.\n */\nexport function isComponent(node: unknown): node is Component {\n return !!node && !!(node as Record<PropertyKey, unknown>)[COMPONENT_TYPE.NORMAL];\n}\n\n/**\n * Wrap a component function in a Component instance, or pass an existing\n * Component instance through unchanged.\n */\nexport function createComponent<P extends ComponentProps>(\n componentFn: ComponentFn<P>,\n props?: P,\n): Component<P> {\n if (isComponent(componentFn)) {\n return componentFn as unknown as Component<P>;\n }\n return new Component(componentFn, props);\n}\n","import { isString, warn } from '@estjs/shared';\nimport { type Component, createComponent, isComponent } from './component';\nimport { createScope, disposeScope, runWithScope } from './scope';\nimport { beginHydration, endHydration } from './hydration';\nimport { insert, insertNode } from './dom';\nimport type { ComponentFn, ComponentProps } from './types';\n\n/**\n * Create a template factory function from HTML string.\n *\n * This function creates a reusable template factory that efficiently clones\n * DOM nodes from the provided HTML string. The template is parsed once.\n *\n * Security note: `template(html)` is a raw HTML entrypoint. The caller is\n * responsible for ensuring `html` is trusted and not derived from unsanitized\n * user input.\n *\n * @param html - The HTML string to create template from.\n * @returns Factory function that returns a cloned node of the template.\n * @throws {Error} When template content is empty or invalid.\n *\n * @example\n * ```typescript\n * const buttonTemplate = template('<button>Click me</button>');\n * const button1 = buttonTemplate(); // Creates first button instance\n * const button2 = buttonTemplate(); // Creates second button instance\n * ```\n */\nexport function template(html: string) {\n let node: Node | undefined;\n\n /**\n * Creates the cached template root node on first use.\n */\n const create = (): Node => {\n // Regular HTML template\n const template = document.createElement('template');\n template.innerHTML = html;\n const firstChild = template.content.firstChild;\n if (!firstChild) {\n throw new Error('Invalid template: empty content');\n }\n return firstChild;\n };\n\n // return a factory function: create the template when first called, reuse the cached template when called later\n return () => (node || (node = create())).cloneNode(true);\n}\n\n/**\n * Create and mount an application with the specified component.\n *\n * This function initializes an application by mounting a root component\n * to a target DOM element. It handles target validation and cleanup.\n *\n * @param component - The root component function to mount.\n * @param target - CSS selector string or DOM element to mount to.\n * @returns Object with root component and unmount function.\n *\n * @example\n * ```typescript\n * const App = () => template('<div>Hello World</div>')\n * const app = createApp(App, '#root');\n *\n * // Or with DOM element\n * const container = document.getElementById('app');\n * const app = createApp(App, container);\n * ```\n */\nexport function createApp<P extends ComponentProps = {}>(\n component: ComponentFn<P>,\n target: string | Element,\n) {\n const container = isString(target) ? document.querySelector(target) : (target as Element);\n if (!container) {\n if (__DEV__) {\n warn(`Target element not found: ${target}`);\n }\n return;\n }\n\n const existingContent = container.innerHTML;\n if (existingContent) {\n if (__DEV__) {\n // `[data-hk]` markers mean SSR markup — the user likely wants hydrate().\n if (container.querySelector('[data-hk]')) {\n warn(\n `Target element contains server-rendered markup ([data-hk]); ` +\n `createApp() will discard it and render from scratch. ` +\n `Did you mean to call hydrate()?`,\n );\n } else {\n warn(`Target element is not empty, it will be cleared: ${target}`);\n }\n }\n container.innerHTML = '';\n }\n\n const scope = createScope();\n let rootNode: Component | undefined;\n try {\n runWithScope(scope, () => {\n const mountedRoot = createComponent(component);\n if (isComponent(mountedRoot)) {\n rootNode = mountedRoot;\n insertNode(container, mountedRoot);\n }\n });\n } catch (error_) {\n disposeScope(scope);\n throw error_;\n }\n\n return {\n root: rootNode,\n unmount: () => {\n // destroy() removes DOM nodes and disposes the component's own scope first;\n // then disposeScope cleans up the root application scope (provide context, etc.)\n rootNode?.destroy();\n disposeScope(scope);\n },\n };\n}\n\nexport function hydrate<P extends ComponentProps = {}>(\n component: ComponentFn<P>,\n target: string | Element,\n) {\n const container = isString(target) ? document.querySelector(target) : (target as Element);\n if (!container) {\n if (__DEV__) {\n warn(`[essor] hydrate: target element not found: ${target}`);\n }\n return;\n }\n\n beginHydration(container);\n\n const scope = createScope();\n let rootNode: Component | undefined;\n try {\n runWithScope(scope, () => {\n const mountedRoot = createComponent(component);\n if (isComponent(mountedRoot)) {\n rootNode = mountedRoot;\n insert(container, mountedRoot);\n }\n });\n } catch (error_) {\n disposeScope(scope);\n throw error_;\n } finally {\n endHydration();\n }\n\n return {\n root: rootNode,\n unmount: () => {\n // Same ordering as createApp: component teardown first, then root scope cleanup.\n rootNode?.destroy();\n disposeScope(scope);\n },\n };\n}\n","import { error } from '@estjs/shared';\nimport { type Scope, getActiveScope } from './scope';\n\n/**\n * InjectionKey is a unique identifier for provided values.\n * Using Symbol ensures type safety and prevents key collisions.\n */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types, unused-imports/no-unused-vars\nexport interface InjectionKey<T> extends Symbol {}\n\n/**\n * Provide a value in the current scope.\n * The value can be injected by this scope or any descendant scope.\n *\n * @param key - The injection key.\n * @param value - The value to provide.\n * @returns {void}\n */\nexport function provide<T>(key: InjectionKey<T> | string | number, value: T): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) {\n error('provide() must be called within a scope');\n }\n return;\n }\n\n // Lazy initialize provides map\n if (!scope.provides) {\n scope.provides = new Map();\n }\n\n scope.provides.set(key, value);\n}\n\n/**\n * Inject a value from the scope hierarchy.\n * Traverses up the parent chain until finding a matching key.\n *\n * @param key - The injection key.\n * @param defaultValue - Default value if key is not found.\n * @returns The injected value or default value.\n */\nexport function inject<T>(key: InjectionKey<T> | string | number, defaultValue?: T): T {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) {\n error('inject() must be called within a scope');\n }\n return defaultValue as T;\n }\n\n // Traverse up the hierarchy\n let current: Scope | null = scope;\n while (current) {\n if (current.provides) {\n if (current.provides.has(key)) {\n return current.provides.get(key) as T;\n }\n }\n current = current.parent;\n }\n\n return defaultValue as T;\n}\n","import { isFunction, isString } from '@estjs/shared';\nimport { addEvent } from './operations/event';\nimport { getActiveScope, onCleanup } from './scope';\n\n/**\n * Retargets an event to a delegated host node.\n *\n * @param e - The event object.\n * @param value - The new target value.\n * @returns {void}\n */\nfunction reTargetEvent(e: Event, value: EventTarget): void {\n Object.defineProperty(e, 'target', {\n configurable: true,\n value,\n });\n}\n\n/**\n * Event handler for delegated events.\n *\n * @param e - The event object.\n */\nfunction eventHandler(e: Event): void {\n let node = e.target as any;\n const key = e.type;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n\n /**\n * Handle event on current node\n * @returns {boolean} Whether to continue propagation\n */\n const handleNode = (): boolean => {\n const handler = node[`_$${key}`];\n if (handler && isFunction(handler) && !node.disabled) {\n const data = node[`${key}Data`];\n data ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return false;\n }\n\n // Handle host element retargeting\n if (\n node.host &&\n !isString(node.host) &&\n !node.host._$host &&\n isFunction(node.contains) &&\n node.contains(e.target)\n ) {\n reTargetEvent(e, node.host);\n }\n return true;\n };\n\n /**\n * Walk up the DOM tree handling events\n */\n const walkUpTree = (): void => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n\n // simulate currentTarget\n Object.defineProperty(e, 'currentTarget', {\n configurable: true,\n /**\n * Returns the current delegated target for the event.\n */\n get() {\n return node || document;\n },\n });\n\n if (e.composedPath) {\n const path = e.composedPath();\n reTargetEvent(e, path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i] as any;\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n // bubble up from portal mount instead of composedPath\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break; // don't bubble above root of event delegation\n }\n }\n }\n // fallback for browsers that don't support composedPath\n else walkUpTree();\n // Mixing portals and shadow dom can lead to a nonstandard target, so reset here.\n reTargetEvent(e, oriTarget!);\n}\n\n/**\n * Symbol for storing delegated events on document\n */\nconst $EVENTS = Symbol('_$EVENTS');\n\n/**\n * Set up event delegation for specified event types.\n *\n * @param eventNames - Array of event names to delegate.\n * @param document - Document to attach events to (defaults to the global document).\n */\nexport function delegateEvents(\n eventNames: string[],\n document: Document = globalThis.document,\n): void {\n const docWithEvents = document as Document & { [$EVENTS]?: Set<string> };\n const eventSet = docWithEvents[$EVENTS] || (docWithEvents[$EVENTS] = new Set<string>());\n\n for (const name of eventNames) {\n if (!eventSet.has(name)) {\n eventSet.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\n\n/**\n * Clear all delegated events from document.\n *\n * @param document - Document to clear events from (defaults to the global document).\n */\nexport function clearDelegatedEvents(document: Document = globalThis.document): void {\n const docWithEvents = document as Document & { [$EVENTS]?: Set<string> };\n const eventSet = docWithEvents[$EVENTS];\n if (eventSet) {\n for (const name of eventSet.keys()) {\n document.removeEventListener(name, eventHandler);\n }\n delete docWithEvents[$EVENTS];\n }\n}\n/**\n * Registers an event listener and scopes its cleanup when needed.\n *\n * @param element - The element to add the listener to.\n * @param event - The event name.\n * @param handler - The event handler.\n * @param options - Optional event listener options.\n * @returns {void}\n */\nexport function addEventListener(\n element: Element,\n event: string,\n handler: EventListener,\n options?: AddEventListenerOptions,\n): void {\n const cleanup = addEvent(element, event, handler, options);\n\n if (getActiveScope()) {\n onCleanup(cleanup);\n }\n}\n","import { isArray, isFunction, isString } from '@estjs/shared';\nimport { effect } from '@estjs/signals';\nimport { addEventListener } from './events';\nimport { getActiveScope, onCleanup } from './scope';\n\n/**\n * Modifiers for `bind:*` two-way bindings.\n *\n * - `trim` — strip surrounding whitespace\n * - `number` — coerce numeric strings to numbers (no-op on NaN / blank)\n * - `lazy` — commit on `change` instead of `input`\n *\n * Unknown keys are ignored at runtime; the compiler rejects them at build time.\n */\nexport interface BindModifiers {\n trim?: boolean;\n number?: boolean;\n lazy?: boolean;\n}\n\n/** Whitelist mirrored by the compiler — kept in sync with `BindModifiers`. */\nexport const BIND_MODIFIER_KEYS = ['trim', 'number', 'lazy'] as const;\n\n// ── Strategy ────────────────────────────────────────────────\n\ninterface Strategy {\n /** DOM event that triggers a DOM→Model read. */\n event: string;\n /** Read the bound value from the DOM element. */\n read(el: Element): unknown;\n /** Write a model value into the DOM element. */\n write(el: Element, v: unknown): void;\n /** Always listen on `change` regardless of `lazy` (checkbox, radio, select, file). */\n forceChange?: true;\n /** Needs IME composition guard (text inputs, textareas). */\n ime?: true;\n /** Supports checkbox-group array semantics — model holds an array of values. */\n checkboxArray?: true;\n}\n\nconst IDENTITY = <T>(v: T): T => v;\nconst EMPTY_FILES = ((): FileList => {\n if (typeof DataTransfer !== 'undefined') return new DataTransfer().files;\n return [] as unknown as FileList;\n})();\n\n/** Compare-then-assign for string-coercible `.value` properties. */\nfunction writeValue(el: Element, v: unknown): void {\n const target = el as HTMLInputElement;\n const next = v == null ? '' : String(v);\n if (target.value !== next) target.value = next;\n}\n\nconst CHECKBOX: Strategy = {\n event: 'change',\n forceChange: true,\n checkboxArray: true,\n read: (el) => (el as HTMLInputElement).checked,\n write(el, v) {\n const e = el as HTMLInputElement;\n // Array-mode (checkbox group): \"checked\" iff this element's value is in the array.\n const next = isArray(v) ? v.map(String).includes(e.value) : Boolean(v);\n if (e.checked !== next) e.checked = next;\n },\n};\n\nconst RADIO: Strategy = {\n event: 'change',\n forceChange: true,\n read(el) {\n const e = el as HTMLInputElement;\n return e.checked ? e.value : '';\n },\n write(el, v) {\n const e = el as HTMLInputElement;\n const next = String(v) === e.value;\n if (e.checked !== next) e.checked = next;\n },\n};\n\nconst FILE: Strategy = {\n event: 'change',\n forceChange: true,\n read: (el) => (el as HTMLInputElement).files,\n write(el, v) {\n // Browsers forbid programmatic writes to <input type=file>, except via a\n // DataTransfer FileList. Allow clearing the selection when v is nullish.\n if (v != null) return;\n try {\n (el as HTMLInputElement).files = EMPTY_FILES;\n } catch {\n /* sandbox / hostile browser */\n }\n },\n};\n\n// Shared by <input type=text|...> and <textarea>: same event, same .value plumbing.\nconst TEXT_LIKE: Strategy = {\n event: 'input',\n ime: true,\n read: (el) => (el as HTMLInputElement | HTMLTextAreaElement).value,\n write: writeValue,\n};\n\nconst SELECT: Strategy = {\n event: 'change',\n forceChange: true,\n read(el) {\n const s = el as HTMLSelectElement;\n return s.multiple ? Array.from(s.selectedOptions, (o) => o.value) : s.value;\n },\n write(el, v) {\n const s = el as HTMLSelectElement;\n if (!s.multiple) return writeValue(el, v);\n const selected = new Set((isArray(v) ? v : []).map(String));\n for (const opt of Array.from(s.options)) opt.selected = selected.has(opt.value);\n },\n};\n\n/** Fallback for custom elements / contenteditable hosts — closes over `prop`. */\nfunction customStrategy(prop: string): Strategy {\n return {\n event: 'input',\n read: (el) => (el as any)[prop],\n write(el, v) {\n (el as any)[prop] = v;\n },\n };\n}\n\nfunction resolve(node: Element, prop: string): Strategy {\n switch (node.nodeName) {\n case 'INPUT':\n if (prop === 'checked') return (node as HTMLInputElement).type === 'radio' ? RADIO : CHECKBOX;\n if (prop === 'files') return FILE;\n if (prop === 'value') return TEXT_LIKE;\n // Unknown INPUT prop → custom strategy (don't pretend it's a text input).\n return customStrategy(prop);\n case 'SELECT':\n return SELECT;\n case 'TEXTAREA':\n return TEXT_LIKE;\n default:\n return customStrategy(prop);\n }\n}\n\n// ── Modifier Transform ──────────────────────────────────────\n\n/**\n * Apply trim / number modifiers to a raw DOM value. No-op for non-strings.\n *\n * Number coercion behaviour:\n * - Blank / whitespace-only inputs return the original string unchanged\n * (otherwise `Number(' ')` would silently produce `0`).\n * - Non-numeric strings (NaN) also return the original string.\n */\nfunction applyModifiers(v: unknown, trim: boolean, toNum: boolean): unknown {\n if (!isString(v)) return v;\n const s = trim ? v.trim() : v;\n if (toNum) {\n const probe = trim ? s : s.trim();\n if (probe !== '') {\n const n = Number(probe);\n if (!Number.isNaN(n)) return n;\n }\n }\n return s;\n}\n\n/** Whether `el` is the active element (Document / ShadowRoot aware). */\nfunction isFocused(el: Element): boolean {\n const root = el.getRootNode();\n return (root instanceof Document || root instanceof ShadowRoot) && root.activeElement === el;\n}\n\n/**\n * `<input type=\"number\">` / `<input type=\"range\">` always read as\n * numbers, even without an explicit `{ number: true }`.\n */\nfunction shouldAutoCoerceNumber(node: Element, prop: string): boolean {\n if (prop !== 'value' || node.nodeName !== 'INPUT') return false;\n const t = (node as HTMLInputElement).type;\n return t === 'number' || t === 'range';\n}\n\n// ── Public API ──────────────────────────────────────────────\n\n/**\n * Creates a two-way binding between a DOM element property and a reactive model.\n *\n * - Model → DOM via a reactive `effect()`.\n * - DOM → Model via an event listener that calls `setter`.\n *\n * @param node Target element. `null` is tolerated (no-op).\n * @param prop Bound property (`value` / `checked` / `files` / custom).\n * @param getter Reactive getter, or a static initial value.\n * @param setter Called with the (optionally transformed) DOM value on user input.\n * @param modifiers Optional `{ trim, number, lazy }`.\n */\nexport function bindElement(\n node: Element | null,\n prop: 'value' | 'checked' | 'files' | string,\n getter: (() => unknown) | unknown,\n setter: (v: unknown) => void,\n modifiers: BindModifiers = {},\n): void {\n if (!node) return;\n\n // 1. Resolve strategy & pre-compute flags\n const { event, read, write, forceChange, ime, checkboxArray } = resolve(node, prop);\n const trim = modifiers.trim === true;\n const toNum = modifiers.number === true || shouldAutoCoerceNumber(node, prop);\n const lazy = modifiers.lazy === true;\n const shouldCast = (trim || toNum) && prop !== 'files';\n\n const getModel: () => unknown = isFunction(getter) ? (getter as () => unknown) : () => getter;\n const cast: (v: unknown) => unknown = shouldCast\n ? (v) => applyModifiers(v, trim, toNum)\n : IDENTITY;\n\n // Checkbox group: when a non-radio checkbox is bound to an array model,\n // toggle `el.value` in the array on each change. Decided lazily per-event\n // because the model shape may change over time.\n const computeNext: (raw: unknown) => unknown = checkboxArray\n ? (raw) => {\n const current = getModel();\n if (!isArray(current)) return cast(raw);\n const own = (node as HTMLInputElement).value;\n const next = current.filter((item) => String(item) !== own);\n if (raw) next.push(own);\n return next;\n }\n : cast;\n\n // 2. DOM → Model\n let composing = false;\n const eventName = lazy || forceChange ? 'change' : event;\n\n const syncToModel = (): void => {\n if (composing) return;\n const raw = read(node);\n if (raw === undefined) return;\n const next = computeNext(raw);\n if (!Object.is(getModel(), next)) setter(next);\n };\n\n addEventListener(node, eventName, syncToModel);\n\n // Normalize the displayed value on blur when modifiers are active.\n if (!lazy && shouldCast && eventName !== 'change') {\n addEventListener(node, 'change', () => write(node, cast(read(node))));\n }\n\n // 3. IME composition guard — track state whenever the strategy is IME-aware,\n // even in `lazy` mode, otherwise an external model write during composition\n // would clobber pending input. `lazy` only controls the commit event.\n if (ime) {\n addEventListener(node, 'compositionstart', () => {\n composing = true;\n });\n addEventListener(node, 'compositionend', () => {\n composing = false;\n // Lazy waits for blur; eager commits the composed text now.\n if (!lazy) syncToModel();\n });\n }\n\n // 4. Model → DOM — skip the write when (a) inside an IME composition or\n // (b) the focused input already shows the canonical value (avoids caret jump).\n const runner = effect(() => {\n const value = getModel();\n if (ime && composing) return;\n if (ime && !lazy && isFocused(node) && Object.is(cast(read(node)), value)) return;\n write(node, value);\n });\n\n // 5. Lifecycle cleanup\n if (getActiveScope()) {\n onCleanup(() => runner.stop());\n }\n}\n","/**\n * Read a slot value, unwrapping the common compilation shapes.\n *\n * The babel plugin compiles `<Wrap>{() => expr}</Wrap>` to a single-element\n * array `[() => expr]`. We unwrap that, then invoke the function if present\n * so that callers always observe the final value (Element / null / etc.).\n */\nfunction unwrapSlotValue(raw: unknown): unknown {\n let v: unknown = raw;\n if (Array.isArray(v) && v.length === 1) v = v[0];\n return typeof v === 'function' ? (v as () => unknown)() : v;\n}\n\n/**\n * Build a stable accessor for a single-child slot.\n *\n * Returns a function that, when invoked inside a reactive `effect()`, reads\n * `props.children` (preserving getter semantics from the babel plugin) and\n * unwraps the compiled array/function shape.\n *\n * @example\n * const read = useChildren(props);\n * effect(() => {\n * const child = read(); // tracks deps on every run\n * // ...\n * });\n */\nexport function useChildren<T = unknown>(props: { children?: unknown }): () => T {\n const desc = Object.getOwnPropertyDescriptor(props, 'children');\n if (desc?.get) {\n return () => unwrapSlotValue(desc.get!.call(props)) as T;\n }\n return () => unwrapSlotValue(props.children) as T;\n}\n\n/**\n * Shallow compare two objects\n * @param {any} a - The first object to compare\n * @param {any} b - The second object to compare\n * @returns {boolean} - Returns true if the objects are equal, false otherwise\n */\nexport function shallowCompare(a: any, b: any): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n for (const key in a) {\n if (a[key] !== b[key]) return false;\n }\n\n for (const key in b) {\n if (!(key in a)) return false;\n }\n\n return true;\n}\n\n/**\n * Omits props from a target object using a proxy.\n *\n * @param target - The target object.\n * @param keys - The keys to omit.\n * @returns A proxy that omits specified keys.\n */\nexport function omitProps<T extends object, K extends keyof T>(target: T, keys: K[]): Omit<T, K> {\n const excludeSet = new Set(keys);\n\n return new Proxy(target, {\n /**\n * Returns a property unless it is excluded by the proxy.\n */\n get(obj, prop) {\n if (excludeSet.has(prop as K)) {\n return undefined;\n }\n return Reflect.get(obj, prop);\n },\n /**\n * Returns the enumerable keys that are not excluded from the proxy.\n */\n ownKeys(obj) {\n return Reflect.ownKeys(obj).filter((key) => !excludeSet.has(key as K));\n },\n /**\n * Returns the property descriptor unless the key is excluded.\n */\n getOwnPropertyDescriptor(obj, prop) {\n if (excludeSet.has(prop as K)) {\n return undefined;\n }\n return Reflect.getOwnPropertyDescriptor(obj, prop);\n },\n /**\n * Returns whether the requested value exists.\n */\n has(obj, prop) {\n if (excludeSet.has(prop as K)) {\n return false;\n }\n return Reflect.has(obj, prop);\n },\n });\n}\n","import { isReactive } from '@estjs/signals';\nimport { FRAGMENT_COMPONENT } from '../constants';\nimport type { AnyNode, ComponentProps } from '../types';\n\nexport interface FragmentProps extends ComponentProps {\n children?: AnyNode | AnyNode[];\n}\n\n/**\n * Fragment component - renders multiple children without wrapper elements (Client-side only).\n *\n * **Client-side behavior:**\n * - Returns children directly for rendering.\n * - Hydration system matches children using hydration keys.\n * - The template system handles array children automatically.\n *\n * @param props - Component props with children.\n * @returns {AnyNode} Children directly without wrapper.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Fragment>\n * <div>First</div>\n * <span>Second</span>\n * </Fragment>\n *\n * // Nested fragments\n * <Fragment>\n * <Fragment>\n * <div>Nested 1</div>\n * <div>Nested 2</div>\n * </Fragment>\n * <div>Third</div>\n * </Fragment>\n *\n * // Empty fragment (renders nothing)\n * <Fragment />\n * ```\n */\nexport function Fragment(props?: FragmentProps): AnyNode {\n // Getter-based children and reactive Proxy props both need a thunk so the\n // effect system re-evaluates when dependencies change.\n if (props && (Object.getOwnPropertyDescriptor(props, 'children')?.get || isReactive(props))) {\n return [() => props.children];\n }\n\n const children = props?.children;\n\n if (children == null) return null;\n\n return children as AnyNode;\n}\n\nFragment[FRAGMENT_COMPONENT] = true;\n\n/**\n * Check if a node is a Fragment component.\n *\n * @param node - Node to check.\n * @returns {boolean} True if node is a Fragment.\n */\nexport function isFragment(node: unknown): boolean {\n return !!node && !!node[FRAGMENT_COMPONENT];\n}\n","import { isFunction, isString, warn } from '@estjs/shared';\nimport { effect } from '@estjs/signals';\nimport { PORTAL_COMPONENT } from '../constants';\nimport { consumeTeleportAnchor, consumeTeleportBlock, isHydrating } from '../hydration';\nimport { onMount } from '../lifecycle';\nimport {\n type Scope,\n createScope,\n disposeScope,\n getActiveScope,\n onCleanup,\n runWithScope,\n} from '../scope';\nimport { insert } from '../dom';\nimport type { AnyNode } from '../types';\n\nexport interface PortalProps {\n /** Children to render at the target location. */\n children?: AnyNode | AnyNode[];\n /**\n * Mount target — CSS selector string, `Element`, or reactive getter.\n * When the getter result changes, the Portal re-mounts at the new target.\n */\n target?: string | Element | (() => string | Element | null | undefined);\n /**\n * When truthy, children render inline at the call site instead of being teleported.\n * May be a static value or a reactive getter.\n */\n disabled?: boolean | (() => boolean);\n}\n\n/** Resolve `props.target` to an Element, handling string / Element / getter. */\nfunction resolveTarget(props: PortalProps): Element | null {\n const raw = isFunction(props.target) ? (props.target as () => unknown)() : props.target;\n if (raw == null) return null;\n if (isString(raw)) return document.querySelector(raw as string);\n return raw as Element;\n}\n\n/** Evaluate `props.disabled`, supporting both static booleans and getters. */\nfunction evalDisabled(props: PortalProps): boolean {\n return isFunction(props.disabled) ? !!(props.disabled as () => boolean)() : !!props.disabled;\n}\n\n/**\n * Portal — teleports children into a different DOM node.\n *\n * - `disabled=true` renders children inline at the call site.\n * - Otherwise children are teleported into `target`.\n * - Both `target` and `disabled` may be reactive; changes trigger re-mount.\n *\n * @returns A placeholder comment node that marks the call site.\n *\n * @example\n * ```tsx\n * <Portal target=\"#modal-root\" disabled={isMobile}>\n * <div>Modal content</div>\n * </Portal>\n * ```\n */\nexport function Portal(props: PortalProps): Comment {\n // Hydration: adopt SSR-emitted anchors + target block.\n if (isHydrating()) {\n const adopted = tryHydratePortal(props);\n if (adopted) return adopted;\n }\n\n const placeholder = document.createComment('portal');\n placeholder[PORTAL_COMPONENT] = true;\n\n const { children } = props;\n if (children == null) return placeholder;\n\n const parentScope = getActiveScope();\n let innerScope: Scope | null = null;\n\n /**\n * Mount children into the given parent, inside a fresh inner scope\n * that inherits from the parent scope. This allows `insert()` effects\n * to be properly disposed on teardown.\n */\n const mountAt = (parent: Node, before?: Node): void => {\n innerScope = createScope(parentScope);\n runWithScope(innerScope, () => {\n insert(parent, () => children, before);\n });\n };\n\n /**\n * Tear down the inner scope, removing all mounted children and their\n * reactive effects.\n */\n const teardown = (): void => {\n if (innerScope) {\n disposeScope(innerScope);\n innerScope = null;\n }\n };\n\n /**\n * Evaluate disabled/target and (re-)mount, tearing down the previous\n * mount first. Accepts pre-evaluated values to avoid redundant getter\n * invocations when called from within the tracking effect.\n */\n const apply = (disabled: boolean, target: Element | null): void => {\n teardown();\n\n if (disabled) {\n const parent = placeholder.parentNode;\n if (!parent) return;\n mountAt(parent, placeholder);\n return;\n }\n\n if (!target) {\n if (__DEV__) {\n warn(`[Portal] Target element not found: ${String(props.target)}`);\n }\n return;\n }\n mountAt(target);\n };\n\n // Track reactive deps immediately but defer DOM work until placeholder\n // is attached. On subsequent runs (reactive change) the effect runs\n // apply() directly with the freshly evaluated values — no redundant\n // double-evaluation.\n let mounted = false;\n\n const effectRunner = effect(() => {\n const disabled = evalDisabled(props);\n const target = disabled ? null : resolveTarget(props);\n\n if (mounted) {\n apply(disabled, target);\n }\n });\n\n onMount(() => {\n mounted = true;\n\n const disabled = evalDisabled(props);\n const target = disabled ? null : resolveTarget(props);\n\n // Try mounting synchronously — works when target is already in the document.\n if (disabled || target) {\n apply(disabled, target);\n return;\n }\n\n // Target may not be in the document yet (sibling elements mount bottom-up).\n // Defer to microtask — flushes before paint.\n queueMicrotask(() => {\n if (!placeholder.parentNode) return;\n apply(evalDisabled(props), resolveTarget(props));\n });\n });\n\n onCleanup(() => {\n effectRunner.stop();\n teardown();\n });\n\n return placeholder;\n}\n\nPortal[PORTAL_COMPONENT] = true;\n\n/**\n * Hydration adoption for Portal.\n *\n * Returns the SSR call-site anchor as placeholder on match, `null` on mismatch\n * (falls back to CSR mount path).\n */\nfunction tryHydratePortal(props: PortalProps): Comment | null {\n if (evalDisabled(props)) return null;\n\n const anchor = consumeTeleportAnchor();\n if (!anchor) {\n if (__DEV__) {\n warn('[Portal] hydration mismatch: no <!--teleport-anchor--> at call site.');\n }\n return null;\n }\n\n const target = resolveTarget(props);\n if (!target) {\n if (__DEV__) {\n warn(`[Portal] hydration mismatch: target not found: ${String(props.target)}`);\n }\n return null;\n }\n\n const block = consumeTeleportBlock(target);\n if (!block) {\n if (__DEV__) {\n warn(\n `[Portal] hydration mismatch: no <!--teleport-start--> in target ${String(props.target)}`,\n );\n }\n return null;\n }\n\n anchor[PORTAL_COMPONENT] = true;\n return anchor;\n}\n\n/**\n * Check if a node is a Portal component.\n *\n * @param node - Node to check.\n * @returns True if node is a Portal.\n */\nexport function isPortal(node: unknown): boolean {\n return !!node && !!node[PORTAL_COMPONENT];\n}\n","import { isBrowser, isFunction, isPromise, warn } from '@estjs/shared';\nimport { isComputed, isSignal } from '@estjs/signals';\nimport { provide } from '../provide';\nimport { createScope, disposeScope, getActiveScope, onCleanup, runWithScope } from '../scope';\nimport { insert } from '../dom';\nimport { SUSPENSE_COMPONENT } from '../constants';\nimport type { AnyNode } from '../types';\n\n/**\n * Deeply resolve a node-ish value for insertion: unwrap thunks and\n * signals/computed at every level, and recurse into arrays so nested\n * `() => signal` / signal entries become concrete nodes/values. `insert()`\n * then normalizes the result into DOM nodes.\n */\nexport function resolveNodeValue(value: unknown): unknown {\n let current = value;\n\n while (isFunction(current)) {\n current = (current as Function)();\n }\n\n if (isSignal(current) || isComputed(current)) {\n return resolveNodeValue((current as any).value);\n }\n\n if (Array.isArray(current)) {\n return current.map((item) => resolveNodeValue(item));\n }\n\n return current;\n}\n\nexport interface SuspenseProps {\n /** The content to render. Can be a Promise for async loading. */\n children?: Node | Node[] | Promise<Node | Node[]>;\n /** Fallback content to display while children is loading (Promise pending). */\n fallback?: Node;\n /** Optional key for reconciliation. */\n key?: string;\n}\n\nexport const SuspenseContext = Symbol('SuspenseContext');\n\nexport interface SuspenseContextType {\n register: (promise: Promise<any>) => void;\n increment: () => void;\n decrement: () => void;\n}\n\n/**\n * Suspense — handles async content with a fallback UI.\n *\n * Rendering model: content is built offscreen into the Suspense fragment\n * first. If async resources register during\n * that mount, the content nodes are parked in an offscreen fragment while\n * fallback is shown. When all resources settle, content is moved back in one\n * step. No \"insert → remove → re-insert\" dance — content is moved at most once.\n *\n * Wrapper-free: the boundary is a `<!--suspense-->…<!--/suspense-->` comment\n * pair, not a `display:contents` div.\n *\n * @example\n * ```tsx\n * <Suspense fallback={<div>Loading...</div>}>{asyncContent}</Suspense>\n * ```\n */\nexport function Suspense(props: SuspenseProps): Node {\n // SSR: render the fallback, deterministic, never touch DOM.\n if (!isBrowser()) {\n return props.fallback ?? ('' as unknown as Node);\n }\n\n const owner = getActiveScope();\n const start = document.createComment('suspense');\n const end = document.createComment('/suspense');\n const frag = document.createDocumentFragment();\n frag.append(start, end);\n\n let mounted = true;\n let pending = 0;\n let mounting = false;\n\n // Content: a child scope + its nodes live between `start` and `end` in the\n // fragment. When fallback is shown, the nodes move to `parked`.\n let contentScope: ReturnType<typeof createScope> | null = null;\n let parked: DocumentFragment | null = null;\n\n // Fallback: transient, destroyed when content is restored.\n let fallbackScope: ReturnType<typeof createScope> | null = null;\n\n let resolved: AnyNode | AnyNode[] | null = null;\n\n // ── DOM helpers ──────────────────────────────────────────────────────────\n\n /** Move every node between `start` and `end` into an offscreen fragment. */\n const parkContent = (): void => {\n const off = document.createDocumentFragment();\n while (end.previousSibling && end.previousSibling !== start) {\n off.prepend(end.previousSibling);\n }\n parked = off;\n };\n\n /** Move parked nodes back before `end`, then clear the parked fragment. */\n const restoreContent = (): void => {\n if (!parked) return;\n // `end` may now live in the host (framework moved frag children). Always\n // target its current parent, falling back to the original fragment.\n const parent = end.parentNode ?? frag;\n while (parked.firstChild) {\n parent.insertBefore(parked.firstChild, end);\n }\n parked = null;\n };\n\n const mountFallback = (): void => {\n if (props.fallback == null || fallbackScope) return;\n fallbackScope = createScope(owner);\n runWithScope(fallbackScope, () => {\n // Lazy-parent: same pattern as For/Portal. Before flush `end.parentNode`\n // is the fragment; after flush it's the real host.\n insert(end.parentNode ?? frag, () => resolveNodeValue(props.fallback) as AnyNode, end);\n });\n };\n\n const disposeFallback = (): void => {\n if (!fallbackScope) return;\n disposeScope(fallbackScope);\n fallbackScope = null;\n };\n\n const mountContent = (children: AnyNode | AnyNode[]): void => {\n mounting = true;\n contentScope = createScope(owner);\n runWithScope(contentScope, () => {\n insert(end.parentNode ?? frag, () => resolveNodeValue(children) as AnyNode, end);\n });\n mounting = false;\n // A resource registered synchronously during mount — park content.\n if (pending && !parked) {\n parkContent();\n mountFallback();\n }\n };\n\n // ── State transitions ────────────────────────────────────────────────────\n\n const showFallback = (): void => {\n if (parked) return; // already showing fallback\n if (mounting) return; // mountContent will reconcile\n parkContent();\n mountFallback();\n };\n\n const showContent = (): void => {\n if (!parked) return;\n\n const hasSyncChildren = props.children != null && !isPromise(props.children);\n if (contentScope == null && resolved == null && !hasSyncChildren) return;\n\n disposeFallback();\n restoreContent();\n\n // First time: mount the resolved value (Promise path)\n // On the Promise path contentScope was never created — we must mount now.\n // On the sync-resource path (register during mount), contentScope exists but\n // its nodes were parked; restoring covers it (the `contentScope != null`\n // check above would be true, so we don't enter here).\n if (!contentScope) {\n if (resolved) {\n mountContent(resolved);\n } else if (hasSyncChildren) {\n mountContent(props.children as AnyNode);\n }\n }\n };\n\n // ── Context (created before children handling so register() is available) ─\n\n const settle = () => {\n if (!mounted) return;\n if (--pending === 0) showContent();\n };\n\n const ctx: SuspenseContextType = {\n register: (promise: Promise<any>) => {\n pending++;\n showFallback();\n promise.then(settle).catch((error) => {\n if (__DEV__) warn('[Suspense] Resource failed:', error);\n settle();\n });\n },\n increment: () => {\n pending++;\n showFallback();\n },\n decrement: () => {\n pending = Math.max(0, pending - 1);\n if (pending === 0) showContent();\n },\n };\n\n provide(SuspenseContext, ctx);\n\n // ── Initial render ───────────────────────────────────────────────────────\n\n const children = props.children;\n\n if (isPromise(children)) {\n children\n .then((value) => {\n resolved = value as AnyNode | AnyNode[];\n })\n .catch(() => {\n /* handled by register() */\n });\n ctx.register(children);\n } else if (children != null) {\n mountContent(children as AnyNode);\n } else if (props.fallback != null) {\n showFallback();\n }\n\n // ── Cleanup ──────────────────────────────────────────────────────────────\n\n onCleanup(() => {\n mounted = false;\n pending = 0;\n resolved = null;\n if (contentScope) disposeScope(contentScope);\n if (fallbackScope) disposeScope(fallbackScope);\n contentScope = fallbackScope = null;\n parked = null;\n start.remove();\n end.remove();\n });\n\n return frag;\n}\n\nSuspense[SUSPENSE_COMPONENT] = true;\n\n/**\n * Check if a node is a Suspense component.\n *\n * @param node - Node to check.\n * @returns {boolean} True if node is a Suspense.\n */\nexport function isSuspense(node: unknown): boolean {\n return !!node && !!node[SUSPENSE_COMPONENT];\n}\n","import { type Signal, signal } from '@estjs/signals';\nimport { inject } from '../provide';\nimport { SuspenseContext } from './Suspense';\n\nexport type ResourceState = 'pending' | 'ready' | 'errored';\n\nexport interface Resource<T> {\n (): T | undefined;\n loading: Signal<boolean>;\n error: Signal<Error | null>;\n state: Signal<ResourceState>;\n}\n\nexport interface ResourceActions<T> {\n mutate: (value: T) => void;\n refetch: () => Promise<void>;\n}\n\nexport interface ResourceOptions<T> {\n initialValue?: T;\n}\n\n/**\n * Create a resource for async data fetching.\n * Inspired by SolidJS createResource.\n *\n * @param fetcher - Function that returns a Promise with the data.\n * @param options - Optional configuration.\n * @returns {[Resource<T>, ResourceActions<T>]} Tuple of [resource, actions].\n */\nexport function createResource<T>(\n fetcher: () => Promise<T>,\n options?: ResourceOptions<T>,\n): [Resource<T>, ResourceActions<T>] {\n // Internal state\n const value = signal<T | undefined>(options?.initialValue);\n const loading = signal<boolean>(true);\n const error = signal<Error | null>(null);\n const state = signal<ResourceState>('pending');\n\n let fetchId = 0;\n\n let currentPromise: Promise<void> | null = null;\n let suspenseRegistered = false;\n const suspenseContext = inject<any>(SuspenseContext, null);\n\n /**\n * Fetch function.\n */\n const fetch = async (): Promise<void> => {\n const currentFetchId = ++fetchId;\n loading.value = true;\n state.value = 'pending';\n error.value = null;\n suspenseRegistered = false;\n if (suspenseContext) {\n // Track pending fetches even when callers branch on loading/state before reading the resource.\n suspenseContext.increment();\n }\n\n try {\n const promise = fetcher();\n currentPromise = promise as any; // Track original promise for Suspense\n promise.catch(() => {}); // Prevent unhandled rejection\n const result = await promise;\n\n // Only update if this is still the latest fetch\n if (currentFetchId === fetchId) {\n value.value = result;\n state.value = 'ready';\n loading.value = false;\n }\n } catch (error_) {\n // Only update if this is still the latest fetch\n if (currentFetchId === fetchId) {\n error.value = error_ instanceof Error ? error_ : new Error(String(error_));\n state.value = 'errored';\n loading.value = false;\n }\n } finally {\n if (suspenseContext) {\n suspenseContext.decrement();\n }\n }\n };\n\n // Start initial fetch\n fetch();\n\n // Resource accessor function\n const resource = (() => {\n // Register with Suspense only once per fetch cycle\n if (!suspenseRegistered && loading.value && currentPromise && suspenseContext) {\n suspenseRegistered = true;\n // @ts-ignore\n suspenseContext.register(currentPromise);\n }\n return value.value;\n }) as Resource<T>;\n resource.loading = loading;\n resource.error = error;\n resource.state = state;\n\n // Actions\n const actions: ResourceActions<T> = {\n mutate: (newValue: T) => {\n value.value = newValue;\n state.value = 'ready';\n loading.value = false;\n error.value = null;\n },\n refetch: async () => {\n await fetch();\n },\n };\n\n return [resource, actions];\n}\n","import { isFunction } from '@estjs/shared';\nimport { inject } from '../provide';\nimport { onDestroy } from '../lifecycle';\nimport { createScope, disposeScope, getActiveScope, runWithScope } from '../scope';\nimport { insert } from '../dom';\nimport { Component } from '../component';\nimport { SuspenseContext, type SuspenseContextType } from './Suspense';\nimport type { AnyNode, ComponentFn, ComponentProps } from '../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AsyncComponentOptions {\n /**\n * Component to render while the async component is loading.\n * Only shown after `delay` ms has elapsed (prevents flash of loading state).\n */\n loading?: ComponentFn;\n\n /**\n * Component to render when the async component fails to load.\n * Receives `{ error, retry }` as props.\n */\n error?: ComponentFn<{ error: Error; retry: () => void }>;\n\n /** Delay in ms before showing the `loading` component (default: 200). */\n delay?: number;\n\n /** Timeout in ms. If loading exceeds this, the error component is shown. */\n timeout?: number;\n\n /**\n * SSR rendering strategy (default: `'blocking'`).\n *\n * - `'blocking'` — Pre-calls the loader at definition time. If the module\n * resolves before the component body runs, the real component is inlined.\n * - `'client-only'` — Renders `null` on the server; loads only in browser.\n */\n ssr?: 'blocking' | 'client-only';\n\n /** Called when loading fails. Useful for logging or error tracking. */\n onError?: (error: Error, retry: () => void) => void;\n}\n\ntype LoaderResult<P> = { default: ComponentFn<P> } | ComponentFn<P>;\ntype Loader<P> = () => Promise<LoaderResult<P>>;\n\n/** Resolve the default export (or the function itself) from a loaded module. */\nfunction resolveModule<P>(mod: LoaderResult<P>): ComponentFn<P> {\n return isFunction(mod) ? (mod as ComponentFn<P>) : (mod as { default: ComponentFn<P> }).default;\n}\n\n// ============================================================================\n// Server-side rendering\n// ============================================================================\n\nfunction defineServerAsyncComponent<P extends ComponentProps>(\n loader: Loader<P>,\n ssr: 'blocking' | 'client-only',\n): ComponentFn<P> {\n if (ssr === 'client-only') {\n const placeholder: ComponentFn<P> = () => '' as unknown as AnyNode;\n (placeholder as any).__asyncLoader = loader;\n (placeholder as any).__asyncResolved = () => null;\n return placeholder;\n }\n\n // 'blocking': pre-call the loader so an already-cached module renders inline.\n let resolved: ComponentFn<P> | null = null;\n let promise: Promise<void> | null = null;\n\n const load = (): Promise<void> =>\n (promise ??= loader()\n .then((mod) => {\n resolved = resolveModule(mod);\n })\n .catch(() => {}));\n\n load();\n\n const wrapper: ComponentFn<P> = (props: P) =>\n resolved ? resolved(props) : ('' as unknown as AnyNode);\n (wrapper as any).__asyncLoader = load;\n (wrapper as any).__asyncResolved = () => resolved;\n return wrapper;\n}\n\n// ============================================================================\n// Client-side\n// ============================================================================\n\nfunction defineClientAsyncComponent<P extends ComponentProps>(\n loader: Loader<P>,\n options: AsyncComponentOptions,\n): ComponentFn<P> {\n const { loading, error: errorComp, delay = 200, timeout, onError } = options;\n\n // Module-level cache: all instances share one loader invocation.\n let component: ComponentFn<P> | null = null;\n let error: Error | null = null;\n let status: 'pending' | 'resolved' | 'errored' = 'pending';\n let loadPromise: Promise<void> | null = null;\n\n const load = (): Promise<void> =>\n (loadPromise ??= loader()\n .then((mod) => {\n component = resolveModule(mod);\n status = 'resolved';\n })\n .catch((error_) => {\n error = error_ instanceof Error ? error_ : new Error(String(error_));\n status = 'errored';\n loadPromise = null; // allow retry\n }));\n\n load();\n\n function AsyncWrapper(props: P): AnyNode {\n // Wrapper-free: returns a fragment whose sole child is the end anchor of a\n // `<!--async-->` anchored range. Each state transition (loading / resolved\n // / error) creates a fresh child scope and mounts a Component before that\n // anchor using `insert()`. The returning `<For>`-style fragment also works\n // here — the framework moves the fragment's children into the host.\n const owner = getActiveScope();\n const end = document.createComment('async');\n const frag = document.createDocumentFragment();\n frag.appendChild(end);\n\n let alive = true;\n let viewScope: ReturnType<typeof createScope> | null = null;\n let delayTimer: ReturnType<typeof setTimeout> | null = null;\n let timeoutTimer: ReturnType<typeof setTimeout> | null = null;\n\n const clearTimers = () => {\n if (delayTimer != null) clearTimeout(delayTimer);\n if (timeoutTimer != null) clearTimeout(timeoutTimer);\n delayTimer = timeoutTimer = null;\n };\n\n /** Dispose old view, mount `fn` as the new one before `end`. */\n const render = (fn: ComponentFn<any> | null, fnProps?: any): void => {\n if (!alive) return;\n // Guard: if the owner scope was destroyed while we were awaiting (e.g.\n // the component unmounted before the Promise resolved), bail out to\n // prevent creating an orphan child scope attached to a dead parent.\n if (owner && owner.isDestroyed) return;\n if (viewScope) {\n disposeScope(viewScope);\n viewScope = null;\n }\n if (!fn) return;\n viewScope = createScope(owner);\n runWithScope(viewScope, () => {\n // Lazy-parent: before flush end is in frag, after flush it's in the host.\n insert(end.parentNode ?? frag, () => new Component(fn, fnProps), end);\n });\n };\n\n onDestroy(() => {\n alive = false;\n clearTimers();\n if (viewScope) {\n disposeScope(viewScope);\n viewScope = null;\n }\n end.remove();\n });\n\n /** Build a retry handler bound to the given props. */\n const retryWith =\n (retryProps: P): (() => void) =>\n () => {\n loadPromise = null;\n status = 'pending';\n error = null;\n if (loading) render(loading);\n load().then(() => settle(retryProps));\n };\n\n /** Reflect the current cache status into the rendered view. */\n const settle = (renderProps: P): void => {\n if (!alive) return;\n clearTimers();\n if (status === 'resolved' && component) {\n render(component, renderProps);\n } else if (status === 'errored' && error) {\n if (errorComp) render(errorComp, { error, retry: retryWith(renderProps) });\n if (onError) onError(error, retryWith(renderProps));\n }\n };\n\n // ── Fast paths: cache already settled ─────────────────────────────────\n\n if (status === 'resolved' && component) {\n render(component, props);\n return frag as unknown as AnyNode;\n }\n if (status === 'errored' && error) {\n if (errorComp) render(errorComp, { error, retry: retryWith(props) });\n return frag as unknown as AnyNode;\n }\n\n // ── Pending ──────────────────────────────────────────────────────────\n\n const pending = load().then(() => settle(props));\n\n // Notify an enclosing Suspense boundary about this pending work.\n inject<SuspenseContextType>(SuspenseContext)?.register(pending);\n\n if (delay > 0) {\n delayTimer = setTimeout(() => {\n if (alive && status === 'pending' && loading) render(loading);\n }, delay);\n } else if (loading) {\n render(loading);\n }\n\n if (timeout != null) {\n timeoutTimer = setTimeout(() => {\n if (!alive || status !== 'pending') return;\n error = new Error(`[defineAsyncComponent] Timeout after ${timeout}ms`);\n status = 'errored';\n if (errorComp) render(errorComp, { error, retry: retryWith(props) });\n if (onError) onError(error, retryWith(props));\n }, timeout);\n }\n\n return frag as unknown as AnyNode;\n }\n\n (AsyncWrapper as any).__asyncLoader = load;\n (AsyncWrapper as any).__asyncResolved = () => component;\n return AsyncWrapper;\n}\n\n// ============================================================================\n// defineAsyncComponent\n// ============================================================================\n\n/**\n * Define an async (lazy-loaded) component. Works on client, SSR, and SSG, and\n * integrates with `<Suspense>` via `SuspenseContext` when nested in a boundary.\n *\n * @param loader - The async loader function.\n * @param options - Configuration options.\n *\n * @example\n * ```tsx\n * const Chart = defineAsyncComponent(() => import('./Chart'), {\n * loading: () => <Spinner />,\n * error: ({ error, retry }) => <button onClick={retry}>{error.message}</button>,\n * delay: 200,\n * timeout: 10_000,\n * });\n * ```\n */\nexport function defineAsyncComponent<P extends ComponentProps = ComponentProps>(\n loader: Loader<P>,\n options: AsyncComponentOptions = {},\n): ComponentFn<P> {\n return typeof window === 'undefined'\n ? defineServerAsyncComponent(loader, options.ssr ?? 'blocking')\n : defineClientAsyncComponent(loader, options);\n}\n\n/**\n * Returns true if a function was created by `defineAsyncComponent`.\n *\n * @param fn - The function to check.\n * @returns {boolean} True if it is an async component.\n */\nexport function isAsyncComponent(fn: unknown): boolean {\n return isFunction(fn) && !!(fn as any).__asyncLoader;\n}\n","import { type Signal, effect, isSignal } from '@estjs/signals';\nimport { isFunction } from '@estjs/shared';\nimport {\n type Scope,\n createScope,\n disposeScope,\n getActiveScope,\n onCleanup,\n runWithScope,\n} from '../scope';\nimport { FOR_COMPONENT } from '../constants';\nimport { isComponent } from '../component';\nimport { insertNode, normalizeNode, removeNode } from '../dom';\nimport { getSequence } from '../reconcile';\nimport type { AnyNode } from '../types';\nimport type { Component } from '../component';\n\nexport interface ForProps<T> {\n each: T[] | Signal<T[]> | (() => T[]);\n children: (item: T, index: number) => AnyNode;\n key?: (item: T, index: number) => unknown;\n fallback?: () => AnyNode;\n}\n\ninterface ItemEntry {\n key: unknown;\n item: unknown;\n nodes: Node[];\n scope: Scope; // Track scope for cleanup\n}\n\n/**\n * Optimized For Component\n * - Uses createDetachedScope to avoid parent.children Set overhead (SolidJS style)\n * - Uses DocumentFragment batching for mass creation\n * - Inlines scope switching for performance\n */\nexport function For<T>(props: ForProps<T>): Node {\n const fragment = document.createDocumentFragment();\n const marker = document.createComment('');\n fragment.appendChild(marker);\n\n let entries: ItemEntry[] = [];\n let fallbackNodes: Node[] = [];\n\n const keyFn = props.key;\n // The JSX babel pipeline wraps a single arrow child in a 1-element array —\n // `<For>{(item) => …}</For>` becomes `children: [(item) => …]` at runtime.\n // Unwrap it here so the rest of the component only deals with a function.\n const raw = props.children as unknown;\n const renderFn: ForProps<T>['children'] =\n Array.isArray(raw) && raw.length === 1 && isFunction(raw[0])\n ? (raw[0] as ForProps<T>['children'])\n : (props.children as ForProps<T>['children']);\n if (!isFunction(renderFn)) {\n throw new TypeError('<For> requires `children` to be a function (item, index) => Node');\n }\n\n const getList = (): T[] => {\n const input = props.each;\n if (isSignal(input)) return (input as Signal<T[]>).value ?? [];\n if (isFunction(input)) return (input as () => T[])() ?? [];\n return (input as T[]) ?? [];\n };\n\n const getKey = (item: T, index: number): unknown => (keyFn ? keyFn(item, index) : item);\n\n // Resolve whatever `children(item, index)` returned into actual DOM nodes\n // and insert them at `before`. Accepts arrays (recursed), Components\n // (mounted via insertNode), primitives (text via normalizeNode), and\n // `null`/`false` (skipped — lets children short-circuit a row).\n const mountValue = (value: AnyNode, parent: Node, before: Node | null): Node[] => {\n if (value == null || value === false) return [];\n\n if (Array.isArray(value)) {\n const nodes: Node[] = [];\n for (const child of value) nodes.push(...mountValue(child as AnyNode, parent, before));\n return nodes;\n }\n\n if (isComponent(value)) {\n insertNode(parent, value, before ?? undefined);\n // Safe to return the live array: Component only ever reassigns\n // `renderedNodes` (mount/destroy), never mutates it in place, and For\n // treats `entry.nodes` as read-only.\n return (value as Component).renderedNodes;\n }\n\n const node = normalizeNode(value);\n insertNode(parent, node, before ?? undefined);\n return [node];\n };\n\n const mountFallback = (parent: Node, before: Node | null) => {\n if (!props.fallback) return;\n const nodes = mountValue(props.fallback(), parent, before);\n fallbackNodes = nodes;\n };\n\n const clearFallback = () => {\n for (const node of fallbackNodes) {\n // Use removeNode() instead of raw removeChild so Component instances\n // in the fallback have their destroy() called, preventing scope/effect leaks.\n removeNode(node as AnyNode);\n }\n fallbackNodes = [];\n };\n\n // Capture the scope that is active when <For> is first evaluated. The list\n // effect below re-runs through the scheduler, where the template-level\n // `activeScope` is no longer set (it's a module-global restored only inside\n // runWithScope). Without re-establishing it, `renderItem` → getActiveScope()\n // returns null on updates, so rows added later become detached scopes and\n // `inject()` inside them fails. Mirrors the parentScope capture in insert().\n const ownerScope = getActiveScope();\n\n /**\n * Render item with a child scope under the captured owner scope.\n */\n const renderItem = (\n item: T,\n index: number,\n parent: Node,\n before: Node | null,\n key = getKey(item, index),\n ): ItemEntry => {\n // Prefer the live active scope (correct on initial synchronous mount), but\n // fall back to the captured owner scope on reactive re-runs when the\n // template scope context has not been re-established.\n const parentScope = getActiveScope() ?? ownerScope;\n const scope = createScope(parentScope);\n let mountedNodes: Node[] = [];\n runWithScope(scope, () => {\n mountedNodes = mountValue(renderFn(item, index), parent, before);\n });\n\n return { key, item, nodes: mountedNodes, scope };\n };\n\n const disposeItem = (entry: ItemEntry) => {\n disposeScope(entry.scope);\n for (const node of entry.nodes) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n };\n\n const effectRunner = effect(() => {\n const newItems = getList();\n\n const parent = marker.parentNode;\n\n // Initial mount (parent is null because fragment is not attached yet)\n if (!parent) {\n if (newItems.length === 0) {\n mountFallback(fragment, marker);\n } else {\n entries = new Array(newItems.length);\n let idx = 0;\n for (const newItem of newItems) {\n entries[idx] = renderItem(newItem, idx, fragment, marker);\n idx++;\n }\n }\n // Skip reconcile on initial mount — entries are already created\n return;\n }\n\n // Before the fragment is attached, `marker.parentNode` is the fragment\n // itself; afterwards it is the real host (e.g. the container the user\n // mounted into). All reconciliation must target the live parent, or\n // `insertBefore(node, marker)` throws NotFoundError because `marker`\n // already moved out of the fragment on the first flush.\n reconcile(parent, newItems);\n });\n\n /**\n * Reconciles the rendered entries against the latest item list.\n *\n * @param parent - The parent node.\n * @param newItems - The new items list.\n * @returns {void}\n */\n function reconcile(parent: Node, newItems: T[]): void {\n const oldLen = entries.length;\n const newLen = newItems.length;\n\n // ===== FAST PATH 1: Clear all =====\n if (newLen === 0) {\n for (let i = 0; i < oldLen; i++) {\n disposeItem(entries[i]);\n }\n entries = [];\n\n if (props.fallback && fallbackNodes.length === 0) {\n mountFallback(parent, marker);\n }\n return;\n }\n\n // ===== FAST PATH 2: Create all (from empty/fallback) =====\n if (oldLen === 0 || fallbackNodes.length > 0) {\n if (fallbackNodes.length > 0) {\n clearFallback();\n }\n\n entries = new Array(newLen);\n\n // Batch creation in fragment\n const batchFragment = document.createDocumentFragment();\n\n for (let i = 0; i < newLen; i++) {\n // Render to batchFragment, append to end (before=null)\n entries[i] = renderItem(newItems[i], i, batchFragment, null);\n }\n\n parent.insertBefore(batchFragment, marker);\n return;\n }\n\n // ===== Keyed reconciliation =====\n //\n // Each `oldKeyMap` value preserves the entry together with its original\n // index. The index is the fuel for the LIS-based move minimisation\n // further down: by mapping each new position to an old position we can\n // find the longest slice that is already in order and leave it alone.\n const oldKeyMap = new Map<unknown, Array<[ItemEntry, number]>>();\n for (let i = 0; i < oldLen; i++) {\n const entry = entries[i];\n const list = oldKeyMap.get(entry.key);\n const pair: [ItemEntry, number] = [entry, i];\n if (list) list.push(pair);\n else oldKeyMap.set(entry.key, [pair]);\n }\n\n const newEntries: ItemEntry[] = new Array(newLen);\n const toRemove: ItemEntry[] = [];\n\n // Batch new nodes in a fragment so multiple creations turn into a\n // single native DOM insertion. Created lazily — only when a fresh\n // item is actually rendered so we avoid the allocation when every\n // entry is reused.\n let batchFragment: DocumentFragment | null = null;\n\n // `newIndexToOldIndex[i] === 0` → newEntries[i] is freshly created.\n // `newIndexToOldIndex[i] === k + 1` → reused from `entries[k]`.\n const newIndexToOldIndex = new Int32Array(newLen);\n let moved = false;\n let maxOldSeen = 0;\n\n // Pre-compute keys for all new items to avoid redundant getKey calls\n const newKeys = new Array<unknown>(newLen);\n for (let i = 0; i < newLen; i++) {\n newKeys[i] = getKey(newItems[i], i);\n }\n\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const key = newKeys[i];\n const oldList = oldKeyMap.get(key);\n\n if (oldList && oldList.length > 0) {\n const [reused, oldIndex] = oldList.shift()!;\n if (Object.is(reused.item, item)) {\n reused.item = item;\n newEntries[i] = reused;\n newIndexToOldIndex[i] = oldIndex + 1;\n if (oldIndex < maxOldSeen) moved = true;\n else maxOldSeen = oldIndex;\n } else {\n if (!batchFragment) batchFragment = document.createDocumentFragment();\n disposeItem(reused);\n newEntries[i] = renderItem(item, i, batchFragment, null, key);\n }\n } else {\n if (!batchFragment) batchFragment = document.createDocumentFragment();\n newEntries[i] = renderItem(item, i, batchFragment, null, key);\n // newIndexToOldIndex[i] remains 0 (fresh entry).\n }\n }\n\n for (const list of oldKeyMap.values()) {\n for (const [entry] of list) toRemove.push(entry);\n }\n for (const entry of toRemove) disposeItem(entry);\n\n // ===== Position correction with LIS =====\n // We walk the new array right-to-left using `marker` as the initial\n // anchor, which lets us use `insertBefore(node, nextNode)` uniformly.\n const lis = moved ? getSequence(newIndexToOldIndex) : [];\n let lisCursor = lis.length - 1;\n let nextNode: Node = marker;\n\n for (let i = newLen - 1; i >= 0; i--) {\n const entry = newEntries[i];\n const nodes = entry.nodes;\n const isFresh = newIndexToOldIndex[i] === 0;\n const inLis = !isFresh && moved && lisCursor >= 0 && i === lis[lisCursor];\n\n if (inLis) {\n // Stable skeleton — leave every node untouched, but still update\n // `nextNode` so the next iteration has the correct anchor.\n lisCursor--;\n for (let j = nodes.length - 1; j >= 0; j--) nextNode = nodes[j];\n continue;\n }\n\n // Fresh entry OR reused entry that is out of place → (re)insert each\n // node. The nextSibling guard keeps us from redundant writes for\n // multi-node rows whose internal order is already correct.\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j];\n if (node.nextSibling !== nextNode) {\n parent.insertBefore(node, nextNode);\n }\n nextNode = node;\n }\n }\n\n entries = newEntries;\n }\n\n onCleanup(() => {\n effectRunner.stop();\n for (const entry of entries) {\n disposeItem(entry);\n }\n entries = [];\n clearFallback();\n if (marker.parentNode) {\n marker.parentNode.removeChild(marker);\n }\n });\n\n return fragment;\n}\n\nFor[FOR_COMPONENT] = true;\n\nexport function isFor(node: unknown): boolean {\n return !!node && !!(node as Record<symbol, boolean>)[FOR_COMPONENT];\n}\n","import { effect } from '@estjs/signals';\nimport { warn } from '@estjs/shared';\nimport { onCleanup } from '../scope';\nimport { onMount } from '../lifecycle';\nimport { TRANSITION_COMPONENT } from '../constants';\nimport { isComponent } from '../component';\nimport { useChildren } from '../utils';\nimport type { AnyNode } from '../types';\nimport type { Component } from '../component';\n\nexport interface TransitionProps {\n name?: string;\n css?: boolean;\n type?: 'transition' | 'animation';\n appear?: boolean;\n duration?: number | { enter: number; leave: number };\n enterFromClass?: string;\n enterActiveClass?: string;\n enterToClass?: string;\n appearFromClass?: string;\n appearActiveClass?: string;\n appearToClass?: string;\n leaveFromClass?: string;\n leaveActiveClass?: string;\n leaveToClass?: string;\n onBeforeEnter?: (el: Element) => void;\n onEnter?: (el: Element, done: () => void) => void;\n onAfterEnter?: (el: Element) => void;\n onEnterCancelled?: (el: Element) => void;\n onBeforeLeave?: (el: Element) => void;\n onLeave?: (el: Element, done: () => void) => void;\n onAfterLeave?: (el: Element) => void;\n onLeaveCancelled?: (el: Element) => void;\n children?: AnyNode | (() => AnyNode);\n}\n\n// ---------------------------------------------------------------------------\n// Pure helpers (exported — tests + consumers rely on these)\n// ---------------------------------------------------------------------------\n\nexport interface TransitionClassNames {\n enterFrom: string;\n enterActive: string;\n enterTo: string;\n leaveFrom: string;\n leaveActive: string;\n leaveTo: string;\n appearFrom: string;\n appearActive: string;\n appearTo: string;\n}\n\nexport function resolveTransitionClasses(props: TransitionProps): TransitionClassNames {\n const n = props.name ?? 'v';\n const enterFrom = props.enterFromClass ?? `${n}-enter-from`;\n const enterActive = props.enterActiveClass ?? `${n}-enter-active`;\n const enterTo = props.enterToClass ?? `${n}-enter-to`;\n return {\n enterFrom,\n enterActive,\n enterTo,\n leaveFrom: props.leaveFromClass ?? `${n}-leave-from`,\n leaveActive: props.leaveActiveClass ?? `${n}-leave-active`,\n leaveTo: props.leaveToClass ?? `${n}-leave-to`,\n appearFrom: props.appearFromClass ?? enterFrom,\n appearActive: props.appearActiveClass ?? enterActive,\n appearTo: props.appearToClass ?? enterTo,\n };\n}\n\nexport interface TransitionInfo {\n event: 'transitionend' | 'animationend';\n timeout: number;\n}\n\nconst toMs = (s: string): number => {\n if (!s) return 0;\n if (s.endsWith('ms')) return Number(s.slice(0, -2).replace(',', '.'));\n return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n};\n\nfunction sumMs(delays: string, durations: string): number {\n const d = delays.split(', ');\n const u = durations.split(', ');\n let max = 0;\n for (const [i, dur] of u.entries()) {\n const total = toMs(dur) + toMs(d[i % d.length] || '0s');\n if (total > max) max = total;\n }\n return max;\n}\n\nexport function getTransitionInfo(\n el: Element,\n type?: 'transition' | 'animation',\n): TransitionInfo | null {\n const s = getComputedStyle(el);\n const tt = type !== 'animation' ? sumMs(s.transitionDelay, s.transitionDuration) : 0;\n const at = type !== 'transition' ? sumMs(s.animationDelay, s.animationDuration) : 0;\n if (tt === 0 && at === 0) return null;\n return tt >= at\n ? { event: 'transitionend', timeout: tt }\n : { event: 'animationend', timeout: at };\n}\n\n// ---------------------------------------------------------------------------\n// Shared DOM helpers (exported — TransitionGroup reuses these so we don't\n// fork the same primitives across two files)\n// ---------------------------------------------------------------------------\n\nexport function addClass(el: Element, cls: string): void {\n for (const c of cls.split(/\\s+/)) if (c) el.classList.add(c);\n}\n\nexport function removeClass(el: Element, cls: string): void {\n for (const c of cls.split(/\\s+/)) if (c) el.classList.remove(c);\n}\n\nexport function nextFrame(cb: () => void): void {\n requestAnimationFrame(() => requestAnimationFrame(cb));\n}\n\nexport function forceReflow(el: Element): void {\n void (el as HTMLElement).offsetHeight;\n}\n\n/**\n * Wait for a transition/animation on `el` to finish, then call `resolve`.\n * If `explicit` is set, use that as a fixed timeout ; otherwise probe computed style for the longest active timing\n * and listen for the matching end event with a +1ms safety net.\n */\nexport function whenTransitionEnds(\n el: Element,\n type: TransitionProps['type'],\n explicit: number | null,\n resolve: () => void,\n): void {\n if (explicit != null) {\n setTimeout(resolve, explicit);\n return;\n }\n const info = getTransitionInfo(el, type);\n if (!info) {\n resolve();\n return;\n }\n let done = false;\n const finish = (): void => {\n if (done) return;\n done = true;\n el.removeEventListener(info.event, onEnd);\n resolve();\n };\n const onEnd = (): void => finish();\n el.addEventListener(info.event, onEnd);\n setTimeout(finish, info.timeout + 1);\n}\n\nexport function resolveDuration(\n d: TransitionProps['duration'],\n dir: 'enter' | 'leave',\n): number | null {\n if (d == null) return null;\n if (typeof d === 'number') return d;\n return d[dir];\n}\n\nfunction validateSlot(value: unknown): Element | null {\n if (value == null || value === false) return null;\n if (Array.isArray(value)) {\n if (__DEV__) {\n throw new Error(\n '[essor] <Transition> expects a single root child. Use <TransitionGroup> for multiple children.',\n );\n }\n return value[0] instanceof Element ? value[0] : null;\n }\n if (value instanceof Element) return value;\n // A Component instance was passed (e.g. `<Transition><EFoo/></Transition>`):\n // mount it into a detached fragment so we can pluck its rendered root\n // Element, then return that. The Component owns its scope/cleanup, so\n // its disposal will happen via the outer mount tree just like a normal\n // child. We only need the DOM node for class manipulation / events.\n //\n // Note: Transition can only animate a SINGLE root element. If the child\n // component renders multiple roots (fragment-style return), only the\n // first one participates — the rest stay in the detached fragment and\n // never reach the DOM. Surface that as a dev warning.\n if (isComponent(value)) {\n const comp = value as Component;\n if (comp.scope == null) {\n const fragment = document.createDocumentFragment();\n comp.mount(fragment);\n }\n if (__DEV__ && comp.renderedNodes.length > 1) {\n warn(\n '[Transition] child component rendered multiple root nodes; ' +\n 'only the first is animated. Wrap the children in a single element ' +\n 'or use <TransitionGroup>.',\n );\n }\n const first = comp.firstChild;\n if (first instanceof Element) return first;\n if (__DEV__) {\n warn('[Transition] child component did not render an Element root.');\n }\n return null;\n }\n if (__DEV__) {\n warn('[Transition] received a non-element child; animation will be skipped.');\n }\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Transition component\n//\n// Architecture:\n// - Slot is read inside a single `effect()` via `useChildren()`. The effect\n// body ONLY reads the slot and queues a microtask — it never invokes user\n// hooks. This keeps signal writes (e.g. counters incremented in onEnter)\n// out of the effect's tracking phase, eliminating dep-link corruption.\n// - The state machine runs in `flushCommit()` after the microtask drains.\n// - Cancellation uses Symbol-keyed callbacks on the element itself\n// robust across reentrancy and\n// mid-flight reversals.\n// - End-of-animation detection is centralized in `whenTransitionEnds()`:\n// explicit `duration` wins; otherwise observe the appropriate end event\n// with a `+1ms` safety net (in case the browser drops the event).\n// ---------------------------------------------------------------------------\n\nconst ENTER_CB = Symbol('enter_cb');\nconst LEAVE_CB = Symbol('leave_cb');\n\ntype CancelCb = ((cancelled?: boolean) => void) | undefined;\n\ntype State = 'idle' | 'entering' | 'entered' | 'leaving';\n\nexport function Transition(props: TransitionProps): Node {\n const anchor = document.createComment('');\n const classes = resolveTransitionClasses(props);\n const useCss = props.css !== false;\n const readSlot = useChildren<unknown>(props);\n\n let state: State = 'idle';\n let currentEl: Element | null = null;\n let leavingEl: Element | null = null; // mid-leave element awaiting cleanup\n let mounted = false;\n\n // Microtask scheduling — keeps the state machine outside the effect's\n // tracking phase, so user hooks that write signals don't corrupt deps.\n // We stash the RAW slot value (pre-validation) so the initial validation\n // can be deferred to onMount; otherwise the multi-child throw would fire\n // during component setup instead of during the mount phase.\n let pendingRaw: unknown = undefined;\n let hasPending = false;\n let scheduled = false;\n let disposed = false;\n\n const enter = (el: Element, phase: 'enter' | 'appear'): void => {\n // Cancel any in-flight leave on the same element.\n const prevLeave = (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB];\n if (prevLeave) prevLeave(true);\n\n state = 'entering';\n const fromCls = phase === 'appear' ? classes.appearFrom : classes.enterFrom;\n const activeCls = phase === 'appear' ? classes.appearActive : classes.enterActive;\n const toCls = phase === 'appear' ? classes.appearTo : classes.enterTo;\n\n props.onBeforeEnter?.(el);\n\n if (useCss) {\n addClass(el, fromCls);\n addClass(el, activeCls);\n }\n\n let called = false;\n const done = (cancelled?: boolean): void => {\n if (called) return;\n called = true;\n (el as unknown as Record<symbol, CancelCb>)[ENTER_CB] = undefined;\n if (useCss) {\n removeClass(el, fromCls);\n removeClass(el, activeCls);\n removeClass(el, toCls);\n }\n if (cancelled) {\n props.onEnterCancelled?.(el);\n } else {\n state = 'entered';\n props.onAfterEnter?.(el);\n }\n };\n (el as unknown as Record<symbol, CancelCb>)[ENTER_CB] = done;\n\n nextFrame(() => {\n if (called) return;\n if (useCss) {\n removeClass(el, fromCls);\n addClass(el, toCls);\n }\n\n if (props.onEnter) {\n props.onEnter(el, () => done(false));\n } else if (useCss) {\n const explicit = resolveDuration(props.duration, 'enter');\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n } else {\n // css=false and no JS hook — no animation\n done(false);\n }\n });\n };\n\n const leave = (el: Element, after: () => void): void => {\n // Cancel any in-flight enter on the same element, then settle a reflow so\n // the swap to leave-from/leave-active takes effect cleanly\n const prevEnter = (el as unknown as Record<symbol, CancelCb>)[ENTER_CB];\n if (prevEnter) {\n prevEnter(true);\n forceReflow(el);\n }\n\n state = 'leaving';\n props.onBeforeLeave?.(el);\n\n if (useCss) {\n addClass(el, classes.leaveFrom);\n addClass(el, classes.leaveActive);\n }\n\n let called = false;\n const done = (cancelled?: boolean): void => {\n if (called) return;\n called = true;\n (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB] = undefined;\n if (useCss) {\n removeClass(el, classes.leaveFrom);\n removeClass(el, classes.leaveActive);\n removeClass(el, classes.leaveTo);\n }\n if (cancelled) {\n props.onLeaveCancelled?.(el);\n } else {\n state = 'idle';\n after();\n props.onAfterLeave?.(el);\n }\n };\n (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB] = done;\n\n // Decide whether there is any animation to wait for. We must query\n // computed style AFTER applying leave-active so the rule on that class\n // is visible.\n const explicit = resolveDuration(props.duration, 'leave');\n const hasCssInfo =\n useCss && !props.onLeave && explicit == null ? !!getTransitionInfo(el, props.type) : false;\n\n if (!props.onLeave && explicit == null && !hasCssInfo) {\n // No animation path — tear down synchronously to preserve the\n // no-animation contract relied on by tests and the SSR sanity checks.\n done(false);\n return;\n }\n\n nextFrame(() => {\n if (called) return;\n if (useCss) {\n removeClass(el, classes.leaveFrom);\n addClass(el, classes.leaveTo);\n }\n\n if (props.onLeave) {\n props.onLeave(el, () => done(false));\n } else if (useCss) {\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n } else {\n done(false);\n }\n });\n };\n\n const commit = (next: Element | null, isFirst: boolean): void => {\n // Leave → Enter reversal — revive the still-leaving element rather than\n // mounting a fresh node from the slot .\n if (next && state === 'leaving' && leavingEl) {\n const reviving = leavingEl;\n const leaveCb = (reviving as unknown as Record<symbol, CancelCb>)[LEAVE_CB];\n if (leaveCb) leaveCb(true); // fires onLeaveCancelled + scrubs leave classes\n leavingEl = null;\n currentEl = reviving;\n enter(reviving, 'enter');\n return;\n }\n\n if (next === currentEl) return;\n\n const outgoing = currentEl;\n currentEl = next;\n\n if (outgoing) {\n leavingEl = outgoing;\n const captured = outgoing;\n leave(captured, () => {\n if (captured.parentNode) captured.parentNode.removeChild(captured);\n if (leavingEl === captured) leavingEl = null;\n });\n }\n\n if (next && anchor.parentNode) {\n anchor.parentNode.insertBefore(next, anchor);\n if (isFirst && !props.appear) {\n // Initial mount, no `appear` — render immediately, skip animation.\n state = 'entered';\n } else {\n enter(next, isFirst && props.appear ? 'appear' : 'enter');\n }\n } else if (!outgoing && !next) {\n state = 'idle';\n }\n };\n\n const flush = (): void => {\n scheduled = false;\n if (disposed || !hasPending) return;\n const raw = pendingRaw;\n hasPending = false;\n pendingRaw = undefined;\n try {\n commit(validateSlot(raw), false);\n } catch (error) {\n if (__DEV__) console.error('[essor] <Transition>', error);\n }\n };\n\n const scheduleCommit = (raw: unknown): void => {\n pendingRaw = raw;\n hasPending = true;\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(flush);\n };\n\n // ---------- Lifecycle ----------\n\n // Effect: pure read. Tracks slot deps, never writes signals. Validation is\n // deferred to commit() so the initial throw lands at mount time, matching\n // the legacy contract (T16 tests).\n const effectRunner = effect(() => {\n const raw = readSlot();\n if (mounted) {\n scheduleCommit(raw);\n } else {\n pendingRaw = raw;\n hasPending = true;\n }\n });\n\n onMount(() => {\n mounted = true;\n const initial = hasPending ? validateSlot(pendingRaw) : null;\n hasPending = false;\n pendingRaw = undefined;\n commit(initial, true);\n });\n\n onCleanup(() => {\n disposed = true;\n effectRunner.stop();\n for (const el of [currentEl, leavingEl]) {\n if (!el) continue;\n const ec = (el as unknown as Record<symbol, CancelCb>)[ENTER_CB];\n const lc = (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB];\n ec?.(true);\n lc?.(true);\n if (el.parentNode) el.parentNode.removeChild(el);\n }\n currentEl = null;\n leavingEl = null;\n state = 'idle';\n });\n\n return anchor;\n}\n\n(Transition as unknown as Record<symbol, true>)[TRANSITION_COMPONENT] = true;\n\n/**\n * Check if a node is a Transition component.\n *\n * @param node - Node to check.\n * @returns True if node is a Transition.\n */\nexport function isTransition(node: unknown): boolean {\n return !!node && !!(node as Record<symbol, unknown>)[TRANSITION_COMPONENT];\n}\n","import { type Signal, effect, isSignal } from '@estjs/signals';\nimport { isFunction, warn } from '@estjs/shared';\nimport {\n type Scope,\n createScope,\n disposeScope,\n getActiveScope,\n onCleanup,\n runWithScope,\n} from '../scope';\nimport { onMount } from '../lifecycle';\nimport { TRANSITION_GROUP_COMPONENT } from '../constants';\nimport { isComponent } from '../component';\nimport {\n type TransitionProps,\n addClass,\n forceReflow,\n nextFrame,\n removeClass,\n resolveDuration,\n resolveTransitionClasses,\n whenTransitionEnds,\n} from './Transition';\nimport type { Component } from '../component';\n\n/**\n * Props for `<TransitionGroup>`.\n *\n * Inherits every enter/leave knob from {@link TransitionProps} (name, css,\n * type, duration, JS hooks, custom class overrides) and adds:\n *\n * - `each` / `key` — same shape as `<For>`; required for stable identity.\n * - `tag` — wrapper element. Required so we have a layout root to measure\n * positions against and to anchor leaving items absolutely. Defaults to\n * `'div'`.\n * - `moveClass` — class applied to elements during the FLIP move animation.\n * Defaults to `${name}-move`.\n * - `children` — render function per item. May return an Element or a\n * Component instance (the latter is mounted, its first rendered Element\n * participates in the animations).\n *\n * `appear` is intentionally NOT supported: items mounted on the initial\n * render do NOT animate. The appear-related props from {@link TransitionProps}\n * are therefore omitted from this type. If you need first-frame animation,\n * mount the group with an empty list and push items after mount.\n */\ntype GroupBaseProps = Omit<\n TransitionProps,\n 'children' | 'appear' | 'appearFromClass' | 'appearActiveClass' | 'appearToClass'\n>;\n\nexport interface TransitionGroupProps<T = unknown> extends GroupBaseProps {\n each: T[] | Signal<T[]> | (() => T[]);\n key: (item: T, index: number) => unknown;\n tag?: string;\n moveClass?: string;\n children: (item: T, index: number) => unknown;\n}\n\ntype CancelCb = (cancelled?: boolean) => void;\n\ninterface Entry {\n key: unknown;\n item: unknown;\n /** The DOM element that participates in class manipulation + FLIP. */\n el: HTMLElement;\n /** Set when the row's render output was a Component instance. */\n comp: Component | null;\n /** Per-row scope so effects inside `children()` clean up on removal. */\n scope: Scope;\n /** Lifecycle state. */\n state: 'entering' | 'present' | 'leaving';\n /** Snapshot of bounding rect taken BEFORE the reconcile DOM mutation. */\n prevRect?: DOMRect;\n /** Cancellation hooks for in-flight enter/leave animations. */\n cancelEnter?: CancelCb;\n cancelLeave?: CancelCb;\n /**\n * Saved inline styles that we override during leave (`position:absolute`\n * + locked geometry). Restored if a leave is cancelled mid-flight.\n */\n savedStyles?: SavedStyles;\n}\n\ninterface SavedStyles {\n position: string;\n top: string;\n left: string;\n width: string;\n height: string;\n}\n\n/**\n * Pull a single root Element out of whatever `children(item, index)` returned.\n *\n * Component instances are mounted into the wrapper so they observe normal\n * scope/lifecycle, then their first rendered Element is returned. Arrays\n * (the babel-emitted shape for a single child) are unwrapped recursively.\n */\nfunction resolveItemElement(\n raw: unknown,\n parent: Element,\n): { el: HTMLElement | null; comp: Component | null } {\n if (raw == null || raw === false) return { el: null, comp: null };\n if (Array.isArray(raw) && raw.length === 1) {\n return resolveItemElement(raw[0], parent);\n }\n if (isFunction(raw)) {\n return resolveItemElement((raw as () => unknown)(), parent);\n }\n if (raw instanceof HTMLElement) {\n return { el: raw, comp: null };\n }\n if (isComponent(raw)) {\n const comp = raw as Component;\n if (comp.scope == null) {\n // Mount into the wrapper directly. The Component lays itself out as a\n // normal child; we just snag the first rendered HTMLElement for FLIP.\n comp.mount(parent);\n }\n if (__DEV__ && comp.renderedNodes.length > 1) {\n warn(\n '[TransitionGroup] child component rendered multiple root nodes; ' +\n 'only the first participates in enter/leave/move animations.',\n );\n }\n const first = comp.firstChild;\n if (first instanceof HTMLElement) return { el: first, comp };\n return { el: null, comp };\n }\n if (__DEV__) {\n warn(\n '[TransitionGroup] child render returned a non-element value; ' +\n 'animations require Element or Component roots.',\n );\n }\n return { el: null, comp: null };\n}\n\nfunction saveStyles(el: HTMLElement): SavedStyles {\n return {\n position: el.style.position,\n top: el.style.top,\n left: el.style.left,\n width: el.style.width,\n height: el.style.height,\n };\n}\n\nfunction restoreStyles(el: HTMLElement, s: SavedStyles): void {\n el.style.position = s.position;\n el.style.top = s.top;\n el.style.left = s.left;\n el.style.width = s.width;\n el.style.height = s.height;\n}\n\n/**\n * Animated keyed list with three coordinated animations:\n *\n * - **enter** — new items fade/slide in using `${name}-enter-*` classes\n * - **leave** — removed items animate out (positioned absolutely so the\n * remaining items can reflow under FLIP), then are detached\n * - **move** — items that stayed but changed position run FLIP: snapshot\n * `getBoundingClientRect()` before reconcile, compute delta after,\n * invert via `transform`, then transition to identity under `moveClass`\n *\n * Each row owns its own scope (mirroring `<For>`), so signals/effects\n * created inside `children()` are torn down when the row leaves.\n *\n * @example\n * ```tsx\n * <TransitionGroup name=\"list\" each={items} key={(it) => it.id} tag=\"ul\">\n * {(item) => <li>{item.label}</li>}\n * </TransitionGroup>\n * ```\n */\nexport function TransitionGroup<T>(props: TransitionGroupProps<T>): Element {\n const tag = props.tag ?? 'div';\n const wrapper = document.createElement(tag);\n // `resolveTransitionClasses` only reads class-prop / name fields; cast to\n // bridge the structural mismatch on `children` (which it ignores anyway).\n const classes = resolveTransitionClasses(props as unknown as TransitionProps);\n const useCss = props.css !== false;\n const moveClass = props.moveClass ?? `${props.name ?? 'v'}-move`;\n\n const keyFn = props.key;\n // Babel wraps a single arrow child in a 1-element array — `{(item) => …}`\n // compiles to `children: [(item) => …]`. Unwrap so the rest of this\n // component only sees the function.\n const rawChildren = props.children as unknown;\n const childrenFn: TransitionGroupProps<T>['children'] =\n Array.isArray(rawChildren) && rawChildren.length === 1 && isFunction(rawChildren[0])\n ? (rawChildren[0] as TransitionGroupProps<T>['children'])\n : (props.children as TransitionGroupProps<T>['children']);\n if (!isFunction(childrenFn) || !isFunction(keyFn)) {\n throw new TypeError(\n '<TransitionGroup> requires `children: (item, index) => Node` and `key: (item, index) => unknown`',\n );\n }\n\n const getList = (): T[] => {\n const input = props.each;\n if (isSignal(input)) return (input as Signal<T[]>).value ?? [];\n if (isFunction(input)) return (input as () => T[])() ?? [];\n return (input as T[]) ?? [];\n };\n\n let entries: Entry[] = [];\n let mounted = false;\n\n // -----------------------------------------------------------------------\n // Per-item lifecycle helpers\n // -----------------------------------------------------------------------\n\n /** Render one row inside a fresh scope and return its initial Entry. */\n const renderEntry = (item: T, index: number): Entry | null => {\n const parentScope = getActiveScope();\n const scope = createScope(parentScope);\n let raw: unknown;\n runWithScope(scope, () => {\n raw = childrenFn(item, index);\n });\n const { el, comp } = resolveItemElement(raw, wrapper);\n if (!el) {\n disposeScope(scope);\n return null;\n }\n return {\n key: keyFn(item, index),\n item,\n el,\n comp,\n scope,\n state: 'entering',\n };\n };\n\n /**\n * Detach a row's DOM nodes from the wrapper. For Component-backed rows we\n * remove every rendered root, not just `entry.el` — multi-root Components\n * would otherwise leak their trailing siblings into the wrapper indefinitely\n * (FLIP only animates the first root, but cleanup must reclaim all of them).\n */\n const detachEntryDom = (entry: Entry): void => {\n if (entry.comp) {\n for (const node of entry.comp.renderedNodes) {\n if (node.parentNode === wrapper) wrapper.removeChild(node);\n }\n return;\n }\n if (entry.el.parentNode === wrapper) wrapper.removeChild(entry.el);\n };\n\n const disposeEntry = (entry: Entry): void => {\n entry.cancelEnter?.(true);\n entry.cancelLeave?.(true);\n if (entry.comp) entry.comp.destroy();\n detachEntryDom(entry);\n disposeScope(entry.scope);\n };\n\n const runEnter = (entry: Entry): void => {\n const el = entry.el;\n // If the same element was in the middle of a leave, cancel it first so\n // saved styles are restored and the leave classes are scrubbed.\n entry.cancelLeave?.(true);\n\n if (!useCss) {\n entry.state = 'present';\n props.onAfterEnter?.(el);\n return;\n }\n\n props.onBeforeEnter?.(el);\n addClass(el, classes.enterFrom);\n addClass(el, classes.enterActive);\n\n let called = false;\n const done: CancelCb = (cancelled) => {\n if (called) return;\n called = true;\n entry.cancelEnter = undefined;\n removeClass(el, classes.enterFrom);\n removeClass(el, classes.enterActive);\n removeClass(el, classes.enterTo);\n if (cancelled) {\n props.onEnterCancelled?.(el);\n } else {\n entry.state = 'present';\n props.onAfterEnter?.(el);\n }\n };\n entry.cancelEnter = done;\n entry.state = 'entering';\n\n nextFrame(() => {\n if (called) return;\n removeClass(el, classes.enterFrom);\n addClass(el, classes.enterTo);\n if (props.onEnter) {\n props.onEnter(el, () => done(false));\n } else {\n const explicit = resolveDuration(props.duration, 'enter');\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n }\n });\n };\n\n const runLeave = (entry: Entry, prevRect: DOMRect): void => {\n const el = entry.el;\n // Cancel any pending enter on the same element so leave-from/leave-active\n // actually take effect.\n if (entry.cancelEnter) {\n entry.cancelEnter(true);\n forceReflow(el);\n }\n entry.state = 'leaving';\n\n // Pin the leaving element at its previous slot so its siblings can reflow\n // freely while it animates out.\n entry.savedStyles = saveStyles(el);\n const parentRect = wrapper.getBoundingClientRect();\n el.style.position = 'absolute';\n el.style.top = `${prevRect.top - parentRect.top}px`;\n el.style.left = `${prevRect.left - parentRect.left}px`;\n el.style.width = `${prevRect.width}px`;\n el.style.height = `${prevRect.height}px`;\n\n if (!useCss) {\n // No-animation contract: tear down immediately.\n if (entry.savedStyles) restoreStyles(el, entry.savedStyles);\n detachEntryDom(entry);\n disposeScope(entry.scope);\n if (entry.comp) entry.comp.destroy();\n props.onAfterLeave?.(el);\n return;\n }\n\n props.onBeforeLeave?.(el);\n addClass(el, classes.leaveFrom);\n addClass(el, classes.leaveActive);\n\n let called = false;\n const done: CancelCb = (cancelled) => {\n if (called) return;\n called = true;\n entry.cancelLeave = undefined;\n removeClass(el, classes.leaveFrom);\n removeClass(el, classes.leaveActive);\n removeClass(el, classes.leaveTo);\n\n if (cancelled) {\n // Cancelled mid-leave (likely because the same key was re-added).\n if (entry.savedStyles) restoreStyles(el, entry.savedStyles);\n entry.savedStyles = undefined;\n props.onLeaveCancelled?.(el);\n return;\n }\n\n if (entry.savedStyles) restoreStyles(el, entry.savedStyles);\n entry.savedStyles = undefined;\n detachEntryDom(entry);\n disposeScope(entry.scope);\n if (entry.comp) entry.comp.destroy();\n props.onAfterLeave?.(el);\n };\n entry.cancelLeave = done;\n\n nextFrame(() => {\n if (called) return;\n removeClass(el, classes.leaveFrom);\n addClass(el, classes.leaveTo);\n if (props.onLeave) {\n props.onLeave(el, () => done(false));\n } else {\n const explicit = resolveDuration(props.duration, 'leave');\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n }\n });\n };\n\n /**\n * FLIP move. Called for items that stayed but may have changed position.\n * Caller passes the rect snapshotted BEFORE the DOM mutation; we measure\n * the current rect and animate the delta away.\n *\n * NOTE: There is no separate `move` direction on `duration`. To keep\n * move animations honor the **enter** duration when `duration` is set.\n */\n const runMove = (entry: Entry, prevRect: DOMRect): void => {\n if (!useCss || entry.state !== 'present') return;\n const el = entry.el;\n const newRect = el.getBoundingClientRect();\n const dx = prevRect.left - newRect.left;\n const dy = prevRect.top - newRect.top;\n if (!dx && !dy) return;\n\n // Invert: jump back to old position with no transition, then play.\n const savedTransform = el.style.transform;\n const savedTransition = el.style.transitionDuration;\n el.style.transform = `translate(${dx}px, ${dy}px)`;\n el.style.transitionDuration = '0s';\n addClass(el, moveClass);\n forceReflow(el);\n // Play: restore transition, clear transform → browser animates to identity.\n el.style.transform = savedTransform;\n el.style.transitionDuration = savedTransition;\n\n const explicit = resolveDuration(props.duration, 'enter');\n whenTransitionEnds(el, props.type, explicit, () => {\n removeClass(el, moveClass);\n });\n };\n\n // -----------------------------------------------------------------------\n // Reconcile\n // -----------------------------------------------------------------------\n\n /**\n * Snapshot rects for entries that are currently laid out — anything\n * `entering` or `present`. Skipped for `leaving` because their geometry is\n * already pinned via inline styles.\n */\n const snapshotPositions = (): void => {\n for (const entry of entries) {\n if (entry.state === 'leaving') continue;\n entry.prevRect = entry.el.getBoundingClientRect();\n }\n };\n\n /**\n * Diff `entries` against the new item list and produce the next entry\n * array. Side effects:\n * - Reorders DOM children to match `newItems` order.\n * - Creates fresh entries for new keys (each is queued for enter).\n * - Returns entries that disappeared so the caller can drive leave.\n *\n * One map serves both present and leaving entries. A re-added key pulls the\n * old entry out of the map regardless of its state — `runEnter` (called by\n * the caller for non-`present` entries) handles the leave-cancel.\n */\n const reconcile = (newItems: T[]): { next: Entry[]; leaving: Entry[] } => {\n const byKey = new Map<unknown, Entry>();\n for (const entry of entries) byKey.set(entry.key, entry);\n\n const next: Entry[] = [];\n for (const [i, item] of newItems.entries()) {\n const key = keyFn(item, i);\n const reused = byKey.get(key);\n if (reused) {\n byKey.delete(key);\n reused.item = item;\n next.push(reused);\n } else {\n const fresh = renderEntry(item, i);\n if (fresh) next.push(fresh);\n }\n }\n\n // Whatever stayed in `byKey` no longer appears in newItems. Skip entries\n // that were already leaving — they're mid-animation; don't restart them.\n const leaving: Entry[] = [];\n for (const entry of byKey.values()) {\n if (entry.state !== 'leaving') leaving.push(entry);\n }\n\n // Apply DOM ordering — walk `next` from the tail so each `insertBefore`\n // uses the already-correct following sibling as the anchor.\n let anchor: Node | null = null;\n for (let i = next.length - 1; i >= 0; i--) {\n const el = next[i].el;\n if (el.parentNode !== wrapper || el.nextSibling !== anchor) {\n wrapper.insertBefore(el, anchor);\n }\n anchor = el;\n }\n\n return { next, leaving };\n };\n\n /**\n * The full update pass: snapshot → reconcile → apply enter/leave/move.\n * Initial mount short-circuits all three (no snapshot, no leave, just\n * insert + skip enter to match the convention that first-frame items\n * appear without animation).\n */\n const update = (newItems: T[], isInitial: boolean): void => {\n if (isInitial) {\n // Fresh mount — no animation by default.\n const initial: Entry[] = [];\n for (const [i, item] of newItems.entries()) {\n const entry = renderEntry(item, i);\n if (!entry) continue;\n if (entry.el.parentNode !== wrapper) wrapper.appendChild(entry.el);\n entry.state = 'present';\n initial.push(entry);\n }\n entries = initial;\n return;\n }\n\n snapshotPositions();\n const { next, leaving } = reconcile(newItems);\n\n // Run enter on freshly-created or resurrected entries.\n for (const entry of next) {\n if (entry.state !== 'present') runEnter(entry);\n }\n\n // Run leave on departing entries. By construction every entry coming\n // out of `reconcile` as `leaving` had a non-`leaving` state during the\n // immediately preceding `snapshotPositions`, so its `prevRect` is always\n // set. We assert that invariant here rather than masking a future bug\n // behind a silent fallback.\n for (const entry of leaving) {\n const rect = entry.prevRect;\n if (!rect) {\n if (__DEV__) {\n warn('[TransitionGroup] leaving entry without prevRect — skipping leave animation');\n }\n continue;\n }\n runLeave(entry, rect);\n }\n\n // FLIP move for entries that stayed.\n for (const entry of next) {\n if (entry.state !== 'present' || !entry.prevRect) continue;\n runMove(entry, entry.prevRect);\n entry.prevRect = undefined;\n }\n\n // Stash leaving entries alongside the next set so cleanup can find them.\n entries = next.concat(leaving);\n };\n\n // -----------------------------------------------------------------------\n // Lifecycle\n // -----------------------------------------------------------------------\n\n let pendingItems: T[] | null = null;\n\n const effectRunner = effect(() => {\n const list = getList();\n if (!mounted) {\n pendingItems = list;\n return;\n }\n // Reactive update — run synchronously inside the effect. The render\n // function below is called inside a fresh per-row scope so any signals\n // it reads do NOT register against the outer TransitionGroup effect.\n update(list, false);\n });\n\n onMount(() => {\n mounted = true;\n if (pendingItems) {\n update(pendingItems, true);\n pendingItems = null;\n }\n });\n\n onCleanup(() => {\n effectRunner.stop();\n for (const entry of entries) disposeEntry(entry);\n entries = [];\n if (wrapper.parentNode) wrapper.parentNode.removeChild(wrapper);\n });\n\n return wrapper;\n}\n\n(TransitionGroup as unknown as Record<symbol, true>)[TRANSITION_GROUP_COMPONENT] = true;\n\n/**\n * Type guard for the TransitionGroup component reference.\n */\nexport function isTransitionGroup(node: unknown): boolean {\n return !!node && !!(node as Record<symbol, unknown>)[TRANSITION_GROUP_COMPONENT];\n}\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/operations/attr.ts","../src/operations/class.ts","../src/operations/style.ts","../src/hydration.ts","../src/reconcile.ts","../src/dom.ts","../src/operations/event.ts","../src/lifecycle.ts","../src/component.ts","../src/renderer.ts","../src/provide.ts","../src/events.ts","../src/binding.ts","../src/utils.ts","../src/components/Fragment.ts","../src/components/Portal.ts","../src/components/Suspense.ts","../src/components/createResource.ts","../src/components/AsyncComponent.ts","../src/components/For.ts","../src/components/Transition.ts","../src/components/TransitionGroup.ts"],"names":["next","isString","isObject","startsWith","_a","warn","HYDRATION_ANCHOR_ATTR","child","error","isFunction","template","document","isArray","effect","isSignal","isComputed","isBrowser","children","isPromise","batchFragment","resolve","_b","_c"],"mappings":"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","file":"template.dev.js","sourcesContent":["/**\n * event prefix, used to distinguish event handler properties\n */\nexport const EVENT_PREFIX = 'on';\n\n/**\n * children property name\n */\nexport const CHILDREN_PROP = 'children';\n\nexport { HYDRATION_ANCHOR_ATTR, SPREAD_NAME } from '@estjs/shared';\n\n/**\n * used to get the DOM element reference\n */\nexport const REF_KEY = 'ref';\n/**\n * Component key property name\n */\nexport const KEY_PROP = 'key' as const;\n\n/**\n * SVG namespace constant\n */\nexport const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n\n/**\n * XML namespace for xlink attributes\n */\nexport const XLINK_NAMESPACE = 'http://www.w3.org/2000/xlink';\n\n/**\n * xmlns namespace for SVG elements\n */\nexport const XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/';\n\nexport const NORMAL_COMPONENT = Symbol(__DEV__ ? 'Normal Component' : '');\nexport const FRAGMENT_COMPONENT = Symbol(__DEV__ ? 'Fragment Component' : '');\nexport const PORTAL_COMPONENT = Symbol(__DEV__ ? 'Portal Component' : '');\nexport const SUSPENSE_COMPONENT = Symbol(__DEV__ ? 'Suspense Component' : '');\nexport const FOR_COMPONENT = Symbol(__DEV__ ? 'For Component' : '');\nexport const TRANSITION_COMPONENT = Symbol(__DEV__ ? 'Transition Component' : '');\nexport const TRANSITION_GROUP_COMPONENT = Symbol(__DEV__ ? 'TransitionGroup Component' : '');\nexport enum COMPONENT_STATE {\n /** Initial state */\n INITIAL,\n /** Mounting */\n MOUNTING,\n /** MOUNTED */\n MOUNTED,\n /** Updating */\n UPDATING,\n /** Destroying */\n DESTROYING,\n /** destroy */\n DESTROYED,\n}\nexport enum COMPONENT_TYPE {\n NORMAL = 'normal',\n FRAGMENT = 'fragment',\n PORTAL = 'portal',\n SUSPENSE = 'suspense',\n FOR = 'for',\n TRANSITION = 'transition',\n TRANSITION_GROUP = 'transition-group',\n}\n","import {\n includeBooleanAttr,\n isBooleanAttr,\n isObject,\n isSpecialBooleanAttr,\n isString,\n isSymbol,\n startsWith,\n warn,\n} from '@estjs/shared';\nimport {\n KEY_PROP,\n SPREAD_NAME,\n SVG_NAMESPACE,\n XLINK_NAMESPACE,\n XMLNS_NAMESPACE,\n} from '../constants';\n\n/**\n * Supported value types for the attribute patch layer.\n *\n * In addition to primitive values, spread objects are also accepted, so the\n * type keeps `Record<string, unknown>`.\n */\nexport type AttrValue = string | boolean | number | null | undefined | Record<string, unknown>;\n\n/**\n * MIME types that can carry executable / markup payloads inside a `data:` URL.\n * These are the only `data:` URLs we block — inline images, fonts, audio,\n * video, etc. (e.g. `data:image/png;base64,...`) are legitimate and allowed.\n */\nconst DANGEROUS_DATA_MIME_RE =\n /^data:\\s*(?:text\\/html|text\\/xml|application\\/xhtml\\+xml|image\\/svg\\+xml|application\\/xml)/;\n\n/**\n * Returns true when a URL-bearing attribute value uses a protocol/payload that\n * could execute script in the document.\n *\n * Blocked:\n * - `javascript:` / `vbscript:` pseudo-protocols\n * - `data:` URLs whose MIME type can carry markup or script\n * (`text/html`, `image/svg+xml`, `*xml`)\n *\n * Allowed:\n * - All other `data:` URLs (images, fonts, audio, video, …)\n * - Ordinary http(s)/relative/mailto/tel URLs\n *\n * Note: leading control characters / whitespace are stripped before matching\n * so that `java\\tscript:` style obfuscation cannot slip through.\n */\nfunction isUnsafeUrl(value: string): boolean {\n // Strip ASCII whitespace and control chars (incl. NUL, tab, newline) that\n // browsers ignore when resolving the protocol, then lowercase for matching.\n // eslint-disable-next-line no-control-regex\n const v = value.replaceAll(/[\\u0000-\\u0020]+/g, '').toLowerCase();\n if (startsWith(v, 'javascript:') || startsWith(v, 'vbscript:')) {\n return true;\n }\n return DANGEROUS_DATA_MIME_RE.test(v);\n}\n\n/**\n * Applies a minimal attribute update to an element.\n *\n * This is the most general-purpose attribute updater in the template runtime.\n * It is responsible for:\n * - skipping internal reserved fields;\n * - expanding spread attribute objects;\n * - handling boolean attributes and SVG / xlink / xmlns namespaces;\n * - applying basic dangerous-URL protection;\n * - refusing raw HTML sinks such as `innerHTML` / `srcdoc`;\n * - staying silent during hydration to avoid overwriting SSR DOM.\n *\n * @param el - The element to patch.\n * @param key - The attribute key.\n * @param prev - Previous attribute value.\n * @param next - Next attribute value.\n */\nexport function patchAttr(el: Element, key: string, prev: AttrValue, next: AttrValue) {\n if (key === KEY_PROP) {\n if (next == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(next));\n }\n return;\n }\n if (key === SPREAD_NAME) {\n const prevObj = isObject(prev) ? (prev as Record<string, unknown>) : null;\n const nextObj = isObject(next) ? (next as Record<string, unknown>) : null;\n\n if (__DEV__) {\n if (next != null && !nextObj) {\n warn('spread attribute must be an object');\n }\n }\n\n if (prevObj) {\n for (const attrKey in prevObj) {\n if (attrKey === SPREAD_NAME) {\n if (__DEV__) {\n warn('nested spread attributes are ignored');\n }\n continue;\n }\n if (!nextObj || !(attrKey in nextObj)) {\n patchAttr(el, attrKey, prevObj[attrKey] as AttrValue, null);\n }\n }\n }\n\n if (nextObj) {\n for (const attrKey in nextObj) {\n if (attrKey === SPREAD_NAME) {\n if (__DEV__) {\n warn('nested spread attributes are ignored');\n }\n continue;\n }\n patchAttr(el, attrKey, prevObj?.[attrKey] as AttrValue, nextObj[attrKey] as AttrValue);\n }\n }\n return;\n }\n\n const elementIsSVG = el?.namespaceURI === SVG_NAMESPACE;\n const isXlink = elementIsSVG && startsWith(key, 'xlink:');\n const isXmlns = elementIsSVG && startsWith(key, 'xmlns:');\n\n const isBoolean = isSpecialBooleanAttr(key) || isBooleanAttr(key);\n\n // Early return if values are the same\n if (prev === next) {\n return;\n }\n\n // Event attributes are handled by the dedicated event layer, so skip them here.\n if (key.length > 2 && key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110) {\n return;\n }\n\n // Lowercase only after early returns, since it is only needed for specific checks like href.\n const lowerKey = key.toLowerCase();\n\n if (lowerKey === 'innerhtml' || lowerKey === 'srcdoc') {\n if (__DEV__) {\n warn(`${key} updates are ignored by patchAttr`);\n }\n return;\n }\n\n if (next == null) {\n if (isXlink) {\n el.removeAttributeNS(XLINK_NAMESPACE, key.slice(6));\n } else if (isXmlns) {\n const localName = key.slice(6);\n el.removeAttributeNS(XMLNS_NAMESPACE, localName);\n } else {\n el.removeAttribute(key);\n }\n return;\n }\n\n if (isBoolean) {\n if (includeBooleanAttr(next)) {\n el.setAttribute(key, '');\n } else {\n el.removeAttribute(key);\n }\n return;\n }\n\n const attrValue = isSymbol(next) ? String(next) : next;\n\n // Basic safety guard: block dangerous protocols on common URL attributes.\n const isUrlAttr =\n lowerKey === 'href' ||\n lowerKey === 'src' ||\n lowerKey === 'xlink:href' ||\n lowerKey === 'action' ||\n lowerKey === 'formaction' ||\n lowerKey === 'poster';\n if (isUrlAttr && isString(attrValue) && isUnsafeUrl(attrValue)) {\n return;\n }\n\n if (isXlink) {\n el.setAttributeNS(XLINK_NAMESPACE, key, String(attrValue));\n return;\n }\n\n if (isXmlns) {\n el.setAttributeNS(XMLNS_NAMESPACE, key, String(attrValue));\n return;\n }\n\n if (elementIsSVG) {\n el.setAttribute(key, String(attrValue));\n } else {\n if (key in el) {\n try {\n el[key] = attrValue;\n } catch {\n el.setAttribute(key, String(attrValue));\n }\n } else {\n el.setAttribute(key, String(attrValue));\n }\n }\n}\n","import { isString, normalizeClassName } from '@estjs/shared';\n\n/**\n * Supported value types for the class patch layer.\n */\nexport type ClassValue = string | Record<string, boolean> | ClassValue[] | null | undefined;\n\n/**\n * Applies a minimal class update to an element.\n *\n * Class values are normalized into a string first, then written through\n * `className` or `setAttribute('class')` depending on the element type.\n * Hydration stays silent and reuses the server-rendered result by default.\n *\n * @param el - The element to patch.\n * @param prev - Previous class value.\n * @param next - Next class value.\n * @param isSVG - Whether the element is an SVG element.\n * @returns {void}\n */\nexport function patchClass(\n el: Element,\n prev: unknown,\n next: unknown,\n isSVG: boolean = false,\n): void {\n if (prev === next) {\n return;\n }\n\n const normalizedNext = normalizeClass(next);\n if (!normalizedNext) {\n el.removeAttribute('class');\n return;\n }\n\n // Skip DOM write if normalized values are identical.\n // For string prev, it's already normalized; otherwise normalize.\n const normalizedPrev = isString(prev) ? prev : normalizeClass(prev);\n if (normalizedPrev === normalizedNext) {\n return;\n }\n\n // SVG nodes cannot rely on `className` consistently, so use the attribute path.\n if (isSVG) {\n el.setAttribute('class', normalizedNext);\n } else {\n el.className = normalizedNext;\n }\n}\n\n/**\n * Normalizes supported class inputs into a single string.\n */\nexport const normalizeClass = normalizeClassName;\n","import {\n camelCase,\n capitalize,\n isArray,\n isObject,\n isString,\n kebabCase,\n startsWith,\n} from '@estjs/shared';\n\n/**\n * Internal symbol used to mark raw CSS variable text in style objects.\n * @internal\n */\nexport const CSS_VAR_TEXT: unique symbol = Symbol('CSS_VAR_TEXT');\n\n// Precompile the `!important` detector to avoid recreating it on every write.\nconst importantRE = /\\s*!important$/;\n\n// Module-level regex for parsing CSS declaration property names from string styles.\n// Uses the `g` flag; callers must reset `lastIndex` before each use.\nconst styleDeclRE = /(?:^|;)\\s*([a-z][a-z\\d-]*)\\s*:/gi;\n\n// Candidate vendor prefixes and their lookup cache.\nconst prefixes = ['Webkit', 'Moz', 'ms'];\nconst prefixCache: Record<string, string> = {};\n\n/**\n * Supported value types for the style patch layer.\n */\nexport type Style = string | Record<string, string | string[]> | null | undefined;\n\n/**\n * Applies a minimal style update to an element.\n *\n * Supports both string-based and object-based styles, while staying silent\n * during hydration so the server-rendered DOM can be reused.\n *\n * @param el - The element to patch.\n * @param prev - Previous style value.\n * @param next - Next style value.\n * @returns {void}\n */\nexport function patchStyle(el: HTMLElement, prev: unknown, next?: unknown) {\n const style = el.style;\n\n if (next && isString(next)) {\n if (prev !== next) {\n style.cssText = next;\n }\n return;\n }\n\n if (!next) {\n if (prev) {\n el.removeAttribute('style');\n }\n return;\n }\n\n // When the previous value is an object, remove keys that disappeared in the next value.\n if (prev && !isString(prev)) {\n const prevObj = prev as Record<string, unknown>;\n for (const key in prevObj) {\n if (!next || (next as Record<string, unknown>)[key] == null) {\n setStyle(style, key, '');\n }\n }\n } else if (prev && isString(prev)) {\n // When the previous value is a string, approximate its keys and remove missing ones.\n // Match only CSS property-name tokens (letters/digits/hyphens before a colon).\n // This is linear and ignores semicolons inside url() or quoted values because\n // those fragments never match /letter+:/.\n styleDeclRE.lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = styleDeclRE.exec(prev)) !== null) {\n const key = match[1].trim();\n if (key && next && isObject(next) && (next as Record<string, unknown>)[key] == null) {\n setStyle(style, key, '');\n }\n }\n }\n\n // Apply the next style values last.\n if (next && !isString(next)) {\n const nextObj = next as Record<string, unknown>;\n for (const key in nextObj) {\n const value = nextObj[key];\n if (\n (!prev || isString(prev) || (prev as Record<string, unknown>)[key] !== value) &&\n value != null\n ) {\n setStyle(style, key, value as string | string[]);\n }\n }\n }\n}\n\n/**\n * Sets a single style property.\n *\n * Centralizes array-value expansion, CSS variable writes, vendor-prefix\n * resolution, and `!important` handling in one place.\n *\n * @param style - Target style object.\n * @param name - Style property name.\n * @param val - Style value.\n * @private\n */\nexport function setStyle(\n style: CSSStyleDeclaration,\n name: string,\n val: string | string[] | null | undefined,\n): void {\n // Array values represent multiple candidates for the same property.\n if (isArray(val)) {\n for (const element of val) {\n setStyle(style, name, element);\n }\n return;\n }\n\n if (val == null || val === '') {\n val = '';\n }\n\n const priority = isString(val) && importantRE.test(val) ? 'important' : '';\n if (priority) {\n val = val.replace(importantRE, '');\n }\n\n // CSS variables must be written through `setProperty()`.\n if (startsWith(name, '--')) {\n if (priority) {\n style.setProperty(name, val, priority);\n } else {\n style.setProperty(name, val);\n }\n return;\n }\n\n // Regular properties try vendor prefix resolution first.\n const prefixed = autoPrefix(style, name);\n\n // `!important` cannot use direct property assignment and must go through `setProperty()`.\n if (priority) {\n style.setProperty(toCssPropertyName(prefixed), val, priority);\n } else {\n style[prefixed] = val;\n }\n}\n\nfunction toCssPropertyName(name: string): string {\n const hyphenated = kebabCase(name);\n return startsWith(name, 'Webkit') || startsWith(name, 'Moz') || startsWith(name, 'ms')\n ? `-${hyphenated}`\n : hyphenated;\n}\n\n/**\n * Resolves the correct vendor-prefixed style property name.\n *\n * Results are cached in `prefixCache` to avoid repeated hot-path detection.\n *\n * @param style - Target style object.\n * @param rawName - Original property name.\n * @returns The property name that can be written to `style` directly.\n * @private\n */\nfunction autoPrefix(style: CSSStyleDeclaration, rawName: string): string {\n // Check the cache first.\n const cached = prefixCache[rawName];\n if (cached) {\n return cached;\n }\n\n // Try the standard camelCase property first.\n let name = camelCase(rawName);\n if (name !== 'filter' && name in style) {\n return (prefixCache[rawName] = name);\n }\n\n // If the standard property does not exist, try vendor-prefixed variants.\n name = capitalize(name);\n for (const prefix of prefixes) {\n const prefixed = prefix + name;\n if (prefixed in style) {\n return (prefixCache[rawName] = prefixed);\n }\n }\n\n return rawName;\n}\n","import { HYDRATION_ANCHOR_ATTR, isBrowser, warn } from '@estjs/shared';\nimport { patchAttr } from './operations/attr';\nimport { patchClass } from './operations/class';\nimport { patchStyle } from './operations/style';\nimport { template } from './renderer';\n\n// ---------------------------------------------------------------------------\n// Hydration key counter\n// ---------------------------------------------------------------------------\n\nlet _hydrationKey = 0;\n\nexport function getHydrationKey(): string {\n return String(_hydrationKey++);\n}\n\nexport function resetHydrationKey(): void {\n _hydrationKey = 0;\n}\n\n// ---------------------------------------------------------------------------\n// Hydration state + registry\n// ---------------------------------------------------------------------------\n\n/**\n * Module-private hydration flag.\n *\n * Read via `isHydrating()` instead of importing as a `let` binding — this\n * avoids cross-bundle \"live binding\" pitfalls when consumers go through a\n * barrel-export (`import { isHydrating } from '@estjs/template'`).\n */\nlet _isHydrating = false;\n\n/**\n * Returns whether the runtime is currently in the hydration first-pass.\n *\n * @returns True while hydrating, false otherwise.\n */\nexport function isHydrating(): boolean {\n return _isHydrating;\n}\n\n/**\n * Pre-built map of data-hk → Element, populated by beginHydration().\n * Mirrors SolidJS's sharedConfig.registry / gatherHydratable().\n */\nconst _registry = new Map<string, Element>();\n\n/**\n * Gather all [data-hk] elements under `root` into the registry.\n * Called once at hydration start — O(n) DOM query, then O(1) lookups.\n *\n * @param root - The root element to scan.\n */\nfunction gatherHydratable(root: Element): void {\n const nodes = root.querySelectorAll('[data-hk]');\n for (const node of nodes) {\n const key = (node as HTMLElement).dataset.hk;\n if (key != null && !_registry.has(key)) {\n _registry.set(key, node as Element);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Teleport (Portal) hydration anchors\n// ---------------------------------------------------------------------------\n\n/** FIFO queue of `<!--teleport-anchor-->` comments at Portal call sites. */\nconst _teleportCallsiteAnchors: Comment[] = [];\n\n/** Per-target FIFO of `<!--teleport-start-->` comments inside teleport targets. */\nconst _teleportTargetStarts = new Map<Element, Comment[]>();\n\n/** Scan `document.body` for teleport comment markers, classifying each into its queue. */\nfunction gatherTeleportAnchors(): void {\n if (typeof document === 'undefined') return;\n const walker = document.createNodeIterator(document.body, NodeFilter.SHOW_COMMENT);\n let node: Comment | null;\n\n while ((node = walker.nextNode() as Comment | null)) {\n const data = node.data;\n if (data === 'teleport-anchor') {\n _teleportCallsiteAnchors.push(node);\n } else if (data === 'teleport-start') {\n const parent = node.parentElement;\n if (!parent) continue;\n let bucket = _teleportTargetStarts.get(parent);\n if (!bucket) {\n bucket = [];\n _teleportTargetStarts.set(parent, bucket);\n }\n bucket.push(node);\n }\n }\n}\n\n/** Pop the next call-site anchor comment, or `null` if exhausted. */\nexport function consumeTeleportAnchor(): Comment | null {\n return _teleportCallsiteAnchors.shift() ?? null;\n}\n\n/** Pop the next teleport block from `target`, returning start/end markers and inner nodes. */\nexport function consumeTeleportBlock(\n target: Element,\n): { start: Comment; end: Comment; nodes: Node[] } | null {\n const bucket = _teleportTargetStarts.get(target);\n const start = bucket?.shift();\n if (!start) return null;\n\n const nodes: Node[] = [];\n let cursor: Node | null = start.nextSibling;\n while (cursor) {\n if (cursor.nodeType === Node.COMMENT_NODE && (cursor as Comment).data === 'teleport-end') {\n return { start, end: cursor as Comment, nodes };\n }\n nodes.push(cursor);\n cursor = cursor.nextSibling;\n }\n\n // Malformed block — no <!--teleport-end--> found. Return null to signal\n // a hydration mismatch rather than returning `{ start, end: start }` which\n // would be semantically incorrect.\n if (__DEV__) {\n warn('[Portal] hydration: orphaned <!--teleport-start--> without matching <!--teleport-end-->');\n }\n return null;\n}\n\n/**\n * Begins hydration.\n *\n * @param root - The root element to hydrate.\n */\nexport function beginHydration(root: Element): void {\n _isHydrating = true;\n _hydrationKey = 0;\n _registry.clear();\n _teleportCallsiteAnchors.length = 0;\n _teleportTargetStarts.clear();\n gatherHydratable(root);\n gatherTeleportAnchors();\n}\n\n/**\n * Ends hydration.\n *\n * @returns {void}\n */\nexport function endHydration(): void {\n _isHydrating = false;\n _registry.clear();\n _teleportCallsiteAnchors.length = 0;\n _teleportTargetStarts.clear();\n}\n\nexport function claimHydratedNodes(parent: Node, expected: Node[], before?: Node): Node[] | null {\n if (!_isHydrating || (before && before.parentNode !== parent)) return null;\n if (expected.length === 0) return [];\n\n const claimed: Node[] = new Array(expected.length);\n let cursor: Node | null = before ? before.previousSibling : parent.lastChild;\n\n for (let i = expected.length - 1; i >= 0; i--) {\n if (!cursor) return null;\n\n const expectedNode = expected[i];\n\n const expectedType = expectedNode.nodeType;\n if (expectedType === Node.TEXT_NODE) {\n const expectedText = expectedNode.textContent ?? '';\n if (!expectedText || cursor.nodeType !== Node.TEXT_NODE) return null;\n\n const existingText = cursor.textContent ?? '';\n if (existingText === expectedText) {\n claimed[i] = cursor;\n cursor = cursor.previousSibling;\n continue;\n }\n\n if (!existingText.endsWith(expectedText)) return null;\n\n const prefix = existingText.slice(0, existingText.length - expectedText.length);\n if (!prefix) return null;\n const prefixNode = document.createTextNode(prefix);\n parent.insertBefore(prefixNode, cursor);\n cursor.textContent = expectedText;\n claimed[i] = cursor;\n cursor = prefixNode;\n continue;\n }\n\n if (cursor.nodeType !== expectedType) return null;\n if (expectedType === Node.ELEMENT_NODE) {\n if ((cursor as Element).tagName !== (expectedNode as Element).tagName) return null;\n } else if (\n expectedType === Node.COMMENT_NODE &&\n (cursor as Comment).data !== (expectedNode as Comment).data\n ) {\n return null;\n }\n\n claimed[i] = cursor;\n cursor = cursor.previousSibling;\n }\n\n return claimed;\n}\n\nfunction resolveHydrationKey(parent: Element): string | null {\n const el = parent as HTMLElement;\n return el.dataset.hk ?? (parent.closest('[data-hk]') as HTMLElement | null)?.dataset.hk ?? null;\n}\n\nfunction expectedHydrationSlot(parent: Element | null, index: number): string {\n if (_isHydrating && parent) {\n const key = resolveHydrationKey(parent);\n if (key) return `${key}-${index}`;\n }\n return String(index);\n}\n\nexport function hydrationMarker(parent: Node | null, index: number): Comment | null {\n if (!parent || index < 0) return null;\n\n const expected = expectedHydrationSlot(parent instanceof Element ? parent : null, index);\n let fallbackIndex = 0;\n\n let cursor = parent.firstChild;\n while (cursor) {\n if (cursor.nodeType === Node.COMMENT_NODE) {\n const comment = cursor as Comment;\n if (comment.data === expected) return comment;\n if (!_isHydrating && comment.data === '' && fallbackIndex++ === index) return comment;\n }\n cursor = cursor.nextSibling;\n }\n\n return null;\n}\n\nexport function hydrationAnchor(parent: Node | null, index: number): Node | null {\n if (!(parent instanceof Element) || index < 0) return null;\n\n const expected = expectedHydrationSlot(parent, index);\n let cursor = parent.firstChild;\n while (cursor) {\n if (cursor instanceof Element && cursor.getAttribute(HYDRATION_ANCHOR_ATTR) === expected) {\n return cursor;\n }\n cursor = cursor.nextSibling;\n }\n return null;\n}\n\n/**\n * Returns a factory function that, when called at component render time:\n * - During hydration: increments the key, looks up the pre-built registry,\n * and returns the ACTUAL SSR DOM node (no cloneNode).\n * - During CSR: clones the parsed template as usual.\n *\n * @param html - The HTML template string.\n * @returns A factory function that returns a DOM element.\n */\nexport function getRenderedElement(html: string): () => Element {\n if (!isBrowser()) {\n return () => {\n throw new Error('[essor] getRenderedElement called in non-browser environment');\n };\n }\n\n let _csrFactory: (() => Element) | null = null;\n\n return (): Element => {\n if (!_isHydrating) {\n // CSR path — clone the template as normal\n if (!_csrFactory) _csrFactory = template(html) as () => Element;\n return _csrFactory();\n }\n\n // Hydration path — key incremented HERE (render time) to match server order\n const key = getHydrationKey();\n const node = _registry.get(key);\n\n if (node) {\n _registry.delete(key);\n return node; // TRUE DOM reuse — no cloneNode\n }\n\n // Mismatch: SSR node not found, fall back to CSR creation\n warn(`[essor] hydration mismatch: no SSR element for key \"${key}\"`);\n if (!_csrFactory) _csrFactory = template(html) as () => Element;\n return _csrFactory();\n };\n}\n\n// ---------------------------------------------------------------------------\n// Hydrate-mode patch wrappers (silence DOM writes during first hydration run)\n// ---------------------------------------------------------------------------\n\n/**\n * Patches class while considering hydration state.\n *\n * @param el - The element to patch.\n * @param prev - Previous class value.\n * @param next - Next class value.\n * @param isSVG - Whether the element is an SVG element.\n */\nexport function patchClassHydrate(\n el: Element,\n prev: unknown,\n next: unknown,\n isSVG?: boolean,\n): void {\n if (_isHydrating) return;\n patchClass(el, prev, next, isSVG);\n}\n\n/**\n * Patches attribute while considering hydration state.\n *\n * @param el - The element to patch.\n * @param key - The attribute key.\n * @param prev - Previous attribute value.\n * @param next - Next attribute value.\n */\nexport function patchAttrHydrate(el: Element, key: string, prev: unknown, next: unknown): void {\n if (_isHydrating) return;\n patchAttr(el, key, prev as never, next as never);\n}\n\n/**\n * Patches style while considering hydration state.\n *\n * @param el - The element to patch.\n * @param prev - Previous style value.\n * @param next - Next style value.\n */\nexport function patchStyleHydrate(el: HTMLElement, prev: unknown, next?: unknown): void {\n if (_isHydrating) return;\n patchStyle(el, prev, next);\n}\n","import { insertNode, removeNode } from './dom';\n\n/**\n * Resolves insert anchor.\n *\n * @param parent - The parent node.\n * @param candidate - The candidate anchor node.\n * @returns The resolved anchor node or null.\n */\nfunction resolveInsertAnchor(parent: Node, candidate?: Node | null): Node | null {\n return candidate && candidate.parentNode === parent ? candidate : null;\n}\n\n/**\n * Reconcile two arrays of real DOM nodes with minimal DOM operations.\n * This is the list reconciler for fine-grained rendering.\n *\n * @param parent - The parent node.\n * @param oldNodes - The array of current nodes.\n * @param newNodes - The array of new nodes.\n * @param anchor - Optional reference node for insertion.\n * @returns The new array of nodes.\n */\nexport function reconcileArrays(\n parent: Node,\n oldNodes: Node[],\n newNodes: Node[],\n anchor?: Node,\n): Node[] {\n const fallbackAnchor = resolveInsertAnchor(parent, anchor);\n const oldLength = oldNodes.length;\n const newLength = newNodes.length;\n\n if (oldLength === 0 && newLength === 0) return newNodes;\n\n if (oldLength === 0) {\n for (let i = 0; i < newLength; i++) {\n insertNode(parent, newNodes[i], fallbackAnchor);\n }\n return newNodes;\n }\n\n if (newLength === 0) {\n for (let i = 0; i < oldLength; i++) {\n removeNode(oldNodes[i]);\n }\n return [];\n }\n\n let start = 0;\n let oldEnd = oldLength - 1;\n let newEnd = newLength - 1;\n\n while (start <= oldEnd && start <= newEnd) {\n if (oldNodes[start] === newNodes[start]) {\n start++;\n } else {\n break;\n }\n }\n\n while (oldEnd >= start && newEnd >= start) {\n if (oldNodes[oldEnd] === newNodes[newEnd]) {\n oldEnd--;\n newEnd--;\n } else {\n break;\n }\n }\n\n if (start > oldEnd) {\n if (start <= newEnd) {\n const nextPos = newEnd + 1;\n const nextNode = resolveInsertAnchor(\n parent,\n nextPos < newLength ? newNodes[nextPos] : fallbackAnchor,\n );\n for (let i = start; i <= newEnd; i++) {\n insertNode(parent, newNodes[i], nextNode);\n }\n }\n } else if (start > newEnd) {\n for (let i = start; i <= oldEnd; i++) {\n removeNode(oldNodes[i]);\n }\n } else {\n reconcileUnknownSequence(parent, oldNodes, newNodes, start, oldEnd, newEnd, fallbackAnchor);\n }\n\n return newNodes;\n}\n\n/**\n * Reconciles unknown sequence of nodes.\n *\n * @param parent - The parent node.\n * @param oldNodes - Current nodes.\n * @param newNodes - New nodes.\n * @param start - Start index of the sequence.\n * @param oldEnd - End index of the old sequence.\n * @param newEnd - End index of the new sequence.\n * @param anchor - Optional reference node for insertion.\n * @returns {void}\n */\nfunction reconcileUnknownSequence(\n parent: Node,\n oldNodes: Node[],\n newNodes: Node[],\n start: number,\n oldEnd: number,\n newEnd: number,\n anchor?: Node | null,\n): void {\n const newLength = newEnd - start + 1;\n\n // For very short sequences, linear search beats Map allocation overhead\n const findNewIndex =\n newLength <= 4\n ? (node: Node) => {\n for (let i = start; i <= newEnd; i++) {\n if (newNodes[i] === node) return i;\n }\n return undefined;\n }\n : (() => {\n const map = new Map<Node, number>();\n for (let i = start; i <= newEnd; i++) map.set(newNodes[i], i);\n return (node: Node) => map.get(node);\n })();\n\n const newIndexToOldIndexMap = new Int32Array(newLength);\n\n let patched = 0;\n let moved = false;\n let maxNewIndexSoFar = 0;\n\n for (let i = start; i <= oldEnd; i++) {\n const oldNode = oldNodes[i];\n\n if (patched >= newLength) {\n removeNode(oldNode);\n continue;\n }\n\n const newIndex = findNewIndex(oldNode);\n\n if (newIndex === undefined) {\n removeNode(oldNode);\n } else {\n newIndexToOldIndexMap[newIndex - start] = i + 1;\n\n if (newIndex >= maxNewIndexSoFar) {\n maxNewIndexSoFar = newIndex;\n } else {\n moved = true;\n }\n patched++;\n }\n }\n\n const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : [];\n let j = increasingNewIndexSequence.length - 1;\n\n for (let i = newLength - 1; i >= 0; i--) {\n const nextIndex = start + i;\n const nextNode = newNodes[nextIndex];\n const anchorNode = resolveInsertAnchor(\n parent,\n nextIndex + 1 < newNodes.length ? newNodes[nextIndex + 1] : anchor,\n );\n\n if (newIndexToOldIndexMap[i] === 0) {\n insertNode(parent, nextNode, anchorNode);\n } else if (moved) {\n if (j < 0 || i !== increasingNewIndexSequence[j]) {\n insertNode(parent, nextNode, anchorNode);\n } else {\n j--;\n }\n }\n }\n}\n\n/**\n * Compute the Longest Increasing Subsequence using patience sorting.\n * O(n log n) time, O(n) space.\n *\n * @param arr - The array of indices.\n * @returns The LIS indices.\n */\nexport function getSequence(arr: Int32Array): number[] {\n const p = new Int32Array(arr.length);\n const result = [0];\n const len = arr.length;\n let i: number;\n let j: number;\n let u: number;\n let v: number;\n let c: number;\n\n for (i = 0; i < len; i++) {\n const arrI = arr[i];\n if (arrI !== 0) {\n j = result[result.length - 1];\n if (arr[j] < arrI) {\n p[i] = j;\n result.push(i);\n continue;\n }\n u = 0;\n v = result.length - 1;\n while (u < v) {\n c = (u + v) >> 1;\n if (arr[result[c]] < arrI) {\n u = c + 1;\n } else {\n v = c;\n }\n }\n if (arrI < arr[result[u]]) {\n if (u > 0) {\n p[i] = result[u - 1];\n }\n result[u] = i;\n }\n }\n }\n u = result.length;\n v = result[u - 1];\n while (u-- > 0) {\n result[u] = v;\n v = p[v];\n }\n return result;\n}\n","import { coerceArray, error, hasOwn, isFunction, isObject, isPrimitive, warn } from '@estjs/shared';\nimport { effect } from '@estjs/signals';\nimport { isComponent } from './component';\nimport { KEY_PROP } from './constants';\nimport { type Scope, getActiveScope, onCleanup, runWithScope } from './scope';\nimport { claimHydratedNodes, isHydrating } from './hydration';\nimport { reconcileArrays } from './reconcile';\nimport type { AnyNode } from './types';\n\n/**\n * Remove node from its parent\n *\n * @param node Node to remove\n *\n * @example\n * ```typescript\n * removeNode(elementToRemove);\n * ```\n */\nexport function removeNode(node: AnyNode): void {\n if (!node) return;\n\n if (isComponent(node)) {\n node.destroy();\n } else {\n const element = node as ChildNode;\n if (element.parentNode) {\n element.remove();\n }\n }\n}\n\n/**\n * Insert child node\n * Handle insertion of component nodes and DOM nodes\n *\n * @param parent Parent node\n * @param child Child node\n * @param before Reference node for insertion\n */\nexport function insertNode(parent: Node, child: AnyNode, before?: AnyNode): void {\n if (!parent || !child) return;\n\n const beforeNode = isComponent(before) ? before.firstChild : (before as Node);\n\n if (isComponent(child)) {\n child.mount(parent, beforeNode);\n return;\n }\n\n if (beforeNode) {\n parent.insertBefore(child as Node, beforeNode);\n } else {\n if (__DEV__) {\n if (!child) {\n error('insertNode: child is not a Node', child);\n }\n }\n parent.appendChild(child as Node);\n }\n}\n\n/**\n * Replace child node\n * Handle replacement of component nodes and DOM nodes\n *\n * @param parent Parent node\n * @param newNode New node\n * @param oldNode Old node to be replaced\n */\nexport function replaceNode(parent: Node, newNode: AnyNode, oldNode: AnyNode): void {\n if (!parent || !newNode || !oldNode || newNode === oldNode) return;\n\n const beforeNode: AnyNode | undefined = isComponent(oldNode)\n ? oldNode.beforeNode\n : (oldNode as Node).nextSibling!;\n removeNode(oldNode);\n insertNode(parent, newNode, beforeNode);\n}\n\n/**\n * Check if two nodes are the same (inline for performance)\n * This combines key check and type check\n */\nexport function isSameNode(a: AnyNode, b: AnyNode): boolean {\n // Check key equality first (fast path)\n const keyA = getNodeKey(a);\n const keyB = getNodeKey(b);\n\n if (keyA !== keyB) {\n return false;\n }\n\n // Inline type check to avoid function call\n const aIsComponent = isComponent(a);\n const bIsComponent = isComponent(b);\n\n if (aIsComponent && bIsComponent) {\n return a.component === b.component;\n }\n\n if (aIsComponent !== bIsComponent) {\n return false;\n }\n\n if (isPrimitive(a) || isPrimitive(b)) {\n return a === b;\n }\n\n const aNode = a as Node;\n const bNode = b as Node;\n\n if (aNode.nodeType !== bNode.nodeType) {\n return false;\n }\n\n if (aNode.nodeType === Node.ELEMENT_NODE) {\n return (aNode as Element).tagName === (bNode as Element).tagName;\n }\n\n return true;\n}\n\n/**\n * Extract the optional stable key associated with a runtime node.\n */\nfunction getNodeKey(node: AnyNode): unknown {\n if (!node) {\n return undefined;\n }\n\n if (isComponent(node)) {\n return hasOwn(node.props, KEY_PROP) ? node.props[KEY_PROP] : undefined;\n }\n\n if (node instanceof Element) {\n return node.getAttribute(KEY_PROP);\n }\n\n if (isObject(node) && hasOwn(node, KEY_PROP)) {\n return Reflect.get(node as object, KEY_PROP);\n }\n\n return undefined;\n}\n\n/**\n * Normalize node for reconciliation.\n *\n * Performance-critical: uses inlined typeof / instanceof checks\n * instead of utility function calls in the hot path.\n */\nexport function normalizeNode(node: unknown): Node {\n // Fast path: already a DOM Node (covers Element, Text, Comment, etc.)\n if (node instanceof Node) return node;\n\n // Component instances must pass through as-is — the reconciler and\n // insertNode/removeNode handle them via isComponent() checks.\n if (isComponent(node)) return node as unknown as Node;\n\n // Primitives → text node (inlined for speed)\n const t = typeof node;\n if (node == null || t === 'string' || t === 'number' || t === 'boolean' || t === 'symbol') {\n return document.createTextNode(node === false || node == null ? '' : String(node));\n }\n\n // Plain objects should not be rendered directly — convert to text and warn\n if (__DEV__ && isObject(node)) {\n warn(\n 'Rendering a plain object as a node is not recommended. ' +\n 'The object will be converted to its string representation.',\n node,\n );\n }\n return document.createTextNode(String(node));\n}\n/**\n * Reactive node insertion with binding support\n *\n * @param parent Parent node\n * @param nodeFactory Node factory function or static node\n * @param before Reference node for insertion position\n * @example\n * ```typescript\n * insert(container, () => message.value, null);\n * insert(container, staticElement, referenceNode);\n * insert(container, \"Hello World\", null); // Direct string support\n * ```\n */\nexport function insert(parent: Node, nodeFactory: AnyNode, before?: Node) {\n if (!parent) return;\n // Use a mutable reference so cleanup can release it for GC.\n // The scope is only needed while the effect is active — after cleanup,\n // holding it would prevent the entire ancestor scope chain from being collected.\n let parentScope: Scope | null = getActiveScope();\n\n let renderedNodes: Node[] = [];\n let isFirstRun = true;\n\n /**\n * Resolves a raw node value into a flat array of DOM Nodes.\n * Fast-paths simple cases (single Node, single primitive) to avoid\n * intermediate array allocations.\n */\n const resolveNodes = (raw: unknown): Node[] => {\n // Fast path: already a DOM Node\n if (raw instanceof Node) return [raw];\n\n // Fast path: Component instance (skip normalizeNode entirely)\n if (isComponent(raw)) return [raw as unknown as Node];\n\n // Fast path: single primitive → text node (inlined typeof for speed)\n const t = typeof raw;\n if (raw == null || t === 'string' || t === 'number' || t === 'boolean') {\n return [normalizeNode(raw)];\n }\n\n // General path: coerce, resolve nested functions, flatten, normalize\n return coerceArray(raw)\n .map((item) => (isFunction(item) ? item() : item))\n .flatMap((i) => i)\n .map(normalizeNode) as Node[];\n };\n\n // Create effect for reactive updates\n const effectRunner = effect(() => {\n const executeUpdate = () => {\n const rawNodes = isFunction(nodeFactory) ? nodeFactory() : nodeFactory;\n const nodes = resolveNodes(rawNodes);\n // Hydration mode: skip DOM operations on first run only when every\n // node already exists under the target parent. Component instances and\n // fallback CSR nodes still need the normal reconcile path.\n if (\n isFirstRun &&\n isHydrating() &&\n nodes.every((node) => node instanceof Node && node.parentNode === parent)\n ) {\n renderedNodes = nodes;\n isFirstRun = false;\n return;\n }\n if (isFirstRun && isHydrating()) {\n const hydratedNodes = claimHydratedNodes(parent, nodes, before);\n if (hydratedNodes) {\n renderedNodes = hydratedNodes;\n isFirstRun = false;\n return;\n }\n }\n renderedNodes = reconcileArrays(parent, renderedNodes as Node[], nodes, before) as Node[];\n isFirstRun = false;\n };\n\n // If we have a parent scope, run within it to maintain context hierarchy\n if (parentScope && !parentScope.isDestroyed) {\n runWithScope(parentScope, executeUpdate);\n } else {\n executeUpdate();\n }\n });\n\n onCleanup(() => {\n effectRunner.stop();\n for (const node of renderedNodes) removeNode(node);\n renderedNodes = [];\n // Release scope reference so GC can reclaim the ancestor scope chain\n parentScope = null;\n });\n\n return renderedNodes;\n}\n/**\n * Returns the first child of a node.\n *\n * @param node - The node to get the child from.\n * @returns The first child node or null.\n */\nexport function child(node: Node | null): Node | null {\n return node?.firstChild || null;\n}\n\n/**\n * Returns the next sibling after advancing by `step`.\n *\n * @param node - The starting node.\n * @param step - Number of steps to advance.\n * @returns The resulting sibling node or null.\n */\nexport function next(node: Node | null, step: number = 1): Node | null {\n while (node && step > 0) {\n node = node.nextSibling;\n step--;\n }\n return node || null;\n}\n\n/**\n * Returns the child node at the requested index.\n *\n * @param node - The parent node.\n * @param index - The child index.\n * @returns The child node at index or null.\n */\nexport function nthChild(node: Node | null, index: number): Node | null {\n if (!node || index < 0) return null;\n let current = node.firstChild;\n while (current && index > 0) {\n current = current.nextSibling;\n index--;\n }\n return current || null;\n}\n","/**\n * Extended listener options with optional event delegation support.\n */\nexport interface EventOptions extends AddEventListenerOptions {\n /**\n * Selector used for event delegation.\n *\n * When provided, the handler only runs if the event target matches the selector.\n */\n delegate?: string;\n}\n\n/**\n * Cleanup function signature for event listeners.\n */\nexport type EventCleanup = () => void;\n\n/**\n * Adds an event listener to an element with optional simple delegation.\n *\n * Without `delegate`, this is a thin wrapper around native `addEventListener()`.\n * When `delegate` is provided, the runtime first checks the selector match before\n * dispatching the real handler to the caller.\n *\n * @param el - The element to add the listener to.\n * @param event - The name of the event to listen for.\n * @param handler - The event handler function.\n * @param options - Optional event listener options.\n * @returns A cleanup function that removes the listener.\n */\nexport function addEvent(\n el: Element,\n event: string,\n handler: EventListener,\n options?: EventOptions,\n): EventCleanup {\n if (!options?.delegate) {\n el.addEventListener(event, handler, options);\n return () => el.removeEventListener(event, handler, options);\n }\n\n // Delegation path: match the selector first, then forward the event to the caller.\n const selector = options.delegate;\n /**\n * Dispatches delegated events only for matching descendants.\n */\n const wrappedHandler = (e: Event) => {\n const target = e.target as Element;\n if (target.matches(selector) || target.closest(selector)) {\n handler.call(el, e);\n }\n };\n\n // Extract delegate from options and pass the rest to addEventListener\n const { delegate: _, ...nativeOptions } = options;\n\n el.addEventListener(event, wrappedHandler, nativeOptions);\n\n return () => {\n el.removeEventListener(event, wrappedHandler, nativeOptions);\n };\n}\n","import { error, isPromise } from '@estjs/shared';\nimport { type Scope, getActiveScope, runWithScope } from './scope';\n\nexport type LifecycleHook = () => void | Promise<void>;\n\n/**\n * Registers scoped hook.\n *\n * @param scope - The scope to register the hook for.\n * @param listKey - The key of the hook list.\n * @param hook - The hook function to register.\n */\nfunction registerScopedHook(\n scope: Scope,\n listKey: 'onMount' | 'onUpdate' | 'onDestroy',\n hook: LifecycleHook,\n): void {\n let hookList = scope[listKey];\n if (!hookList) {\n hookList = [];\n scope[listKey] = hookList;\n }\n hookList.push(hook);\n}\n\n/**\n * Executes lifecycle hooks and captures async rejections in dev mode.\n *\n * @param hooks - The array of hooks to execute.\n * @param scopeId - The ID of the scope.\n * @param phase - The lifecycle phase.\n * @returns A promise if any hooks are asynchronous, or undefined.\n */\nfunction executeHooks(\n hooks: LifecycleHook[],\n scopeId: number,\n phase: 'mount' | 'update' | 'destroy',\n): void | Promise<void> {\n const len = hooks.length;\n if (len === 0) return;\n\n let pending: Promise<void>[] | undefined;\n\n for (let i = 0; i < len; i++) {\n try {\n const result = hooks[i]();\n if (isPromise(result)) {\n const safePromise = result.catch((error_) => {\n if (__DEV__) {\n error(`Scope(${scopeId}): Async ${phase} hook rejected:`, error_);\n }\n });\n (pending || (pending = [])).push(safePromise);\n }\n } catch (error_) {\n if (__DEV__) {\n error(`Scope(${scopeId}): Error in ${phase} hook:`, error_);\n }\n }\n }\n\n if (!pending) return;\n return Promise.all(pending).then(() => {});\n}\n\n/**\n * Register a mount lifecycle hook.\n * If the scope is already mounted, the hook is executed immediately.\n *\n * @param hook - The hook function to register.\n * @returns {void}\n */\nexport function onMount(hook: LifecycleHook): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) error('onMount() must be called within a scope');\n return;\n }\n\n if (scope.isMounted) {\n try {\n const result = hook();\n if (isPromise(result)) {\n result.catch((error_) => {\n if (__DEV__) error(`Scope(${scope.id}): Async mount hook rejected:`, error_);\n });\n }\n } catch (error_) {\n if (__DEV__) error(`Scope(${scope.id}): Error in mount hook:`, error_);\n }\n return;\n }\n\n registerScopedHook(scope, 'onMount', hook);\n}\n\n/**\n * Register an update lifecycle hook.\n *\n * @param hook - The hook function to register.\n * @returns {void}\n */\nexport function onUpdate(hook: LifecycleHook): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) error('onUpdate() must be called within a scope');\n return;\n }\n\n registerScopedHook(scope, 'onUpdate', hook);\n}\n\n/**\n * Register a destroy lifecycle hook.\n *\n * @param hook - The hook function to register.\n * @returns {void}\n */\nexport function onDestroy(hook: LifecycleHook): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) error('onDestroy() must be called within a scope');\n return;\n }\n\n registerScopedHook(scope, 'onDestroy', hook);\n}\n\n/**\n * Trigger mount lifecycle hooks for a scope.\n *\n * @param scope - The scope to trigger hooks for.\n * @returns A promise if any hooks are asynchronous, or undefined.\n */\nexport function triggerMountHooks(scope: Scope): void | Promise<void> {\n if (scope.isDestroyed) {\n return;\n }\n if (!scope.onMount || scope.onMount.length === 0) {\n scope.isMounted = true;\n return;\n }\n\n const mountHooks = scope.onMount;\n const result = runWithScope(scope, () => executeHooks(mountHooks, scope.id, 'mount'));\n mountHooks.length = 0;\n scope.isMounted = true;\n return result;\n}\n\n/**\n * Trigger update lifecycle hooks for a scope.\n *\n * @param scope - The scope to trigger hooks for.\n * @returns A promise if any hooks are asynchronous, or undefined.\n */\nexport function triggerUpdateHooks(scope: Scope): void | Promise<void> {\n if (scope.isDestroyed || !scope.onUpdate || scope.onUpdate.length === 0) return;\n return runWithScope(scope, () => executeHooks(scope.onUpdate!, scope.id, 'update'));\n}\n\n// NOTE: destroy hooks are executed directly inside `disposeScope` to keep\n// the teardown path synchronous and free of extra `runWithScope` frames.\n// See `./scope.ts`.\n","import { type Signal, isComputed, isSignal, shallowReactive } from '@estjs/signals';\nimport { isFunction, isOn } from '@estjs/shared';\n\nimport { COMPONENT_STATE, COMPONENT_TYPE, REF_KEY } from './constants';\nimport { insert, insertNode, removeNode } from './dom';\nimport { createScope, disposeScope, getActiveScope, runWithScope } from './scope';\nimport { type EventCleanup, addEvent } from './operations/event';\nimport { triggerMountHooks, triggerUpdateHooks } from './lifecycle';\nimport type { AnyNode, ComponentFn, ComponentProps } from './types';\nimport type { Scope } from './scope';\n\n/**\n * Install every own-key descriptor from `source` onto `target` verbatim\n * (getters stay getters), optionally deleting any target key not present\n * in the incoming source.\n *\n * Preserving getter descriptors is the whole reason the component body can\n * read `props.foo` and transparently get the latest reactive value — the\n * compiler emits dynamic props as `{ get foo() { return signal.value } }`.\n * `{ ...props }` would snapshot each getter once and kill reactivity;\n * `defineProperty` keeps it alive.\n */\nfunction syncDescriptors(target: object, source: object, pruneMissing = false): void {\n for (const key of Object.getOwnPropertyNames(source)) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)!);\n }\n if (pruneMissing) {\n const sourceKeySet = new Set(Object.getOwnPropertyNames(source));\n for (const key of Object.getOwnPropertyNames(target)) {\n if (!sourceKeySet.has(key)) delete (target as Record<string, unknown>)[key];\n }\n }\n}\n\n/**\n * Read a prop value through its descriptor so dynamic getters (ref/event\n * handlers emitted as `get onClick() { ... }`) resolve to the latest value.\n */\nfunction readProp(source: object, key: string): unknown {\n const descriptor = Object.getOwnPropertyDescriptor(source, key)!;\n return descriptor.get ? descriptor.get.call(source) : descriptor.value;\n}\n\nexport class Component<P extends ComponentProps = {}> {\n public readonly [COMPONENT_TYPE.NORMAL] = true;\n\n public scope: Scope | null = null;\n public state: COMPONENT_STATE = COMPONENT_STATE.INITIAL;\n public beforeNode: Node | undefined = undefined;\n public renderedNodes: Node[] = [];\n public firstChild: Node | undefined = undefined;\n\n protected parentNode: Node | undefined = undefined;\n\n private readonly parentScope: Scope | null;\n private readonly reactiveProps: P;\n private rootEventCleanups: EventCleanup[] = [];\n private rootRefCleanup?: () => void;\n\n constructor(\n public readonly component: ComponentFn<P>,\n public props: P = {} as P,\n ) {\n this.parentScope = getActiveScope();\n // Shallow-reactive container that inherits the raw props' descriptors.\n // The component body reads from this container; `update()` re-installs\n // new descriptors in-place so existing closures keep working.\n const container = {} as P;\n syncDescriptors(container, props);\n this.reactiveProps = shallowReactive(container) as P;\n }\n\n /**\n * Mount the component into `parentNode` (optionally before `beforeNode`).\n * If already rendered, the existing DOM is re-inserted without re-running\n * the component function.\n */\n mount(parentNode: Node, beforeNode?: Node): AnyNode[] {\n this.parentNode = parentNode;\n this.beforeNode = beforeNode;\n this.state = COMPONENT_STATE.MOUNTING;\n\n // Fast path: already rendered — just move the nodes.\n if (this.renderedNodes.length > 0) {\n for (const node of this.renderedNodes) {\n insertNode(parentNode, node, beforeNode);\n }\n this.state = COMPONENT_STATE.MOUNTED;\n return this.renderedNodes;\n }\n\n const scope = createScope(this.parentScope ?? getActiveScope());\n this.scope = scope;\n\n const renderedNodes = runWithScope(scope, () => {\n let result: unknown = this.component(this.reactiveProps);\n\n // Render-function pattern: a component may return a factory instead of\n // the element directly.\n if (isFunction(result)) {\n result = (result as Function)(this.reactiveProps);\n }\n\n // Unwrap signal / computed — only their current value reaches the DOM.\n if (isSignal<Element>(result)) {\n result = result.value;\n } else if (isComputed<Element>(result)) {\n result = result.value;\n }\n\n return insert(parentNode, result as AnyNode, beforeNode) ?? [];\n });\n\n this.renderedNodes = renderedNodes;\n this.firstChild = renderedNodes[0];\n\n // Wire refs/events only after renderedNodes/firstChild are set.\n this.syncSpecialProps(this.props);\n\n this.state = COMPONENT_STATE.MOUNTED;\n triggerMountHooks(scope);\n\n return this.renderedNodes;\n }\n\n /**\n * Re-install props into the same `reactiveProps` container (preserving\n * any closures already holding a reference to it) and re-apply\n * refs/events against the current root element.\n */\n update(props: P): void {\n this.props = props;\n const scope = this.scope;\n if (!scope || scope.isDestroyed) return;\n\n syncDescriptors(this.reactiveProps as object, props ?? {}, /* pruneMissing */ true);\n this.syncSpecialProps(props);\n\n triggerUpdateHooks(scope);\n }\n\n /**\n * Tear down and re-mount the component at its current insertion point.\n * No-op if the component has never been mounted.\n */\n forceUpdate(): void {\n if (!this.parentNode) return;\n const parent = this.parentNode;\n const before = this.beforeNode;\n this.destroy();\n this.mount(parent, before);\n }\n\n /**\n * Dispose the scope, remove all rendered nodes, and clear bookkeeping.\n * Idempotent: subsequent calls are no-ops.\n */\n destroy(): void {\n const scope = this.scope;\n if (!scope || scope.isDestroyed) return;\n this.scope = null;\n this.releaseSpecialProps();\n disposeScope(scope);\n for (const node of this.renderedNodes) removeNode(node);\n this.renderedNodes = [];\n this.firstChild = undefined;\n this.parentNode = undefined;\n // Clear all descriptors to release signal getter references\n for (const key of Object.getOwnPropertyNames(this.reactiveProps)) {\n delete (this.reactiveProps as Record<string, unknown>)[key];\n }\n // Reset state so external code can detect the component is no longer mounted\n this.state = COMPONENT_STATE.INITIAL;\n }\n\n /**\n * Apply props that bind to the root DOM element rather than flowing into\n * the component body: `ref` (signal/function) and `onXxx` event handlers.\n * The render-facing `reactiveProps` already has those keys; here we just\n * wire them to the actual DOM node.\n */\n private syncSpecialProps(props: P): void {\n if (!props) return;\n const root = this.firstChild;\n if (!root || !(root instanceof Element)) return;\n\n this.releaseSpecialProps();\n\n for (const key of Object.getOwnPropertyNames(props)) {\n if (key === REF_KEY) {\n const value = readProp(props, key);\n this.rootRefCleanup = this.bindRootRef(value, root);\n continue;\n }\n\n if (isOn(key)) {\n const value = readProp(props, key);\n if (!isFunction(value)) continue;\n const eventName = key.slice(2).toLowerCase();\n const target = root as Element & Record<string, unknown> & { disabled?: boolean };\n const slot = `_$${eventName}`;\n const prev = target[slot];\n\n // Slot path — the JSX template already wired a delegated handler into\n // this element's `_$<event>` slot. babel-plugin emits the matching\n // `delegateEvents([...])` registration at module init, so the document\n // walker is guaranteed to be active. Override Solid-style (last write\n // wins) and restore the template's handler on release so a subsequent\n // update / re-mount sees a clean baseline. The delegation walk in\n // events.ts already supplies the `!node.disabled` short-circuit.\n if (isFunction(prev)) {\n target[slot] = value;\n this.rootEventCleanups.push(() => {\n if (target[slot] === value) target[slot] = prev;\n });\n continue;\n }\n\n // Native path — no JSX-bound delegated handler exists on this slot\n // (template didn't bind one, or babel-plugin's delegation is off).\n // Attach a real listener and mirror the walk's `!node.disabled`\n // short-circuit at the dispatch entry so behaviour matches the slot\n // path. The disabled check is a no-op on non-form elements.\n const fn = value as (this: Element, e: Event) => unknown;\n const handler: EventListener = (event) => {\n if (target.disabled) return;\n fn.call(target, event);\n };\n this.rootEventCleanups.push(addEvent(target, eventName, handler));\n }\n }\n }\n\n /**\n * Remove all listeners/ref bindings currently attached to the root element.\n */\n private releaseSpecialProps(): void {\n for (const cleanup of this.rootEventCleanups) {\n cleanup();\n }\n this.rootEventCleanups.length = 0;\n\n if (this.rootRefCleanup) {\n this.rootRefCleanup();\n this.rootRefCleanup = undefined;\n }\n }\n\n /**\n * Bind the root ref prop and return a cleanup that restores the previous ref state.\n */\n private bindRootRef(value: unknown, root: Element): (() => void) | undefined {\n if (isFunction(value)) {\n value(root);\n return () => value(null);\n }\n\n if (isSignal<Element | null>(value)) {\n const ref = value as Signal<Element | null>;\n const previousValue = ref.value;\n ref.value = root;\n return () => {\n if (ref.value === root) {\n ref.value = previousValue;\n }\n };\n }\n\n return undefined;\n }\n}\n\n/**\n * Check if a value is a Component instance.\n */\nexport function isComponent(node: unknown): node is Component {\n return !!node && !!(node as Record<PropertyKey, unknown>)[COMPONENT_TYPE.NORMAL];\n}\n\n/**\n * Wrap a component function in a Component instance, or pass an existing\n * Component instance through unchanged.\n */\nexport function createComponent<P extends ComponentProps>(\n componentFn: ComponentFn<P>,\n props?: P,\n): Component<P> {\n if (isComponent(componentFn)) {\n return componentFn as unknown as Component<P>;\n }\n return new Component(componentFn, props);\n}\n","import { isString, warn } from '@estjs/shared';\nimport { type Component, createComponent, isComponent } from './component';\nimport { createScope, disposeScope, runWithScope } from './scope';\nimport { beginHydration, endHydration } from './hydration';\nimport { insert, insertNode } from './dom';\nimport type { ComponentFn, ComponentProps } from './types';\n\n/**\n * Create a template factory function from HTML string.\n *\n * This function creates a reusable template factory that efficiently clones\n * DOM nodes from the provided HTML string. The template is parsed once.\n *\n * Security note: `template(html)` is a raw HTML entrypoint. The caller is\n * responsible for ensuring `html` is trusted and not derived from unsanitized\n * user input.\n *\n * @param html - The HTML string to create template from.\n * @returns Factory function that returns a cloned node of the template.\n * @throws {Error} When template content is empty or invalid.\n *\n * @example\n * ```typescript\n * const buttonTemplate = template('<button>Click me</button>');\n * const button1 = buttonTemplate(); // Creates first button instance\n * const button2 = buttonTemplate(); // Creates second button instance\n * ```\n */\nexport function template(html: string) {\n let node: Node | undefined;\n\n /**\n * Creates the cached template root node on first use.\n */\n const create = (): Node => {\n // Regular HTML template\n const template = document.createElement('template');\n template.innerHTML = html;\n const firstChild = template.content.firstChild;\n if (!firstChild) {\n throw new Error('Invalid template: empty content');\n }\n return firstChild;\n };\n\n // return a factory function: create the template when first called, reuse the cached template when called later\n return () => (node || (node = create())).cloneNode(true);\n}\n\n/**\n * Create and mount an application with the specified component.\n *\n * This function initializes an application by mounting a root component\n * to a target DOM element. It handles target validation and cleanup.\n *\n * @param component - The root component function to mount.\n * @param target - CSS selector string or DOM element to mount to.\n * @returns Object with root component and unmount function.\n *\n * @example\n * ```typescript\n * const App = () => template('<div>Hello World</div>')\n * const app = createApp(App, '#root');\n *\n * // Or with DOM element\n * const container = document.getElementById('app');\n * const app = createApp(App, container);\n * ```\n */\nexport function createApp<P extends ComponentProps = {}>(\n component: ComponentFn<P>,\n target: string | Element,\n) {\n const container = isString(target) ? document.querySelector(target) : (target as Element);\n if (!container) {\n if (__DEV__) {\n warn(`Target element not found: ${target}`);\n }\n return;\n }\n\n const existingContent = container.innerHTML;\n if (existingContent) {\n if (__DEV__) {\n // `[data-hk]` markers mean SSR markup — the user likely wants hydrate().\n if (container.querySelector('[data-hk]')) {\n warn(\n `Target element contains server-rendered markup ([data-hk]); ` +\n `createApp() will discard it and render from scratch. ` +\n `Did you mean to call hydrate()?`,\n );\n } else {\n warn(`Target element is not empty, it will be cleared: ${target}`);\n }\n }\n container.innerHTML = '';\n }\n\n const scope = createScope();\n let rootNode: Component | undefined;\n try {\n runWithScope(scope, () => {\n const mountedRoot = createComponent(component);\n if (isComponent(mountedRoot)) {\n rootNode = mountedRoot;\n insertNode(container, mountedRoot);\n }\n });\n } catch (error_) {\n disposeScope(scope);\n throw error_;\n }\n\n return {\n root: rootNode,\n unmount: () => {\n // destroy() removes DOM nodes and disposes the component's own scope first;\n // then disposeScope cleans up the root application scope (provide context, etc.)\n rootNode?.destroy();\n disposeScope(scope);\n },\n };\n}\n\nexport function hydrate<P extends ComponentProps = {}>(\n component: ComponentFn<P>,\n target: string | Element,\n) {\n const container = isString(target) ? document.querySelector(target) : (target as Element);\n if (!container) {\n if (__DEV__) {\n warn(`[essor] hydrate: target element not found: ${target}`);\n }\n return;\n }\n\n beginHydration(container);\n\n const scope = createScope();\n let rootNode: Component | undefined;\n try {\n runWithScope(scope, () => {\n const mountedRoot = createComponent(component);\n if (isComponent(mountedRoot)) {\n rootNode = mountedRoot;\n insert(container, mountedRoot);\n }\n });\n } catch (error_) {\n disposeScope(scope);\n throw error_;\n } finally {\n endHydration();\n }\n\n return {\n root: rootNode,\n unmount: () => {\n // Same ordering as createApp: component teardown first, then root scope cleanup.\n rootNode?.destroy();\n disposeScope(scope);\n },\n };\n}\n","import { error } from '@estjs/shared';\nimport { type Scope, getActiveScope } from './scope';\n\n/**\n * InjectionKey is a unique identifier for provided values.\n * Using Symbol ensures type safety and prevents key collisions.\n */\n// eslint-disable-next-line @typescript-eslint/no-wrapper-object-types, unused-imports/no-unused-vars\nexport interface InjectionKey<T> extends Symbol {}\n\n/**\n * Provide a value in the current scope.\n * The value can be injected by this scope or any descendant scope.\n *\n * @param key - The injection key.\n * @param value - The value to provide.\n * @returns {void}\n */\nexport function provide<T>(key: InjectionKey<T> | string | number, value: T): void {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) {\n error('provide() must be called within a scope');\n }\n return;\n }\n\n // Lazy initialize provides map\n if (!scope.provides) {\n scope.provides = new Map();\n }\n\n scope.provides.set(key, value);\n}\n\n/**\n * Inject a value from the scope hierarchy.\n * Traverses up the parent chain until finding a matching key.\n *\n * @param key - The injection key.\n * @param defaultValue - Default value if key is not found.\n * @returns The injected value or default value.\n */\nexport function inject<T>(key: InjectionKey<T> | string | number, defaultValue?: T): T {\n const scope = getActiveScope();\n\n if (!scope) {\n if (__DEV__) {\n error('inject() must be called within a scope');\n }\n return defaultValue as T;\n }\n\n // Traverse up the hierarchy\n let current: Scope | null = scope;\n while (current) {\n if (current.provides) {\n if (current.provides.has(key)) {\n return current.provides.get(key) as T;\n }\n }\n current = current.parent;\n }\n\n return defaultValue as T;\n}\n","import { isFunction, isString } from '@estjs/shared';\nimport { addEvent } from './operations/event';\nimport { getActiveScope, onCleanup } from './scope';\n\n/**\n * Retargets an event to a delegated host node.\n *\n * @param e - The event object.\n * @param value - The new target value.\n * @returns {void}\n */\nfunction reTargetEvent(e: Event, value: EventTarget): void {\n Object.defineProperty(e, 'target', {\n configurable: true,\n value,\n });\n}\n\n/**\n * Event handler for delegated events.\n *\n * @param e - The event object.\n */\nfunction eventHandler(e: Event): void {\n let node = e.target as any;\n const key = e.type;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n\n /**\n * Handle event on current node\n * @returns {boolean} Whether to continue propagation\n */\n const handleNode = (): boolean => {\n const handler = node[`_$${key}`];\n if (handler && isFunction(handler) && !node.disabled) {\n const data = node[`${key}Data`];\n data ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return false;\n }\n\n // Handle host element retargeting\n if (\n node.host &&\n !isString(node.host) &&\n !node.host._$host &&\n isFunction(node.contains) &&\n node.contains(e.target)\n ) {\n reTargetEvent(e, node.host);\n }\n return true;\n };\n\n /**\n * Walk up the DOM tree handling events\n */\n const walkUpTree = (): void => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n\n // simulate currentTarget\n Object.defineProperty(e, 'currentTarget', {\n configurable: true,\n /**\n * Returns the current delegated target for the event.\n */\n get() {\n return node || document;\n },\n });\n\n if (e.composedPath) {\n const path = e.composedPath();\n reTargetEvent(e, path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i] as any;\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n // bubble up from portal mount instead of composedPath\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break; // don't bubble above root of event delegation\n }\n }\n }\n // fallback for browsers that don't support composedPath\n else walkUpTree();\n // Mixing portals and shadow dom can lead to a nonstandard target, so reset here.\n reTargetEvent(e, oriTarget!);\n}\n\n/**\n * Symbol for storing delegated events on document\n */\nconst $EVENTS = Symbol('_$EVENTS');\n\n/**\n * Set up event delegation for specified event types.\n *\n * @param eventNames - Array of event names to delegate.\n * @param document - Document to attach events to (defaults to the global document).\n */\nexport function delegateEvents(\n eventNames: string[],\n document: Document = globalThis.document,\n): void {\n const docWithEvents = document as Document & { [$EVENTS]?: Set<string> };\n const eventSet = docWithEvents[$EVENTS] || (docWithEvents[$EVENTS] = new Set<string>());\n\n for (const name of eventNames) {\n if (!eventSet.has(name)) {\n eventSet.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\n\n/**\n * Clear all delegated events from document.\n *\n * @param document - Document to clear events from (defaults to the global document).\n */\nexport function clearDelegatedEvents(document: Document = globalThis.document): void {\n const docWithEvents = document as Document & { [$EVENTS]?: Set<string> };\n const eventSet = docWithEvents[$EVENTS];\n if (eventSet) {\n for (const name of eventSet.keys()) {\n document.removeEventListener(name, eventHandler);\n }\n delete docWithEvents[$EVENTS];\n }\n}\n/**\n * Registers an event listener and scopes its cleanup when needed.\n *\n * @param element - The element to add the listener to.\n * @param event - The event name.\n * @param handler - The event handler.\n * @param options - Optional event listener options.\n * @returns {void}\n */\nexport function addEventListener(\n element: Element,\n event: string,\n handler: EventListener,\n options?: AddEventListenerOptions,\n): void {\n const cleanup = addEvent(element, event, handler, options);\n\n if (getActiveScope()) {\n onCleanup(cleanup);\n }\n}\n","import { isArray, isFunction, isString } from '@estjs/shared';\nimport { effect } from '@estjs/signals';\nimport { addEventListener } from './events';\nimport { getActiveScope, onCleanup } from './scope';\n\n/**\n * Modifiers for `bind:*` two-way bindings.\n *\n * - `trim` — strip surrounding whitespace\n * - `number` — coerce numeric strings to numbers (no-op on NaN / blank)\n * - `lazy` — commit on `change` instead of `input`\n *\n * Unknown keys are ignored at runtime; the compiler rejects them at build time.\n */\nexport interface BindModifiers {\n trim?: boolean;\n number?: boolean;\n lazy?: boolean;\n}\n\n/** Whitelist mirrored by the compiler — kept in sync with `BindModifiers`. */\nexport const BIND_MODIFIER_KEYS = ['trim', 'number', 'lazy'] as const;\n\n// ── Strategy ────────────────────────────────────────────────\n\ninterface Strategy {\n /** DOM event that triggers a DOM→Model read. */\n event: string;\n /** Read the bound value from the DOM element. */\n read(el: Element): unknown;\n /** Write a model value into the DOM element. */\n write(el: Element, v: unknown): void;\n /** Always listen on `change` regardless of `lazy` (checkbox, radio, select, file). */\n forceChange?: true;\n /** Needs IME composition guard (text inputs, textareas). */\n ime?: true;\n /** Supports checkbox-group array semantics — model holds an array of values. */\n checkboxArray?: true;\n}\n\nconst IDENTITY = <T>(v: T): T => v;\nconst EMPTY_FILES = ((): FileList => {\n if (typeof DataTransfer !== 'undefined') return new DataTransfer().files;\n return [] as unknown as FileList;\n})();\n\n/** Compare-then-assign for string-coercible `.value` properties. */\nfunction writeValue(el: Element, v: unknown): void {\n const target = el as HTMLInputElement;\n const next = v == null ? '' : String(v);\n if (target.value !== next) target.value = next;\n}\n\nconst CHECKBOX: Strategy = {\n event: 'change',\n forceChange: true,\n checkboxArray: true,\n read: (el) => (el as HTMLInputElement).checked,\n write(el, v) {\n const e = el as HTMLInputElement;\n // Array-mode (checkbox group): \"checked\" iff this element's value is in the array.\n const next = isArray(v) ? v.map(String).includes(e.value) : Boolean(v);\n if (e.checked !== next) e.checked = next;\n },\n};\n\nconst RADIO: Strategy = {\n event: 'change',\n forceChange: true,\n read(el) {\n const e = el as HTMLInputElement;\n return e.checked ? e.value : '';\n },\n write(el, v) {\n const e = el as HTMLInputElement;\n const next = String(v) === e.value;\n if (e.checked !== next) e.checked = next;\n },\n};\n\nconst FILE: Strategy = {\n event: 'change',\n forceChange: true,\n read: (el) => (el as HTMLInputElement).files,\n write(el, v) {\n // Browsers forbid programmatic writes to <input type=file>, except via a\n // DataTransfer FileList. Allow clearing the selection when v is nullish.\n if (v != null) return;\n try {\n (el as HTMLInputElement).files = EMPTY_FILES;\n } catch {\n /* sandbox / hostile browser */\n }\n },\n};\n\n// Shared by <input type=text|...> and <textarea>: same event, same .value plumbing.\nconst TEXT_LIKE: Strategy = {\n event: 'input',\n ime: true,\n read: (el) => (el as HTMLInputElement | HTMLTextAreaElement).value,\n write: writeValue,\n};\n\nconst SELECT: Strategy = {\n event: 'change',\n forceChange: true,\n read(el) {\n const s = el as HTMLSelectElement;\n return s.multiple ? Array.from(s.selectedOptions, (o) => o.value) : s.value;\n },\n write(el, v) {\n const s = el as HTMLSelectElement;\n if (!s.multiple) return writeValue(el, v);\n const selected = new Set((isArray(v) ? v : []).map(String));\n for (const opt of Array.from(s.options)) opt.selected = selected.has(opt.value);\n },\n};\n\n/** Fallback for custom elements / contenteditable hosts — closes over `prop`. */\nfunction customStrategy(prop: string): Strategy {\n return {\n event: 'input',\n read: (el) => (el as any)[prop],\n write(el, v) {\n (el as any)[prop] = v;\n },\n };\n}\n\nfunction resolve(node: Element, prop: string): Strategy {\n switch (node.nodeName) {\n case 'INPUT':\n if (prop === 'checked') return (node as HTMLInputElement).type === 'radio' ? RADIO : CHECKBOX;\n if (prop === 'files') return FILE;\n if (prop === 'value') return TEXT_LIKE;\n // Unknown INPUT prop → custom strategy (don't pretend it's a text input).\n return customStrategy(prop);\n case 'SELECT':\n return SELECT;\n case 'TEXTAREA':\n return TEXT_LIKE;\n default:\n return customStrategy(prop);\n }\n}\n\n// ── Modifier Transform ──────────────────────────────────────\n\n/**\n * Apply trim / number modifiers to a raw DOM value. No-op for non-strings.\n *\n * Number coercion behaviour:\n * - Blank / whitespace-only inputs return the original string unchanged\n * (otherwise `Number(' ')` would silently produce `0`).\n * - Non-numeric strings (NaN) also return the original string.\n */\nfunction applyModifiers(v: unknown, trim: boolean, toNum: boolean): unknown {\n if (!isString(v)) return v;\n const s = trim ? v.trim() : v;\n if (toNum) {\n const probe = trim ? s : s.trim();\n if (probe !== '') {\n const n = Number(probe);\n if (!Number.isNaN(n)) return n;\n }\n }\n return s;\n}\n\n/** Whether `el` is the active element (Document / ShadowRoot aware). */\nfunction isFocused(el: Element): boolean {\n const root = el.getRootNode();\n return (root instanceof Document || root instanceof ShadowRoot) && root.activeElement === el;\n}\n\n/**\n * `<input type=\"number\">` / `<input type=\"range\">` always read as\n * numbers, even without an explicit `{ number: true }`.\n */\nfunction shouldAutoCoerceNumber(node: Element, prop: string): boolean {\n if (prop !== 'value' || node.nodeName !== 'INPUT') return false;\n const t = (node as HTMLInputElement).type;\n return t === 'number' || t === 'range';\n}\n\n// ── Public API ──────────────────────────────────────────────\n\n/**\n * Creates a two-way binding between a DOM element property and a reactive model.\n *\n * - Model → DOM via a reactive `effect()`.\n * - DOM → Model via an event listener that calls `setter`.\n *\n * @param node Target element. `null` is tolerated (no-op).\n * @param prop Bound property (`value` / `checked` / `files` / custom).\n * @param getter Reactive getter, or a static initial value.\n * @param setter Called with the (optionally transformed) DOM value on user input.\n * @param modifiers Optional `{ trim, number, lazy }`.\n */\nexport function bindElement(\n node: Element | null,\n prop: 'value' | 'checked' | 'files' | string,\n getter: (() => unknown) | unknown,\n setter: (v: unknown) => void,\n modifiers: BindModifiers = {},\n): void {\n if (!node) return;\n\n // 1. Resolve strategy & pre-compute flags\n const { event, read, write, forceChange, ime, checkboxArray } = resolve(node, prop);\n const trim = modifiers.trim === true;\n const toNum = modifiers.number === true || shouldAutoCoerceNumber(node, prop);\n const lazy = modifiers.lazy === true;\n const shouldCast = (trim || toNum) && prop !== 'files';\n\n const getModel: () => unknown = isFunction(getter) ? (getter as () => unknown) : () => getter;\n const cast: (v: unknown) => unknown = shouldCast\n ? (v) => applyModifiers(v, trim, toNum)\n : IDENTITY;\n\n // Checkbox group: when a non-radio checkbox is bound to an array model,\n // toggle `el.value` in the array on each change. Decided lazily per-event\n // because the model shape may change over time.\n const computeNext: (raw: unknown) => unknown = checkboxArray\n ? (raw) => {\n const current = getModel();\n if (!isArray(current)) return cast(raw);\n const own = (node as HTMLInputElement).value;\n const next = current.filter((item) => String(item) !== own);\n if (raw) next.push(own);\n return next;\n }\n : cast;\n\n // 2. DOM → Model\n let composing = false;\n const eventName = lazy || forceChange ? 'change' : event;\n\n const syncToModel = (): void => {\n if (composing) return;\n const raw = read(node);\n if (raw === undefined) return;\n const next = computeNext(raw);\n if (!Object.is(getModel(), next)) setter(next);\n };\n\n addEventListener(node, eventName, syncToModel);\n\n // Normalize the displayed value on blur when modifiers are active.\n if (!lazy && shouldCast && eventName !== 'change') {\n addEventListener(node, 'change', () => write(node, cast(read(node))));\n }\n\n // 3. IME composition guard — track state whenever the strategy is IME-aware,\n // even in `lazy` mode, otherwise an external model write during composition\n // would clobber pending input. `lazy` only controls the commit event.\n if (ime) {\n addEventListener(node, 'compositionstart', () => {\n composing = true;\n });\n addEventListener(node, 'compositionend', () => {\n composing = false;\n // Lazy waits for blur; eager commits the composed text now.\n if (!lazy) syncToModel();\n });\n }\n\n // 4. Model → DOM — skip the write when (a) inside an IME composition or\n // (b) the focused input already shows the canonical value (avoids caret jump).\n const runner = effect(() => {\n const value = getModel();\n if (ime && composing) return;\n if (ime && !lazy && isFocused(node) && Object.is(cast(read(node)), value)) return;\n write(node, value);\n });\n\n // 5. Lifecycle cleanup\n if (getActiveScope()) {\n onCleanup(() => runner.stop());\n }\n}\n","import { isFunction } from '@estjs/shared';\n\n/**\n * Read a slot value, unwrapping the common compilation shapes.\n *\n * The babel plugin compiles `<Wrap>{() => expr}</Wrap>` to a single-element\n * array `[() => expr]`. We unwrap that, then invoke the function if present\n * so that callers always observe the final value (Element / null / etc.).\n */\nfunction unwrapSlotValue(raw: unknown): unknown {\n let v: unknown = raw;\n if (Array.isArray(v) && v.length === 1) v = v[0];\n return isFunction(v) ? v() : v;\n}\n\n/**\n * Build a stable accessor for a single-child slot.\n *\n * Returns a function that, when invoked inside a reactive `effect()`, reads\n * `props.children` (preserving getter semantics from the babel plugin) and\n * unwraps the compiled array/function shape.\n *\n * @example\n * const read = useChildren(props);\n * effect(() => {\n * const child = read(); // tracks deps on every run\n * // ...\n * });\n */\nexport function useChildren<T = unknown>(props: { children?: unknown }): () => T {\n const desc = Object.getOwnPropertyDescriptor(props, 'children');\n if (desc?.get) {\n return () => unwrapSlotValue(desc.get!.call(props)) as T;\n }\n return () => unwrapSlotValue(props.children) as T;\n}\n\n/**\n * Shallow compare two objects\n * @param {any} a - The first object to compare\n * @param {any} b - The second object to compare\n * @returns {boolean} - Returns true if the objects are equal, false otherwise\n */\nexport function shallowCompare(a: any, b: any): boolean {\n if (a === b) return true;\n if (!a || !b) return false;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n for (const key in a) {\n if (a[key] !== b[key]) return false;\n }\n\n for (const key in b) {\n if (!(key in a)) return false;\n }\n\n return true;\n}\n\n/**\n * Omits props from a target object using a proxy.\n *\n * @param target - The target object.\n * @param keys - The keys to omit.\n * @returns A proxy that omits specified keys.\n */\nexport function omitProps<T extends object, K extends keyof T>(target: T, keys: K[]): Omit<T, K> {\n const excludeSet = new Set(keys);\n\n return new Proxy(target, {\n /**\n * Returns a property unless it is excluded by the proxy.\n */\n get(obj, prop) {\n if (excludeSet.has(prop as K)) {\n return undefined;\n }\n return Reflect.get(obj, prop);\n },\n /**\n * Returns the enumerable keys that are not excluded from the proxy.\n */\n ownKeys(obj) {\n return Reflect.ownKeys(obj).filter((key) => !excludeSet.has(key as K));\n },\n /**\n * Returns the property descriptor unless the key is excluded.\n */\n getOwnPropertyDescriptor(obj, prop) {\n if (excludeSet.has(prop as K)) {\n return undefined;\n }\n return Reflect.getOwnPropertyDescriptor(obj, prop);\n },\n /**\n * Returns whether the requested value exists.\n */\n has(obj, prop) {\n if (excludeSet.has(prop as K)) {\n return false;\n }\n return Reflect.has(obj, prop);\n },\n });\n}\n","import { isReactive } from '@estjs/signals';\nimport { FRAGMENT_COMPONENT } from '../constants';\nimport type { AnyNode, ComponentProps } from '../types';\n\nexport interface FragmentProps extends ComponentProps {\n children?: AnyNode | AnyNode[];\n}\n\n/**\n * Fragment component - renders multiple children without wrapper elements (Client-side only).\n *\n * **Client-side behavior:**\n * - Returns children directly for rendering.\n * - Hydration system matches children using hydration keys.\n * - The template system handles array children automatically.\n *\n * @param props - Component props with children.\n * @returns {AnyNode} Children directly without wrapper.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Fragment>\n * <div>First</div>\n * <span>Second</span>\n * </Fragment>\n *\n * // Nested fragments\n * <Fragment>\n * <Fragment>\n * <div>Nested 1</div>\n * <div>Nested 2</div>\n * </Fragment>\n * <div>Third</div>\n * </Fragment>\n *\n * // Empty fragment (renders nothing)\n * <Fragment />\n * ```\n */\nexport function Fragment(props?: FragmentProps): AnyNode {\n // Getter-based children and reactive Proxy props both need a thunk so the\n // effect system re-evaluates when dependencies change.\n if (props && (Object.getOwnPropertyDescriptor(props, 'children')?.get || isReactive(props))) {\n return [() => props.children];\n }\n\n const children = props?.children;\n\n if (children == null) return null;\n\n return children as AnyNode;\n}\n\nFragment[FRAGMENT_COMPONENT] = true;\n\n/**\n * Check if a node is a Fragment component.\n *\n * @param node - Node to check.\n * @returns {boolean} True if node is a Fragment.\n */\nexport function isFragment(node: unknown): boolean {\n return !!node && !!node[FRAGMENT_COMPONENT];\n}\n","import { isFunction, isString, warn } from '@estjs/shared';\nimport { effect } from '@estjs/signals';\nimport { PORTAL_COMPONENT } from '../constants';\nimport { consumeTeleportAnchor, consumeTeleportBlock, isHydrating } from '../hydration';\nimport { onMount } from '../lifecycle';\nimport {\n type Scope,\n createScope,\n disposeScope,\n getActiveScope,\n onCleanup,\n runWithScope,\n} from '../scope';\nimport { insert } from '../dom';\nimport type { AnyNode } from '../types';\n\nexport interface PortalProps {\n /** Children to render at the target location. */\n children?: AnyNode | AnyNode[];\n /**\n * Mount target — CSS selector string, `Element`, or reactive getter.\n * When the getter result changes, the Portal re-mounts at the new target.\n */\n target?: string | Element | (() => string | Element | null | undefined);\n /**\n * When truthy, children render inline at the call site instead of being teleported.\n * May be a static value or a reactive getter.\n */\n disabled?: boolean | (() => boolean);\n}\n\n/** Resolve `props.target` to an Element, handling string / Element / getter. */\nfunction resolveTarget(props: PortalProps): Element | null {\n const raw = isFunction(props.target) ? (props.target as () => unknown)() : props.target;\n if (raw == null) return null;\n if (isString(raw)) return document.querySelector(raw as string);\n return raw as Element;\n}\n\n/** Evaluate `props.disabled`, supporting both static booleans and getters. */\nfunction evalDisabled(props: PortalProps): boolean {\n return isFunction(props.disabled) ? !!(props.disabled as () => boolean)() : !!props.disabled;\n}\n\n/**\n * Portal — teleports children into a different DOM node.\n *\n * - `disabled=true` renders children inline at the call site.\n * - Otherwise children are teleported into `target`.\n * - Both `target` and `disabled` may be reactive; changes trigger re-mount.\n *\n * @returns A placeholder comment node that marks the call site.\n *\n * @example\n * ```tsx\n * <Portal target=\"#modal-root\" disabled={isMobile}>\n * <div>Modal content</div>\n * </Portal>\n * ```\n */\nexport function Portal(props: PortalProps): Comment {\n // Hydration: adopt SSR-emitted anchors + target block.\n if (isHydrating()) {\n const adopted = tryHydratePortal(props);\n if (adopted) return adopted;\n }\n\n const placeholder = document.createComment('portal');\n placeholder[PORTAL_COMPONENT] = true;\n\n const { children } = props;\n if (children == null) return placeholder;\n\n const parentScope = getActiveScope();\n let innerScope: Scope | null = null;\n\n /**\n * Mount children into the given parent, inside a fresh inner scope\n * that inherits from the parent scope. This allows `insert()` effects\n * to be properly disposed on teardown.\n */\n const mountAt = (parent: Node, before?: Node): void => {\n innerScope = createScope(parentScope);\n runWithScope(innerScope, () => {\n insert(parent, () => children, before);\n });\n };\n\n /**\n * Tear down the inner scope, removing all mounted children and their\n * reactive effects.\n */\n const teardown = (): void => {\n if (innerScope) {\n disposeScope(innerScope);\n innerScope = null;\n }\n };\n\n /**\n * Evaluate disabled/target and (re-)mount, tearing down the previous\n * mount first. Accepts pre-evaluated values to avoid redundant getter\n * invocations when called from within the tracking effect.\n */\n const apply = (disabled: boolean, target: Element | null): void => {\n teardown();\n\n if (disabled) {\n const parent = placeholder.parentNode;\n if (!parent) return;\n mountAt(parent, placeholder);\n return;\n }\n\n if (!target) {\n if (__DEV__) {\n warn(`[Portal] Target element not found: ${String(props.target)}`);\n }\n return;\n }\n mountAt(target);\n };\n\n // Track reactive deps immediately but defer DOM work until placeholder\n // is attached. On subsequent runs (reactive change) the effect runs\n // apply() directly with the freshly evaluated values — no redundant\n // double-evaluation.\n let mounted = false;\n\n const effectRunner = effect(() => {\n const disabled = evalDisabled(props);\n const target = disabled ? null : resolveTarget(props);\n\n if (mounted) {\n apply(disabled, target);\n }\n });\n\n onMount(() => {\n mounted = true;\n\n const disabled = evalDisabled(props);\n const target = disabled ? null : resolveTarget(props);\n\n // Try mounting synchronously — works when target is already in the document.\n if (disabled || target) {\n apply(disabled, target);\n return;\n }\n\n // Target may not be in the document yet (sibling elements mount bottom-up).\n // Defer to microtask — flushes before paint.\n queueMicrotask(() => {\n if (!placeholder.parentNode) return;\n apply(evalDisabled(props), resolveTarget(props));\n });\n });\n\n onCleanup(() => {\n effectRunner.stop();\n teardown();\n });\n\n return placeholder;\n}\n\nPortal[PORTAL_COMPONENT] = true;\n\n/**\n * Hydration adoption for Portal.\n *\n * Returns the SSR call-site anchor as placeholder on match, `null` on mismatch\n * (falls back to CSR mount path).\n */\nfunction tryHydratePortal(props: PortalProps): Comment | null {\n if (evalDisabled(props)) return null;\n\n const anchor = consumeTeleportAnchor();\n if (!anchor) {\n if (__DEV__) {\n warn('[Portal] hydration mismatch: no <!--teleport-anchor--> at call site.');\n }\n return null;\n }\n\n const target = resolveTarget(props);\n if (!target) {\n if (__DEV__) {\n warn(`[Portal] hydration mismatch: target not found: ${String(props.target)}`);\n }\n return null;\n }\n\n const block = consumeTeleportBlock(target);\n if (!block) {\n if (__DEV__) {\n warn(\n `[Portal] hydration mismatch: no <!--teleport-start--> in target ${String(props.target)}`,\n );\n }\n return null;\n }\n\n anchor[PORTAL_COMPONENT] = true;\n return anchor;\n}\n\n/**\n * Check if a node is a Portal component.\n *\n * @param node - Node to check.\n * @returns True if node is a Portal.\n */\nexport function isPortal(node: unknown): boolean {\n return !!node && !!node[PORTAL_COMPONENT];\n}\n","import { isBrowser, isFunction, isPromise, warn } from '@estjs/shared';\nimport { isComputed, isSignal } from '@estjs/signals';\nimport { provide } from '../provide';\nimport { createScope, disposeScope, getActiveScope, onCleanup, runWithScope } from '../scope';\nimport { insert } from '../dom';\nimport { SUSPENSE_COMPONENT } from '../constants';\nimport type { AnyNode } from '../types';\n\n/**\n * Deeply resolve a node-ish value for insertion: unwrap thunks and\n * signals/computed at every level, and recurse into arrays so nested\n * `() => signal` / signal entries become concrete nodes/values. `insert()`\n * then normalizes the result into DOM nodes.\n */\nexport function resolveNodeValue(value: unknown): unknown {\n let current = value;\n\n while (isFunction(current)) {\n current = (current as Function)();\n }\n\n if (isSignal(current) || isComputed(current)) {\n return resolveNodeValue((current as any).value);\n }\n\n if (Array.isArray(current)) {\n return current.map((item) => resolveNodeValue(item));\n }\n\n return current;\n}\n\nexport interface SuspenseProps {\n /** The content to render. Can be a Promise for async loading. */\n children?: Node | Node[] | Promise<Node | Node[]>;\n /** Fallback content to display while children is loading (Promise pending). */\n fallback?: Node;\n /** Optional key for reconciliation. */\n key?: string;\n}\n\nexport const SuspenseContext = Symbol('SuspenseContext');\n\nexport interface SuspenseContextType {\n register: (promise: Promise<any>) => void;\n increment: () => void;\n decrement: () => void;\n}\n\n/**\n * Suspense — handles async content with a fallback UI.\n *\n * Rendering model: content is built offscreen into the Suspense fragment\n * first. If async resources register during\n * that mount, the content nodes are parked in an offscreen fragment while\n * fallback is shown. When all resources settle, content is moved back in one\n * step. No \"insert → remove → re-insert\" dance — content is moved at most once.\n *\n * Wrapper-free: the boundary is a `<!--suspense-->…<!--/suspense-->` comment\n * pair, not a `display:contents` div.\n *\n * @example\n * ```tsx\n * <Suspense fallback={<div>Loading...</div>}>{asyncContent}</Suspense>\n * ```\n */\nexport function Suspense(props: SuspenseProps): Node {\n // SSR: render the fallback, deterministic, never touch DOM.\n if (!isBrowser()) {\n return props.fallback ?? ('' as unknown as Node);\n }\n\n const owner = getActiveScope();\n const start = document.createComment('suspense');\n const end = document.createComment('/suspense');\n const frag = document.createDocumentFragment();\n frag.append(start, end);\n\n let mounted = true;\n let pending = 0;\n let mounting = false;\n\n // Content: a child scope + its nodes live between `start` and `end` in the\n // fragment. When fallback is shown, the nodes move to `parked`.\n let contentScope: ReturnType<typeof createScope> | null = null;\n let parked: DocumentFragment | null = null;\n\n // Fallback: transient, destroyed when content is restored.\n let fallbackScope: ReturnType<typeof createScope> | null = null;\n\n let resolved: AnyNode | AnyNode[] | null = null;\n\n // ── DOM helpers ──────────────────────────────────────────────────────────\n\n /** Move every node between `start` and `end` into an offscreen fragment. */\n const parkContent = (): void => {\n const off = document.createDocumentFragment();\n while (end.previousSibling && end.previousSibling !== start) {\n off.prepend(end.previousSibling);\n }\n parked = off;\n };\n\n /** Move parked nodes back before `end`, then clear the parked fragment. */\n const restoreContent = (): void => {\n if (!parked) return;\n // `end` may now live in the host (framework moved frag children). Always\n // target its current parent, falling back to the original fragment.\n const parent = end.parentNode ?? frag;\n while (parked.firstChild) {\n parent.insertBefore(parked.firstChild, end);\n }\n parked = null;\n };\n\n const mountFallback = (): void => {\n if (props.fallback == null || fallbackScope) return;\n fallbackScope = createScope(owner);\n runWithScope(fallbackScope, () => {\n // Lazy-parent: same pattern as For/Portal. Before flush `end.parentNode`\n // is the fragment; after flush it's the real host.\n insert(end.parentNode ?? frag, () => resolveNodeValue(props.fallback) as AnyNode, end);\n });\n };\n\n const disposeFallback = (): void => {\n if (!fallbackScope) return;\n disposeScope(fallbackScope);\n fallbackScope = null;\n };\n\n const mountContent = (children: AnyNode | AnyNode[]): void => {\n mounting = true;\n contentScope = createScope(owner);\n runWithScope(contentScope, () => {\n insert(end.parentNode ?? frag, () => resolveNodeValue(children) as AnyNode, end);\n });\n mounting = false;\n // A resource registered synchronously during mount — park content.\n if (pending && !parked) {\n parkContent();\n mountFallback();\n }\n };\n\n // ── State transitions ────────────────────────────────────────────────────\n\n const showFallback = (): void => {\n if (parked) return; // already showing fallback\n if (mounting) return; // mountContent will reconcile\n parkContent();\n mountFallback();\n };\n\n const showContent = (): void => {\n if (!parked) return;\n\n const hasSyncChildren = props.children != null && !isPromise(props.children);\n if (contentScope == null && resolved == null && !hasSyncChildren) return;\n\n disposeFallback();\n restoreContent();\n\n // First time: mount the resolved value (Promise path)\n // On the Promise path contentScope was never created — we must mount now.\n // On the sync-resource path (register during mount), contentScope exists but\n // its nodes were parked; restoring covers it (the `contentScope != null`\n // check above would be true, so we don't enter here).\n if (!contentScope) {\n if (resolved) {\n mountContent(resolved);\n } else if (hasSyncChildren) {\n mountContent(props.children as AnyNode);\n }\n }\n };\n\n // ── Context (created before children handling so register() is available) ─\n\n const settle = () => {\n if (!mounted) return;\n if (--pending === 0) showContent();\n };\n\n const ctx: SuspenseContextType = {\n register: (promise: Promise<any>) => {\n pending++;\n showFallback();\n promise.then(settle).catch((error) => {\n if (__DEV__) warn('[Suspense] Resource failed:', error);\n settle();\n });\n },\n increment: () => {\n pending++;\n showFallback();\n },\n decrement: () => {\n pending = Math.max(0, pending - 1);\n if (pending === 0) showContent();\n },\n };\n\n provide(SuspenseContext, ctx);\n\n // ── Initial render ───────────────────────────────────────────────────────\n\n const children = props.children;\n\n if (isPromise(children)) {\n children\n .then((value) => {\n resolved = value as AnyNode | AnyNode[];\n })\n .catch(() => {\n /* handled by register() */\n });\n ctx.register(children);\n } else if (children != null) {\n mountContent(children as AnyNode);\n } else if (props.fallback != null) {\n showFallback();\n }\n\n // ── Cleanup ──────────────────────────────────────────────────────────────\n\n onCleanup(() => {\n mounted = false;\n pending = 0;\n resolved = null;\n if (contentScope) disposeScope(contentScope);\n if (fallbackScope) disposeScope(fallbackScope);\n contentScope = fallbackScope = null;\n parked = null;\n start.remove();\n end.remove();\n });\n\n return frag;\n}\n\nSuspense[SUSPENSE_COMPONENT] = true;\n\n/**\n * Check if a node is a Suspense component.\n *\n * @param node - Node to check.\n * @returns {boolean} True if node is a Suspense.\n */\nexport function isSuspense(node: unknown): boolean {\n return !!node && !!node[SUSPENSE_COMPONENT];\n}\n","import { type Signal, signal } from '@estjs/signals';\nimport { inject } from '../provide';\nimport { onCleanup } from '../scope';\nimport { SuspenseContext } from './Suspense';\nimport type { SuspenseContextType } from './Suspense';\n\nexport type ResourceState = 'pending' | 'ready' | 'errored';\n\nexport interface Resource<T> {\n (): T | undefined;\n loading: Signal<boolean>;\n error: Signal<Error | null>;\n state: Signal<ResourceState>;\n}\n\nexport interface ResourceActions<T> {\n mutate: (value: T) => void;\n refetch: () => Promise<void>;\n}\n\nexport interface ResourceOptions<T> {\n initialValue?: T;\n}\n\n/**\n * Create a resource for async data fetching.\n * Inspired by SolidJS createResource + Vue VueUse useFetch.\n *\n * The fetcher receives an {@link AbortSignal} that is aborted when:\n * - A new fetch is triggered (refetch / concurrent call) — cancels the stale request.\n * - The owning scope is disposed (component unmount) — cancels the in-flight request.\n *\n * Pass the signal to `fetch(url, { signal })` or any cancellable API to enable\n * real request cancellation. Ignoring it is safe — stale results are still\n * discarded via the internal `fetchId` guard.\n *\n * @param fetcher - Function that receives an AbortSignal and returns a Promise.\n * @param options - Optional configuration.\n * @returns {[Resource<T>, ResourceActions<T>]} Tuple of [resource, actions].\n */\nexport function createResource<T>(\n fetcher: (signal: AbortSignal) => Promise<T>,\n options?: ResourceOptions<T>,\n): [Resource<T>, ResourceActions<T>] {\n // Internal state\n const value = signal<T | undefined>(options?.initialValue);\n const loading = signal<boolean>(true);\n const error = signal<Error | null>(null);\n const state = signal<ResourceState>('pending');\n\n let fetchId = 0;\n let controller: AbortController | null = null;\n const suspenseContext = inject<SuspenseContextType | null>(SuspenseContext, null);\n\n /**\n * Core fetch logic.\n * Aborts any previous in-flight request, creates a fresh AbortController,\n * and registers with Suspense (if available) via a single `register(promise)` call.\n */\n const doFetch = async (): Promise<void> => {\n const id = ++fetchId;\n\n // Abort the previous in-flight request\n controller?.abort();\n controller = new AbortController();\n\n loading.value = true;\n state.value = 'pending';\n error.value = null;\n\n let promise: Promise<T>;\n try {\n promise = Promise.resolve(fetcher(controller.signal));\n } catch (error_) {\n error.value = error_ instanceof Error ? error_ : new Error(String(error_));\n state.value = 'errored';\n loading.value = false;\n return;\n }\n\n // Single Suspense registration per fetch cycle.\n // The promise settling naturally drives Suspense back to content.\n suspenseContext?.register(promise);\n\n try {\n const result = await promise;\n\n // Only update if this is still the latest fetch\n if (id === fetchId) {\n value.value = result;\n state.value = 'ready';\n loading.value = false;\n }\n } catch (error_) {\n // Stale fetch — ignore entirely\n if (id !== fetchId) return;\n\n // AbortError is expected during cleanup / refetch, not a real error\n if (error_ instanceof DOMException && error_.name === 'AbortError') {\n // If still the active fetch, just reset loading state\n loading.value = false;\n return;\n }\n\n error.value = error_ instanceof Error ? error_ : new Error(String(error_));\n state.value = 'errored';\n loading.value = false;\n }\n };\n\n // Start initial fetch\n doFetch();\n\n // Abort in-flight request when the owning scope is disposed (component unmount)\n onCleanup(() => {\n fetchId++;\n controller?.abort();\n controller = null;\n });\n\n // Resource accessor — pure getter, no side effects\n const resource = (() => value.value) as Resource<T>;\n resource.loading = loading;\n resource.error = error;\n resource.state = state;\n\n // Actions\n const actions: ResourceActions<T> = {\n mutate: (newValue: T) => {\n value.value = newValue;\n state.value = 'ready';\n loading.value = false;\n error.value = null;\n },\n refetch: () => doFetch(),\n };\n\n return [resource, actions];\n}\n","import { isFunction } from '@estjs/shared';\nimport { inject } from '../provide';\nimport { onDestroy } from '../lifecycle';\nimport { createScope, disposeScope, getActiveScope, runWithScope } from '../scope';\nimport { insert } from '../dom';\nimport { Component } from '../component';\nimport { SuspenseContext, type SuspenseContextType } from './Suspense';\nimport type { AnyNode, ComponentFn, ComponentProps } from '../types';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AsyncComponentOptions {\n /**\n * Component to render while the async component is loading.\n * Only shown after `delay` ms has elapsed (prevents flash of loading state).\n */\n loading?: ComponentFn;\n\n /**\n * Component to render when the async component fails to load.\n * Receives `{ error, retry }` as props.\n */\n error?: ComponentFn<{ error: Error; retry: () => void }>;\n\n /** Delay in ms before showing the `loading` component (default: 200). */\n delay?: number;\n\n /** Timeout in ms. If loading exceeds this, the error component is shown. */\n timeout?: number;\n\n /**\n * SSR rendering strategy (default: `'blocking'`).\n *\n * - `'blocking'` — Pre-calls the loader at definition time. If the module\n * resolves before the component body runs, the real component is inlined.\n * - `'client-only'` — Renders `null` on the server; loads only in browser.\n */\n ssr?: 'blocking' | 'client-only';\n\n /** Called when loading fails. Useful for logging or error tracking. */\n onError?: (error: Error, retry: () => void) => void;\n}\n\ntype LoaderResult<P> = { default: ComponentFn<P> } | ComponentFn<P>;\ntype Loader<P> = () => Promise<LoaderResult<P>>;\n\n/** Resolve the default export (or the function itself) from a loaded module. */\nfunction resolveModule<P>(mod: LoaderResult<P>): ComponentFn<P> {\n return isFunction(mod) ? (mod as ComponentFn<P>) : (mod as { default: ComponentFn<P> }).default;\n}\n\n// ============================================================================\n// Server-side rendering\n// ============================================================================\n\nfunction defineServerAsyncComponent<P extends ComponentProps>(\n loader: Loader<P>,\n ssr: 'blocking' | 'client-only',\n): ComponentFn<P> {\n if (ssr === 'client-only') {\n const placeholder: ComponentFn<P> = () => '' as unknown as AnyNode;\n (placeholder as any).__asyncLoader = loader;\n (placeholder as any).__asyncResolved = () => null;\n return placeholder;\n }\n\n // 'blocking': pre-call the loader so an already-cached module renders inline.\n let resolved: ComponentFn<P> | null = null;\n let promise: Promise<void> | null = null;\n\n const load = (): Promise<void> =>\n (promise ??= loader()\n .then((mod) => {\n resolved = resolveModule(mod);\n })\n .catch(() => {}));\n\n load();\n\n const wrapper: ComponentFn<P> = (props: P) =>\n resolved ? resolved(props) : ('' as unknown as AnyNode);\n (wrapper as any).__asyncLoader = load;\n (wrapper as any).__asyncResolved = () => resolved;\n return wrapper;\n}\n\n// ============================================================================\n// Client-side\n// ============================================================================\n\nfunction defineClientAsyncComponent<P extends ComponentProps>(\n loader: Loader<P>,\n options: AsyncComponentOptions,\n): ComponentFn<P> {\n const { loading, error: errorComp, delay = 200, timeout, onError } = options;\n\n // Module-level cache: all instances share one loader invocation.\n let component: ComponentFn<P> | null = null;\n let error: Error | null = null;\n let status: 'pending' | 'resolved' | 'errored' = 'pending';\n let loadPromise: Promise<void> | null = null;\n\n const load = (): Promise<void> =>\n (loadPromise ??= loader()\n .then((mod) => {\n component = resolveModule(mod);\n status = 'resolved';\n })\n .catch((error_) => {\n error = error_ instanceof Error ? error_ : new Error(String(error_));\n status = 'errored';\n loadPromise = null; // allow retry\n }));\n\n load();\n\n function AsyncWrapper(props: P): AnyNode {\n // Wrapper-free: returns a fragment whose sole child is the end anchor of a\n // `<!--async-->` anchored range. Each state transition (loading / resolved\n // / error) creates a fresh child scope and mounts a Component before that\n // anchor using `insert()`. The returning `<For>`-style fragment also works\n // here — the framework moves the fragment's children into the host.\n const owner = getActiveScope();\n const end = document.createComment('async');\n const frag = document.createDocumentFragment();\n frag.appendChild(end);\n\n let alive = true;\n let viewScope: ReturnType<typeof createScope> | null = null;\n let delayTimer: ReturnType<typeof setTimeout> | null = null;\n let timeoutTimer: ReturnType<typeof setTimeout> | null = null;\n\n const clearTimers = () => {\n if (delayTimer != null) clearTimeout(delayTimer);\n if (timeoutTimer != null) clearTimeout(timeoutTimer);\n delayTimer = timeoutTimer = null;\n };\n\n /** Dispose old view, mount `fn` as the new one before `end`. */\n const render = (fn: ComponentFn<any> | null, fnProps?: any): void => {\n if (!alive) return;\n // Guard: if the owner scope was destroyed while we were awaiting (e.g.\n // the component unmounted before the Promise resolved), bail out to\n // prevent creating an orphan child scope attached to a dead parent.\n if (owner && owner.isDestroyed) return;\n if (viewScope) {\n disposeScope(viewScope);\n viewScope = null;\n }\n if (!fn) return;\n viewScope = createScope(owner);\n runWithScope(viewScope, () => {\n // Lazy-parent: before flush end is in frag, after flush it's in the host.\n insert(end.parentNode ?? frag, () => new Component(fn, fnProps), end);\n });\n };\n\n onDestroy(() => {\n alive = false;\n clearTimers();\n if (viewScope) {\n disposeScope(viewScope);\n viewScope = null;\n }\n end.remove();\n });\n\n /** Build a retry handler bound to the given props. */\n const retryWith =\n (retryProps: P): (() => void) =>\n () => {\n loadPromise = null;\n status = 'pending';\n error = null;\n if (loading) render(loading);\n load().then(() => settle(retryProps));\n };\n\n /** Reflect the current cache status into the rendered view. */\n const settle = (renderProps: P): void => {\n if (!alive) return;\n clearTimers();\n if (status === 'resolved' && component) {\n render(component, renderProps);\n } else if (status === 'errored' && error) {\n if (errorComp) render(errorComp, { error, retry: retryWith(renderProps) });\n if (onError) onError(error, retryWith(renderProps));\n }\n };\n\n // ── Fast paths: cache already settled ─────────────────────────────────\n\n if (status === 'resolved' && component) {\n render(component, props);\n return frag as unknown as AnyNode;\n }\n if (status === 'errored' && error) {\n if (errorComp) render(errorComp, { error, retry: retryWith(props) });\n return frag as unknown as AnyNode;\n }\n\n // ── Pending ──────────────────────────────────────────────────────────\n\n const pending = load().then(() => settle(props));\n\n // Notify an enclosing Suspense boundary about this pending work.\n inject<SuspenseContextType>(SuspenseContext)?.register(pending);\n\n if (delay > 0) {\n delayTimer = setTimeout(() => {\n if (alive && status === 'pending' && loading) render(loading);\n }, delay);\n } else if (loading) {\n render(loading);\n }\n\n if (timeout != null) {\n timeoutTimer = setTimeout(() => {\n if (!alive || status !== 'pending') return;\n error = new Error(`[defineAsyncComponent] Timeout after ${timeout}ms`);\n status = 'errored';\n if (errorComp) render(errorComp, { error, retry: retryWith(props) });\n if (onError) onError(error, retryWith(props));\n }, timeout);\n }\n\n return frag as unknown as AnyNode;\n }\n\n (AsyncWrapper as any).__asyncLoader = load;\n (AsyncWrapper as any).__asyncResolved = () => component;\n return AsyncWrapper;\n}\n\n// ============================================================================\n// defineAsyncComponent\n// ============================================================================\n\n/**\n * Define an async (lazy-loaded) component. Works on client, SSR, and SSG, and\n * integrates with `<Suspense>` via `SuspenseContext` when nested in a boundary.\n *\n * @param loader - The async loader function.\n * @param options - Configuration options.\n *\n * @example\n * ```tsx\n * const Chart = defineAsyncComponent(() => import('./Chart'), {\n * loading: () => <Spinner />,\n * error: ({ error, retry }) => <button onClick={retry}>{error.message}</button>,\n * delay: 200,\n * timeout: 10_000,\n * });\n * ```\n */\nexport function defineAsyncComponent<P extends ComponentProps = ComponentProps>(\n loader: Loader<P>,\n options: AsyncComponentOptions = {},\n): ComponentFn<P> {\n return typeof window === 'undefined'\n ? defineServerAsyncComponent(loader, options.ssr ?? 'blocking')\n : defineClientAsyncComponent(loader, options);\n}\n\n/**\n * Returns true if a function was created by `defineAsyncComponent`.\n *\n * @param fn - The function to check.\n * @returns {boolean} True if it is an async component.\n */\nexport function isAsyncComponent(fn: unknown): boolean {\n return isFunction(fn) && !!(fn as any).__asyncLoader;\n}\n","import { type Signal, effect, isSignal } from '@estjs/signals';\nimport { isFunction } from '@estjs/shared';\nimport {\n type Scope,\n createScope,\n disposeScope,\n getActiveScope,\n onCleanup,\n runWithScope,\n} from '../scope';\nimport { FOR_COMPONENT } from '../constants';\nimport { isComponent } from '../component';\nimport { insertNode, normalizeNode, removeNode } from '../dom';\nimport { getSequence } from '../reconcile';\nimport type { AnyNode } from '../types';\nimport type { Component } from '../component';\n\nexport interface ForProps<T> {\n each: T[] | Signal<T[]> | (() => T[]);\n children: (item: T, index: number) => AnyNode;\n key?: (item: T, index: number) => unknown;\n fallback?: () => AnyNode;\n}\n\ninterface ItemEntry {\n key: unknown;\n item: unknown;\n nodes: Node[];\n scope: Scope; // Track scope for cleanup\n}\n\n/**\n * Optimized For Component\n * - Uses createDetachedScope to avoid parent.children Set overhead (SolidJS style)\n * - Uses DocumentFragment batching for mass creation\n * - Inlines scope switching for performance\n */\nexport function For<T>(props: ForProps<T>): Node {\n const fragment = document.createDocumentFragment();\n const marker = document.createComment('');\n fragment.appendChild(marker);\n\n let entries: ItemEntry[] = [];\n let fallbackNodes: Node[] = [];\n\n const keyFn = props.key;\n // The JSX babel pipeline wraps a single arrow child in a 1-element array —\n // `<For>{(item) => …}</For>` becomes `children: [(item) => …]` at runtime.\n // Unwrap it here so the rest of the component only deals with a function.\n const raw = props.children as unknown;\n const renderFn: ForProps<T>['children'] =\n Array.isArray(raw) && raw.length === 1 && isFunction(raw[0])\n ? (raw[0] as ForProps<T>['children'])\n : (props.children as ForProps<T>['children']);\n if (!isFunction(renderFn)) {\n throw new TypeError('<For> requires `children` to be a function (item, index) => Node');\n }\n\n const getList = (): T[] => {\n const input = props.each;\n if (isSignal(input)) return (input as Signal<T[]>).value ?? [];\n if (isFunction(input)) return (input as () => T[])() ?? [];\n return (input as T[]) ?? [];\n };\n\n const getKey = (item: T, index: number): unknown => (keyFn ? keyFn(item, index) : item);\n\n // Resolve whatever `children(item, index)` returned into actual DOM nodes\n // and insert them at `before`. Accepts arrays (recursed), Components\n // (mounted via insertNode), primitives (text via normalizeNode), and\n // `null`/`false` (skipped — lets children short-circuit a row).\n const mountValue = (value: AnyNode, parent: Node, before: Node | null): Node[] => {\n if (value == null || value === false) return [];\n\n if (Array.isArray(value)) {\n const nodes: Node[] = [];\n for (const child of value) nodes.push(...mountValue(child as AnyNode, parent, before));\n return nodes;\n }\n\n if (isComponent(value)) {\n insertNode(parent, value, before ?? undefined);\n // Safe to return the live array: Component only ever reassigns\n // `renderedNodes` (mount/destroy), never mutates it in place, and For\n // treats `entry.nodes` as read-only.\n return (value as Component).renderedNodes;\n }\n\n const node = normalizeNode(value);\n insertNode(parent, node, before ?? undefined);\n return [node];\n };\n\n const mountFallback = (parent: Node, before: Node | null) => {\n if (!props.fallback) return;\n const nodes = mountValue(props.fallback(), parent, before);\n fallbackNodes = nodes;\n };\n\n const clearFallback = () => {\n for (const node of fallbackNodes) {\n // Use removeNode() instead of raw removeChild so Component instances\n // in the fallback have their destroy() called, preventing scope/effect leaks.\n removeNode(node as AnyNode);\n }\n fallbackNodes = [];\n };\n\n // Capture the scope that is active when <For> is first evaluated. The list\n // effect below re-runs through the scheduler, where the template-level\n // `activeScope` is no longer set (it's a module-global restored only inside\n // runWithScope). Without re-establishing it, `renderItem` → getActiveScope()\n // returns null on updates, so rows added later become detached scopes and\n // `inject()` inside them fails. Mirrors the parentScope capture in insert().\n const ownerScope = getActiveScope();\n\n /**\n * Render item with a child scope under the captured owner scope.\n */\n const renderItem = (\n item: T,\n index: number,\n parent: Node,\n before: Node | null,\n key = getKey(item, index),\n ): ItemEntry => {\n // Prefer the live active scope (correct on initial synchronous mount), but\n // fall back to the captured owner scope on reactive re-runs when the\n // template scope context has not been re-established.\n const parentScope = getActiveScope() ?? ownerScope;\n const scope = createScope(parentScope);\n let mountedNodes: Node[] = [];\n try {\n runWithScope(scope, () => {\n mountedNodes = mountValue(renderFn(item, index), parent, before);\n });\n } catch (error) {\n // Dispose the scope immediately to prevent leaks when renderFn throws\n disposeScope(scope);\n throw error;\n }\n\n return { key, item, nodes: mountedNodes, scope };\n };\n\n const disposeItem = (entry: ItemEntry) => {\n disposeScope(entry.scope);\n for (const node of entry.nodes) {\n if (node.parentNode) {\n node.parentNode.removeChild(node);\n }\n }\n };\n\n const effectRunner = effect(() => {\n const newItems = getList();\n\n const parent = marker.parentNode;\n\n // Initial mount (parent is null because fragment is not attached yet)\n if (!parent) {\n if (newItems.length === 0) {\n mountFallback(fragment, marker);\n } else {\n entries = new Array(newItems.length);\n let idx = 0;\n for (const newItem of newItems) {\n entries[idx] = renderItem(newItem, idx, fragment, marker);\n idx++;\n }\n }\n // Skip reconcile on initial mount — entries are already created\n return;\n }\n\n // Before the fragment is attached, `marker.parentNode` is the fragment\n // itself; afterwards it is the real host (e.g. the container the user\n // mounted into). All reconciliation must target the live parent, or\n // `insertBefore(node, marker)` throws NotFoundError because `marker`\n // already moved out of the fragment on the first flush.\n reconcile(parent, newItems);\n });\n\n /**\n * Reconciles the rendered entries against the latest item list.\n *\n * @param parent - The parent node.\n * @param newItems - The new items list.\n * @returns {void}\n */\n function reconcile(parent: Node, newItems: T[]): void {\n const oldLen = entries.length;\n const newLen = newItems.length;\n\n // ===== FAST PATH 1: Clear all =====\n if (newLen === 0) {\n for (let i = 0; i < oldLen; i++) {\n disposeItem(entries[i]);\n }\n entries = [];\n\n if (props.fallback && fallbackNodes.length === 0) {\n mountFallback(parent, marker);\n }\n return;\n }\n\n // ===== FAST PATH 2: Create all (from empty/fallback) =====\n if (oldLen === 0 || fallbackNodes.length > 0) {\n if (fallbackNodes.length > 0) {\n clearFallback();\n }\n\n entries = new Array(newLen);\n\n // Batch creation in fragment\n const batchFragment = document.createDocumentFragment();\n\n for (let i = 0; i < newLen; i++) {\n // Render to batchFragment, append to end (before=null)\n entries[i] = renderItem(newItems[i], i, batchFragment, null);\n }\n\n parent.insertBefore(batchFragment, marker);\n return;\n }\n\n // ===== Keyed reconciliation =====\n //\n // Each `oldKeyMap` value preserves the entry together with its original\n // index. The index is the fuel for the LIS-based move minimisation\n // further down: by mapping each new position to an old position we can\n // find the longest slice that is already in order and leave it alone.\n const oldKeyMap = new Map<unknown, Array<[ItemEntry, number]>>();\n for (let i = 0; i < oldLen; i++) {\n const entry = entries[i];\n const list = oldKeyMap.get(entry.key);\n const pair: [ItemEntry, number] = [entry, i];\n if (list) list.push(pair);\n else oldKeyMap.set(entry.key, [pair]);\n }\n\n const newEntries: ItemEntry[] = new Array(newLen);\n const toRemove: ItemEntry[] = [];\n\n // Batch new nodes in a fragment so multiple creations turn into a\n // single native DOM insertion. Created lazily — only when a fresh\n // item is actually rendered so we avoid the allocation when every\n // entry is reused.\n let batchFragment: DocumentFragment | null = null;\n\n // `newIndexToOldIndex[i] === 0` → newEntries[i] is freshly created.\n // `newIndexToOldIndex[i] === k + 1` → reused from `entries[k]`.\n const newIndexToOldIndex = new Int32Array(newLen);\n let moved = false;\n let maxOldSeen = 0;\n\n // Pre-compute keys for all new items to avoid redundant getKey calls\n const newKeys = new Array<unknown>(newLen);\n for (let i = 0; i < newLen; i++) {\n newKeys[i] = getKey(newItems[i], i);\n }\n\n for (let i = 0; i < newLen; i++) {\n const item = newItems[i];\n const key = newKeys[i];\n const oldList = oldKeyMap.get(key);\n\n if (oldList && oldList.length > 0) {\n const [reused, oldIndex] = oldList.shift()!;\n if (Object.is(reused.item, item)) {\n reused.item = item;\n newEntries[i] = reused;\n newIndexToOldIndex[i] = oldIndex + 1;\n if (oldIndex < maxOldSeen) moved = true;\n else maxOldSeen = oldIndex;\n } else {\n if (!batchFragment) batchFragment = document.createDocumentFragment();\n disposeItem(reused);\n newEntries[i] = renderItem(item, i, batchFragment, null, key);\n }\n } else {\n if (!batchFragment) batchFragment = document.createDocumentFragment();\n newEntries[i] = renderItem(item, i, batchFragment, null, key);\n // newIndexToOldIndex[i] remains 0 (fresh entry).\n }\n }\n\n for (const list of oldKeyMap.values()) {\n for (const [entry] of list) toRemove.push(entry);\n }\n for (const entry of toRemove) disposeItem(entry);\n\n // ===== Position correction with LIS =====\n // We walk the new array right-to-left using `marker` as the initial\n // anchor, which lets us use `insertBefore(node, nextNode)` uniformly.\n const lis = moved ? getSequence(newIndexToOldIndex) : [];\n let lisCursor = lis.length - 1;\n let nextNode: Node = marker;\n\n for (let i = newLen - 1; i >= 0; i--) {\n const entry = newEntries[i];\n const nodes = entry.nodes;\n const isFresh = newIndexToOldIndex[i] === 0;\n const inLis = !isFresh && moved && lisCursor >= 0 && i === lis[lisCursor];\n\n if (inLis) {\n // Stable skeleton — leave every node untouched, but still update\n // `nextNode` so the next iteration has the correct anchor.\n lisCursor--;\n for (let j = nodes.length - 1; j >= 0; j--) nextNode = nodes[j];\n continue;\n }\n\n // Fresh entry OR reused entry that is out of place → (re)insert each\n // node. The nextSibling guard keeps us from redundant writes for\n // multi-node rows whose internal order is already correct.\n for (let j = nodes.length - 1; j >= 0; j--) {\n const node = nodes[j];\n if (node.nextSibling !== nextNode) {\n parent.insertBefore(node, nextNode);\n }\n nextNode = node;\n }\n }\n\n entries = newEntries;\n }\n\n onCleanup(() => {\n effectRunner.stop();\n for (const entry of entries) {\n disposeItem(entry);\n }\n entries = [];\n clearFallback();\n if (marker.parentNode) {\n marker.parentNode.removeChild(marker);\n }\n });\n\n return fragment;\n}\n\nFor[FOR_COMPONENT] = true;\n\nexport function isFor(node: unknown): boolean {\n return !!node && !!(node as Record<symbol, boolean>)[FOR_COMPONENT];\n}\n","import { effect } from '@estjs/signals';\nimport { isNumber, warn } from '@estjs/shared';\nimport { onCleanup } from '../scope';\nimport { onMount } from '../lifecycle';\nimport { TRANSITION_COMPONENT } from '../constants';\nimport { isComponent } from '../component';\nimport { useChildren } from '../utils';\nimport type { AnyNode } from '../types';\nimport type { Component } from '../component';\n\nexport interface TransitionProps {\n name?: string;\n css?: boolean;\n type?: 'transition' | 'animation';\n appear?: boolean;\n duration?: number | { enter: number; leave: number };\n enterFromClass?: string;\n enterActiveClass?: string;\n enterToClass?: string;\n appearFromClass?: string;\n appearActiveClass?: string;\n appearToClass?: string;\n leaveFromClass?: string;\n leaveActiveClass?: string;\n leaveToClass?: string;\n onBeforeEnter?: (el: Element) => void;\n onEnter?: (el: Element, done: () => void) => void;\n onAfterEnter?: (el: Element) => void;\n onEnterCancelled?: (el: Element) => void;\n onBeforeLeave?: (el: Element) => void;\n onLeave?: (el: Element, done: () => void) => void;\n onAfterLeave?: (el: Element) => void;\n onLeaveCancelled?: (el: Element) => void;\n children?: AnyNode | (() => AnyNode);\n}\n\n// ---------------------------------------------------------------------------\n// Pure helpers (exported — tests + consumers rely on these)\n// ---------------------------------------------------------------------------\n\nexport interface TransitionClassNames {\n enterFrom: string;\n enterActive: string;\n enterTo: string;\n leaveFrom: string;\n leaveActive: string;\n leaveTo: string;\n appearFrom: string;\n appearActive: string;\n appearTo: string;\n}\n\nexport function resolveTransitionClasses(props: TransitionProps): TransitionClassNames {\n const n = props.name ?? 'v';\n const enterFrom = props.enterFromClass ?? `${n}-enter-from`;\n const enterActive = props.enterActiveClass ?? `${n}-enter-active`;\n const enterTo = props.enterToClass ?? `${n}-enter-to`;\n return {\n enterFrom,\n enterActive,\n enterTo,\n leaveFrom: props.leaveFromClass ?? `${n}-leave-from`,\n leaveActive: props.leaveActiveClass ?? `${n}-leave-active`,\n leaveTo: props.leaveToClass ?? `${n}-leave-to`,\n appearFrom: props.appearFromClass ?? enterFrom,\n appearActive: props.appearActiveClass ?? enterActive,\n appearTo: props.appearToClass ?? enterTo,\n };\n}\n\nexport interface TransitionInfo {\n event: 'transitionend' | 'animationend';\n timeout: number;\n}\n\nconst toMs = (s: string): number => {\n if (!s) return 0;\n if (s.endsWith('ms')) return Number(s.slice(0, -2).replace(',', '.'));\n return Number(s.slice(0, -1).replace(',', '.')) * 1000;\n};\n\nfunction sumMs(delays: string, durations: string): number {\n const d = delays.split(', ');\n const u = durations.split(', ');\n let max = 0;\n for (const [i, dur] of u.entries()) {\n const total = toMs(dur) + toMs(d[i % d.length] || '0s');\n if (total > max) max = total;\n }\n return max;\n}\n\nexport function getTransitionInfo(\n el: Element,\n type?: 'transition' | 'animation',\n): TransitionInfo | null {\n const s = getComputedStyle(el);\n const tt = type !== 'animation' ? sumMs(s.transitionDelay, s.transitionDuration) : 0;\n const at = type !== 'transition' ? sumMs(s.animationDelay, s.animationDuration) : 0;\n if (tt === 0 && at === 0) return null;\n return tt >= at\n ? { event: 'transitionend', timeout: tt }\n : { event: 'animationend', timeout: at };\n}\n\n// ---------------------------------------------------------------------------\n// Shared DOM helpers (exported — TransitionGroup reuses these so we don't\n// fork the same primitives across two files)\n// ---------------------------------------------------------------------------\n\nexport function addClass(el: Element, cls: string): void {\n for (const c of cls.split(/\\s+/)) if (c) el.classList.add(c);\n}\n\nexport function removeClass(el: Element, cls: string): void {\n for (const c of cls.split(/\\s+/)) if (c) el.classList.remove(c);\n}\n\nexport function nextFrame(cb: () => void): void {\n requestAnimationFrame(() => requestAnimationFrame(cb));\n}\n\nexport function forceReflow(el: Element): void {\n void (el as HTMLElement).offsetHeight;\n}\n\n/**\n * Wait for a transition/animation on `el` to finish, then call `resolve`.\n * If `explicit` is set, use that as a fixed timeout ; otherwise probe computed style for the longest active timing\n * and listen for the matching end event with a +1ms safety net.\n */\nexport function whenTransitionEnds(\n el: Element,\n type: TransitionProps['type'],\n explicit: number | null,\n resolve: () => void,\n): void {\n if (explicit != null) {\n setTimeout(resolve, explicit);\n return;\n }\n const info = getTransitionInfo(el, type);\n if (!info) {\n resolve();\n return;\n }\n let done = false;\n const finish = (): void => {\n if (done) return;\n done = true;\n clearTimeout(timer);\n el.removeEventListener(info.event, onEnd);\n resolve();\n };\n const onEnd = (): void => finish();\n el.addEventListener(info.event, onEnd);\n const timer = setTimeout(finish, info.timeout + 1);\n}\n\nexport function resolveDuration(\n d: TransitionProps['duration'],\n dir: 'enter' | 'leave',\n): number | null {\n if (d == null) return null;\n if (isNumber(d)) return d;\n return d[dir];\n}\n\nfunction validateSlot(value: unknown): Element | null {\n if (value == null || value === false) return null;\n if (Array.isArray(value)) {\n if (__DEV__) {\n throw new Error(\n '[essor] <Transition> expects a single root child. Use <TransitionGroup> for multiple children.',\n );\n }\n return value[0] instanceof Element ? value[0] : null;\n }\n if (value instanceof Element) return value;\n // A Component instance was passed (e.g. `<Transition><EFoo/></Transition>`):\n // mount it into a detached fragment so we can pluck its rendered root\n // Element, then return that. The Component owns its scope/cleanup, so\n // its disposal will happen via the outer mount tree just like a normal\n // child. We only need the DOM node for class manipulation / events.\n //\n // Note: Transition can only animate a SINGLE root element. If the child\n // component renders multiple roots (fragment-style return), only the\n // first one participates — the rest stay in the detached fragment and\n // never reach the DOM. Surface that as a dev warning.\n if (isComponent(value)) {\n const comp = value as Component;\n if (comp.scope == null) {\n const fragment = document.createDocumentFragment();\n comp.mount(fragment);\n }\n if (__DEV__ && comp.renderedNodes.length > 1) {\n warn(\n '[Transition] child component rendered multiple root nodes; ' +\n 'only the first is animated. Wrap the children in a single element ' +\n 'or use <TransitionGroup>.',\n );\n }\n const first = comp.firstChild;\n if (first instanceof Element) return first;\n if (__DEV__) {\n warn('[Transition] child component did not render an Element root.');\n }\n return null;\n }\n if (__DEV__) {\n warn('[Transition] received a non-element child; animation will be skipped.');\n }\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// Transition component\n//\n// Architecture:\n// - Slot is read inside a single `effect()` via `useChildren()`. The effect\n// body ONLY reads the slot and queues a microtask — it never invokes user\n// hooks. This keeps signal writes (e.g. counters incremented in onEnter)\n// out of the effect's tracking phase, eliminating dep-link corruption.\n// - The state machine runs in `flushCommit()` after the microtask drains.\n// - Cancellation uses Symbol-keyed callbacks on the element itself\n// robust across reentrancy and\n// mid-flight reversals.\n// - End-of-animation detection is centralized in `whenTransitionEnds()`:\n// explicit `duration` wins; otherwise observe the appropriate end event\n// with a `+1ms` safety net (in case the browser drops the event).\n// ---------------------------------------------------------------------------\n\nconst ENTER_CB = Symbol('enter_cb');\nconst LEAVE_CB = Symbol('leave_cb');\n\ntype CancelCb = ((cancelled?: boolean) => void) | undefined;\n\ntype State = 'idle' | 'entering' | 'entered' | 'leaving';\n\nexport function Transition(props: TransitionProps): Node {\n const anchor = document.createComment('');\n const classes = resolveTransitionClasses(props);\n const useCss = props.css !== false;\n const readSlot = useChildren<unknown>(props);\n\n let state: State = 'idle';\n let currentEl: Element | null = null;\n let leavingEl: Element | null = null; // mid-leave element awaiting cleanup\n let mounted = false;\n\n // Microtask scheduling — keeps the state machine outside the effect's\n // tracking phase, so user hooks that write signals don't corrupt deps.\n // We stash the RAW slot value (pre-validation) so the initial validation\n // can be deferred to onMount; otherwise the multi-child throw would fire\n // during component setup instead of during the mount phase.\n let pendingRaw: unknown = undefined;\n let hasPending = false;\n let scheduled = false;\n let disposed = false;\n\n const enter = (el: Element, phase: 'enter' | 'appear'): void => {\n // Cancel any in-flight leave on the same element.\n const prevLeave = (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB];\n if (prevLeave) prevLeave(true);\n\n state = 'entering';\n const fromCls = phase === 'appear' ? classes.appearFrom : classes.enterFrom;\n const activeCls = phase === 'appear' ? classes.appearActive : classes.enterActive;\n const toCls = phase === 'appear' ? classes.appearTo : classes.enterTo;\n\n props.onBeforeEnter?.(el);\n\n if (useCss) {\n addClass(el, fromCls);\n addClass(el, activeCls);\n }\n\n let called = false;\n const done = (cancelled?: boolean): void => {\n if (called) return;\n called = true;\n (el as unknown as Record<symbol, CancelCb>)[ENTER_CB] = undefined;\n if (useCss) {\n removeClass(el, fromCls);\n removeClass(el, activeCls);\n removeClass(el, toCls);\n }\n if (cancelled) {\n props.onEnterCancelled?.(el);\n } else {\n state = 'entered';\n props.onAfterEnter?.(el);\n }\n };\n (el as unknown as Record<symbol, CancelCb>)[ENTER_CB] = done;\n\n nextFrame(() => {\n if (called) return;\n if (useCss) {\n removeClass(el, fromCls);\n addClass(el, toCls);\n }\n\n if (props.onEnter) {\n props.onEnter(el, () => done(false));\n } else if (useCss) {\n const explicit = resolveDuration(props.duration, 'enter');\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n } else {\n // css=false and no JS hook — no animation\n done(false);\n }\n });\n };\n\n const leave = (el: Element, after: () => void): void => {\n // Cancel any in-flight enter on the same element, then settle a reflow so\n // the swap to leave-from/leave-active takes effect cleanly\n const prevEnter = (el as unknown as Record<symbol, CancelCb>)[ENTER_CB];\n if (prevEnter) {\n prevEnter(true);\n forceReflow(el);\n }\n\n state = 'leaving';\n props.onBeforeLeave?.(el);\n\n if (useCss) {\n addClass(el, classes.leaveFrom);\n addClass(el, classes.leaveActive);\n }\n\n let called = false;\n const done = (cancelled?: boolean): void => {\n if (called) return;\n called = true;\n (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB] = undefined;\n if (useCss) {\n removeClass(el, classes.leaveFrom);\n removeClass(el, classes.leaveActive);\n removeClass(el, classes.leaveTo);\n }\n if (cancelled) {\n props.onLeaveCancelled?.(el);\n } else {\n state = 'idle';\n after();\n props.onAfterLeave?.(el);\n }\n };\n (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB] = done;\n\n // Decide whether there is any animation to wait for. We must query\n // computed style AFTER applying leave-active so the rule on that class\n // is visible.\n const explicit = resolveDuration(props.duration, 'leave');\n const hasCssInfo =\n useCss && !props.onLeave && explicit == null ? !!getTransitionInfo(el, props.type) : false;\n\n if (!props.onLeave && explicit == null && !hasCssInfo) {\n // No animation path — tear down synchronously to preserve the\n // no-animation contract relied on by tests and the SSR sanity checks.\n done(false);\n return;\n }\n\n nextFrame(() => {\n if (called) return;\n if (useCss) {\n removeClass(el, classes.leaveFrom);\n addClass(el, classes.leaveTo);\n }\n\n if (props.onLeave) {\n props.onLeave(el, () => done(false));\n } else if (useCss) {\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n } else {\n done(false);\n }\n });\n };\n\n const commit = (next: Element | null, isFirst: boolean): void => {\n // Leave → Enter reversal — revive the still-leaving element rather than\n // mounting a fresh node from the slot .\n if (next && state === 'leaving' && leavingEl) {\n const reviving = leavingEl;\n const leaveCb = (reviving as unknown as Record<symbol, CancelCb>)[LEAVE_CB];\n if (leaveCb) leaveCb(true); // fires onLeaveCancelled + scrubs leave classes\n leavingEl = null;\n currentEl = reviving;\n enter(reviving, 'enter');\n return;\n }\n\n if (next === currentEl) return;\n\n const outgoing = currentEl;\n currentEl = next;\n\n if (outgoing) {\n leavingEl = outgoing;\n const captured = outgoing;\n leave(captured, () => {\n if (captured.parentNode) captured.parentNode.removeChild(captured);\n if (leavingEl === captured) leavingEl = null;\n });\n }\n\n if (next && anchor.parentNode) {\n anchor.parentNode.insertBefore(next, anchor);\n if (isFirst && !props.appear) {\n // Initial mount, no `appear` — render immediately, skip animation.\n state = 'entered';\n } else {\n enter(next, isFirst && props.appear ? 'appear' : 'enter');\n }\n } else if (!outgoing && !next) {\n state = 'idle';\n }\n };\n\n const flush = (): void => {\n scheduled = false;\n if (disposed || !hasPending) return;\n const raw = pendingRaw;\n hasPending = false;\n pendingRaw = undefined;\n try {\n commit(validateSlot(raw), false);\n } catch (error) {\n if (__DEV__) console.error('[essor] <Transition>', error);\n }\n };\n\n const scheduleCommit = (raw: unknown): void => {\n pendingRaw = raw;\n hasPending = true;\n if (scheduled) return;\n scheduled = true;\n queueMicrotask(flush);\n };\n\n // ---------- Lifecycle ----------\n\n // Effect: pure read. Tracks slot deps, never writes signals. Validation is\n // deferred to commit() so the initial throw lands at mount time, matching\n // the legacy contract (T16 tests).\n const effectRunner = effect(() => {\n const raw = readSlot();\n if (mounted) {\n scheduleCommit(raw);\n } else {\n pendingRaw = raw;\n hasPending = true;\n }\n });\n\n onMount(() => {\n mounted = true;\n const initial = hasPending ? validateSlot(pendingRaw) : null;\n hasPending = false;\n pendingRaw = undefined;\n commit(initial, true);\n });\n\n onCleanup(() => {\n disposed = true;\n effectRunner.stop();\n for (const el of [currentEl, leavingEl]) {\n if (!el) continue;\n const ec = (el as unknown as Record<symbol, CancelCb>)[ENTER_CB];\n const lc = (el as unknown as Record<symbol, CancelCb>)[LEAVE_CB];\n ec?.(true);\n lc?.(true);\n if (el.parentNode) el.parentNode.removeChild(el);\n }\n currentEl = null;\n leavingEl = null;\n state = 'idle';\n });\n\n return anchor;\n}\n\n(Transition as unknown as Record<symbol, true>)[TRANSITION_COMPONENT] = true;\n\n/**\n * Check if a node is a Transition component.\n *\n * @param node - Node to check.\n * @returns True if node is a Transition.\n */\nexport function isTransition(node: unknown): boolean {\n return !!node && !!(node as Record<symbol, unknown>)[TRANSITION_COMPONENT];\n}\n","import { type Signal, effect, isSignal } from '@estjs/signals';\nimport { isFunction, warn } from '@estjs/shared';\nimport {\n type Scope,\n createScope,\n disposeScope,\n getActiveScope,\n onCleanup,\n runWithScope,\n} from '../scope';\nimport { onMount } from '../lifecycle';\nimport { TRANSITION_GROUP_COMPONENT } from '../constants';\nimport { isComponent } from '../component';\nimport {\n type TransitionProps,\n addClass,\n forceReflow,\n nextFrame,\n removeClass,\n resolveDuration,\n resolveTransitionClasses,\n whenTransitionEnds,\n} from './Transition';\nimport type { Component } from '../component';\n\n/**\n * Props for `<TransitionGroup>`.\n *\n * Inherits every enter/leave knob from {@link TransitionProps} (name, css,\n * type, duration, JS hooks, custom class overrides) and adds:\n *\n * - `each` / `key` — same shape as `<For>`; required for stable identity.\n * - `tag` — wrapper element. Required so we have a layout root to measure\n * positions against and to anchor leaving items absolutely. Defaults to\n * `'div'`.\n * - `moveClass` — class applied to elements during the FLIP move animation.\n * Defaults to `${name}-move`.\n * - `children` — render function per item. May return an Element or a\n * Component instance (the latter is mounted, its first rendered Element\n * participates in the animations).\n *\n * `appear` is intentionally NOT supported: items mounted on the initial\n * render do NOT animate. The appear-related props from {@link TransitionProps}\n * are therefore omitted from this type. If you need first-frame animation,\n * mount the group with an empty list and push items after mount.\n */\ntype GroupBaseProps = Omit<\n TransitionProps,\n 'children' | 'appear' | 'appearFromClass' | 'appearActiveClass' | 'appearToClass'\n>;\n\nexport interface TransitionGroupProps<T = unknown> extends GroupBaseProps {\n each: T[] | Signal<T[]> | (() => T[]);\n key: (item: T, index: number) => unknown;\n tag?: string;\n moveClass?: string;\n children: (item: T, index: number) => unknown;\n}\n\ntype CancelCb = (cancelled?: boolean) => void;\n\ninterface Entry {\n key: unknown;\n item: unknown;\n /** The DOM element that participates in class manipulation + FLIP. */\n el: HTMLElement;\n /** Set when the row's render output was a Component instance. */\n comp: Component | null;\n /** Per-row scope so effects inside `children()` clean up on removal. */\n scope: Scope;\n /** Lifecycle state. */\n state: 'entering' | 'present' | 'leaving';\n /** Snapshot of bounding rect taken BEFORE the reconcile DOM mutation. */\n prevRect?: DOMRect;\n /** Cancellation hooks for in-flight enter/leave animations. */\n cancelEnter?: CancelCb;\n cancelLeave?: CancelCb;\n /**\n * Saved inline styles that we override during leave (`position:absolute`\n * + locked geometry). Restored if a leave is cancelled mid-flight.\n */\n savedStyles?: SavedStyles;\n}\n\ninterface SavedStyles {\n position: string;\n top: string;\n left: string;\n width: string;\n height: string;\n}\n\n/**\n * Pull a single root Element out of whatever `children(item, index)` returned.\n *\n * Component instances are mounted into the wrapper so they observe normal\n * scope/lifecycle, then their first rendered Element is returned. Arrays\n * (the babel-emitted shape for a single child) are unwrapped recursively.\n */\nfunction resolveItemElement(\n raw: unknown,\n parent: Element,\n): { el: HTMLElement | null; comp: Component | null } {\n if (raw == null || raw === false) return { el: null, comp: null };\n if (Array.isArray(raw) && raw.length === 1) {\n return resolveItemElement(raw[0], parent);\n }\n if (isFunction(raw)) {\n return resolveItemElement((raw as () => unknown)(), parent);\n }\n if (raw instanceof HTMLElement) {\n return { el: raw, comp: null };\n }\n if (isComponent(raw)) {\n const comp = raw as Component;\n if (comp.scope == null) {\n // Mount into the wrapper directly. The Component lays itself out as a\n // normal child; we just snag the first rendered HTMLElement for FLIP.\n comp.mount(parent);\n }\n if (__DEV__ && comp.renderedNodes.length > 1) {\n warn(\n '[TransitionGroup] child component rendered multiple root nodes; ' +\n 'only the first participates in enter/leave/move animations.',\n );\n }\n const first = comp.firstChild;\n if (first instanceof HTMLElement) return { el: first, comp };\n return { el: null, comp };\n }\n if (__DEV__) {\n warn(\n '[TransitionGroup] child render returned a non-element value; ' +\n 'animations require Element or Component roots.',\n );\n }\n return { el: null, comp: null };\n}\n\nfunction saveStyles(el: HTMLElement): SavedStyles {\n return {\n position: el.style.position,\n top: el.style.top,\n left: el.style.left,\n width: el.style.width,\n height: el.style.height,\n };\n}\n\nfunction restoreStyles(el: HTMLElement, s: SavedStyles): void {\n el.style.position = s.position;\n el.style.top = s.top;\n el.style.left = s.left;\n el.style.width = s.width;\n el.style.height = s.height;\n}\n\n/**\n * Animated keyed list with three coordinated animations:\n *\n * - **enter** — new items fade/slide in using `${name}-enter-*` classes\n * - **leave** — removed items animate out (positioned absolutely so the\n * remaining items can reflow under FLIP), then are detached\n * - **move** — items that stayed but changed position run FLIP: snapshot\n * `getBoundingClientRect()` before reconcile, compute delta after,\n * invert via `transform`, then transition to identity under `moveClass`\n *\n * Each row owns its own scope (mirroring `<For>`), so signals/effects\n * created inside `children()` are torn down when the row leaves.\n *\n * @example\n * ```tsx\n * <TransitionGroup name=\"list\" each={items} key={(it) => it.id} tag=\"ul\">\n * {(item) => <li>{item.label}</li>}\n * </TransitionGroup>\n * ```\n */\nexport function TransitionGroup<T>(props: TransitionGroupProps<T>): Element {\n const tag = props.tag ?? 'div';\n const wrapper = document.createElement(tag);\n // `resolveTransitionClasses` only reads class-prop / name fields; cast to\n // bridge the structural mismatch on `children` (which it ignores anyway).\n const classes = resolveTransitionClasses(props as unknown as TransitionProps);\n const useCss = props.css !== false;\n const moveClass = props.moveClass ?? `${props.name ?? 'v'}-move`;\n\n const keyFn = props.key;\n // Babel wraps a single arrow child in a 1-element array — `{(item) => …}`\n // compiles to `children: [(item) => …]`. Unwrap so the rest of this\n // component only sees the function.\n const rawChildren = props.children as unknown;\n const childrenFn: TransitionGroupProps<T>['children'] =\n Array.isArray(rawChildren) && rawChildren.length === 1 && isFunction(rawChildren[0])\n ? (rawChildren[0] as TransitionGroupProps<T>['children'])\n : (props.children as TransitionGroupProps<T>['children']);\n if (!isFunction(childrenFn) || !isFunction(keyFn)) {\n throw new TypeError(\n '<TransitionGroup> requires `children: (item, index) => Node` and `key: (item, index) => unknown`',\n );\n }\n\n const getList = (): T[] => {\n const input = props.each;\n if (isSignal(input)) return (input as Signal<T[]>).value ?? [];\n if (isFunction(input)) return (input as () => T[])() ?? [];\n return (input as T[]) ?? [];\n };\n\n let entries: Entry[] = [];\n let mounted = false;\n\n // -----------------------------------------------------------------------\n // Per-item lifecycle helpers\n // -----------------------------------------------------------------------\n\n /** Render one row inside a fresh scope and return its initial Entry. */\n const renderEntry = (item: T, index: number): Entry | null => {\n const parentScope = getActiveScope();\n const scope = createScope(parentScope);\n let raw: unknown;\n try {\n runWithScope(scope, () => {\n raw = childrenFn(item, index);\n });\n } catch (error) {\n // Dispose the scope immediately to prevent leaks when childrenFn throws\n disposeScope(scope);\n throw error;\n }\n const { el, comp } = resolveItemElement(raw, wrapper);\n if (!el) {\n disposeScope(scope);\n return null;\n }\n return {\n key: keyFn(item, index),\n item,\n el,\n comp,\n scope,\n state: 'entering',\n };\n };\n\n /**\n * Detach a row's DOM nodes from the wrapper. For Component-backed rows we\n * remove every rendered root, not just `entry.el` — multi-root Components\n * would otherwise leak their trailing siblings into the wrapper indefinitely\n * (FLIP only animates the first root, but cleanup must reclaim all of them).\n */\n const detachEntryDom = (entry: Entry): void => {\n if (entry.comp) {\n for (const node of entry.comp.renderedNodes) {\n if (node.parentNode === wrapper) wrapper.removeChild(node);\n }\n return;\n }\n if (entry.el.parentNode === wrapper) wrapper.removeChild(entry.el);\n };\n\n const disposeEntry = (entry: Entry): void => {\n entry.cancelEnter?.(true);\n entry.cancelLeave?.(true);\n if (entry.comp) entry.comp.destroy();\n detachEntryDom(entry);\n disposeScope(entry.scope);\n };\n\n const runEnter = (entry: Entry): void => {\n const el = entry.el;\n // If the same element was in the middle of a leave, cancel it first so\n // saved styles are restored and the leave classes are scrubbed.\n entry.cancelLeave?.(true);\n\n if (!useCss) {\n entry.state = 'present';\n props.onAfterEnter?.(el);\n return;\n }\n\n props.onBeforeEnter?.(el);\n addClass(el, classes.enterFrom);\n addClass(el, classes.enterActive);\n\n let called = false;\n const done: CancelCb = (cancelled) => {\n if (called) return;\n called = true;\n entry.cancelEnter = undefined;\n removeClass(el, classes.enterFrom);\n removeClass(el, classes.enterActive);\n removeClass(el, classes.enterTo);\n if (cancelled) {\n props.onEnterCancelled?.(el);\n } else {\n entry.state = 'present';\n props.onAfterEnter?.(el);\n }\n };\n entry.cancelEnter = done;\n entry.state = 'entering';\n\n nextFrame(() => {\n if (called) return;\n removeClass(el, classes.enterFrom);\n addClass(el, classes.enterTo);\n if (props.onEnter) {\n props.onEnter(el, () => done(false));\n } else {\n const explicit = resolveDuration(props.duration, 'enter');\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n }\n });\n };\n\n const runLeave = (entry: Entry, prevRect: DOMRect): void => {\n const el = entry.el;\n // Cancel any pending enter on the same element so leave-from/leave-active\n // actually take effect.\n if (entry.cancelEnter) {\n entry.cancelEnter(true);\n forceReflow(el);\n }\n entry.state = 'leaving';\n\n // Pin the leaving element at its previous slot so its siblings can reflow\n // freely while it animates out.\n entry.savedStyles = saveStyles(el);\n const parentRect = wrapper.getBoundingClientRect();\n el.style.position = 'absolute';\n el.style.top = `${prevRect.top - parentRect.top}px`;\n el.style.left = `${prevRect.left - parentRect.left}px`;\n el.style.width = `${prevRect.width}px`;\n el.style.height = `${prevRect.height}px`;\n\n if (!useCss) {\n // No-animation contract: tear down immediately.\n if (entry.savedStyles) restoreStyles(el, entry.savedStyles);\n detachEntryDom(entry);\n disposeScope(entry.scope);\n if (entry.comp) entry.comp.destroy();\n props.onAfterLeave?.(el);\n return;\n }\n\n props.onBeforeLeave?.(el);\n addClass(el, classes.leaveFrom);\n addClass(el, classes.leaveActive);\n\n let called = false;\n const done: CancelCb = (cancelled) => {\n if (called) return;\n called = true;\n entry.cancelLeave = undefined;\n removeClass(el, classes.leaveFrom);\n removeClass(el, classes.leaveActive);\n removeClass(el, classes.leaveTo);\n\n if (cancelled) {\n // Cancelled mid-leave (likely because the same key was re-added).\n if (entry.savedStyles) restoreStyles(el, entry.savedStyles);\n entry.savedStyles = undefined;\n props.onLeaveCancelled?.(el);\n return;\n }\n\n if (entry.savedStyles) restoreStyles(el, entry.savedStyles);\n entry.savedStyles = undefined;\n detachEntryDom(entry);\n disposeScope(entry.scope);\n if (entry.comp) entry.comp.destroy();\n props.onAfterLeave?.(el);\n };\n entry.cancelLeave = done;\n\n nextFrame(() => {\n if (called) return;\n removeClass(el, classes.leaveFrom);\n addClass(el, classes.leaveTo);\n if (props.onLeave) {\n props.onLeave(el, () => done(false));\n } else {\n const explicit = resolveDuration(props.duration, 'leave');\n whenTransitionEnds(el, props.type, explicit, () => done(false));\n }\n });\n };\n\n /**\n * FLIP move. Called for items that stayed but may have changed position.\n * Caller passes the rect snapshotted BEFORE the DOM mutation; we measure\n * the current rect and animate the delta away.\n *\n * NOTE: There is no separate `move` direction on `duration`. To keep\n * move animations honor the **enter** duration when `duration` is set.\n */\n const runMove = (entry: Entry, prevRect: DOMRect): void => {\n if (!useCss || entry.state !== 'present') return;\n const el = entry.el;\n const newRect = el.getBoundingClientRect();\n const dx = prevRect.left - newRect.left;\n const dy = prevRect.top - newRect.top;\n if (!dx && !dy) return;\n\n // Invert: jump back to old position with no transition, then play.\n const savedTransform = el.style.transform;\n const savedTransition = el.style.transitionDuration;\n el.style.transform = `translate(${dx}px, ${dy}px)`;\n el.style.transitionDuration = '0s';\n addClass(el, moveClass);\n forceReflow(el);\n // Play: restore transition, clear transform → browser animates to identity.\n el.style.transform = savedTransform;\n el.style.transitionDuration = savedTransition;\n\n const explicit = resolveDuration(props.duration, 'enter');\n whenTransitionEnds(el, props.type, explicit, () => {\n removeClass(el, moveClass);\n });\n };\n\n // -----------------------------------------------------------------------\n // Reconcile\n // -----------------------------------------------------------------------\n\n /**\n * Snapshot rects for entries that are currently laid out — anything\n * `entering` or `present`. Skipped for `leaving` because their geometry is\n * already pinned via inline styles.\n */\n const snapshotPositions = (): void => {\n for (const entry of entries) {\n if (entry.state === 'leaving') continue;\n entry.prevRect = entry.el.getBoundingClientRect();\n }\n };\n\n /**\n * Diff `entries` against the new item list and produce the next entry\n * array. Side effects:\n * - Reorders DOM children to match `newItems` order.\n * - Creates fresh entries for new keys (each is queued for enter).\n * - Returns entries that disappeared so the caller can drive leave.\n *\n * One map serves both present and leaving entries. A re-added key pulls the\n * old entry out of the map regardless of its state — `runEnter` (called by\n * the caller for non-`present` entries) handles the leave-cancel.\n */\n const reconcile = (newItems: T[]): { next: Entry[]; leaving: Entry[] } => {\n const byKey = new Map<unknown, Entry>();\n for (const entry of entries) byKey.set(entry.key, entry);\n\n const next: Entry[] = [];\n for (const [i, item] of newItems.entries()) {\n const key = keyFn(item, i);\n const reused = byKey.get(key);\n if (reused) {\n byKey.delete(key);\n reused.item = item;\n next.push(reused);\n } else {\n const fresh = renderEntry(item, i);\n if (fresh) next.push(fresh);\n }\n }\n\n // Whatever stayed in `byKey` no longer appears in newItems. Skip entries\n // that were already leaving — they're mid-animation; don't restart them.\n const leaving: Entry[] = [];\n for (const entry of byKey.values()) {\n if (entry.state !== 'leaving') leaving.push(entry);\n }\n\n // Apply DOM ordering — walk `next` from the tail so each `insertBefore`\n // uses the already-correct following sibling as the anchor.\n let anchor: Node | null = null;\n for (let i = next.length - 1; i >= 0; i--) {\n const el = next[i].el;\n if (el.parentNode !== wrapper || el.nextSibling !== anchor) {\n wrapper.insertBefore(el, anchor);\n }\n anchor = el;\n }\n\n return { next, leaving };\n };\n\n /**\n * The full update pass: snapshot → reconcile → apply enter/leave/move.\n * Initial mount short-circuits all three (no snapshot, no leave, just\n * insert + skip enter to match the convention that first-frame items\n * appear without animation).\n */\n const update = (newItems: T[], isInitial: boolean): void => {\n if (isInitial) {\n // Fresh mount — no animation by default.\n const initial: Entry[] = [];\n for (const [i, item] of newItems.entries()) {\n const entry = renderEntry(item, i);\n if (!entry) continue;\n if (entry.el.parentNode !== wrapper) wrapper.appendChild(entry.el);\n entry.state = 'present';\n initial.push(entry);\n }\n entries = initial;\n return;\n }\n\n snapshotPositions();\n const { next, leaving } = reconcile(newItems);\n\n // Run enter on freshly-created or resurrected entries.\n for (const entry of next) {\n if (entry.state !== 'present') runEnter(entry);\n }\n\n // Run leave on departing entries. By construction every entry coming\n // out of `reconcile` as `leaving` had a non-`leaving` state during the\n // immediately preceding `snapshotPositions`, so its `prevRect` is always\n // set. We assert that invariant here rather than masking a future bug\n // behind a silent fallback.\n for (const entry of leaving) {\n const rect = entry.prevRect;\n if (!rect) {\n if (__DEV__) {\n warn('[TransitionGroup] leaving entry without prevRect — skipping leave animation');\n }\n continue;\n }\n runLeave(entry, rect);\n }\n\n // FLIP move for entries that stayed.\n for (const entry of next) {\n if (entry.state !== 'present' || !entry.prevRect) continue;\n runMove(entry, entry.prevRect);\n entry.prevRect = undefined;\n }\n\n // Stash leaving entries alongside the next set so cleanup can find them.\n entries = next.concat(leaving);\n };\n\n // -----------------------------------------------------------------------\n // Lifecycle\n // -----------------------------------------------------------------------\n\n let pendingItems: T[] | null = null;\n\n const effectRunner = effect(() => {\n const list = getList();\n if (!mounted) {\n pendingItems = list;\n return;\n }\n // Reactive update — run synchronously inside the effect. The render\n // function below is called inside a fresh per-row scope so any signals\n // it reads do NOT register against the outer TransitionGroup effect.\n update(list, false);\n });\n\n onMount(() => {\n mounted = true;\n if (pendingItems) {\n update(pendingItems, true);\n pendingItems = null;\n }\n });\n\n onCleanup(() => {\n effectRunner.stop();\n for (const entry of entries) disposeEntry(entry);\n entries = [];\n if (wrapper.parentNode) wrapper.parentNode.removeChild(wrapper);\n });\n\n return wrapper;\n}\n\n(TransitionGroup as unknown as Record<symbol, true>)[TRANSITION_GROUP_COMPONENT] = true;\n\n/**\n * Type guard for the TransitionGroup component reference.\n */\nexport function isTransitionGroup(node: unknown): boolean {\n return !!node && !!(node as Record<symbol, unknown>)[TRANSITION_GROUP_COMPONENT];\n}\n"]}