defuss-morph 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +369 -0
- package/dist/all.js +1312 -0
- package/dist/all.js.map +17 -0
- package/dist/all.min.js +2 -0
- package/dist/all.min.js.map +1 -0
- package/dist/index.cjs +1242 -0
- package/dist/index.d.ts +233 -0
- package/dist/index.mjs +1204 -0
- package/dist/stats.json +22 -0
- package/package.json +89 -0
package/dist/all.js.map
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/queue.ts", "../src/delegated-events.ts", "../src/renderer.ts", "../src/html.ts", "../src/morph.ts", "../src/transitions.ts", "../src/index.ts", "../src/global.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"export const queueCallback = <T extends any[]>(cb: (...args: T) => void) => (...args: T) =>\n queueMicrotask(() => cb(...args));\n",
|
|
6
|
+
"export type DelegatedPhase = \"bubble\" | \"capture\";\n\nexport interface DelegatedEventOptions {\n capture?: boolean;\n /** If true, allows multiple handlers per element+type (Dequery mode) */\n multi?: boolean;\n}\n\nexport interface ParsedEventProp {\n eventType: string;\n capture: boolean;\n}\n\n/** non-bubbling events best handled via capture */\nexport const CAPTURE_ONLY_EVENTS = new Set<string>([\n \"focus\",\n \"blur\",\n \"scroll\",\n \"mouseenter\",\n \"mouseleave\",\n // Note: focusin/focusout DO bubble, so they're not included here\n]);\n\ninterface HandlerEntry {\n bubble?: EventListener;\n capture?: EventListener;\n bubbleSet?: Set<EventListener>;\n captureSet?: Set<EventListener>;\n}\n\n/** element -> (eventType -> handlers) */\nconst elementHandlerMap = new WeakMap<EventTarget, Map<string, HandlerEntry>>();\n\n/**\n * Per-event dispatch de-duplication: prevents the same event object from\n * dispatching to the same element more than once per phase.\n * This guards against re-dispatch within a single event propagation cycle\n * (e.g. from duplicate root listeners or DOM reshuffling).\n * WeakMap keys (Event objects) are automatically GC'd after dispatch.\n */\nconst bubbleDispatched = new WeakMap<Event, WeakSet<EventTarget>>();\nconst captureDispatched = new WeakMap<Event, WeakSet<EventTarget>>();\n\n/**\n * Re-entrancy guard: tracks which target+eventType+phase combos have an\n * active handler on the call stack. When DOM morphing re-dispatches a *new*\n * event object for the same element while the original handler is still\n * running, this guard suppresses it.\n */\nconst activeDispatches = new WeakMap<EventTarget, Set<string>>();\n\nexport const parseEventPropName = (\n propName: string,\n): ParsedEventProp | null => {\n if (!propName.startsWith(\"on\")) return null;\n\n // support onClick / onClickCapture / onclick / onclickcapture\n const raw = propName.slice(2);\n if (!raw) return null;\n\n const lower = raw.toLowerCase();\n const isCapture = lower.endsWith(\"capture\");\n\n const eventType = isCapture ? lower.slice(0, -\"capture\".length) : lower;\n\n if (!eventType) return null;\n\n return { eventType, capture: isCapture };\n};\n\nconst getOrCreateElementHandlers = (el: HTMLElement) => {\n const existing = elementHandlerMap.get(el);\n if (existing) return existing;\n\n const created = new Map<string, HandlerEntry>();\n elementHandlerMap.set(el, created);\n return created;\n};\n\nconst getEventPath = (event: Event): Array<EventTarget> => {\n // composedPath is best (works with shadow DOM)\n const composedPath = (\n event as Event & { composedPath?: () => Array<EventTarget> }\n ).composedPath?.();\n if (composedPath && composedPath.length > 0) return composedPath;\n\n // fallback: walk up from target\n const path: Array<EventTarget> = [];\n let node: unknown = event.target;\n\n while (node) {\n path.push(node as EventTarget);\n\n // walk DOM parents\n const maybeNode = node as Node;\n if (\n typeof maybeNode === \"object\" &&\n maybeNode &&\n \"parentNode\" in maybeNode\n ) {\n node = (maybeNode as Node).parentNode;\n continue;\n }\n\n break;\n }\n\n // ensure document/window are at the end if available\n const doc = (event.target as Node | null)?.ownerDocument;\n if (doc && path[path.length - 1] !== doc) path.push(doc);\n const win = doc?.defaultView;\n if (win && path[path.length - 1] !== win) path.push(win);\n\n return path;\n};\n\n/**\n * Create the dispatch handler for a given phase.\n * Each phase runs its own handlers - capture phase runs capture handlers,\n * bubble phase runs bubble handlers. This supports onClickCapture semantics.\n */\nconst createPhaseHandler = (\n eventType: string,\n phase: DelegatedPhase,\n): EventListener => {\n const dispatched = phase === \"capture\" ? captureDispatched : bubbleDispatched;\n\n return (event: Event) => {\n const path = getEventPath(event).filter(\n (t): t is HTMLElement =>\n typeof t === \"object\" &&\n t !== null &&\n (t as HTMLElement).nodeType === 1 /* Node.ELEMENT_NODE */,\n );\n\n // Capture phase: root -> target (reversed path)\n // Bubble phase: target -> root (normal path)\n const ordered = phase === \"capture\" ? [...path].reverse() : path;\n\n for (const target of ordered) {\n const handlersByEvent = elementHandlerMap.get(target);\n if (!handlersByEvent) continue;\n\n const entry = handlersByEvent.get(eventType);\n if (!entry) continue;\n\n // De-duplicate: skip if this event was already dispatched to this target in this phase\n let targets = dispatched.get(event);\n if (targets?.has(target)) continue;\n if (!targets) {\n targets = new WeakSet();\n dispatched.set(event, targets);\n }\n targets.add(target);\n\n // Re-entrancy guard: skip if a handler for this target+eventType+phase\n // is already on the call stack (morph echo suppression)\n const dispatchKey = `${eventType}:${phase}`;\n let activeSet = activeDispatches.get(target);\n if (activeSet?.has(dispatchKey)) continue;\n if (!activeSet) {\n activeSet = new Set();\n activeDispatches.set(target, activeSet);\n }\n activeSet.add(dispatchKey);\n\n try {\n // Execute only the handlers for this phase\n if (phase === \"capture\") {\n // Single handler (JSX mode)\n if (entry.capture) {\n entry.capture.call(target, event);\n if ((event as Event & { cancelBubble?: boolean }).cancelBubble)\n return;\n }\n // Handler set (Dequery multi mode)\n if (entry.captureSet) {\n for (const handler of entry.captureSet) {\n handler.call(target, event);\n if ((event as Event & { cancelBubble?: boolean }).cancelBubble)\n return;\n }\n }\n } else {\n // Bubble phase\n if (entry.bubble) {\n entry.bubble.call(target, event);\n if ((event as Event & { cancelBubble?: boolean }).cancelBubble)\n return;\n }\n if (entry.bubbleSet) {\n for (const handler of entry.bubbleSet) {\n handler.call(target, event);\n if ((event as Event & { cancelBubble?: boolean }).cancelBubble)\n return;\n }\n }\n }\n } finally {\n activeSet.delete(dispatchKey);\n }\n }\n };\n};\n\n/**\n * Track installed listeners per root (Document or ShadowRoot).\n * Using WeakMap allows GC when shadow roots are removed.\n */\ntype EventRoot = Document | ShadowRoot;\nconst installedRootListeners = new WeakMap<EventRoot, Set<string>>();\n\n/**\n * Ensure delegation listeners are installed on the correct root.\n * Installs BOTH capture and bubble listeners, but each only dispatches for appropriate events.\n */\nconst ensureRootListener = (root: EventRoot, eventType: string) => {\n const installed = installedRootListeners.get(root) ?? new Set<string>();\n installedRootListeners.set(root, installed);\n\n // Install capture phase listener\n const captureKey = `${eventType}:capture`;\n if (!installed.has(captureKey)) {\n root.addEventListener(\n eventType,\n createPhaseHandler(eventType, \"capture\"),\n true,\n );\n installed.add(captureKey);\n }\n\n // Install bubble phase listener\n const bubbleKey = `${eventType}:bubble`;\n if (!installed.has(bubbleKey)) {\n root.addEventListener(\n eventType,\n createPhaseHandler(eventType, \"bubble\"),\n false,\n );\n installed.add(bubbleKey);\n }\n};\n\n/**\n * Get the root node where delegation listeners should be installed.\n * Handles Document, ShadowRoot, and detached elements.\n * Uses nodeType checks instead of instanceof to work in SSR environments\n * (e.g. HappyDOM in Node.js) where global Document/ShadowRoot may not exist.\n */\nconst getEventRoot = (element: HTMLElement): EventRoot | null => {\n const root = element.getRootNode();\n\n // nodeType 9 = Document, nodeType 11 = DocumentFragment (ShadowRoot)\n if (root && (root as Node).nodeType === 9) {\n return root as Document;\n }\n if (\n root &&\n (root as Node).nodeType === 11 &&\n \"host\" in (root as ShadowRoot)\n ) {\n return root as ShadowRoot;\n }\n\n // Detached element - root is the element itself, no delegation possible\n return null;\n};\n\nexport const registerDelegatedEvent = (\n element: HTMLElement,\n eventType: string,\n handler: EventListener,\n options: DelegatedEventOptions = {},\n): void => {\n // Get the correct root for delegation (Document or ShadowRoot)\n const root = getEventRoot(element);\n\n // capture-only events should be forced to capture\n const capture = options.capture || CAPTURE_ONLY_EVENTS.has(eventType);\n\n if (root) {\n // Element is in DOM - use delegation\n ensureRootListener(root, eventType);\n } else if (element.ownerDocument) {\n // Element has a document but isn't connected yet - install listener on document\n // Events will work once the element is attached\n ensureRootListener(element.ownerDocument, eventType);\n } else {\n // Truly detached element (no document) - use direct binding\n // This ensures events work even for elements never attached to DOM\n element.addEventListener(eventType, handler, capture);\n }\n\n const byEvent = getOrCreateElementHandlers(element);\n const entry = byEvent.get(eventType) ?? {};\n byEvent.set(eventType, entry);\n\n if (options.multi) {\n // Dequery mode: add to set (allows multiple handlers)\n if (capture) {\n if (!entry.captureSet) entry.captureSet = new Set();\n entry.captureSet.add(handler);\n } else {\n if (!entry.bubbleSet) entry.bubbleSet = new Set();\n entry.bubbleSet.add(handler);\n }\n } else {\n // JSX mode: one handler per prop, overwrite to prevent duplicates\n if (capture) {\n entry.capture = handler;\n } else {\n entry.bubble = handler;\n }\n }\n};\n\n/** true when a handler entry holds no single handler and no non-empty set */\nconst isEntryEmpty = (entry: HandlerEntry): boolean =>\n !entry.capture &&\n !entry.bubble &&\n (!entry.captureSet || entry.captureSet.size === 0) &&\n (!entry.bubbleSet || entry.bubbleSet.size === 0);\n\nexport const removeDelegatedEvent = (\n target: EventTarget,\n eventType: string,\n handler?: EventListener,\n // part of the public signature; removal always covers both phases,\n // so the options are intentionally not consulted here\n _options: DelegatedEventOptions = {},\n): void => {\n const byEvent = elementHandlerMap.get(target);\n if (!byEvent) return;\n\n const entry = byEvent.get(eventType);\n if (!entry) return;\n\n if (handler) {\n // Remove specific handler from both phases (since we don't know which phase it was added to)\n if (entry.captureSet) {\n entry.captureSet.delete(handler);\n }\n if (entry.bubbleSet) {\n entry.bubbleSet.delete(handler);\n }\n // Also check if it matches single handler\n if (entry.capture === handler) {\n entry.capture = undefined;\n }\n if (entry.bubble === handler) {\n entry.bubble = undefined;\n }\n\n // Always call removeEventListener for safety (handles detached element direct-binding case)\n target.removeEventListener(eventType, handler, true); // capture\n target.removeEventListener(eventType, handler, false); // bubble\n } else {\n // Remove ALL handlers for this event type (both phases)\n // This is what users expect from .off(\"click\") without specific handler\n entry.capture = undefined;\n entry.bubble = undefined;\n entry.captureSet = undefined;\n entry.bubbleSet = undefined;\n }\n\n // Clean up entry if empty\n if (isEntryEmpty(entry)) {\n byEvent.delete(eventType);\n }\n};\n\nexport const clearDelegatedEvents = (target: EventTarget): void => {\n const byEvent = elementHandlerMap.get(target);\n if (!byEvent) return;\n\n byEvent.clear();\n};\n\n/**\n * Clear delegated events for an element and all its descendants.\n * Used by empty() to prevent event handler leaks when removing subtrees.\n */\nexport const clearDelegatedEventsDeep = (root: HTMLElement): void => {\n // Clear the root element\n clearDelegatedEvents(root);\n\n // Walk all descendant elements and clear their handlers\n // Use ownerDocument for SSR/multi-doc compatibility\n const doc = root.ownerDocument;\n if (!doc) return;\n const walker = doc.createTreeWalker(root, 1 /* NodeFilter.SHOW_ELEMENT */);\n let node = walker.nextNode();\n while (node) {\n clearDelegatedEvents(node as HTMLElement);\n node = walker.nextNode();\n }\n};\n\n/**\n * Get all event types currently registered on an element.\n * Used to detect which events need to be removed when vnode props change.\n */\nexport const getRegisteredEventTypes = (element: HTMLElement): Set<string> => {\n const byEvent = elementHandlerMap.get(element);\n if (!byEvent) return new Set();\n return new Set(byEvent.keys());\n};\n\n/**\n * Get all event keys with phases currently registered on an element.\n * Returns keys like \"click:bubble\", \"click:capture\" for precise phase-aware removal.\n */\nexport const getRegisteredEventKeys = (element: HTMLElement): Set<string> => {\n const byEvent = elementHandlerMap.get(element);\n if (!byEvent) return new Set();\n\n const keys = new Set<string>();\n for (const [eventType, entry] of byEvent) {\n if (entry.bubble || entry.bubbleSet?.size) keys.add(`${eventType}:bubble`);\n if (entry.capture || entry.captureSet?.size)\n keys.add(`${eventType}:capture`);\n }\n return keys;\n};\n\n/**\n * Remove delegated event handler for a specific phase only.\n * Used by patchElementInPlace to precisely remove stale handlers when vnode changes from\n * onClick + onClickCapture → onClickCapture only.\n */\nexport const removeDelegatedEventByKey = (\n element: HTMLElement,\n eventType: string,\n phase: \"bubble\" | \"capture\",\n): void => {\n const byEvent = elementHandlerMap.get(element);\n if (!byEvent) return;\n\n const entry = byEvent.get(eventType);\n if (!entry) return;\n\n if (phase === \"capture\") {\n entry.capture = undefined;\n entry.captureSet = undefined;\n } else {\n entry.bubble = undefined;\n entry.bubbleSet = undefined;\n }\n\n // Clean up entry if empty\n if (isEntryEmpty(entry)) byEvent.delete(eventType);\n};\n",
|
|
7
|
+
"import type {\n DomAbstractionImpl,\n RenderInput,\n VNode,\n VNodeAttributes,\n VNodeChildren,\n} from \"./types.js\";\nimport { queueCallback } from \"./queue.js\";\nimport {\n parseEventPropName,\n registerDelegatedEvent,\n} from \"./delegated-events.js\";\n\nexport const CLASS_ATTRIBUTE_NAME = \"class\";\nexport const XLINK_ATTRIBUTE_NAME = \"xlink\";\nexport const XMLNS_ATTRIBUTE_NAME = \"xmlns\";\nexport const REF_ATTRIBUTE_NAME = \"ref\";\nexport const DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE = \"dangerouslySetInnerHTML\";\n\nexport const nsMap = {\n [XMLNS_ATTRIBUTE_NAME]: \"http://www.w3.org/2000/xmlns/\",\n [XLINK_ATTRIBUTE_NAME]: \"http://www.w3.org/1999/xlink\",\n svg: \"http://www.w3.org/2000/svg\",\n};\n\nexport const observeUnmount = (domNode: Node, onUnmount: () => void): void => {\n if (!domNode || typeof onUnmount !== \"function\") {\n throw new Error(\n \"Invalid arguments. Ensure domNode and onUnmount are valid.\",\n );\n }\n\n // Skip MutationObserver in SSR environments where it doesn't exist\n if (typeof MutationObserver === \"undefined\") {\n return;\n }\n\n let parentNode: Node | null = domNode.parentNode;\n if (!parentNode) {\n throw new Error(\"The provided domNode does not have a parentNode.\");\n }\n\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.removedNodes.length > 0) {\n for (const removedNode of mutation.removedNodes) {\n if (removedNode === domNode) {\n // Defer check: if node is re-inserted (move), it will be connected\n queueMicrotask(() => {\n if (!domNode.isConnected) {\n // Node was actually unmounted\n onUnmount();\n observer.disconnect();\n return;\n }\n\n // Node was moved, not unmounted: re-arm observer on new parent\n const newParent = domNode.parentNode;\n if (newParent && newParent !== parentNode) {\n parentNode = newParent;\n observer.disconnect();\n observer.observe(parentNode, { childList: true });\n }\n });\n return;\n }\n }\n }\n }\n });\n\n // Observe the parentNode for child removals\n observer.observe(parentNode, { childList: true });\n};\n\n/** lifecycle event attachment has been implemented separately, because it is also required to run when partially updating the DOM */\nexport const handleLifecycleEventsForOnMount = (newEl: HTMLElement) => {\n // check for a lifecycle \"onMount\" hook and call it\n if (typeof (newEl as any)?.$onMount === \"function\") {\n (newEl as any).$onMount!(newEl); // remove the hook after it's been called\n (newEl as any).$onMount = null;\n }\n\n // optionally check for a element lifecycle \"onUnmount\" and hook it up\n if (typeof (newEl as any)?.$onUnmount === \"function\") {\n // register the unmount observer (MutationObserver)\n observeUnmount(newEl as HTMLElement, (newEl as any).$onUnmount!);\n }\n};\n\nexport const getRenderer = (document: Document): DomAbstractionImpl => {\n // DOM abstraction layer for manipulation\n const renderer = {\n hasElNamespace: (domElement: Element | Document): boolean =>\n (domElement as Element).namespaceURI === nsMap.svg,\n\n hasSvgNamespace: (\n parentElement: Element | Document,\n type: string,\n ): boolean =>\n renderer.hasElNamespace(parentElement) &&\n type !== \"STYLE\" &&\n type !== \"SCRIPT\",\n\n createElementOrElements: (\n virtualNode: RenderInput,\n parentDomElement?: Element | Document,\n ): Array<Element | Text | undefined> | Element | Text | undefined => {\n if (Array.isArray(virtualNode)) {\n return renderer.createChildElements(virtualNode, parentDomElement);\n }\n if (typeof virtualNode !== \"undefined\") {\n return renderer.createElement(virtualNode, parentDomElement);\n }\n // undefined virtualNode -> e.g. when a tsx variable is used in markup which is undefined\n return renderer.createTextNode(\"\", parentDomElement);\n },\n\n createElement: (\n virtualNode: RenderInput,\n parentDomElement?: Element | Document,\n ): Element | undefined => {\n let newEl: Element | undefined;\n\n try {\n // if a synchronous function is still a function, VDOM has obviously not resolved, probably an\n // Error occurred while generating the VDOM (in JSX runtime)\n if (\n typeof virtualNode === \"function\" &&\n virtualNode.constructor.name === \"AsyncFunction\"\n ) {\n newEl = document.createElement(\"div\");\n } else if (\n typeof virtualNode === \"object\" &&\n virtualNode !== null &&\n \"type\" in virtualNode\n ) {\n const vNode = virtualNode as VNode;\n\n if (typeof vNode.type === \"function\") {\n newEl = document.createElement(\"div\");\n (newEl as HTMLElement).innerText =\n `FATAL ERROR: ${(vNode.type as { _error?: string })._error}`;\n } else if (\n // SVG support\n (typeof vNode.type === \"string\" &&\n vNode.type.toUpperCase() === \"SVG\") ||\n (parentDomElement &&\n renderer.hasSvgNamespace(\n parentDomElement,\n typeof vNode.type === \"string\" ? vNode.type.toUpperCase() : \"\",\n ))\n ) {\n // SVG support\n newEl = document.createElementNS(nsMap.svg, vNode.type as string);\n } else {\n newEl = document.createElement(vNode.type as string);\n }\n\n if (vNode.attributes) {\n renderer.setAttributes(vNode, newEl as Element);\n\n // apply dangerouslySetInnerHTML if provided\n if (vNode.attributes.dangerouslySetInnerHTML) {\n (newEl as HTMLElement).innerHTML =\n vNode.attributes.dangerouslySetInnerHTML.__html;\n }\n }\n\n // Skip child creation when dangerouslySetInnerHTML is used (matches React semantics)\n if (vNode.children && !vNode.attributes?.dangerouslySetInnerHTML) {\n renderer.createChildElements(vNode.children, newEl as Element);\n }\n } else {\n // Fallback for unexpected types (primitives should be handled by createTextNode, but just in case)\n // If virtualNode is a primitive at this point, original logic would try to use it as tag name or crash.\n // We'll create a text node wrapped in span or similar?\n // Attempting to match original implementation which forced Cast.\n // If 'type' is missing, it's not a valid VNode.\n // Original was: newEl = document.createElement(virtualNode.type as string);\n // If it's a string, type is undefined. document.createElement(\"undefined\") -> <undefined> element.\n if (\n typeof virtualNode === \"string\" ||\n typeof virtualNode === \"number\"\n ) {\n // Creating an element with the value as tag name seems wrong but that's what the old code did if it got here.\n // However, createElementOrElements dispatches strings to createTextNode.\n // So we might be safe here.\n newEl = document.createElement(String(virtualNode));\n }\n }\n\n if (newEl && parentDomElement) {\n parentDomElement.appendChild(newEl);\n handleLifecycleEventsForOnMount(newEl as HTMLElement);\n }\n } catch (e) {\n console.error(\n \"Fatal error! Error happend while rendering the VDOM!\",\n e,\n virtualNode,\n );\n throw e;\n }\n return newEl as Element;\n },\n\n createTextNode: (text: string, domElement?: Element | Document): Text => {\n const node = document.createTextNode(text.toString());\n\n if (domElement) {\n domElement.appendChild(node);\n }\n return node;\n },\n\n createChildElements: (\n virtualChildren: VNodeChildren,\n domElement?: Element | Document,\n ): Array<Element | Text | undefined> => {\n const children: Array<Element | Text | undefined> = [];\n\n for (let i = 0; i < virtualChildren.length; i++) {\n const virtualChild = virtualChildren[i];\n\n // Skip booleans entirely - {true} and {false} render nothing (React/JSX semantics)\n if (typeof virtualChild === \"boolean\") {\n continue;\n }\n\n if (\n virtualChild === null ||\n (typeof virtualChild !== \"object\" &&\n typeof virtualChild !== \"function\")\n ) {\n children.push(\n renderer.createTextNode(\n (typeof virtualChild === \"undefined\" || virtualChild === null\n ? \"\"\n : virtualChild!\n ).toString(),\n domElement,\n ),\n );\n } else {\n children.push(\n renderer.createElement(virtualChild as VNode, domElement),\n );\n }\n }\n return children;\n },\n\n setAttribute: (name: string, value: any, domElement: Element) => {\n // attributes not set (undefined) are ignored; use null value to reset an attributes state\n if (typeof value === \"undefined\") return;\n\n if (name === DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE) return;\n\n // internal list key: store on element, do not serialize into DOM\n if (name === \"key\") {\n (domElement as HTMLElement & { _defussKey?: string })._defussKey =\n String(value);\n return;\n }\n\n // save ref as { current: DOMElement } in ref object\n if (name === REF_ATTRIBUTE_NAME && typeof value !== \"function\") {\n const ref = value as { current?: unknown; orphan?: boolean };\n ref.current = domElement;\n (domElement as any)._defussRef = value;\n\n (domElement as any).$onUnmount = queueCallback(() => {\n // value.orphan = true;\n });\n\n if (domElement.parentNode) {\n observeUnmount(domElement, (domElement as any).$onUnmount);\n } else {\n queueMicrotask(() => {\n if (domElement.parentNode) {\n observeUnmount(domElement, (domElement as any).$onUnmount);\n }\n });\n }\n return;\n }\n\n // event props: delegate globally; still keep defuss lifecycle hooks\n const parsed = parseEventPropName(name);\n if (parsed && typeof value === \"function\") {\n const { eventType, capture } = parsed;\n\n if (eventType === \"mount\") {\n (domElement as any).$onMount = queueCallback(value as () => void);\n return;\n }\n\n if (eventType === \"unmount\") {\n if ((domElement as any).$onUnmount) {\n const existingUnmount = (domElement as any)\n .$onUnmount as () => void;\n (domElement as any).$onUnmount = () => {\n existingUnmount();\n (value as () => void)();\n };\n } else {\n (domElement as any).$onUnmount = queueCallback(value as () => void);\n }\n return;\n }\n\n registerDelegatedEvent(\n domElement as HTMLElement,\n eventType,\n value as EventListener,\n { capture },\n );\n return;\n }\n\n // transforms className=\"...\" -> class=\"...\"\n if (name === \"className\") {\n name = CLASS_ATTRIBUTE_NAME;\n }\n\n // transforms class={['a', 'b']} into class=\"a b\"\n if (name === CLASS_ATTRIBUTE_NAME && Array.isArray(value)) {\n value = value.filter((val) => !!val).join(\" \");\n }\n\n // SVG support\n const nsEndIndex = name.match(/[A-Z]/)?.index;\n if (renderer.hasElNamespace(domElement) && nsEndIndex) {\n const ns = name.substring(0, nsEndIndex).toLowerCase();\n const attrName = name.substring(nsEndIndex, name.length).toLowerCase();\n const namespace = nsMap[ns as keyof typeof nsMap] || null;\n domElement.setAttributeNS(\n namespace,\n ns === XLINK_ATTRIBUTE_NAME || ns === XMLNS_ATTRIBUTE_NAME\n ? `${ns}:${attrName}`\n : name,\n String(value),\n );\n } else if (name === \"style\" && typeof value !== \"string\") {\n const styleObj = value as Record<string, string | number>;\n for (const prop of Object.keys(styleObj)) {\n (domElement as HTMLElement).style[prop as any] = String(\n styleObj[prop],\n );\n }\n } else if (typeof value === \"boolean\") {\n (domElement as any)[name] = value;\n // Also set/remove the attribute so SSG serialization includes it\n if (value) {\n domElement.setAttribute(name, \"\");\n } else {\n domElement.removeAttribute(name);\n }\n } else if (\n // Controlled input props: use property assignment for live value,\n // AND setAttribute so SSG serialization (w3c-xmlserializer) includes it\n (name === \"value\" || name === \"checked\" || name === \"selectedIndex\") &&\n (domElement.nodeName === \"INPUT\" ||\n domElement.nodeName === \"TEXTAREA\" ||\n domElement.nodeName === \"SELECT\")\n ) {\n (domElement as any)[name] = value;\n if (name === \"checked\") {\n if (value) {\n domElement.setAttribute(\"checked\", \"\");\n } else {\n domElement.removeAttribute(\"checked\");\n }\n } else if (name === \"value\") {\n domElement.setAttribute(\"value\", String(value));\n }\n // selectedIndex has no HTML attribute equivalent - skip setAttribute\n } else {\n domElement.setAttribute(name, String(value));\n }\n },\n\n setAttributes: (\n virtualNode: VNode<VNodeAttributes>,\n domElement: Element,\n ) => {\n // attributes are optional on hand-written VNodes — guard instead of the\n // `!` assertion, which crashed patching an element with an\n // attributes-less vnode (Object.keys(undefined) throws)\n const attrNames = Object.keys(virtualNode.attributes ?? {});\n for (let i = 0; i < attrNames.length; i++) {\n renderer.setAttribute(\n attrNames[i],\n virtualNode.attributes![attrNames[i]],\n domElement,\n );\n }\n },\n };\n return renderer;\n};\n",
|
|
8
|
+
"import type { VNode, VNodeAttributes } from \"./types.js\";\n\n/**\n * Marks VNodes derived from existing DOM (HTML strings / DOM nodes).\n * Such VNodes cannot declare event handlers, so the morph engine must\n * preserve delegated handlers already attached to surviving elements\n * (same rationale as uncontrolled form-state preservation).\n */\nexport const FROM_DOM_MARKER: unique symbol = Symbol(\"defuss-morph.from-dom\");\n\nconst HTML_BOOLEAN_ATTRIBUTES = new Set([\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"defer\",\n \"disabled\",\n \"formnovalidate\",\n \"hidden\",\n \"inert\",\n \"ismap\",\n \"itemscope\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"selected\",\n]);\n\nconst domAttributeToVNodeValue = (attr: Attr): string | boolean =>\n HTML_BOOLEAN_ATTRIBUTES.has(attr.name.toLowerCase()) ? true : attr.value;\n\nexport function parseDOM(\n input: string,\n type: DOMParserSupportedType,\n Parser: typeof DOMParser,\n): Document {\n return new Parser().parseFromString(input, type);\n}\n\nexport function isSVG(input: string, Parser: typeof DOMParser) {\n const doc = parseDOM(input, \"image/svg+xml\", Parser);\n if (!doc.documentElement) return false;\n return doc.documentElement.nodeName.toLowerCase() === \"svg\";\n}\n\nexport function isHTML(input: string, Parser: typeof DOMParser): boolean {\n const doc = parseDOM(input, \"text/html\", Parser);\n return doc.documentElement.querySelectorAll(\"*\").length > 2; // 2 = <html> and <body>\n}\n\nexport const isMarkup = (input: string, Parser: typeof DOMParser): boolean =>\n input.indexOf(\"<\") > -1 &&\n input.indexOf(\">\") > -1 &&\n (isHTML(input, Parser) || isSVG(input, Parser));\n\nexport function renderMarkup(\n markup: string,\n Parser: typeof DOMParser,\n doc?: Document,\n) {\n const parsed = doc ? doc : parseDOM(markup, getMimeType(markup, Parser), Parser);\n // HTML documents expose body; XML documents (e.g. image/svg+xml) don't —\n // there the documentElement is the root node to render\n if (parsed.body) return Array.from(parsed.body.childNodes);\n return parsed.documentElement ? [parsed.documentElement] : [];\n}\n\nexport function getMimeType(\n input: string,\n Parser: typeof DOMParser,\n): DOMParserSupportedType {\n if (isSVG(input, Parser)) {\n return \"image/svg+xml\";\n }\n return \"text/html\";\n}\n\n/**\n * Converts a DOM node to a VNode structure for use with updateDomWithVdom.\n * This allows us to leverage the sophisticated partial update system even for Node inputs.\n */\nexport function domNodeToVNode(node: Node): VNode<VNodeAttributes> | string {\n if (node.nodeType === 3 /* Node.TEXT_NODE */) {\n return node.textContent || \"\";\n }\n\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n const element = node as Element;\n const attributes: VNodeAttributes = {};\n\n // Convert DOM attributes to VNode attributes\n for (let i = 0; i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n attributes[attr.name] = domAttributeToVNodeValue(attr);\n }\n\n // Convert child nodes recursively\n const children: Array<VNode<VNodeAttributes> | string> = [];\n for (let i = 0; i < element.childNodes.length; i++) {\n const childVNode = domNodeToVNode(element.childNodes[i]);\n children.push(childVNode);\n }\n\n return {\n type: element.tagName.toLowerCase(),\n attributes: { ...attributes, [FROM_DOM_MARKER]: true },\n children,\n };\n }\n\n // For other node types (comments, etc.), convert to empty string\n return \"\";\n}\n\n/**\n * Converts an HTML string to VNode structure for use with updateDomWithVdom.\n * This allows markup strings to benefit from the intelligent partial update system.\n */\nexport function htmlStringToVNodes(\n html: string,\n Parser: typeof DOMParser,\n): Array<VNode<VNodeAttributes> | string> {\n const parser = new Parser();\n const doc = parser.parseFromString(html, \"text/html\");\n const vNodes: Array<VNode<VNodeAttributes> | string> = [];\n\n // Convert each child node in the body to a VNode\n for (let i = 0; i < doc.body.childNodes.length; i++) {\n const vnode = domNodeToVNode(doc.body.childNodes[i]);\n if (vnode !== \"\") {\n vNodes.push(vnode);\n }\n }\n\n return vNodes;\n}\n",
|
|
9
|
+
"import type {\n Globals,\n RenderInput,\n VNode,\n VNodeAttributes,\n VNodeChild,\n} from \"./types.js\";\nimport {\n getRenderer,\n handleLifecycleEventsForOnMount,\n} from \"./renderer.js\";\nimport {\n clearDelegatedEventsDeep,\n getRegisteredEventKeys,\n parseEventPropName,\n removeDelegatedEventByKey,\n} from \"./delegated-events.js\";\nimport { FROM_DOM_MARKER } from \"./html.js\";\n\n/**\n * Compares two DOM nodes for equality with performance optimizations.\n * 1. Checks for reference equality.\n * 2. Compares node types.\n * 3. For Element nodes, compares tag names and attributes.\n * 4. For Text nodes, compares text content.\n */\nexport const areDomNodesEqual = (oldNode: Node, newNode: Node): boolean => {\n // return true if both references are identical\n if (oldNode === newNode) return true;\n\n // compare node types\n if (oldNode.nodeType !== newNode.nodeType) return false;\n\n // handle Element nodes\n if (oldNode.nodeType === 1 /* Node.ELEMENT_NODE */) {\n const oldElement = oldNode as Element;\n const newElement = newNode as Element;\n\n // compare tag names\n if (oldElement.tagName !== newElement.tagName) return false;\n\n const oldAttrs = oldElement.attributes;\n const newAttrs = newElement.attributes;\n\n // compare number of attributes\n if (oldAttrs.length !== newAttrs.length) return false;\n\n // iterate and compare each attribute's name and value\n for (let i = 0; i < oldAttrs.length; i++) {\n const oldAttr = oldAttrs[i];\n const newAttrValue = newElement.getAttribute(oldAttr.name);\n if (oldAttr.value !== newAttrValue) return false;\n }\n }\n\n // handle Text nodes\n if (oldNode.nodeType === 3 /* Node.TEXT_NODE */) {\n if (oldNode.textContent !== newNode.textContent) return false;\n }\n return true;\n};\n\n/********************************************************\n * 1) Define a \"valid\" child type & utilities\n ********************************************************/\nexport type ValidChild =\n | string\n | number\n | boolean\n | null\n | undefined\n | VNode<VNodeAttributes>;\n\n/**\n * How top-level children are reconciled:\n * - `\"replace\"` (default): full reconciliation — unmentioned nodes are removed.\n * - `\"diff\"`: partial updates — only patch items addressed by `key`/`id` are\n * applied (attributes merge, new items append, unmentioned nodes untouched).\n */\nexport type MorphMode = \"replace\" | \"diff\";\n\nfunction isTextLike(value: unknown): value is string | number | boolean {\n return (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n );\n}\n\nfunction isVNode(value: unknown): value is VNode<VNodeAttributes> {\n return Boolean(\n value &&\n typeof value === \"object\" &&\n \"type\" in (value as Record<string, unknown>),\n );\n}\n\nfunction toValidChild(\n child: VNodeChild,\n // diff mode: a partial patch item may omit `type` (borrowed from the node\n // it addresses) — `{ attributes: ... }` alone is a valid patch object there\n lenient = false,\n): ValidChild | undefined {\n if (child == null) return child; // null or undefined\n if (isTextLike(child)) return child;\n\n if (isVNode(child)) return child;\n\n if (\n lenient &&\n child &&\n typeof child === \"object\" &&\n \"attributes\" in (child as Record<string, unknown>)\n )\n return child as unknown as ValidChild;\n\n // e.g. function or {} -> filter out\n return undefined;\n}\n\n/** fuse consecutive text-like nodes to preserve DOM stability (matches hydrate's behavior) */\nfunction normalizeChildren(\n input: RenderInput,\n lenient = false,\n): Array<ValidChild> {\n const raw: Array<ValidChild> = [];\n\n const pushChild = (child: unknown) => {\n if (Array.isArray(child)) {\n child.forEach(pushChild);\n return;\n }\n\n const valid = toValidChild(child as VNodeChild, lenient);\n if (typeof valid === \"undefined\") return;\n\n // unwrap Fragment-ish nodes (defuss sometimes uses \"fragment\", some code uses \"Fragment\")\n if (\n isVNode(valid) &&\n (valid.type === \"fragment\" || valid.type === \"Fragment\")\n ) {\n const nested = Array.isArray(valid.children) ? valid.children : [];\n nested.forEach(pushChild);\n return;\n }\n\n // ignore booleans/null/undefined as render-nothing\n if (\n valid === null ||\n typeof valid === \"undefined\" ||\n typeof valid === \"boolean\"\n )\n return;\n\n raw.push(valid);\n };\n\n pushChild(input);\n\n // fuse consecutive text nodes into a single string\n const fused: Array<ValidChild> = [];\n let buffer: string | null = null;\n\n const flush = () => {\n if (buffer !== null && buffer.length > 0) fused.push(buffer);\n buffer = null;\n };\n\n for (const child of raw) {\n if (\n typeof child === \"string\" ||\n typeof child === \"number\" ||\n typeof child === \"boolean\"\n ) {\n buffer = (buffer ?? \"\") + String(child);\n continue;\n }\n\n flush();\n fused.push(child);\n }\n\n flush();\n return fused;\n}\n\nfunction getVNodeMatchKey(child: ValidChild): string | null {\n if (!child || typeof child !== \"object\") return null;\n\n const key = child.attributes?.key;\n if (typeof key === \"string\" || typeof key === \"number\")\n return `k:${String(key)}`;\n\n const id = child.attributes?.id;\n if (typeof id === \"string\" && id.length > 0) return `id:${id}`;\n\n return null;\n}\n\n/** human-readable item description for diff-mode error messages */\nfunction describePatchItem(child: ValidChild): string {\n if (child && typeof child === \"object\") {\n return `<${typeof child.type === \"string\" ? child.type : \"component\"}>`;\n }\n return \"plain text\";\n}\n\nfunction getDomMatchKeys(node: Node): Array<string> {\n if (node.nodeType !== 1 /* Node.ELEMENT_NODE */) return [];\n\n const el = node as HTMLElement;\n const keys: Array<string> = [];\n\n // prefer internal key storage, but also accept legacy `key` attribute if present\n const internalKey = (el as HTMLElement & { _defussKey?: string })._defussKey;\n if (internalKey) keys.push(`k:${internalKey}`);\n\n const attrKey = el.getAttribute(\"key\");\n if (attrKey) keys.push(`k:${attrKey}`);\n\n const id = el.id;\n if (id) keys.push(`id:${id}`);\n\n return keys;\n}\n\n/********************************************************\n * 2) Check if a DOM node and a ValidChild match by type\n ********************************************************/\nfunction areNodeAndChildMatching(domNode: Node, child: ValidChild): boolean {\n if (\n typeof child === \"string\" ||\n typeof child === \"number\" ||\n typeof child === \"boolean\"\n ) {\n return domNode.nodeType === 3 /* Node.TEXT_NODE */;\n }\n\n if (child && typeof child === \"object\") {\n if (domNode.nodeType !== 1 /* Node.ELEMENT_NODE */) return false;\n\n const el = domNode as HTMLElement;\n const oldTag = el.tagName.toLowerCase();\n const newTag =\n typeof child.type === \"string\" ? child.type.toLowerCase() : \"\";\n if (!newTag || oldTag !== newTag) return false;\n\n // Match only by tag name - class changes should be handled by patchElementInPlace\n // This prevents node churn when classes are toggled (e.g., \"danger\" on selection)\n return true;\n }\n\n return false;\n}\n\n/********************************************************\n * 3) Create brand new DOM node(s) from a ValidChild\n ********************************************************/\nfunction createDomFromChild(\n child: ValidChild,\n globals: Globals,\n): Array<Node> | undefined {\n const renderer = getRenderer(globals.window.document);\n\n if (child == null) return undefined;\n\n if (\n typeof child === \"string\" ||\n typeof child === \"number\" ||\n typeof child === \"boolean\"\n ) {\n return [globals.window.document.createTextNode(String(child))];\n }\n\n // create without parent (we'll insert manually and run lifecycle hooks afterwards)\n const created = renderer.createElementOrElements(child) as\n | Node\n | Array<Node>\n | undefined;\n\n if (!created) return undefined;\n const nodes = Array.isArray(created) ? created : [created];\n return nodes.filter(Boolean) as Array<Node>;\n}\n\n/********************************************************\n * 4) Patch an element node in place (attributes + children)\n ********************************************************/\nfunction shouldPreserveFormStateAttribute(\n el: Element,\n attrName: string,\n vnode: VNode<VNodeAttributes>,\n): boolean {\n const tag = el.tagName.toLowerCase();\n const hasExplicit = Object.hasOwn(vnode.attributes ?? {}, attrName);\n\n if (hasExplicit) return false;\n\n // preserve uncontrolled input/textarea/select state unless explicitly controlled by VDOM\n if (tag === \"input\") return attrName === \"value\" || attrName === \"checked\";\n if (tag === \"textarea\") return attrName === \"value\";\n if (tag === \"select\") return attrName === \"value\";\n return false;\n}\n\nfunction patchElementInPlace(\n el: Element,\n vnode: VNode<VNodeAttributes>,\n globals: Globals,\n // diff mode: the vnode is a partial patch — undeclared attributes and\n // delegated handlers are \"not mentioned\", never \"unset\", so removal is skipped\n mergeAttributes = false,\n): void {\n const renderer = getRenderer(globals.window.document);\n\n // remove old attributes not present (but preserve uncontrolled form state)\n const existingAttrs = mergeAttributes ? [] : Array.from(el.attributes);\n const nextAttrs = vnode.attributes ?? {};\n\n for (const attr of existingAttrs) {\n const { name } = attr;\n\n // do not remove internal key if it ever existed as attribute\n if (name === \"key\") continue;\n\n // do not remove event-ish attributes; handlers are delegated elsewhere\n if (name.startsWith(\"on\")) continue;\n\n // treat class/className as equivalent\n if (\n name === \"class\" &&\n (Object.hasOwn(nextAttrs, \"class\") ||\n Object.hasOwn(nextAttrs, \"className\"))\n ) {\n continue;\n }\n\n if (!Object.hasOwn(nextAttrs, name)) {\n if (shouldPreserveFormStateAttribute(el, name, vnode)) continue;\n el.removeAttribute(name);\n }\n }\n\n // Remove stale event handlers: compute registered phase keys - next vnode phase keys\n // This is phase-aware: onClick + onClickCapture → onClickCapture only will correctly\n // remove the bubble handler while keeping the capture handler.\n // Skipped for DOM-derived vnodes (HTML strings / DOM nodes): those cannot declare\n // handlers, so existing delegated handlers are preserved like uncontrolled form state.\n const preserveDelegatedHandlers =\n mergeAttributes ||\n Boolean((nextAttrs as Record<PropertyKey, unknown>)[FROM_DOM_MARKER]);\n\n if (!preserveDelegatedHandlers) {\n const registeredKeys = getRegisteredEventKeys(el as HTMLElement);\n const nextEventKeys = new Set<string>();\n for (const propName of Object.keys(nextAttrs)) {\n const parsed = parseEventPropName(propName);\n if (parsed) {\n const phase = parsed.capture ? \"capture\" : \"bubble\";\n nextEventKeys.add(`${parsed.eventType}:${phase}`);\n }\n }\n for (const key of registeredKeys) {\n if (!nextEventKeys.has(key)) {\n const [eventType, phase] = key.split(\":\");\n removeDelegatedEventByKey(\n el as HTMLElement,\n eventType,\n phase as \"bubble\" | \"capture\",\n );\n }\n }\n }\n\n // set new attributes (includes ref + delegated events via renderer.setAttribute)\n renderer.setAttributes(vnode, el);\n\n // Trigger onMount lifecycle for morphed elements that have a new onMount callback\n // This ensures onMount fires on route changes even when elements are morphed in place\n handleLifecycleEventsForOnMount(el as HTMLElement);\n\n // dangerouslySetInnerHTML => skip child reconciliation\n const d = vnode.attributes?.dangerouslySetInnerHTML;\n if (d && typeof d === \"object\" && typeof d.__html === \"string\") {\n el.innerHTML = d.__html;\n return;\n }\n\n const tag = el.tagName.toLowerCase();\n\n // preserve textarea live value unless explicitly controlled\n if (tag === \"textarea\") {\n const isControlled = Object.hasOwn(nextAttrs, \"value\");\n const isActive = el.ownerDocument?.activeElement === el;\n if (isActive && !isControlled) return;\n }\n\n // diff mode: children are \"not mentioned\" unless explicitly declared, so an\n // attributes-only patch item must not clear the node's existing children.\n // HTML-derived vnodes always carry a (possibly empty) children array —\n // empty means \"undeclared\" there, exactly like absent form attributes.\n // VNode/JSX input keeps the distinction: children: [] clears explicitly.\n if (\n mergeAttributes &&\n (vnode.children === undefined ||\n (vnode.children.length === 0 &&\n (nextAttrs as Record<PropertyKey, unknown>)[FROM_DOM_MARKER]))\n )\n return;\n\n // reconcile children (direct call - bypasses morph guard for internal recursion)\n morphDomDirect(el, (vnode.children ?? []) as RenderInput, globals);\n}\n\n/********************************************************\n * 5) Morph a single DOM node to match a ValidChild\n ********************************************************/\nfunction morphNode(\n domNode: Node,\n child: ValidChild,\n globals: Globals,\n mergeAttributes = false,\n): Node | null {\n // text-like\n if (\n typeof child === \"string\" ||\n typeof child === \"number\" ||\n typeof child === \"boolean\"\n ) {\n const text = String(child);\n\n if (domNode.nodeType === 3 /* Node.TEXT_NODE */) {\n if (domNode.nodeValue !== text) domNode.nodeValue = text;\n return domNode;\n }\n\n const next = globals.window.document.createTextNode(text);\n domNode.parentNode?.replaceChild(next, domNode);\n return next;\n }\n\n // element-like (VNode)\n if (child && typeof child === \"object\") {\n const newType = typeof child.type === \"string\" ? child.type : null;\n if (!newType) return domNode;\n\n if (domNode.nodeType !== 1 /* Node.ELEMENT_NODE */) {\n const created = createDomFromChild(child, globals);\n const first = Array.isArray(created) ? created[0] : created;\n if (!first) return null;\n\n domNode.parentNode?.replaceChild(first, domNode);\n handleLifecycleEventsForOnMount(first as HTMLElement);\n return first;\n }\n\n const el = domNode as Element;\n const oldTag = el.tagName.toLowerCase();\n const newTag = newType.toLowerCase();\n\n if (oldTag !== newTag) {\n const created = createDomFromChild(child, globals);\n const first = Array.isArray(created) ? created[0] : created;\n if (!first) return null;\n\n el.parentNode?.replaceChild(first, el);\n handleLifecycleEventsForOnMount(first as HTMLElement);\n return first;\n }\n\n patchElementInPlace(el, child as VNode<VNodeAttributes>, globals, mergeAttributes);\n return el;\n }\n\n // null/undefined => remove\n domNode.parentNode?.removeChild(domNode);\n return null;\n}\n\n/********************************************************\n * 6) Morph guard - tags DOM subtrees as \"rendering\" to prevent\n * re-entrant / conflicting morphs on the same or ancestor nodes.\n * Unrelated subtrees morph in parallel without blocking.\n ********************************************************/\nconst renderingNodes = new WeakSet<Element>();\nconst pendingMorphs = new Map<\n Element,\n { vdom: RenderInput; globals: Globals; mode: MorphMode }\n>();\n\n/**\n * Resolve the render globals from an element's own document when not given\n * explicitly (isomorphic: browser window, happy-dom window, multi-document).\n */\nexport const resolveGlobals = (el?: Element, globals?: Globals): Globals => {\n if (globals) return globals;\n const win = (el?.ownerDocument?.defaultView ??\n globalThis) as unknown as Globals;\n return { window: win } as unknown as Globals;\n};\n\nfunction isAncestorRendering(el: Element): boolean {\n let current = el.parentElement;\n while (current) {\n if (renderingNodes.has(current)) return true;\n current = current.parentElement;\n }\n return false;\n}\n\nfunction flushPendingMorphs(): void {\n if (pendingMorphs.size === 0) return;\n\n // Snapshot and clear to avoid infinite loops if flush triggers more morphs\n const snapshot = [...pendingMorphs.entries()];\n pendingMorphs.clear();\n\n for (const [el, { vdom, globals, mode }] of snapshot) {\n // Skip if element was detached during parent morph\n if (!el.isConnected) continue;\n // Re-enter through guarded path (handles nested conflicts)\n updateDomWithVdom(el, vdom, globals, mode);\n }\n}\n\n/**\n * Guarded entry point for DOM morphing.\n *\n * If the target element (or an ancestor) is already being morphed,\n * the render is queued (latest-wins) and replayed after the active\n * morph finishes. Morphs on unrelated subtrees proceed immediately\n * without blocking - conflict-free parallel rendering.\n *\n * `globals` is optional: it is derived from `parentElement.ownerDocument`\n * when omitted.\n *\n * `mode` defaults to `\"replace\"` (full reconciliation). Pass `\"diff\"` for\n * partial updates: only `key`/`id`-addressed patch items are applied\n * (attributes merged, new keyed items appended, unmentioned nodes untouched).\n */\nexport function updateDomWithVdom(\n parentElement: Element,\n newVDOM: RenderInput,\n globals?: Globals,\n mode: MorphMode = \"replace\",\n): void {\n const resolvedGlobals = resolveGlobals(parentElement, globals);\n\n // Re-entrant or ancestor conflict → queue latest, return\n if (renderingNodes.has(parentElement) || isAncestorRendering(parentElement)) {\n pendingMorphs.set(parentElement, {\n vdom: newVDOM,\n globals: resolvedGlobals,\n mode,\n });\n return;\n }\n\n renderingNodes.add(parentElement);\n try {\n morphDomDirect(parentElement, newVDOM, resolvedGlobals, mode);\n } finally {\n renderingNodes.delete(parentElement);\n }\n\n // Flush any morphs that were queued during this render\n flushPendingMorphs();\n}\n\n/********************************************************\n * 6b) Diff mode — partial change-sets (patch + append only)\n ********************************************************/\n/**\n * Apply a partial change-set to `targetRoot`: every top-level item must be an\n * element addressed by `key` (preferred) or `id`. Matched nodes are patched in\n * place with attributes *merged* (undeclared attributes, delegated handlers\n * and children stay untouched); unmatched items are appended as new nodes.\n * Nothing else changes: unmentioned siblings keep identity, order and state —\n * diff mode never removes and never moves, so addressing is unambiguous.\n *\n * Why: stream/AI-driven partial updates without resending the whole subtree.\n * Tag changes on an addressed node are applied as an honest in-place\n * replacement (the item fully declares that node).\n */\nfunction morphDiff(\n targetRoot: ParentNode & Node,\n patchItems: Array<ValidChild>,\n globals: Globals,\n): void {\n // first-wins keyed pool of the current children — diff never removes, so\n // duplicate keys can simply share the first node as the address owner\n const keyedPool = new Map<string, Node>();\n for (const node of Array.from(targetRoot.childNodes)) {\n for (const k of getDomMatchKeys(node)) {\n if (!keyedPool.has(k)) keyedPool.set(k, node);\n }\n }\n\n for (const item of patchItems) {\n // formatting whitespace between change-set items (e.g. newlines + indent\n // in a template literal) parses to text nodes but carries no meaning —\n // skip it; only *meaningful* plain text is unaddressable and throws\n if (typeof item === \"string\" && item.trim() === \"\") continue;\n\n // booleans/null are already filtered by normalizeChildren; anything\n // without a key/id (incl. plain text) cannot be addressed unambiguously\n const key = getVNodeMatchKey(item);\n\n if (!key) {\n throw new Error(\n `morph diff: patch items must be elements with a key or id attribute (got ${describePatchItem(item)})`,\n );\n }\n\n const match = keyedPool.get(key);\n\n if (match) {\n // Tag-less patch items are pure patches: borrow the addressed node's\n // tag (only *new* items need one — to create it). An explicitly\n // different tag still replaces the node.\n const patchItem =\n item && typeof item === \"object\" && !(item as VNode).type\n ? { ...item, type: (match as Element).tagName.toLowerCase() }\n : item;\n\n // same tag -> attribute merge (+ declared children); tag change ->\n // in-place replacement by morphNode; mergeAttributes keeps the diff\n // contract (no attribute/handler removal) either way\n morphNode(match, patchItem, globals, true);\n continue;\n }\n\n if (!(item as VNode)?.type) {\n throw new Error(\n `morph diff: new (unmatched) patch items must declare a tag (type), got key/id \"${key}\"`,\n );\n }\n\n // new keyed item -> append (never inserted \"in order\" implicitly: moving\n // or positioning unmentioned siblings would be a guess)\n const created = createDomFromChild(item, globals) ?? [];\n for (const node of created) {\n targetRoot.appendChild(node);\n handleLifecycleEventsForOnMount(node as HTMLElement);\n }\n }\n}\n\n/********************************************************\n * 7) Raw morph implementation (key/id aware, move-not-replace)\n * Called directly by the guard and by internal recursive\n * child reconciliation (patchElementInPlace).\n ********************************************************/\nfunction morphDomDirect(\n parentElement: Element,\n newVDOM: RenderInput,\n globals: Globals,\n mode: MorphMode = \"replace\",\n): void {\n // Custom elements (hyphenated tags) use light DOM for slotted content.\n // Other elements with shadowRoot should target the shadow root.\n const el = parentElement as HTMLElement;\n const isCustomElement = el.tagName.includes(\"-\");\n const targetRoot: ParentNode & Node =\n el.shadowRoot && !isCustomElement ? el.shadowRoot : parentElement;\n\n const nextChildren = normalizeChildren(newVDOM, mode === \"diff\");\n\n if (mode === \"diff\") {\n morphDiff(targetRoot, nextChildren, globals);\n return;\n }\n\n // snapshot existing children once for matching pools\n const existing = Array.from(targetRoot.childNodes);\n\n const keyedPool = new Map<string, Node>();\n const nodeKeys = new WeakMap<Node, Array<string>>();\n const unkeyedPool: Array<Node> = [];\n\n for (const node of existing) {\n const keys = getDomMatchKeys(node);\n if (keys.length > 0) {\n nodeKeys.set(node, keys);\n let addedToKeyedPool = false;\n for (const k of keys) {\n if (!keyedPool.has(k)) {\n keyedPool.set(k, node);\n addedToKeyedPool = true;\n }\n }\n // all keys duplicates of already-pooled nodes: fall back to the\n // unkeyed pool so the node can still be matched — and, crucially,\n // is removed when left over (duplicate keys must not leak nodes)\n if (!addedToKeyedPool) {\n unkeyedPool.push(node);\n }\n } else {\n unkeyedPool.push(node);\n }\n }\n\n const consumeKeyedNode = (node: Node) => {\n const keys = nodeKeys.get(node) ?? [];\n for (const k of keys) keyedPool.delete(k);\n };\n\n const takeUnkeyedMatch = (child: ValidChild): Node | undefined => {\n // try to find a compatible node (preserves focus/state by moving instead of replacing)\n for (let i = 0; i < unkeyedPool.length; i++) {\n const candidate = unkeyedPool[i];\n if (areNodeAndChildMatching(candidate, child)) {\n unkeyedPool.splice(i, 1);\n return candidate;\n }\n }\n\n // SAFE: no match => don't reuse something random, create new node instead\n return undefined;\n };\n\n let domIndex = 0;\n\n for (const child of nextChildren) {\n const key = getVNodeMatchKey(child);\n\n let match: Node | undefined;\n\n if (key) {\n match = keyedPool.get(key);\n if (match) consumeKeyedNode(match);\n } else {\n match = takeUnkeyedMatch(child);\n }\n\n const anchor = targetRoot.childNodes[domIndex] ?? null;\n\n if (match) {\n // move node into place (preserves identity/state)\n if (match !== anchor) {\n targetRoot.insertBefore(match, anchor);\n }\n\n const morphed = morphNode(match, child, globals);\n\n // if morphNode replaced it, ensure we still have the correct node at domIndex\n if (morphed && morphed !== match) {\n // replacement already occurred in-place, nothing else to do\n }\n\n domIndex++;\n continue;\n }\n\n // no match => create and insert\n const created = createDomFromChild(child, globals);\n if (!created || (Array.isArray(created) && created.length === 0)) continue;\n\n const nodes = Array.isArray(created) ? created : [created];\n for (const node of nodes) {\n targetRoot.insertBefore(node, anchor);\n handleLifecycleEventsForOnMount(node as HTMLElement);\n domIndex++;\n }\n }\n\n // remove remaining unmatched nodes (both keyed leftovers and unkeyed leftovers)\n const remaining = new Set<Node>();\n\n for (const node of unkeyedPool) remaining.add(node);\n for (const node of keyedPool.values()) remaining.add(node);\n\n for (const node of remaining) {\n if (node.parentNode === targetRoot) {\n // Clear delegated events before removal to prevent handler leaks\n // (realm-safe element check: works across windows / SSR DOM implementations)\n if (node.nodeType === 1 /* Node.ELEMENT_NODE */) {\n clearDelegatedEventsDeep(node as HTMLElement);\n }\n targetRoot.removeChild(node);\n }\n }\n}\n\n/**\n * Directly blow away all children in `parentElement` and create new DOM\n * from `newVDOM`. This never skips or leaves behind stale nodes,\n * at the cost of losing partial update performance.\n *\n * `globals` is optional: it is derived from `parentElement.ownerDocument`\n * when omitted.\n */\nexport function replaceDomWithVdom(\n parentElement: Element,\n newVDOM: RenderInput,\n globals?: Globals,\n) {\n const resolvedGlobals = resolveGlobals(parentElement, globals);\n\n // 1) Clear all existing DOM children\n while (parentElement.firstChild) {\n parentElement.removeChild(parentElement.firstChild);\n }\n\n // 2) Re-render from scratch\n const renderer = getRenderer(resolvedGlobals.window.document);\n\n const newDom = renderer.createElementOrElements(\n newVDOM as VNode | undefined | Array<VNode | undefined | string>,\n );\n\n // 3) Append the newly created node(s)\n if (Array.isArray(newDom)) {\n for (const node of newDom) {\n if (node) {\n parentElement.appendChild(node);\n handleLifecycleEventsForOnMount(node as HTMLElement);\n }\n }\n } else if (newDom) {\n parentElement.appendChild(newDom);\n handleLifecycleEventsForOnMount(newDom as HTMLElement);\n }\n}\n",
|
|
10
|
+
"export type TransitionType =\n | \"fade\"\n | \"slide-left\"\n | \"slide-right\"\n | \"shake\"\n | \"none\";\n\nexport interface TransitionStyles {\n enter: Record<string, string>;\n enterActive: Record<string, string>;\n exit: Record<string, string>;\n exitActive: Record<string, string>;\n}\n\nexport type TransitionsEasing =\n | \"linear\"\n | \"ease\"\n | \"ease-in\"\n | \"ease-out\"\n | \"ease-in-out\"\n | \"step-start\"\n | \"step-end\";\n\nexport interface TransitionConfig {\n type?: TransitionType;\n styles?: TransitionStyles;\n duration?: number;\n easing?: TransitionsEasing | string;\n delay?: number;\n target?: \"parent\" | \"self\";\n}\n\nconst injectShakeKeyframes = (doc: Document | undefined) => {\n if (!doc) return;\n if (!doc.getElementById(\"defuss-shake\")) {\n const style = doc.createElement(\"style\");\n style.id = \"defuss-shake\";\n style.textContent =\n \"@keyframes shake{0%,100%{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}\";\n doc.head.appendChild(style);\n }\n};\n\nexport const getTransitionStyles = (\n type: TransitionType,\n duration: number,\n easing = \"ease-in-out\",\n): TransitionStyles => {\n const t = `transform ${duration}ms ${easing}, opacity ${duration}ms ${easing}`;\n const styles: Record<string, TransitionStyles> = {\n fade: {\n enter: { opacity: \"0\", transition: t, transform: \"translate3d(0,0,0)\" },\n enterActive: { opacity: \"1\" },\n exit: { opacity: \"1\", transition: t, transform: \"translate3d(0,0,0)\" },\n exitActive: { opacity: \"0\" },\n },\n \"slide-left\": {\n enter: {\n transform: \"translate3d(100%,0,0)\",\n opacity: \"0.5\",\n transition: t,\n },\n enterActive: { transform: \"translate3d(0,0,0)\", opacity: \"1\" },\n exit: { transform: \"translate3d(0,0,0)\", opacity: \"1\", transition: t },\n exitActive: { transform: \"translate3d(-100%,0,0)\", opacity: \"0.5\" },\n },\n \"slide-right\": {\n enter: {\n transform: \"translate3d(-100%,0,0)\",\n opacity: \"0.5\",\n transition: t,\n },\n enterActive: { transform: \"translate3d(0,0,0)\", opacity: \"1\" },\n exit: { transform: \"translate3d(0,0,0)\", opacity: \"1\", transition: t },\n exitActive: { transform: \"translate3d(100%,0,0)\", opacity: \"0.5\" },\n },\n shake: (() => {\n injectShakeKeyframes(\n typeof document !== \"undefined\" ? document : undefined,\n );\n return {\n enter: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n transition: \"none\",\n },\n enterActive: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n animation: `shake ${duration}ms cubic-bezier(0.36,0.07,0.19,0.97)`,\n },\n exit: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n transition: \"none\",\n },\n exitActive: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n animation: `shake ${duration}ms cubic-bezier(0.36,0.07,0.19,0.97)`,\n },\n };\n })(),\n };\n return (\n styles[type] || { enter: {}, enterActive: {}, exit: {}, exitActive: {} }\n );\n};\n\nexport const applyStyles = (\n el: HTMLElement,\n styles: Record<string, string | number>,\n) =>\n Object.entries(styles).forEach(([k, v]) =>\n el.style.setProperty(k, String(v)),\n );\n\nexport const DEFAULT_TRANSITION_CONFIG: TransitionConfig = {\n type: \"fade\",\n duration: 300,\n easing: \"ease-in-out\",\n delay: 0,\n target: \"parent\",\n};\n\nconst wait = (ms: number) => new Promise((r) => setTimeout(r, ms));\n\nconst performCrossfade = async (\n element: HTMLElement,\n updateCallback: () => Promise<void>,\n duration: number,\n easing: string,\n): Promise<void> => {\n const originalStyle = element.style.cssText;\n const snapshot = element.cloneNode(true) as HTMLElement;\n // realm-safe: use the element's own document (works across windows / SSR DOMs)\n const doc = element.ownerDocument;\n\n try {\n const rect = element.getBoundingClientRect();\n\n // Position snapshot absolutely over original\n snapshot.style.cssText = `position:absolute;top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;opacity:1;transition:opacity ${duration}ms ${easing};z-index:1000;`;\n\n // Prepare new content (initially hidden)\n element.style.opacity = \"0\";\n element.style.transition = `opacity ${duration}ms ${easing}`;\n\n // Insert snapshot and update content\n doc.body.appendChild(snapshot);\n await updateCallback();\n\n // Trigger simultaneous crossfade\n void element.offsetHeight;\n snapshot.style.opacity = \"0\";\n element.style.opacity = \"1\";\n\n await wait(duration);\n doc.body.removeChild(snapshot);\n } catch (error) {\n if (snapshot.parentElement) doc.body.removeChild(snapshot);\n throw error;\n } finally {\n element.style.cssText = originalStyle;\n }\n};\n\nexport const performTransition = async (\n element: HTMLElement,\n updateCallback: () => Promise<void>,\n config: TransitionConfig = {},\n): Promise<void> => {\n const {\n type = \"fade\",\n duration = 300,\n easing = \"ease-in-out\",\n delay = 0,\n } = { ...DEFAULT_TRANSITION_CONFIG, ...config };\n\n if (type === \"none\") {\n await updateCallback();\n return;\n }\n\n if (delay > 0) await wait(delay);\n\n // Use crossfade for fade transitions\n if (type === \"fade\") {\n await performCrossfade(element, updateCallback, duration, easing);\n return;\n }\n\n const styles = config.styles || getTransitionStyles(type, duration, easing);\n const originalTransition = element.style.transition;\n const originalAnimation = element.style.animation;\n\n try {\n // Clear any existing animation for shake restart\n if (type === \"shake\") {\n element.style.animation = \"none\";\n void element.offsetHeight;\n }\n\n // Apply exit transition\n applyStyles(element, styles.exit);\n void element.offsetHeight;\n applyStyles(element, styles.exitActive);\n\n await wait(duration);\n\n // Update content\n await updateCallback();\n\n // Apply enter transition\n applyStyles(element, styles.enter);\n void element.offsetHeight;\n applyStyles(element, styles.enterActive);\n\n await wait(duration);\n\n // Restore original styles\n element.style.transition = originalTransition;\n element.style.animation = originalAnimation;\n } catch (error) {\n element.style.transition = originalTransition;\n element.style.animation = originalAnimation;\n throw error;\n }\n};\n",
|
|
11
|
+
"import { type MorphMode, resolveGlobals, updateDomWithVdom } from \"./morph.js\";\nimport { htmlStringToVNodes } from \"./html.js\";\nimport type { RenderInput } from \"./types.js\";\nimport {\n DEFAULT_TRANSITION_CONFIG,\n performTransition,\n type TransitionConfig,\n} from \"./transitions.js\";\n\nexport * from \"./types.js\";\nexport * from \"./queue.js\";\nexport * from \"./delegated-events.js\";\nexport * from \"./renderer.js\";\nexport * from \"./morph.js\";\nexport * from \"./html.js\";\nexport * from \"./transitions.js\";\n\nexport interface MorphOptions {\n /**\n * Optional transition to apply around the morph.\n * When set (and `type !== \"none\"`), `morph()` returns a `Promise`\n * that resolves once the transition completed.\n */\n transition?: TransitionConfig;\n /**\n * Partial updates: apply only the given change-set instead of reconciling\n * the full child list. Every top-level item must be an element with a\n * `key` (preferred) or `id` — matched nodes are patched with attributes\n * *merged* (undeclared attributes and children stay untouched), unmatched\n * items are appended. Unmentioned siblings keep identity, order and state;\n * diff mode never removes and never moves, so addressing is unambiguous.\n *\n * Plain-text input and key-less items throw (they cannot be addressed).\n *\n * @example\n * ```ts\n * // update one row, append another — everything else is not re-sent:\n * morph(list, `\n * <li key=\"b\">B (updated)</li>\n * <li key=\"c\">C (new)</li>\n * `, { diff: true });\n * ```\n */\n diff?: boolean;\n}\n\n/**\n * Morphs the children of `el` to match the given HTML string or JSX/VNode input.\n *\n * A string is parsed into a DOM tree via the native `DOMParser`\n * of the element's own document (isomorphic: browser, happy-dom, ...);\n * any other `RenderInput` (JSX, VNodes, arrays, text) is used directly.\n * Both paths then morph into the existing DOM using the defuss morph algorithm:\n *\n * - key/id-aware node matching (`key` and `id` attributes)\n * - move-not-replace semantics (preserves node identity, focus, selection\n * and event listeners)\n * - in-place attribute patching for same-tag elements\n * - uncontrolled form-state preservation (live input values survive\n * unless the new HTML explicitly controls them)\n * - shadow DOM / custom element (light DOM) aware\n * - re-entrant morphs on the same or an ancestor element are queued\n * latest-wins and replayed after the active morph finishes\n * - overlapping transitions are latest-wins too: a morph issued while a\n * transition is in flight replaces the content that transition will apply\n *\n * Plain text input morphs as a text node.\n *\n * Unlike an HTML string, a VNode/JSX input can express explicit state\n * (`checked: false`, `value: \"\"`) and carry event handlers.\n *\n * @example\n * ```ts\n * import { morph } from \"defuss-morph\";\n *\n * morph(document.getElementById(\"app\")!, \"<ul><li key='a'>Hello</li></ul>\");\n *\n * // JSX / VNodes work too (same API, same algorithm):\n * morph(document.getElementById(\"app\")!, <p>Hi</p>);\n *\n * // with a transition (async):\n * await morph(document.getElementById(\"app\")!, \"<p>Hi</p>\", {\n * transition: { type: \"fade\", duration: 200 },\n * });\n * ```\n */\n\n/**\n * In-flight transition content slots. Non-fade transitions apply their morph\n * only after the exit phase (`await wait(duration)` inside performTransition),\n * so a morph issued during that window would be overwritten by stale content.\n * The slot makes such overlaps latest-wins: the deferred update applies\n * whatever content was requested last for the element.\n */\nconst inflightTransitions = new WeakMap<Element, { content: RenderInput }>();\n\nexport const morph = (\n el: Element,\n newContent: RenderInput,\n options: MorphOptions = {},\n): void | Promise<void> => {\n const globals = resolveGlobals(el);\n const win = globals.window;\n\n const mode: MorphMode = options.diff ? \"diff\" : \"replace\";\n\n // strings go through the HTML parser; JSX/VNodes are used as-is\n const apply = (content: RenderInput) =>\n updateDomWithVdom(\n el,\n typeof content === \"string\" ? htmlStringToVNodes(content, win.DOMParser) : content,\n globals,\n mode,\n );\n\n const transition = options.transition;\n if (transition && transition.type !== \"none\") {\n const config = { ...DEFAULT_TRANSITION_CONFIG, ...transition };\n const transitionTarget =\n config.target === \"self\" ? (el as HTMLElement) : el.parentElement;\n\n // no transition target (detached root) -> morph directly\n if (!transitionTarget) {\n apply(newContent);\n return;\n }\n\n // register the content slot for this element (replaces any previous one)\n const slot = { content: newContent };\n inflightTransitions.set(el, slot);\n\n return performTransition(\n transitionTarget,\n // apply the latest requested content — but only if this transition\n // still owns the slot; when a newer transition has taken it over (or\n // already completed and cleaned it up), this deferred update is stale\n // and must not clobber the newer content\n async () => {\n if (inflightTransitions.get(el) === slot) apply(slot.content);\n },\n config,\n ).finally(() => {\n // clean up only if no newer transition took over the slot\n if (inflightTransitions.get(el) === slot) inflightTransitions.delete(el);\n });\n }\n\n // plain morph: apply immediately, and if a transition is in flight for this\n // element, rewrite its slot so the deferred update re-applies this (latest)\n // content instead of the transition's stale content\n const slot = inflightTransitions.get(el);\n if (slot) slot.content = newContent;\n\n apply(newContent);\n};\n",
|
|
12
|
+
"import * as api from \"./index.js\";\n\n/**\n * Why: the CDN bundle (dist/all.js / all.min.js) is also loaded via a plain\n * <script type=\"module\" src=\"...\"> tag — no ESM import statement, so the\n * module's exports are unreachable for the page. Evaluating the bundle\n * therefore declares a `df$` global and exposes the full public API on it:\n *\n * <script type=\"module\" src=\"https://cdn.jsdelivr.net/npm/defuss-morph@latest/dist/all.min.js\"></script>\n * <script type=\"module\">\n * window.df$.morph(document.getElementById(\"app\"), \"<p>Hi</p>\");\n * window.df$.updateDomWithVdom(app, [{ type: \"input\", attributes: { checked: false }, children: [] }], { window });\n * </script>\n *\n * A pre-existing `df$` object is preserved (the API is assigned onto it);\n * a non-object value (or none) is replaced with a fresh object.\n */\ndeclare global {\n var df$: typeof api | undefined;\n\n interface Window {\n df$: typeof api | undefined;\n }\n}\n\nif (typeof globalThis !== \"undefined\") {\n const g = globalThis as { df$: unknown };\n if (typeof g.df$ !== \"object\" || g.df$ === null) {\n g.df$ = {};\n }\n Object.assign(g.df$ as Record<string, unknown>, api);\n}\n"
|
|
13
|
+
],
|
|
14
|
+
"mappings": "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",
|
|
15
|
+
"debugId": "6F130A0428D5249264756E2164756E21",
|
|
16
|
+
"names": []
|
|
17
|
+
}
|
package/dist/all.min.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=Object.defineProperty,t=e=>e;function n(e,n){this[e]=t.bind(null,n)}var r=(t,r)=>{for(var i in r)e(t,i,{get:r[i],enumerable:!0,configurable:!0,set:n.bind(r,i)})},i={};r(i,{updateDomWithVdom:()=>K,resolveGlobals:()=>G,replaceDomWithVdom:()=>be,renderMarkup:()=>F,removeDelegatedEventByKey:()=>b,removeDelegatedEvent:()=>ie,registerDelegatedEvent:()=>h,queueCallback:()=>a,performTransition:()=>Z,parseEventPropName:()=>d,parseDOM:()=>j,observeUnmount:()=>D,nsMap:()=>E,morph:()=>$,isSVG:()=>M,isMarkup:()=>P,isHTML:()=>N,htmlStringToVNodes:()=>R,handleLifecycleEventsForOnMount:()=>O,getTransitionStyles:()=>q,getRenderer:()=>k,getRegisteredEventTypes:()=>v,getRegisteredEventKeys:()=>y,getMimeType:()=>I,domNodeToVNode:()=>L,clearDelegatedEventsDeep:()=>_,clearDelegatedEvents:()=>g,areDomNodesEqual:()=>z,applyStyles:()=>J,XMLNS_ATTRIBUTE_NAME:()=>C,XLINK_ATTRIBUTE_NAME:()=>S,REF_ATTRIBUTE_NAME:()=>w,FROM_DOM_MARKER:()=>A,DEFAULT_TRANSITION_CONFIG:()=>Y,DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE:()=>T,CLASS_ATTRIBUTE_NAME:()=>x,CAPTURE_ONLY_EVENTS:()=>o});var a=e=>(...t)=>queueMicrotask(()=>e(...t)),o=new Set([`focus`,`blur`,`scroll`,`mouseenter`,`mouseleave`]),s=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakMap,d=e=>{if(!e.startsWith(`on`))return null;let t=e.slice(2);if(!t)return null;let n=t.toLowerCase(),r=n.endsWith(`capture`),i=r?n.slice(0,-7):n;return i?{eventType:i,capture:r}:null},ee=e=>{let t=s.get(e);if(t)return t;let n=new Map;return s.set(e,n),n},f=e=>{let t=e.composedPath?.();if(t&&t.length>0)return t;let n=[],r=e.target;for(;r;){n.push(r);let e=r;if(typeof e==`object`&&e&&`parentNode`in e){r=e.parentNode;continue}break}let i=e.target?.ownerDocument;i&&n[n.length-1]!==i&&n.push(i);let a=i?.defaultView;return a&&n[n.length-1]!==a&&n.push(a),n},p=(e,t)=>{let n=t===`capture`?l:c;return r=>{let i=f(r).filter(e=>typeof e==`object`&&!!e&&e.nodeType===1),a=t===`capture`?[...i].reverse():i;for(let i of a){let a=s.get(i);if(!a)continue;let o=a.get(e);if(!o)continue;let c=n.get(r);if(c?.has(i))continue;c||(c=new WeakSet,n.set(r,c)),c.add(i);let l=`${e}:${t}`,d=u.get(i);if(!d?.has(l)){d||(d=new Set,u.set(i,d)),d.add(l);try{if(t===`capture`){if(o.capture&&(o.capture.call(i,r),r.cancelBubble))return;if(o.captureSet){for(let e of o.captureSet)if(e.call(i,r),r.cancelBubble)return}}else{if(o.bubble&&(o.bubble.call(i,r),r.cancelBubble))return;if(o.bubbleSet){for(let e of o.bubbleSet)if(e.call(i,r),r.cancelBubble)return}}}finally{d.delete(l)}}}}},m=new WeakMap,te=(e,t)=>{let n=m.get(e)??new Set;m.set(e,n);let r=`${t}:capture`;n.has(r)||(e.addEventListener(t,p(t,`capture`),!0),n.add(r));let i=`${t}:bubble`;n.has(i)||(e.addEventListener(t,p(t,`bubble`),!1),n.add(i))},ne=e=>{let t=e.getRootNode();return t&&t.nodeType===9||t&&t.nodeType===11&&`host`in t?t:null},h=(e,t,n,r={})=>{let i=ne(e),a=r.capture||o.has(t);i?te(i,t):e.ownerDocument?te(e.ownerDocument,t):e.addEventListener(t,n,a);let s=ee(e),c=s.get(t)??{};s.set(t,c),r.multi?a?(c.captureSet||=new Set,c.captureSet.add(n)):(c.bubbleSet||=new Set,c.bubbleSet.add(n)):a?c.capture=n:c.bubble=n},re=e=>!e.capture&&!e.bubble&&(!e.captureSet||e.captureSet.size===0)&&(!e.bubbleSet||e.bubbleSet.size===0),ie=(e,t,n,r={})=>{let i=s.get(e);if(!i)return;let a=i.get(t);a&&(n?(a.captureSet&&a.captureSet.delete(n),a.bubbleSet&&a.bubbleSet.delete(n),a.capture===n&&(a.capture=void 0),a.bubble===n&&(a.bubble=void 0),e.removeEventListener(t,n,!0),e.removeEventListener(t,n,!1)):(a.capture=void 0,a.bubble=void 0,a.captureSet=void 0,a.bubbleSet=void 0),re(a)&&i.delete(t))},g=e=>{let t=s.get(e);t&&t.clear()},_=e=>{g(e);let t=e.ownerDocument;if(!t)return;let n=t.createTreeWalker(e,1),r=n.nextNode();for(;r;)g(r),r=n.nextNode()},v=e=>{let t=s.get(e);return t?new Set(t.keys()):new Set},y=e=>{let t=s.get(e);if(!t)return new Set;let n=new Set;for(let[e,r]of t)(r.bubble||r.bubbleSet?.size)&&n.add(`${e}:bubble`),(r.capture||r.captureSet?.size)&&n.add(`${e}:capture`);return n},b=(e,t,n)=>{let r=s.get(e);if(!r)return;let i=r.get(t);i&&(n===`capture`?(i.capture=void 0,i.captureSet=void 0):(i.bubble=void 0,i.bubbleSet=void 0),re(i)&&r.delete(t))},x=`class`,S=`xlink`,C=`xmlns`,w=`ref`,T=`dangerouslySetInnerHTML`,E={[C]:`http://www.w3.org/2000/xmlns/`,[S]:`http://www.w3.org/1999/xlink`,svg:`http://www.w3.org/2000/svg`},D=(e,t)=>{if(!e||typeof t!=`function`)throw Error(`Invalid arguments. Ensure domNode and onUnmount are valid.`);if(typeof MutationObserver>`u`)return;let n=e.parentNode;if(!n)throw Error(`The provided domNode does not have a parentNode.`);let r=new MutationObserver(i=>{for(let a of i)if(a.removedNodes.length>0){for(let i of a.removedNodes)if(i===e){queueMicrotask(()=>{if(!e.isConnected){t(),r.disconnect();return}let i=e.parentNode;i&&i!==n&&(n=i,r.disconnect(),r.observe(n,{childList:!0}))});return}}});r.observe(n,{childList:!0})},O=e=>{typeof e?.$onMount==`function`&&(e.$onMount(e),e.$onMount=null),typeof e?.$onUnmount==`function`&&D(e,e.$onUnmount)},k=e=>{let t={hasElNamespace:e=>e.namespaceURI===E.svg,hasSvgNamespace:(e,n)=>t.hasElNamespace(e)&&n!==`STYLE`&&n!==`SCRIPT`,createElementOrElements:(e,n)=>Array.isArray(e)?t.createChildElements(e,n):e===void 0?t.createTextNode(``,n):t.createElement(e,n),createElement:(n,r)=>{let i;try{if(typeof n==`function`&&n.constructor.name===`AsyncFunction`)i=e.createElement(`div`);else if(typeof n==`object`&&n&&`type`in n){let a=n;typeof a.type==`function`?(i=e.createElement(`div`),i.innerText=`FATAL ERROR: ${a.type._error}`):i=typeof a.type==`string`&&a.type.toUpperCase()===`SVG`||r&&t.hasSvgNamespace(r,typeof a.type==`string`?a.type.toUpperCase():``)?e.createElementNS(E.svg,a.type):e.createElement(a.type),a.attributes&&(t.setAttributes(a,i),a.attributes.dangerouslySetInnerHTML&&(i.innerHTML=a.attributes.dangerouslySetInnerHTML.__html)),a.children&&!a.attributes?.dangerouslySetInnerHTML&&t.createChildElements(a.children,i)}else(typeof n==`string`||typeof n==`number`)&&(i=e.createElement(String(n)));i&&r&&(r.appendChild(i),O(i))}catch(e){throw console.error(`Fatal error! Error happend while rendering the VDOM!`,e,n),e}return i},createTextNode:(t,n)=>{let r=e.createTextNode(t.toString());return n&&n.appendChild(r),r},createChildElements:(e,n)=>{let r=[];for(let i=0;i<e.length;i++){let a=e[i];typeof a!=`boolean`&&(a===null||typeof a!=`object`&&typeof a!=`function`?r.push(t.createTextNode((a??``).toString(),n)):r.push(t.createElement(a,n)))}return r},setAttribute:(e,n,r)=>{if(n===void 0||e===T)return;if(e===`key`){r._defussKey=String(n);return}if(e===w&&typeof n!=`function`){let e=n;e.current=r,r._defussRef=n,r.$onUnmount=a(()=>{}),r.parentNode?D(r,r.$onUnmount):queueMicrotask(()=>{r.parentNode&&D(r,r.$onUnmount)});return}let i=d(e);if(i&&typeof n==`function`){let{eventType:e,capture:t}=i;if(e===`mount`){r.$onMount=a(n);return}if(e===`unmount`){if(r.$onUnmount){let e=r.$onUnmount;r.$onUnmount=()=>{e(),n()}}else r.$onUnmount=a(n);return}h(r,e,n,{capture:t});return}e===`className`&&(e=x),e===x&&Array.isArray(n)&&(n=n.filter(e=>!!e).join(` `));let o=e.match(/[A-Z]/)?.index;if(t.hasElNamespace(r)&&o){let t=e.substring(0,o).toLowerCase(),i=e.substring(o,e.length).toLowerCase(),a=E[t]||null;r.setAttributeNS(a,t===S||t===C?`${t}:${i}`:e,String(n))}else if(e===`style`&&typeof n!=`string`){let e=n;for(let t of Object.keys(e))r.style[t]=String(e[t])}else typeof n==`boolean`?(r[e]=n,n?r.setAttribute(e,``):r.removeAttribute(e)):(e===`value`||e===`checked`||e===`selectedIndex`)&&(r.nodeName===`INPUT`||r.nodeName===`TEXTAREA`||r.nodeName===`SELECT`)?(r[e]=n,e===`checked`?n?r.setAttribute(`checked`,``):r.removeAttribute(`checked`):e===`value`&&r.setAttribute(`value`,String(n))):r.setAttribute(e,String(n))},setAttributes:(e,n)=>{let r=Object.keys(e.attributes??{});for(let i=0;i<r.length;i++)t.setAttribute(r[i],e.attributes[r[i]],n)}};return t},A=Symbol(`defuss-morph.from-dom`),ae=new Set([`allowfullscreen`,`async`,`autofocus`,`autoplay`,`checked`,`controls`,`default`,`defer`,`disabled`,`formnovalidate`,`hidden`,`inert`,`ismap`,`itemscope`,`loop`,`multiple`,`muted`,`nomodule`,`novalidate`,`open`,`playsinline`,`readonly`,`required`,`reversed`,`selected`]),oe=e=>ae.has(e.name.toLowerCase())?!0:e.value;function j(e,t,n){return new n().parseFromString(e,t)}function M(e,t){let n=j(e,`image/svg+xml`,t);return n.documentElement?n.documentElement.nodeName.toLowerCase()===`svg`:!1}function N(e,t){return j(e,`text/html`,t).documentElement.querySelectorAll(`*`).length>2}var P=(e,t)=>e.indexOf(`<`)>-1&&e.indexOf(`>`)>-1&&(N(e,t)||M(e,t));function F(e,t,n){let r=n||j(e,I(e,t),t);return r.body?Array.from(r.body.childNodes):r.documentElement?[r.documentElement]:[]}function I(e,t){return M(e,t)?`image/svg+xml`:`text/html`}function L(e){if(e.nodeType===3)return e.textContent||``;if(e.nodeType===1){let t=e,n={};for(let e=0;e<t.attributes.length;e++){let r=t.attributes[e];n[r.name]=oe(r)}let r=[];for(let e=0;e<t.childNodes.length;e++){let n=L(t.childNodes[e]);r.push(n)}return{type:t.tagName.toLowerCase(),attributes:{...n,[A]:!0},children:r}}return``}function R(e,t){let n=new t().parseFromString(e,`text/html`),r=[];for(let e=0;e<n.body.childNodes.length;e++){let t=L(n.body.childNodes[e]);t!==``&&r.push(t)}return r}var z=(e,t)=>{if(e===t)return!0;if(e.nodeType!==t.nodeType)return!1;if(e.nodeType===1){let n=e,r=t;if(n.tagName!==r.tagName)return!1;let i=n.attributes,a=r.attributes;if(i.length!==a.length)return!1;for(let e=0;e<i.length;e++){let t=i[e],n=r.getAttribute(t.name);if(t.value!==n)return!1}}return e.nodeType!==3||e.textContent===t.textContent};function se(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`}function B(e){return!!(e&&typeof e==`object`&&`type`in e)}function ce(e,t=!1){if(e==null||se(e)||B(e)||t&&e&&typeof e==`object`&&`attributes`in e)return e}function le(e,t=!1){let n=[],r=e=>{if(Array.isArray(e)){e.forEach(r);return}let i=ce(e,t);if(i!==void 0){if(B(i)&&(i.type===`fragment`||i.type===`Fragment`)){(Array.isArray(i.children)?i.children:[]).forEach(r);return}i!=null&&typeof i!=`boolean`&&n.push(i)}};r(e);let i=[],a=null,o=()=>{a!==null&&a.length>0&&i.push(a),a=null};for(let e of n){if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`){a=(a??``)+String(e);continue}o(),i.push(e)}return o(),i}function V(e){if(!e||typeof e!=`object`)return null;let t=e.attributes?.key;if(typeof t==`string`||typeof t==`number`)return`k:${String(t)}`;let n=e.attributes?.id;return typeof n==`string`&&n.length>0?`id:${n}`:null}function ue(e){return e&&typeof e==`object`?`<${typeof e.type==`string`?e.type:`component`}>`:`plain text`}function de(e){if(e.nodeType!==1)return[];let t=e,n=[],r=t._defussKey;r&&n.push(`k:${r}`);let i=t.getAttribute(`key`);i&&n.push(`k:${i}`);let a=t.id;return a&&n.push(`id:${a}`),n}function fe(e,t){if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)return e.nodeType===3;if(t&&typeof t==`object`){if(e.nodeType!==1)return!1;let n=e.tagName.toLowerCase(),r=typeof t.type==`string`?t.type.toLowerCase():``;return!(!r||n!==r)}return!1}function H(e,t){let n=k(t.window.document);if(e==null)return;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return[t.window.document.createTextNode(String(e))];let r=n.createElementOrElements(e);return r?(Array.isArray(r)?r:[r]).filter(Boolean):void 0}function pe(e,t,n){let r=e.tagName.toLowerCase();return Object.hasOwn(n.attributes??{},t)?!1:r===`input`?t===`value`||t===`checked`:r===`textarea`||r===`select`?t===`value`:!1}function me(e,t,n,r=!1){let i=k(n.window.document),a=r?[]:Array.from(e.attributes),o=t.attributes??{};for(let n of a){let{name:r}=n;if(r!==`key`&&!r.startsWith(`on`)&&(r!==`class`||!Object.hasOwn(o,`class`)&&!Object.hasOwn(o,`className`))&&!Object.hasOwn(o,r)){if(pe(e,r,t))continue;e.removeAttribute(r)}}if(!(r||o[A])){let t=y(e),n=new Set;for(let e of Object.keys(o)){let t=d(e);if(t){let e=t.capture?`capture`:`bubble`;n.add(`${t.eventType}:${e}`)}}for(let r of t)if(!n.has(r)){let[t,n]=r.split(`:`);b(e,t,n)}}i.setAttributes(t,e),O(e);let s=t.attributes?.dangerouslySetInnerHTML;if(s&&typeof s==`object`&&typeof s.__html==`string`){e.innerHTML=s.__html;return}if(e.tagName.toLowerCase()===`textarea`){let t=Object.hasOwn(o,`value`);if(e.ownerDocument?.activeElement===e&&!t)return}r&&(t.children===void 0||t.children.length===0&&o[A])||ye(e,t.children??[],n)}function he(e,t,n,r=!1){if(typeof t==`string`||typeof t==`number`||typeof t==`boolean`){let r=String(t);if(e.nodeType===3)return e.nodeValue!==r&&(e.nodeValue=r),e;let i=n.window.document.createTextNode(r);return e.parentNode?.replaceChild(i,e),i}if(t&&typeof t==`object`){let i=typeof t.type==`string`?t.type:null;if(!i)return e;if(e.nodeType!==1){let r=H(t,n),i=Array.isArray(r)?r[0]:r;return i?(e.parentNode?.replaceChild(i,e),O(i),i):null}let a=e;if(a.tagName.toLowerCase()!==i.toLowerCase()){let e=H(t,n),r=Array.isArray(e)?e[0]:e;return r?(a.parentNode?.replaceChild(r,a),O(r),r):null}return me(a,t,n,r),a}return e.parentNode?.removeChild(e),null}var U=new WeakSet,W=new Map,G=(e,t)=>t||{window:e?.ownerDocument?.defaultView??globalThis};function ge(e){let t=e.parentElement;for(;t;){if(U.has(t))return!0;t=t.parentElement}return!1}function _e(){if(W.size===0)return;let e=[...W.entries()];W.clear();for(let[t,{vdom:n,globals:r,mode:i}]of e)t.isConnected&&K(t,n,r,i)}function K(e,t,n,r=`replace`){let i=G(e,n);if(U.has(e)||ge(e)){W.set(e,{vdom:t,globals:i,mode:r});return}U.add(e);try{ye(e,t,i,r)}finally{U.delete(e)}_e()}function ve(e,t,n){let r=new Map;for(let t of Array.from(e.childNodes))for(let e of de(t))r.has(e)||r.set(e,t);for(let i of t){if(typeof i==`string`&&i.trim()===``)continue;let t=V(i);if(!t)throw Error(`morph diff: patch items must be elements with a key or id attribute (got ${ue(i)})`);let a=r.get(t);if(a){he(a,i&&typeof i==`object`&&!i.type?{...i,type:a.tagName.toLowerCase()}:i,n,!0);continue}if(!i?.type)throw Error(`morph diff: new (unmatched) patch items must declare a tag (type), got key/id "${t}"`);let o=H(i,n)??[];for(let t of o)e.appendChild(t),O(t)}}function ye(e,t,n,r=`replace`){let i=e,a=i.tagName.includes(`-`),o=i.shadowRoot&&!a?i.shadowRoot:e,s=le(t,r===`diff`);if(r===`diff`){ve(o,s,n);return}let c=Array.from(o.childNodes),l=new Map,u=new WeakMap,d=[];for(let e of c){let t=de(e);if(t.length>0){u.set(e,t);let n=!1;for(let r of t)l.has(r)||(l.set(r,e),n=!0);n||d.push(e)}else d.push(e)}let ee=e=>{let t=u.get(e)??[];for(let e of t)l.delete(e)},f=e=>{for(let t=0;t<d.length;t++){let n=d[t];if(fe(n,e))return d.splice(t,1),n}},p=0;for(let e of s){let t=V(e),r;t?(r=l.get(t),r&&ee(r)):r=f(e);let i=o.childNodes[p]??null;if(r){r!==i&&o.insertBefore(r,i),he(r,e,n),p++;continue}let a=H(e,n);if(!a||Array.isArray(a)&&a.length===0)continue;let s=Array.isArray(a)?a:[a];for(let e of s)o.insertBefore(e,i),O(e),p++}let m=new Set;for(let e of d)m.add(e);for(let e of l.values())m.add(e);for(let e of m)e.parentNode===o&&(e.nodeType===1&&_(e),o.removeChild(e))}function be(e,t,n){let r=G(e,n);for(;e.firstChild;)e.removeChild(e.firstChild);let i=k(r.window.document).createElementOrElements(t);if(Array.isArray(i))for(let t of i)t&&(e.appendChild(t),O(t));else i&&(e.appendChild(i),O(i))}var xe=e=>{if(e&&!e.getElementById(`defuss-shake`)){let t=e.createElement(`style`);t.id=`defuss-shake`,t.textContent=`@keyframes shake{0%,100%{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}`,e.head.appendChild(t)}},q=(e,t,n=`ease-in-out`)=>{let r=`transform ${t}ms ${n}, opacity ${t}ms ${n}`;return{fade:{enter:{opacity:`0`,transition:r,transform:`translate3d(0,0,0)`},enterActive:{opacity:`1`},exit:{opacity:`1`,transition:r,transform:`translate3d(0,0,0)`},exitActive:{opacity:`0`}},"slide-left":{enter:{transform:`translate3d(100%,0,0)`,opacity:`0.5`,transition:r},enterActive:{transform:`translate3d(0,0,0)`,opacity:`1`},exit:{transform:`translate3d(0,0,0)`,opacity:`1`,transition:r},exitActive:{transform:`translate3d(-100%,0,0)`,opacity:`0.5`}},"slide-right":{enter:{transform:`translate3d(-100%,0,0)`,opacity:`0.5`,transition:r},enterActive:{transform:`translate3d(0,0,0)`,opacity:`1`},exit:{transform:`translate3d(0,0,0)`,opacity:`1`,transition:r},exitActive:{transform:`translate3d(100%,0,0)`,opacity:`0.5`}},shake:(xe(typeof document<`u`?document:void 0),{enter:{transform:`translate3d(0,0,0)`,opacity:`1`,transition:`none`},enterActive:{transform:`translate3d(0,0,0)`,opacity:`1`,animation:`shake ${t}ms cubic-bezier(0.36,0.07,0.19,0.97)`},exit:{transform:`translate3d(0,0,0)`,opacity:`1`,transition:`none`},exitActive:{transform:`translate3d(0,0,0)`,opacity:`1`,animation:`shake ${t}ms cubic-bezier(0.36,0.07,0.19,0.97)`}})}[e]||{enter:{},enterActive:{},exit:{},exitActive:{}}},J=(e,t)=>Object.entries(t).forEach(([t,n])=>e.style.setProperty(t,String(n))),Y={type:`fade`,duration:300,easing:`ease-in-out`,delay:0,target:`parent`},X=e=>new Promise(t=>setTimeout(t,e)),Se=async(e,t,n,r)=>{let i=e.style.cssText,a=e.cloneNode(!0),o=e.ownerDocument;try{let i=e.getBoundingClientRect();a.style.cssText=`position:absolute;top:${i.top}px;left:${i.left}px;width:${i.width}px;height:${i.height}px;opacity:1;transition:opacity ${n}ms ${r};z-index:1000;`,e.style.opacity=`0`,e.style.transition=`opacity ${n}ms ${r}`,o.body.appendChild(a),await t(),e.offsetHeight,a.style.opacity=`0`,e.style.opacity=`1`,await X(n),o.body.removeChild(a)}catch(e){throw a.parentElement&&o.body.removeChild(a),e}finally{e.style.cssText=i}},Z=async(e,t,n={})=>{let{type:r=`fade`,duration:i=300,easing:a=`ease-in-out`,delay:o=0}={...Y,...n};if(r===`none`){await t();return}if(o>0&&await X(o),r===`fade`){await Se(e,t,i,a);return}let s=n.styles||q(r,i,a),c=e.style.transition,l=e.style.animation;try{r===`shake`&&(e.style.animation=`none`,e.offsetHeight),J(e,s.exit),e.offsetHeight,J(e,s.exitActive),await X(i),await t(),J(e,s.enter),e.offsetHeight,J(e,s.enterActive),await X(i),e.style.transition=c,e.style.animation=l}catch(t){throw e.style.transition=c,e.style.animation=l,t}},Q=new WeakMap,$=(e,t,n={})=>{let r=G(e),i=r.window,a=n.diff?`diff`:`replace`,o=t=>K(e,typeof t==`string`?R(t,i.DOMParser):t,r,a),s=n.transition;if(s&&s.type!==`none`){let n={...Y,...s},r=n.target===`self`?e:e.parentElement;if(!r){o(t);return}let i={content:t};return Q.set(e,i),Z(r,async()=>{Q.get(e)===i&&o(i.content)},n).finally(()=>{Q.get(e)===i&&Q.delete(e)})}let c=Q.get(e);c&&(c.content=t),o(t)};if(typeof globalThis<`u`){let e=globalThis;(typeof e.df$!=`object`||e.df$===null)&&(e.df$={}),Object.assign(e.df$,i)}export{K as updateDomWithVdom,G as resolveGlobals,be as replaceDomWithVdom,F as renderMarkup,b as removeDelegatedEventByKey,ie as removeDelegatedEvent,h as registerDelegatedEvent,a as queueCallback,Z as performTransition,d as parseEventPropName,j as parseDOM,D as observeUnmount,E as nsMap,$ as morph,M as isSVG,P as isMarkup,N as isHTML,R as htmlStringToVNodes,O as handleLifecycleEventsForOnMount,q as getTransitionStyles,k as getRenderer,v as getRegisteredEventTypes,y as getRegisteredEventKeys,I as getMimeType,L as domNodeToVNode,_ as clearDelegatedEventsDeep,g as clearDelegatedEvents,z as areDomNodesEqual,J as applyStyles,C as XMLNS_ATTRIBUTE_NAME,S as XLINK_ATTRIBUTE_NAME,w as REF_ATTRIBUTE_NAME,A as FROM_DOM_MARKER,Y as DEFAULT_TRANSITION_CONFIG,T as DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE,x as CLASS_ATTRIBUTE_NAME,o as CAPTURE_ONLY_EVENTS};
|
|
2
|
+
//# sourceMappingURL=all.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"mappings":"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","names":["__defProp","__returnValue","v","__exportSetter","name","newValue","__export","all","target","exports_src","updateDomWithVdom","resolveGlobals","replaceDomWithVdom","renderMarkup","removeDelegatedEventByKey","removeDelegatedEvent","registerDelegatedEvent","queueCallback","performTransition","parseEventPropName","parseDOM","observeUnmount","nsMap","morph2","isSVG","isMarkup","isHTML","htmlStringToVNodes","handleLifecycleEventsForOnMount","getTransitionStyles","getRenderer","getRegisteredEventTypes","getRegisteredEventKeys","getMimeType","domNodeToVNode","clearDelegatedEventsDeep","clearDelegatedEvents","areDomNodesEqual","applyStyles","XMLNS_ATTRIBUTE_NAME","XLINK_ATTRIBUTE_NAME","REF_ATTRIBUTE_NAME","FROM_DOM_MARKER","DEFAULT_TRANSITION_CONFIG","DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE","CLASS_ATTRIBUTE_NAME","CAPTURE_ONLY_EVENTS","args","cb","elementHandlerMap","bubbleDispatched","captureDispatched","activeDispatches","propName","raw","lower","isCapture","eventType","getOrCreateElementHandlers","existing","el","created","getEventPath","composedPath","event","path","node","maybeNode","doc","win","createPhaseHandler","dispatched","phase","t","ordered","handlersByEvent","entry","targets","dispatchKey","activeSet","handler","installedRootListeners","ensureRootListener","installed","root","captureKey","bubbleKey","getEventRoot","element","capture","options","byEvent","isEntryEmpty","walker","keys","domNode","onUnmount","parentNode","observer","mutation","mutationsList","removedNode","newParent","newEl","renderer","domElement","parentElement","type","virtualNode","parentDomElement","document2","vNode","text","children","virtualChildren","virtualChild","value","ref","parsed","existingUnmount","val","nsEndIndex","ns","attrName","namespace","styleObj","prop","attrNames","HTML_BOOLEAN_ATTRIBUTES","domAttributeToVNodeValue","attr","Parser","input","markup","attributes","i","childVNode","html","vNodes","vnode","oldNode","newNode","oldElement","newElement","oldAttrs","newAttrs","oldAttr","newAttrValue","isTextLike","isVNode","toValidChild","child","lenient","normalizeChildren","pushChild","valid","fused","buffer","flush","getVNodeMatchKey","key","id","describePatchItem","getDomMatchKeys","internalKey","attrKey","areNodeAndChildMatching","oldTag","newTag","createDomFromChild","globals","shouldPreserveFormStateAttribute","tag","patchElementInPlace","existingAttrs","mergeAttributes","nextAttrs","registeredKeys","nextEventKeys","d","isControlled","morphDomDirect","morphNode","next","newType","first","renderingNodes","pendingMorphs","isAncestorRendering","current","flushPendingMorphs","snapshot","vdom","mode","resolvedGlobals","newVDOM","morphDiff","keyedPool","targetRoot","k","item","patchItems","match","isCustomElement","nextChildren","nodeKeys","unkeyedPool","addedToKeyedPool","consumeKeyedNode","takeUnkeyedMatch","candidate","domIndex","anchor","nodes","remaining","newDom","injectShakeKeyframes","style","duration","easing","styles","wait","r","ms","performCrossfade","originalStyle","rect","updateCallback","error","config","delay","originalTransition","originalAnimation","inflightTransitions","apply","content","transition","transitionTarget","newContent","slot2","slot","g"],"sources":["all.js"],"version":3,"sourcesContent":["var __defProp = Object.defineProperty;\nvar __returnValue = (v) => v;\nfunction __exportSetter(name, newValue) {\n this[name] = __returnValue.bind(null, newValue);\n}\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, {\n get: all[name],\n enumerable: true,\n configurable: true,\n set: __exportSetter.bind(all, name)\n });\n};\n\n// src/index.ts\nvar exports_src = {};\n__export(exports_src, {\n updateDomWithVdom: () => updateDomWithVdom,\n resolveGlobals: () => resolveGlobals,\n replaceDomWithVdom: () => replaceDomWithVdom,\n renderMarkup: () => renderMarkup,\n removeDelegatedEventByKey: () => removeDelegatedEventByKey,\n removeDelegatedEvent: () => removeDelegatedEvent,\n registerDelegatedEvent: () => registerDelegatedEvent,\n queueCallback: () => queueCallback,\n performTransition: () => performTransition,\n parseEventPropName: () => parseEventPropName,\n parseDOM: () => parseDOM,\n observeUnmount: () => observeUnmount,\n nsMap: () => nsMap,\n morph: () => morph2,\n isSVG: () => isSVG,\n isMarkup: () => isMarkup,\n isHTML: () => isHTML,\n htmlStringToVNodes: () => htmlStringToVNodes,\n handleLifecycleEventsForOnMount: () => handleLifecycleEventsForOnMount,\n getTransitionStyles: () => getTransitionStyles,\n getRenderer: () => getRenderer,\n getRegisteredEventTypes: () => getRegisteredEventTypes,\n getRegisteredEventKeys: () => getRegisteredEventKeys,\n getMimeType: () => getMimeType,\n domNodeToVNode: () => domNodeToVNode,\n clearDelegatedEventsDeep: () => clearDelegatedEventsDeep,\n clearDelegatedEvents: () => clearDelegatedEvents,\n areDomNodesEqual: () => areDomNodesEqual,\n applyStyles: () => applyStyles,\n XMLNS_ATTRIBUTE_NAME: () => XMLNS_ATTRIBUTE_NAME,\n XLINK_ATTRIBUTE_NAME: () => XLINK_ATTRIBUTE_NAME,\n REF_ATTRIBUTE_NAME: () => REF_ATTRIBUTE_NAME,\n FROM_DOM_MARKER: () => FROM_DOM_MARKER,\n DEFAULT_TRANSITION_CONFIG: () => DEFAULT_TRANSITION_CONFIG,\n DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE: () => DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE,\n CLASS_ATTRIBUTE_NAME: () => CLASS_ATTRIBUTE_NAME,\n CAPTURE_ONLY_EVENTS: () => CAPTURE_ONLY_EVENTS\n});\n\n// src/queue.ts\nvar queueCallback = (cb) => (...args) => queueMicrotask(() => cb(...args));\n\n// src/delegated-events.ts\nvar CAPTURE_ONLY_EVENTS = new Set([\n \"focus\",\n \"blur\",\n \"scroll\",\n \"mouseenter\",\n \"mouseleave\"\n]);\nvar elementHandlerMap = new WeakMap;\nvar bubbleDispatched = new WeakMap;\nvar captureDispatched = new WeakMap;\nvar activeDispatches = new WeakMap;\nvar parseEventPropName = (propName) => {\n if (!propName.startsWith(\"on\"))\n return null;\n const raw = propName.slice(2);\n if (!raw)\n return null;\n const lower = raw.toLowerCase();\n const isCapture = lower.endsWith(\"capture\");\n const eventType = isCapture ? lower.slice(0, -\"capture\".length) : lower;\n if (!eventType)\n return null;\n return { eventType, capture: isCapture };\n};\nvar getOrCreateElementHandlers = (el) => {\n const existing = elementHandlerMap.get(el);\n if (existing)\n return existing;\n const created = new Map;\n elementHandlerMap.set(el, created);\n return created;\n};\nvar getEventPath = (event) => {\n const composedPath = event.composedPath?.();\n if (composedPath && composedPath.length > 0)\n return composedPath;\n const path = [];\n let node = event.target;\n while (node) {\n path.push(node);\n const maybeNode = node;\n if (typeof maybeNode === \"object\" && maybeNode && \"parentNode\" in maybeNode) {\n node = maybeNode.parentNode;\n continue;\n }\n break;\n }\n const doc = event.target?.ownerDocument;\n if (doc && path[path.length - 1] !== doc)\n path.push(doc);\n const win = doc?.defaultView;\n if (win && path[path.length - 1] !== win)\n path.push(win);\n return path;\n};\nvar createPhaseHandler = (eventType, phase) => {\n const dispatched = phase === \"capture\" ? captureDispatched : bubbleDispatched;\n return (event) => {\n const path = getEventPath(event).filter((t) => typeof t === \"object\" && t !== null && t.nodeType === 1);\n const ordered = phase === \"capture\" ? [...path].reverse() : path;\n for (const target of ordered) {\n const handlersByEvent = elementHandlerMap.get(target);\n if (!handlersByEvent)\n continue;\n const entry = handlersByEvent.get(eventType);\n if (!entry)\n continue;\n let targets = dispatched.get(event);\n if (targets?.has(target))\n continue;\n if (!targets) {\n targets = new WeakSet;\n dispatched.set(event, targets);\n }\n targets.add(target);\n const dispatchKey = `${eventType}:${phase}`;\n let activeSet = activeDispatches.get(target);\n if (activeSet?.has(dispatchKey))\n continue;\n if (!activeSet) {\n activeSet = new Set;\n activeDispatches.set(target, activeSet);\n }\n activeSet.add(dispatchKey);\n try {\n if (phase === \"capture\") {\n if (entry.capture) {\n entry.capture.call(target, event);\n if (event.cancelBubble)\n return;\n }\n if (entry.captureSet) {\n for (const handler of entry.captureSet) {\n handler.call(target, event);\n if (event.cancelBubble)\n return;\n }\n }\n } else {\n if (entry.bubble) {\n entry.bubble.call(target, event);\n if (event.cancelBubble)\n return;\n }\n if (entry.bubbleSet) {\n for (const handler of entry.bubbleSet) {\n handler.call(target, event);\n if (event.cancelBubble)\n return;\n }\n }\n }\n } finally {\n activeSet.delete(dispatchKey);\n }\n }\n };\n};\nvar installedRootListeners = new WeakMap;\nvar ensureRootListener = (root, eventType) => {\n const installed = installedRootListeners.get(root) ?? new Set;\n installedRootListeners.set(root, installed);\n const captureKey = `${eventType}:capture`;\n if (!installed.has(captureKey)) {\n root.addEventListener(eventType, createPhaseHandler(eventType, \"capture\"), true);\n installed.add(captureKey);\n }\n const bubbleKey = `${eventType}:bubble`;\n if (!installed.has(bubbleKey)) {\n root.addEventListener(eventType, createPhaseHandler(eventType, \"bubble\"), false);\n installed.add(bubbleKey);\n }\n};\nvar getEventRoot = (element) => {\n const root = element.getRootNode();\n if (root && root.nodeType === 9) {\n return root;\n }\n if (root && root.nodeType === 11 && \"host\" in root) {\n return root;\n }\n return null;\n};\nvar registerDelegatedEvent = (element, eventType, handler, options = {}) => {\n const root = getEventRoot(element);\n const capture = options.capture || CAPTURE_ONLY_EVENTS.has(eventType);\n if (root) {\n ensureRootListener(root, eventType);\n } else if (element.ownerDocument) {\n ensureRootListener(element.ownerDocument, eventType);\n } else {\n element.addEventListener(eventType, handler, capture);\n }\n const byEvent = getOrCreateElementHandlers(element);\n const entry = byEvent.get(eventType) ?? {};\n byEvent.set(eventType, entry);\n if (options.multi) {\n if (capture) {\n if (!entry.captureSet)\n entry.captureSet = new Set;\n entry.captureSet.add(handler);\n } else {\n if (!entry.bubbleSet)\n entry.bubbleSet = new Set;\n entry.bubbleSet.add(handler);\n }\n } else {\n if (capture) {\n entry.capture = handler;\n } else {\n entry.bubble = handler;\n }\n }\n};\nvar isEntryEmpty = (entry) => !entry.capture && !entry.bubble && (!entry.captureSet || entry.captureSet.size === 0) && (!entry.bubbleSet || entry.bubbleSet.size === 0);\nvar removeDelegatedEvent = (target, eventType, handler, _options = {}) => {\n const byEvent = elementHandlerMap.get(target);\n if (!byEvent)\n return;\n const entry = byEvent.get(eventType);\n if (!entry)\n return;\n if (handler) {\n if (entry.captureSet) {\n entry.captureSet.delete(handler);\n }\n if (entry.bubbleSet) {\n entry.bubbleSet.delete(handler);\n }\n if (entry.capture === handler) {\n entry.capture = undefined;\n }\n if (entry.bubble === handler) {\n entry.bubble = undefined;\n }\n target.removeEventListener(eventType, handler, true);\n target.removeEventListener(eventType, handler, false);\n } else {\n entry.capture = undefined;\n entry.bubble = undefined;\n entry.captureSet = undefined;\n entry.bubbleSet = undefined;\n }\n if (isEntryEmpty(entry)) {\n byEvent.delete(eventType);\n }\n};\nvar clearDelegatedEvents = (target) => {\n const byEvent = elementHandlerMap.get(target);\n if (!byEvent)\n return;\n byEvent.clear();\n};\nvar clearDelegatedEventsDeep = (root) => {\n clearDelegatedEvents(root);\n const doc = root.ownerDocument;\n if (!doc)\n return;\n const walker = doc.createTreeWalker(root, 1);\n let node = walker.nextNode();\n while (node) {\n clearDelegatedEvents(node);\n node = walker.nextNode();\n }\n};\nvar getRegisteredEventTypes = (element) => {\n const byEvent = elementHandlerMap.get(element);\n if (!byEvent)\n return new Set;\n return new Set(byEvent.keys());\n};\nvar getRegisteredEventKeys = (element) => {\n const byEvent = elementHandlerMap.get(element);\n if (!byEvent)\n return new Set;\n const keys = new Set;\n for (const [eventType, entry] of byEvent) {\n if (entry.bubble || entry.bubbleSet?.size)\n keys.add(`${eventType}:bubble`);\n if (entry.capture || entry.captureSet?.size)\n keys.add(`${eventType}:capture`);\n }\n return keys;\n};\nvar removeDelegatedEventByKey = (element, eventType, phase) => {\n const byEvent = elementHandlerMap.get(element);\n if (!byEvent)\n return;\n const entry = byEvent.get(eventType);\n if (!entry)\n return;\n if (phase === \"capture\") {\n entry.capture = undefined;\n entry.captureSet = undefined;\n } else {\n entry.bubble = undefined;\n entry.bubbleSet = undefined;\n }\n if (isEntryEmpty(entry))\n byEvent.delete(eventType);\n};\n\n// src/renderer.ts\nvar CLASS_ATTRIBUTE_NAME = \"class\";\nvar XLINK_ATTRIBUTE_NAME = \"xlink\";\nvar XMLNS_ATTRIBUTE_NAME = \"xmlns\";\nvar REF_ATTRIBUTE_NAME = \"ref\";\nvar DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE = \"dangerouslySetInnerHTML\";\nvar nsMap = {\n [XMLNS_ATTRIBUTE_NAME]: \"http://www.w3.org/2000/xmlns/\",\n [XLINK_ATTRIBUTE_NAME]: \"http://www.w3.org/1999/xlink\",\n svg: \"http://www.w3.org/2000/svg\"\n};\nvar observeUnmount = (domNode, onUnmount) => {\n if (!domNode || typeof onUnmount !== \"function\") {\n throw new Error(\"Invalid arguments. Ensure domNode and onUnmount are valid.\");\n }\n if (typeof MutationObserver === \"undefined\") {\n return;\n }\n let parentNode = domNode.parentNode;\n if (!parentNode) {\n throw new Error(\"The provided domNode does not have a parentNode.\");\n }\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.removedNodes.length > 0) {\n for (const removedNode of mutation.removedNodes) {\n if (removedNode === domNode) {\n queueMicrotask(() => {\n if (!domNode.isConnected) {\n onUnmount();\n observer.disconnect();\n return;\n }\n const newParent = domNode.parentNode;\n if (newParent && newParent !== parentNode) {\n parentNode = newParent;\n observer.disconnect();\n observer.observe(parentNode, { childList: true });\n }\n });\n return;\n }\n }\n }\n }\n });\n observer.observe(parentNode, { childList: true });\n};\nvar handleLifecycleEventsForOnMount = (newEl) => {\n if (typeof newEl?.$onMount === \"function\") {\n newEl.$onMount(newEl);\n newEl.$onMount = null;\n }\n if (typeof newEl?.$onUnmount === \"function\") {\n observeUnmount(newEl, newEl.$onUnmount);\n }\n};\nvar getRenderer = (document2) => {\n const renderer = {\n hasElNamespace: (domElement) => domElement.namespaceURI === nsMap.svg,\n hasSvgNamespace: (parentElement, type) => renderer.hasElNamespace(parentElement) && type !== \"STYLE\" && type !== \"SCRIPT\",\n createElementOrElements: (virtualNode, parentDomElement) => {\n if (Array.isArray(virtualNode)) {\n return renderer.createChildElements(virtualNode, parentDomElement);\n }\n if (typeof virtualNode !== \"undefined\") {\n return renderer.createElement(virtualNode, parentDomElement);\n }\n return renderer.createTextNode(\"\", parentDomElement);\n },\n createElement: (virtualNode, parentDomElement) => {\n let newEl;\n try {\n if (typeof virtualNode === \"function\" && virtualNode.constructor.name === \"AsyncFunction\") {\n newEl = document2.createElement(\"div\");\n } else if (typeof virtualNode === \"object\" && virtualNode !== null && \"type\" in virtualNode) {\n const vNode = virtualNode;\n if (typeof vNode.type === \"function\") {\n newEl = document2.createElement(\"div\");\n newEl.innerText = `FATAL ERROR: ${vNode.type._error}`;\n } else if (typeof vNode.type === \"string\" && vNode.type.toUpperCase() === \"SVG\" || parentDomElement && renderer.hasSvgNamespace(parentDomElement, typeof vNode.type === \"string\" ? vNode.type.toUpperCase() : \"\")) {\n newEl = document2.createElementNS(nsMap.svg, vNode.type);\n } else {\n newEl = document2.createElement(vNode.type);\n }\n if (vNode.attributes) {\n renderer.setAttributes(vNode, newEl);\n if (vNode.attributes.dangerouslySetInnerHTML) {\n newEl.innerHTML = vNode.attributes.dangerouslySetInnerHTML.__html;\n }\n }\n if (vNode.children && !vNode.attributes?.dangerouslySetInnerHTML) {\n renderer.createChildElements(vNode.children, newEl);\n }\n } else {\n if (typeof virtualNode === \"string\" || typeof virtualNode === \"number\") {\n newEl = document2.createElement(String(virtualNode));\n }\n }\n if (newEl && parentDomElement) {\n parentDomElement.appendChild(newEl);\n handleLifecycleEventsForOnMount(newEl);\n }\n } catch (e) {\n console.error(\"Fatal error! Error happend while rendering the VDOM!\", e, virtualNode);\n throw e;\n }\n return newEl;\n },\n createTextNode: (text, domElement) => {\n const node = document2.createTextNode(text.toString());\n if (domElement) {\n domElement.appendChild(node);\n }\n return node;\n },\n createChildElements: (virtualChildren, domElement) => {\n const children = [];\n for (let i = 0;i < virtualChildren.length; i++) {\n const virtualChild = virtualChildren[i];\n if (typeof virtualChild === \"boolean\") {\n continue;\n }\n if (virtualChild === null || typeof virtualChild !== \"object\" && typeof virtualChild !== \"function\") {\n children.push(renderer.createTextNode((typeof virtualChild === \"undefined\" || virtualChild === null ? \"\" : virtualChild).toString(), domElement));\n } else {\n children.push(renderer.createElement(virtualChild, domElement));\n }\n }\n return children;\n },\n setAttribute: (name, value, domElement) => {\n if (typeof value === \"undefined\")\n return;\n if (name === DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE)\n return;\n if (name === \"key\") {\n domElement._defussKey = String(value);\n return;\n }\n if (name === REF_ATTRIBUTE_NAME && typeof value !== \"function\") {\n const ref = value;\n ref.current = domElement;\n domElement._defussRef = value;\n domElement.$onUnmount = queueCallback(() => {});\n if (domElement.parentNode) {\n observeUnmount(domElement, domElement.$onUnmount);\n } else {\n queueMicrotask(() => {\n if (domElement.parentNode) {\n observeUnmount(domElement, domElement.$onUnmount);\n }\n });\n }\n return;\n }\n const parsed = parseEventPropName(name);\n if (parsed && typeof value === \"function\") {\n const { eventType, capture } = parsed;\n if (eventType === \"mount\") {\n domElement.$onMount = queueCallback(value);\n return;\n }\n if (eventType === \"unmount\") {\n if (domElement.$onUnmount) {\n const existingUnmount = domElement.$onUnmount;\n domElement.$onUnmount = () => {\n existingUnmount();\n value();\n };\n } else {\n domElement.$onUnmount = queueCallback(value);\n }\n return;\n }\n registerDelegatedEvent(domElement, eventType, value, { capture });\n return;\n }\n if (name === \"className\") {\n name = CLASS_ATTRIBUTE_NAME;\n }\n if (name === CLASS_ATTRIBUTE_NAME && Array.isArray(value)) {\n value = value.filter((val) => !!val).join(\" \");\n }\n const nsEndIndex = name.match(/[A-Z]/)?.index;\n if (renderer.hasElNamespace(domElement) && nsEndIndex) {\n const ns = name.substring(0, nsEndIndex).toLowerCase();\n const attrName = name.substring(nsEndIndex, name.length).toLowerCase();\n const namespace = nsMap[ns] || null;\n domElement.setAttributeNS(namespace, ns === XLINK_ATTRIBUTE_NAME || ns === XMLNS_ATTRIBUTE_NAME ? `${ns}:${attrName}` : name, String(value));\n } else if (name === \"style\" && typeof value !== \"string\") {\n const styleObj = value;\n for (const prop of Object.keys(styleObj)) {\n domElement.style[prop] = String(styleObj[prop]);\n }\n } else if (typeof value === \"boolean\") {\n domElement[name] = value;\n if (value) {\n domElement.setAttribute(name, \"\");\n } else {\n domElement.removeAttribute(name);\n }\n } else if ((name === \"value\" || name === \"checked\" || name === \"selectedIndex\") && (domElement.nodeName === \"INPUT\" || domElement.nodeName === \"TEXTAREA\" || domElement.nodeName === \"SELECT\")) {\n domElement[name] = value;\n if (name === \"checked\") {\n if (value) {\n domElement.setAttribute(\"checked\", \"\");\n } else {\n domElement.removeAttribute(\"checked\");\n }\n } else if (name === \"value\") {\n domElement.setAttribute(\"value\", String(value));\n }\n } else {\n domElement.setAttribute(name, String(value));\n }\n },\n setAttributes: (virtualNode, domElement) => {\n const attrNames = Object.keys(virtualNode.attributes ?? {});\n for (let i = 0;i < attrNames.length; i++) {\n renderer.setAttribute(attrNames[i], virtualNode.attributes[attrNames[i]], domElement);\n }\n }\n };\n return renderer;\n};\n\n// src/html.ts\nvar FROM_DOM_MARKER = Symbol(\"defuss-morph.from-dom\");\nvar HTML_BOOLEAN_ATTRIBUTES = new Set([\n \"allowfullscreen\",\n \"async\",\n \"autofocus\",\n \"autoplay\",\n \"checked\",\n \"controls\",\n \"default\",\n \"defer\",\n \"disabled\",\n \"formnovalidate\",\n \"hidden\",\n \"inert\",\n \"ismap\",\n \"itemscope\",\n \"loop\",\n \"multiple\",\n \"muted\",\n \"nomodule\",\n \"novalidate\",\n \"open\",\n \"playsinline\",\n \"readonly\",\n \"required\",\n \"reversed\",\n \"selected\"\n]);\nvar domAttributeToVNodeValue = (attr) => HTML_BOOLEAN_ATTRIBUTES.has(attr.name.toLowerCase()) ? true : attr.value;\nfunction parseDOM(input, type, Parser) {\n return new Parser().parseFromString(input, type);\n}\nfunction isSVG(input, Parser) {\n const doc = parseDOM(input, \"image/svg+xml\", Parser);\n if (!doc.documentElement)\n return false;\n return doc.documentElement.nodeName.toLowerCase() === \"svg\";\n}\nfunction isHTML(input, Parser) {\n const doc = parseDOM(input, \"text/html\", Parser);\n return doc.documentElement.querySelectorAll(\"*\").length > 2;\n}\nvar isMarkup = (input, Parser) => input.indexOf(\"<\") > -1 && input.indexOf(\">\") > -1 && (isHTML(input, Parser) || isSVG(input, Parser));\nfunction renderMarkup(markup, Parser, doc) {\n const parsed = doc ? doc : parseDOM(markup, getMimeType(markup, Parser), Parser);\n if (parsed.body)\n return Array.from(parsed.body.childNodes);\n return parsed.documentElement ? [parsed.documentElement] : [];\n}\nfunction getMimeType(input, Parser) {\n if (isSVG(input, Parser)) {\n return \"image/svg+xml\";\n }\n return \"text/html\";\n}\nfunction domNodeToVNode(node) {\n if (node.nodeType === 3) {\n return node.textContent || \"\";\n }\n if (node.nodeType === 1) {\n const element = node;\n const attributes = {};\n for (let i = 0;i < element.attributes.length; i++) {\n const attr = element.attributes[i];\n attributes[attr.name] = domAttributeToVNodeValue(attr);\n }\n const children = [];\n for (let i = 0;i < element.childNodes.length; i++) {\n const childVNode = domNodeToVNode(element.childNodes[i]);\n children.push(childVNode);\n }\n return {\n type: element.tagName.toLowerCase(),\n attributes: { ...attributes, [FROM_DOM_MARKER]: true },\n children\n };\n }\n return \"\";\n}\nfunction htmlStringToVNodes(html, Parser) {\n const parser = new Parser;\n const doc = parser.parseFromString(html, \"text/html\");\n const vNodes = [];\n for (let i = 0;i < doc.body.childNodes.length; i++) {\n const vnode = domNodeToVNode(doc.body.childNodes[i]);\n if (vnode !== \"\") {\n vNodes.push(vnode);\n }\n }\n return vNodes;\n}\n\n// src/morph.ts\nvar areDomNodesEqual = (oldNode, newNode) => {\n if (oldNode === newNode)\n return true;\n if (oldNode.nodeType !== newNode.nodeType)\n return false;\n if (oldNode.nodeType === 1) {\n const oldElement = oldNode;\n const newElement = newNode;\n if (oldElement.tagName !== newElement.tagName)\n return false;\n const oldAttrs = oldElement.attributes;\n const newAttrs = newElement.attributes;\n if (oldAttrs.length !== newAttrs.length)\n return false;\n for (let i = 0;i < oldAttrs.length; i++) {\n const oldAttr = oldAttrs[i];\n const newAttrValue = newElement.getAttribute(oldAttr.name);\n if (oldAttr.value !== newAttrValue)\n return false;\n }\n }\n if (oldNode.nodeType === 3) {\n if (oldNode.textContent !== newNode.textContent)\n return false;\n }\n return true;\n};\nfunction isTextLike(value) {\n return typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\";\n}\nfunction isVNode(value) {\n return Boolean(value && typeof value === \"object\" && \"type\" in value);\n}\nfunction toValidChild(child, lenient = false) {\n if (child == null)\n return child;\n if (isTextLike(child))\n return child;\n if (isVNode(child))\n return child;\n if (lenient && child && typeof child === \"object\" && \"attributes\" in child)\n return child;\n return;\n}\nfunction normalizeChildren(input, lenient = false) {\n const raw = [];\n const pushChild = (child) => {\n if (Array.isArray(child)) {\n child.forEach(pushChild);\n return;\n }\n const valid = toValidChild(child, lenient);\n if (typeof valid === \"undefined\")\n return;\n if (isVNode(valid) && (valid.type === \"fragment\" || valid.type === \"Fragment\")) {\n const nested = Array.isArray(valid.children) ? valid.children : [];\n nested.forEach(pushChild);\n return;\n }\n if (valid === null || typeof valid === \"undefined\" || typeof valid === \"boolean\")\n return;\n raw.push(valid);\n };\n pushChild(input);\n const fused = [];\n let buffer = null;\n const flush = () => {\n if (buffer !== null && buffer.length > 0)\n fused.push(buffer);\n buffer = null;\n };\n for (const child of raw) {\n if (typeof child === \"string\" || typeof child === \"number\" || typeof child === \"boolean\") {\n buffer = (buffer ?? \"\") + String(child);\n continue;\n }\n flush();\n fused.push(child);\n }\n flush();\n return fused;\n}\nfunction getVNodeMatchKey(child) {\n if (!child || typeof child !== \"object\")\n return null;\n const key = child.attributes?.key;\n if (typeof key === \"string\" || typeof key === \"number\")\n return `k:${String(key)}`;\n const id = child.attributes?.id;\n if (typeof id === \"string\" && id.length > 0)\n return `id:${id}`;\n return null;\n}\nfunction describePatchItem(child) {\n if (child && typeof child === \"object\") {\n return `<${typeof child.type === \"string\" ? child.type : \"component\"}>`;\n }\n return \"plain text\";\n}\nfunction getDomMatchKeys(node) {\n if (node.nodeType !== 1)\n return [];\n const el = node;\n const keys = [];\n const internalKey = el._defussKey;\n if (internalKey)\n keys.push(`k:${internalKey}`);\n const attrKey = el.getAttribute(\"key\");\n if (attrKey)\n keys.push(`k:${attrKey}`);\n const id = el.id;\n if (id)\n keys.push(`id:${id}`);\n return keys;\n}\nfunction areNodeAndChildMatching(domNode, child) {\n if (typeof child === \"string\" || typeof child === \"number\" || typeof child === \"boolean\") {\n return domNode.nodeType === 3;\n }\n if (child && typeof child === \"object\") {\n if (domNode.nodeType !== 1)\n return false;\n const el = domNode;\n const oldTag = el.tagName.toLowerCase();\n const newTag = typeof child.type === \"string\" ? child.type.toLowerCase() : \"\";\n if (!newTag || oldTag !== newTag)\n return false;\n return true;\n }\n return false;\n}\nfunction createDomFromChild(child, globals) {\n const renderer = getRenderer(globals.window.document);\n if (child == null)\n return;\n if (typeof child === \"string\" || typeof child === \"number\" || typeof child === \"boolean\") {\n return [globals.window.document.createTextNode(String(child))];\n }\n const created = renderer.createElementOrElements(child);\n if (!created)\n return;\n const nodes = Array.isArray(created) ? created : [created];\n return nodes.filter(Boolean);\n}\nfunction shouldPreserveFormStateAttribute(el, attrName, vnode) {\n const tag = el.tagName.toLowerCase();\n const hasExplicit = Object.hasOwn(vnode.attributes ?? {}, attrName);\n if (hasExplicit)\n return false;\n if (tag === \"input\")\n return attrName === \"value\" || attrName === \"checked\";\n if (tag === \"textarea\")\n return attrName === \"value\";\n if (tag === \"select\")\n return attrName === \"value\";\n return false;\n}\nfunction patchElementInPlace(el, vnode, globals, mergeAttributes = false) {\n const renderer = getRenderer(globals.window.document);\n const existingAttrs = mergeAttributes ? [] : Array.from(el.attributes);\n const nextAttrs = vnode.attributes ?? {};\n for (const attr of existingAttrs) {\n const { name } = attr;\n if (name === \"key\")\n continue;\n if (name.startsWith(\"on\"))\n continue;\n if (name === \"class\" && (Object.hasOwn(nextAttrs, \"class\") || Object.hasOwn(nextAttrs, \"className\"))) {\n continue;\n }\n if (!Object.hasOwn(nextAttrs, name)) {\n if (shouldPreserveFormStateAttribute(el, name, vnode))\n continue;\n el.removeAttribute(name);\n }\n }\n const preserveDelegatedHandlers = mergeAttributes || Boolean(nextAttrs[FROM_DOM_MARKER]);\n if (!preserveDelegatedHandlers) {\n const registeredKeys = getRegisteredEventKeys(el);\n const nextEventKeys = new Set;\n for (const propName of Object.keys(nextAttrs)) {\n const parsed = parseEventPropName(propName);\n if (parsed) {\n const phase = parsed.capture ? \"capture\" : \"bubble\";\n nextEventKeys.add(`${parsed.eventType}:${phase}`);\n }\n }\n for (const key of registeredKeys) {\n if (!nextEventKeys.has(key)) {\n const [eventType, phase] = key.split(\":\");\n removeDelegatedEventByKey(el, eventType, phase);\n }\n }\n }\n renderer.setAttributes(vnode, el);\n handleLifecycleEventsForOnMount(el);\n const d = vnode.attributes?.dangerouslySetInnerHTML;\n if (d && typeof d === \"object\" && typeof d.__html === \"string\") {\n el.innerHTML = d.__html;\n return;\n }\n const tag = el.tagName.toLowerCase();\n if (tag === \"textarea\") {\n const isControlled = Object.hasOwn(nextAttrs, \"value\");\n const isActive = el.ownerDocument?.activeElement === el;\n if (isActive && !isControlled)\n return;\n }\n if (mergeAttributes && (vnode.children === undefined || vnode.children.length === 0 && nextAttrs[FROM_DOM_MARKER]))\n return;\n morphDomDirect(el, vnode.children ?? [], globals);\n}\nfunction morphNode(domNode, child, globals, mergeAttributes = false) {\n if (typeof child === \"string\" || typeof child === \"number\" || typeof child === \"boolean\") {\n const text = String(child);\n if (domNode.nodeType === 3) {\n if (domNode.nodeValue !== text)\n domNode.nodeValue = text;\n return domNode;\n }\n const next = globals.window.document.createTextNode(text);\n domNode.parentNode?.replaceChild(next, domNode);\n return next;\n }\n if (child && typeof child === \"object\") {\n const newType = typeof child.type === \"string\" ? child.type : null;\n if (!newType)\n return domNode;\n if (domNode.nodeType !== 1) {\n const created = createDomFromChild(child, globals);\n const first = Array.isArray(created) ? created[0] : created;\n if (!first)\n return null;\n domNode.parentNode?.replaceChild(first, domNode);\n handleLifecycleEventsForOnMount(first);\n return first;\n }\n const el = domNode;\n const oldTag = el.tagName.toLowerCase();\n const newTag = newType.toLowerCase();\n if (oldTag !== newTag) {\n const created = createDomFromChild(child, globals);\n const first = Array.isArray(created) ? created[0] : created;\n if (!first)\n return null;\n el.parentNode?.replaceChild(first, el);\n handleLifecycleEventsForOnMount(first);\n return first;\n }\n patchElementInPlace(el, child, globals, mergeAttributes);\n return el;\n }\n domNode.parentNode?.removeChild(domNode);\n return null;\n}\nvar renderingNodes = new WeakSet;\nvar pendingMorphs = new Map;\nvar resolveGlobals = (el, globals) => {\n if (globals)\n return globals;\n const win = el?.ownerDocument?.defaultView ?? globalThis;\n return { window: win };\n};\nfunction isAncestorRendering(el) {\n let current = el.parentElement;\n while (current) {\n if (renderingNodes.has(current))\n return true;\n current = current.parentElement;\n }\n return false;\n}\nfunction flushPendingMorphs() {\n if (pendingMorphs.size === 0)\n return;\n const snapshot = [...pendingMorphs.entries()];\n pendingMorphs.clear();\n for (const [el, { vdom, globals, mode }] of snapshot) {\n if (!el.isConnected)\n continue;\n updateDomWithVdom(el, vdom, globals, mode);\n }\n}\nfunction updateDomWithVdom(parentElement, newVDOM, globals, mode = \"replace\") {\n const resolvedGlobals = resolveGlobals(parentElement, globals);\n if (renderingNodes.has(parentElement) || isAncestorRendering(parentElement)) {\n pendingMorphs.set(parentElement, {\n vdom: newVDOM,\n globals: resolvedGlobals,\n mode\n });\n return;\n }\n renderingNodes.add(parentElement);\n try {\n morphDomDirect(parentElement, newVDOM, resolvedGlobals, mode);\n } finally {\n renderingNodes.delete(parentElement);\n }\n flushPendingMorphs();\n}\nfunction morphDiff(targetRoot, patchItems, globals) {\n const keyedPool = new Map;\n for (const node of Array.from(targetRoot.childNodes)) {\n for (const k of getDomMatchKeys(node)) {\n if (!keyedPool.has(k))\n keyedPool.set(k, node);\n }\n }\n for (const item of patchItems) {\n if (typeof item === \"string\" && item.trim() === \"\")\n continue;\n const key = getVNodeMatchKey(item);\n if (!key) {\n throw new Error(`morph diff: patch items must be elements with a key or id attribute (got ${describePatchItem(item)})`);\n }\n const match = keyedPool.get(key);\n if (match) {\n const patchItem = item && typeof item === \"object\" && !item.type ? { ...item, type: match.tagName.toLowerCase() } : item;\n morphNode(match, patchItem, globals, true);\n continue;\n }\n if (!item?.type) {\n throw new Error(`morph diff: new (unmatched) patch items must declare a tag (type), got key/id \"${key}\"`);\n }\n const created = createDomFromChild(item, globals) ?? [];\n for (const node of created) {\n targetRoot.appendChild(node);\n handleLifecycleEventsForOnMount(node);\n }\n }\n}\nfunction morphDomDirect(parentElement, newVDOM, globals, mode = \"replace\") {\n const el = parentElement;\n const isCustomElement = el.tagName.includes(\"-\");\n const targetRoot = el.shadowRoot && !isCustomElement ? el.shadowRoot : parentElement;\n const nextChildren = normalizeChildren(newVDOM, mode === \"diff\");\n if (mode === \"diff\") {\n morphDiff(targetRoot, nextChildren, globals);\n return;\n }\n const existing = Array.from(targetRoot.childNodes);\n const keyedPool = new Map;\n const nodeKeys = new WeakMap;\n const unkeyedPool = [];\n for (const node of existing) {\n const keys = getDomMatchKeys(node);\n if (keys.length > 0) {\n nodeKeys.set(node, keys);\n let addedToKeyedPool = false;\n for (const k of keys) {\n if (!keyedPool.has(k)) {\n keyedPool.set(k, node);\n addedToKeyedPool = true;\n }\n }\n if (!addedToKeyedPool) {\n unkeyedPool.push(node);\n }\n } else {\n unkeyedPool.push(node);\n }\n }\n const consumeKeyedNode = (node) => {\n const keys = nodeKeys.get(node) ?? [];\n for (const k of keys)\n keyedPool.delete(k);\n };\n const takeUnkeyedMatch = (child) => {\n for (let i = 0;i < unkeyedPool.length; i++) {\n const candidate = unkeyedPool[i];\n if (areNodeAndChildMatching(candidate, child)) {\n unkeyedPool.splice(i, 1);\n return candidate;\n }\n }\n return;\n };\n let domIndex = 0;\n for (const child of nextChildren) {\n const key = getVNodeMatchKey(child);\n let match;\n if (key) {\n match = keyedPool.get(key);\n if (match)\n consumeKeyedNode(match);\n } else {\n match = takeUnkeyedMatch(child);\n }\n const anchor = targetRoot.childNodes[domIndex] ?? null;\n if (match) {\n if (match !== anchor) {\n targetRoot.insertBefore(match, anchor);\n }\n const morphed = morphNode(match, child, globals);\n if (morphed && morphed !== match) {}\n domIndex++;\n continue;\n }\n const created = createDomFromChild(child, globals);\n if (!created || Array.isArray(created) && created.length === 0)\n continue;\n const nodes = Array.isArray(created) ? created : [created];\n for (const node of nodes) {\n targetRoot.insertBefore(node, anchor);\n handleLifecycleEventsForOnMount(node);\n domIndex++;\n }\n }\n const remaining = new Set;\n for (const node of unkeyedPool)\n remaining.add(node);\n for (const node of keyedPool.values())\n remaining.add(node);\n for (const node of remaining) {\n if (node.parentNode === targetRoot) {\n if (node.nodeType === 1) {\n clearDelegatedEventsDeep(node);\n }\n targetRoot.removeChild(node);\n }\n }\n}\nfunction replaceDomWithVdom(parentElement, newVDOM, globals) {\n const resolvedGlobals = resolveGlobals(parentElement, globals);\n while (parentElement.firstChild) {\n parentElement.removeChild(parentElement.firstChild);\n }\n const renderer = getRenderer(resolvedGlobals.window.document);\n const newDom = renderer.createElementOrElements(newVDOM);\n if (Array.isArray(newDom)) {\n for (const node of newDom) {\n if (node) {\n parentElement.appendChild(node);\n handleLifecycleEventsForOnMount(node);\n }\n }\n } else if (newDom) {\n parentElement.appendChild(newDom);\n handleLifecycleEventsForOnMount(newDom);\n }\n}\n\n// src/transitions.ts\nvar injectShakeKeyframes = (doc) => {\n if (!doc)\n return;\n if (!doc.getElementById(\"defuss-shake\")) {\n const style = doc.createElement(\"style\");\n style.id = \"defuss-shake\";\n style.textContent = \"@keyframes shake{0%,100%{transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{transform:translate3d(-10px,0,0)}20%,40%,60%,80%{transform:translate3d(10px,0,0)}}\";\n doc.head.appendChild(style);\n }\n};\nvar getTransitionStyles = (type, duration, easing = \"ease-in-out\") => {\n const t = `transform ${duration}ms ${easing}, opacity ${duration}ms ${easing}`;\n const styles = {\n fade: {\n enter: { opacity: \"0\", transition: t, transform: \"translate3d(0,0,0)\" },\n enterActive: { opacity: \"1\" },\n exit: { opacity: \"1\", transition: t, transform: \"translate3d(0,0,0)\" },\n exitActive: { opacity: \"0\" }\n },\n \"slide-left\": {\n enter: {\n transform: \"translate3d(100%,0,0)\",\n opacity: \"0.5\",\n transition: t\n },\n enterActive: { transform: \"translate3d(0,0,0)\", opacity: \"1\" },\n exit: { transform: \"translate3d(0,0,0)\", opacity: \"1\", transition: t },\n exitActive: { transform: \"translate3d(-100%,0,0)\", opacity: \"0.5\" }\n },\n \"slide-right\": {\n enter: {\n transform: \"translate3d(-100%,0,0)\",\n opacity: \"0.5\",\n transition: t\n },\n enterActive: { transform: \"translate3d(0,0,0)\", opacity: \"1\" },\n exit: { transform: \"translate3d(0,0,0)\", opacity: \"1\", transition: t },\n exitActive: { transform: \"translate3d(100%,0,0)\", opacity: \"0.5\" }\n },\n shake: (() => {\n injectShakeKeyframes(typeof document !== \"undefined\" ? document : undefined);\n return {\n enter: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n transition: \"none\"\n },\n enterActive: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n animation: `shake ${duration}ms cubic-bezier(0.36,0.07,0.19,0.97)`\n },\n exit: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n transition: \"none\"\n },\n exitActive: {\n transform: \"translate3d(0,0,0)\",\n opacity: \"1\",\n animation: `shake ${duration}ms cubic-bezier(0.36,0.07,0.19,0.97)`\n }\n };\n })()\n };\n return styles[type] || { enter: {}, enterActive: {}, exit: {}, exitActive: {} };\n};\nvar applyStyles = (el, styles) => Object.entries(styles).forEach(([k, v]) => el.style.setProperty(k, String(v)));\nvar DEFAULT_TRANSITION_CONFIG = {\n type: \"fade\",\n duration: 300,\n easing: \"ease-in-out\",\n delay: 0,\n target: \"parent\"\n};\nvar wait = (ms) => new Promise((r) => setTimeout(r, ms));\nvar performCrossfade = async (element, updateCallback, duration, easing) => {\n const originalStyle = element.style.cssText;\n const snapshot = element.cloneNode(true);\n const doc = element.ownerDocument;\n try {\n const rect = element.getBoundingClientRect();\n snapshot.style.cssText = `position:absolute;top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;opacity:1;transition:opacity ${duration}ms ${easing};z-index:1000;`;\n element.style.opacity = \"0\";\n element.style.transition = `opacity ${duration}ms ${easing}`;\n doc.body.appendChild(snapshot);\n await updateCallback();\n element.offsetHeight;\n snapshot.style.opacity = \"0\";\n element.style.opacity = \"1\";\n await wait(duration);\n doc.body.removeChild(snapshot);\n } catch (error) {\n if (snapshot.parentElement)\n doc.body.removeChild(snapshot);\n throw error;\n } finally {\n element.style.cssText = originalStyle;\n }\n};\nvar performTransition = async (element, updateCallback, config = {}) => {\n const {\n type = \"fade\",\n duration = 300,\n easing = \"ease-in-out\",\n delay = 0\n } = { ...DEFAULT_TRANSITION_CONFIG, ...config };\n if (type === \"none\") {\n await updateCallback();\n return;\n }\n if (delay > 0)\n await wait(delay);\n if (type === \"fade\") {\n await performCrossfade(element, updateCallback, duration, easing);\n return;\n }\n const styles = config.styles || getTransitionStyles(type, duration, easing);\n const originalTransition = element.style.transition;\n const originalAnimation = element.style.animation;\n try {\n if (type === \"shake\") {\n element.style.animation = \"none\";\n element.offsetHeight;\n }\n applyStyles(element, styles.exit);\n element.offsetHeight;\n applyStyles(element, styles.exitActive);\n await wait(duration);\n await updateCallback();\n applyStyles(element, styles.enter);\n element.offsetHeight;\n applyStyles(element, styles.enterActive);\n await wait(duration);\n element.style.transition = originalTransition;\n element.style.animation = originalAnimation;\n } catch (error) {\n element.style.transition = originalTransition;\n element.style.animation = originalAnimation;\n throw error;\n }\n};\n\n// src/index.ts\nvar inflightTransitions = new WeakMap;\nvar morph2 = (el, newContent, options = {}) => {\n const globals = resolveGlobals(el);\n const win = globals.window;\n const mode = options.diff ? \"diff\" : \"replace\";\n const apply = (content) => updateDomWithVdom(el, typeof content === \"string\" ? htmlStringToVNodes(content, win.DOMParser) : content, globals, mode);\n const transition = options.transition;\n if (transition && transition.type !== \"none\") {\n const config = { ...DEFAULT_TRANSITION_CONFIG, ...transition };\n const transitionTarget = config.target === \"self\" ? el : el.parentElement;\n if (!transitionTarget) {\n apply(newContent);\n return;\n }\n const slot2 = { content: newContent };\n inflightTransitions.set(el, slot2);\n return performTransition(transitionTarget, async () => {\n if (inflightTransitions.get(el) === slot2)\n apply(slot2.content);\n }, config).finally(() => {\n if (inflightTransitions.get(el) === slot2)\n inflightTransitions.delete(el);\n });\n }\n const slot = inflightTransitions.get(el);\n if (slot)\n slot.content = newContent;\n apply(newContent);\n};\n\n// src/global.ts\nif (typeof globalThis !== \"undefined\") {\n const g = globalThis;\n if (typeof g.df$ !== \"object\" || g.df$ === null) {\n g.df$ = {};\n }\n Object.assign(g.df$, exports_src);\n}\nexport {\n updateDomWithVdom,\n resolveGlobals,\n replaceDomWithVdom,\n renderMarkup,\n removeDelegatedEventByKey,\n removeDelegatedEvent,\n registerDelegatedEvent,\n queueCallback,\n performTransition,\n parseEventPropName,\n parseDOM,\n observeUnmount,\n nsMap,\n morph2 as morph,\n isSVG,\n isMarkup,\n isHTML,\n htmlStringToVNodes,\n handleLifecycleEventsForOnMount,\n getTransitionStyles,\n getRenderer,\n getRegisteredEventTypes,\n getRegisteredEventKeys,\n getMimeType,\n domNodeToVNode,\n clearDelegatedEventsDeep,\n clearDelegatedEvents,\n areDomNodesEqual,\n applyStyles,\n XMLNS_ATTRIBUTE_NAME,\n XLINK_ATTRIBUTE_NAME,\n REF_ATTRIBUTE_NAME,\n FROM_DOM_MARKER,\n DEFAULT_TRANSITION_CONFIG,\n DANGEROUSLY_SET_INNER_HTML_ATTRIBUTE,\n CLASS_ATTRIBUTE_NAME,\n CAPTURE_ONLY_EVENTS\n};\n\n//# debugId=6F130A0428D5249264756E2164756E21\n//# sourceMappingURL=all.js.map\n"],"file":"all.min.js"}
|