@rectify-dev/core 2.4.2 → 2.4.3

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../rectify-dom-binding/src/events/RectifyEventRegistry.ts","../../rectify-dom-binding/src/events/__main.ts","../../rectify-dom-binding/src/clients/RectifyDomComponentTree.ts","../../rectify-dom-binding/src/events/SyntheticEvent.ts","../../rectify-dom-binding/src/events/RectifyEventPriority.ts","../../rectify-dom-binding/src/events/RectifyDomEventListener.ts","../../rectify-dom-binding/src/events/RectifyEventListener.ts","../../rectify-dom-binding/src/events/RectifyEvent.ts","../../rectify-dom-binding/src/clients/RectifyDomProperties.ts","../../rectify-reconciler/src/RectifyFiberFlags.ts","../../rectify-reconciler/src/RectifyFiberLanes.ts","../../rectify-reconciler/src/RectifyFiberWorkTags.ts","../../rectify-reconciler/src/RectifyFiberService.ts","../../rectify-reconciler/src/RectifyFiber.ts","../../rectify-reconciler/src/RectifyFiberInstance.ts","../../rectify-reconciler/src/RectifyFiberScheduler.ts","../../rectify-hook/src/RectifyHookRenderingFiber.ts","../../rectify-hook/src/RectifyHook.ts","../../rectify-hook/src/RectifyHookUseState.ts","../../rectify-hook/src/RectifyHookUseReducer.ts","../../rectify-hook/src/RectifyHookDeps.ts","../../rectify-hook/src/RectifyHookUseEffect.ts","../../rectify-hook/src/RectifyHookUseLayoutEffect.ts","../../rectify-hook/src/RectifyHookUseRef.ts","../../rectify-hook/src/RectifyHookUseMemo.ts","../../rectify-hook/src/RectifyHookUseCallback.ts","../../rectify-hook/src/RectifyHookContext.ts","../../rectify-hook/src/RectifyHookUseId.ts","../../rectify-reconciler/src/RectifyFiberRenderPriority.ts","../../rectify-reconciler/src/RectifyFiberReconcileChildren.ts","../../rectify-reconciler/src/RectifyFiberConcurrentUpdate.ts","../../rectify-reconciler/src/RectifyFiberSuspense.ts","../../rectify-reconciler/src/RectifyFiberBeginWork.ts","../../rectify-reconciler/src/RectifyFiberCompleteWork.ts","../../rectify-reconciler/src/RectifyFiberWorkLoop.ts","../../rectify-reconciler/src/RectifyFiberCommitRef.ts","../../rectify-reconciler/src/RectifyFiberCommitPlacement.ts","../../rectify-reconciler/src/RectifyFiberCommitMutation.ts","../../rectify-reconciler/src/RectifyFiberCommitRemoval.ts","../../rectify-reconciler/src/RectifyFiberCommitWork.ts","../../rectify-reconciler/src/RectifyFiberFlushPhase.ts","../../rectify-reconciler/src/RectifyFiberHookBridge.ts","../../rectify-reconciler/src/RectifyFiberBootstrap.ts","../../rectify-reconciler/src/RectifyFiberReconciler.ts","../../rectify-dom/src/RectifyDomRoot.ts","../../rectify-dom/src/RectifyDomPortal.ts","../src/RectifyMemo.ts","../src/RectifyLazy.ts","../src/RectifySuspense.ts","../src/RectifyComponent.ts"],"names":["isFunction","SVG_NS","instance","Component","update","memo","shallowEqual","lazy","RECTIFY_PORTAL_TYPE"],"mappings":"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","file":"index.js","sourcesContent":["import { RectifyDomEventName } from \"./RectifyEventName\";\n\nexport const allNativeEvents: Set<RectifyDomEventName> = new Set();\n\nexport const registrationNameDependencies: {\n [registrationName: string]: Array<RectifyDomEventName>;\n} = {};\n\nexport const nativeEventToRectifyName: Map<RectifyDomEventName, string> =\n new Map();\n\nexport function registerDirectEvent(\n registrationName: string,\n dependencies: Array<RectifyDomEventName>,\n) {\n registrationNameDependencies[registrationName] = dependencies;\n\n for (let i = 0; i < dependencies.length; i++) {\n const dependency = dependencies[i];\n\n allNativeEvents.add(dependency);\n\n if (!nativeEventToRectifyName.has(dependency)) {\n nativeEventToRectifyName.set(dependency, registrationName);\n }\n }\n}\n\nexport function registerNativeEvent() {\n // Mouse\n registerDirectEvent(\"onClick\", [\"click\"]);\n registerDirectEvent(\"onDoubleClick\", [\"dblclick\"]);\n registerDirectEvent(\"onMouseDown\", [\"mousedown\"]);\n registerDirectEvent(\"onMouseUp\", [\"mouseup\"]);\n registerDirectEvent(\"onMouseMove\", [\"mousemove\"]);\n registerDirectEvent(\"onMouseEnter\", [\"mouseenter\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseleave\"]);\n registerDirectEvent(\"onContextMenu\", [\"contextmenu\"]);\n\n // Keyboard\n registerDirectEvent(\"onKeyDown\", [\"keydown\"]);\n registerDirectEvent(\"onKeyUp\", [\"keyup\"]);\n registerDirectEvent(\"onKeyPress\", [\"keypress\"]);\n\n // Input / Form\n registerDirectEvent(\"onInput\", [\"input\"]);\n registerDirectEvent(\"onChange\", [\"change\"]);\n registerDirectEvent(\"onSubmit\", [\"submit\"]);\n registerDirectEvent(\"onReset\", [\"reset\"]);\n\n // Focus\n registerDirectEvent(\"onFocus\", [\"focus\"]);\n registerDirectEvent(\"onBlur\", [\"blur\"]);\n\n // Clipboard\n registerDirectEvent(\"onCopy\", [\"copy\"]);\n registerDirectEvent(\"onCut\", [\"cut\"]);\n registerDirectEvent(\"onPaste\", [\"paste\"]);\n\n // Touch\n registerDirectEvent(\"onTouchStart\", [\"touchstart\"]);\n registerDirectEvent(\"onTouchMove\", [\"touchmove\"]);\n registerDirectEvent(\"onTouchEnd\", [\"touchend\"]);\n registerDirectEvent(\"onTouchCancel\", [\"touchcancel\"]);\n\n // Scroll / Wheel\n registerDirectEvent(\"onScroll\", [\"scroll\"]);\n registerDirectEvent(\"onWheel\", [\"wheel\"]);\n\n // Drag\n registerDirectEvent(\"onDrag\", [\"drag\"]);\n registerDirectEvent(\"onDragStart\", [\"dragstart\"]);\n registerDirectEvent(\"onDragEnd\", [\"dragend\"]);\n registerDirectEvent(\"onDragEnter\", [\"dragenter\"]);\n registerDirectEvent(\"onDragLeave\", [\"dragleave\"]);\n registerDirectEvent(\"onDragOver\", [\"dragover\"]);\n registerDirectEvent(\"onDrop\", [\"drop\"]);\n}\n","import { registerNativeEvent } from \"./RectifyEventRegistry\";\n\n/**\n * This function will run immediately when this file mount\n */\nconst main = () => {\n registerNativeEvent();\n};\n\nmain();\n","import { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\nimport { RectifyDomEventName } from \"../events/RectifyEventName\";\nimport { Fiber } from \"@rectify-dev/shared\";\n\nconst randomKey = Math.random().toString(36).slice(2);\nconst internalContainerInstanceKey = \"__rectifyContainer$\" + randomKey;\nconst internalInstanceKey = \"__rectifyFiber$\" + randomKey;\nconst internalEventHandlerListenersKey = \"__rectifyListeners$\" + randomKey;\nconst internalEventHandlesSetKey = \"__rectifyHandles$\" + randomKey;\n\nexport function markContainerAsRoot(\n hostRoot: Fiber,\n node: Element | Node,\n): void {\n (node as any)[internalContainerInstanceKey] = hostRoot;\n}\n\nexport function unmarkContainerAsRoot(node: Element | Node): void {\n (node as any)[internalContainerInstanceKey] = null;\n}\n\nexport function isContainerMarkedAsRoot(node: Element | Node): boolean {\n return !!(node as any)[internalContainerInstanceKey];\n}\n\nexport const precacheFiberNode = (fiber: Fiber, node: Node) => {\n if (!node) return;\n (node as any)[internalInstanceKey] = fiber;\n};\n\nexport const getFiberNodeCached = (node: Node): Fiber | null => {\n if (!node) return null;\n return (node as any)[internalInstanceKey] || null;\n};\n\nexport function setEventHandlerListeners(\n scope: EventTarget | null,\n listeners: Map<string, RectifyDOMEventHandleListener>,\n): void {\n if (!scope) return;\n (scope as any)[internalEventHandlerListenersKey] = listeners;\n}\n\nexport function getEventHandlerListeners(\n scope: EventTarget | null,\n): null | Map<string, RectifyDOMEventHandleListener> {\n if (!scope) return null;\n return (scope as any)[internalEventHandlerListenersKey] || null;\n}\n","import { AnyNativeEvent } from \"./RectifyDomEventListener\";\n\nclass SyntheticEvent {\n target: Element | null;\n currentTarget: Element | null = null;\n nativeEvent: AnyNativeEvent;\n\n private propagationStopped: boolean = false;\n\n constructor(nativeEvent: AnyNativeEvent) {\n this.target = nativeEvent.target as Element;\n this.nativeEvent = nativeEvent;\n }\n\n stopPropagation() {\n this.propagationStopped = true;\n this.nativeEvent.stopPropagation();\n }\n\n isPropagationStopped() {\n return this.propagationStopped;\n }\n}\n\nexport default SyntheticEvent;\n","/**\n * Event priority injection point.\n *\n * @rectify-dev/dom-binding has no dependency on @rectify-dev/reconciler, so the\n * reconciler injects its priority functions here at startup via\n * `injectEventPriorityCallbacks`. The event dispatcher then calls\n * `setEventPriority` / `resetEventPriority` around every handler invocation\n * so that state updates triggered by user events are assigned the correct lane.\n *\n * Lane values are plain numbers (not imported) to keep the dependency graph clean:\n * InputLane = 0b00010 = 2\n * DefaultLane = 0b00100 = 4 (used as the reset value)\n */\n\ntype PriorityFn = (priority: number) => void;\ntype ResetFn = () => void;\n\nlet _set: PriorityFn = () => {};\nlet _reset: ResetFn = () => {};\n\n/** Called once by the reconciler to wire up priority tracking. */\nexport const injectEventPriorityCallbacks = (\n set: PriorityFn,\n reset: ResetFn,\n): void => {\n _set = set;\n _reset = reset;\n};\n\n/** Mark the start of a user-interaction event (sets InputLane). */\nexport const setEventPriority = (priority: number): void => _set(priority);\n\n/** Restore default priority after an event handler returns. */\nexport const resetEventPriority = (): void => _reset();\n\n/** Numeric constant – mirrors InputLane in @rectify-dev/reconciler. */\nexport const INPUT_LANE = 0b00010;\n","import { Fiber, isFunction } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n getFiberNodeCached,\n} from \"../clients/RectifyDomComponentTree\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport SyntheticEvent from \"./SyntheticEvent\";\nimport { nativeEventToRectifyName } from \"./RectifyEventRegistry\";\nimport {\n INPUT_LANE,\n setEventPriority,\n resetEventPriority,\n} from \"./RectifyEventPriority\";\nimport { isEventContainer } from \"./RectifyEvent\";\n\nexport type AnyNativeEvent = Event | KeyboardEvent | MouseEvent | TouchEvent;\n\nexport const createEventListenerWrapper = (\n targetContainer: EventTarget,\n domEventName: RectifyDomEventName,\n) => {\n return dispatchEvent.bind(null, domEventName, targetContainer);\n};\n\nconst getEventTarget = (nativeEvent: AnyNativeEvent) => {\n return (nativeEvent.target || nativeEvent.srcElement) as Node;\n};\n\nconst dispatchEvent = (\n domEventName: RectifyDomEventName,\n targetContainer: EventTarget,\n nativeEvent: AnyNativeEvent,\n) => {\n const targetNode = getEventTarget(nativeEvent);\n const targetFiber = getFiberNodeCached(targetNode);\n\n if (!targetFiber) return;\n\n // If a more-specific event container sits between the event target and\n // targetContainer in the DOM, that container's own capture listener will\n // handle the event. Skip here to avoid double-dispatch.\n // This covers both createRoot containers (marked via markContainerAsRoot)\n // and portal containers (registered via listenToAllEventSupported).\n let domCursor: Node | null = targetNode.parentNode;\n while (domCursor && domCursor !== targetContainer) {\n if (isEventContainer(domCursor)) return;\n domCursor = (domCursor as Node).parentNode;\n }\n\n const syntheticEvent = new SyntheticEvent(nativeEvent);\n\n const path: Fiber[] = [];\n let fiber: Fiber | null = targetFiber;\n\n while (fiber) {\n path.push(fiber);\n if (fiber.stateNode === targetContainer) {\n break;\n }\n fiber = fiber.return;\n }\n\n for (const currFiber of path) {\n if (syntheticEvent.isPropagationStopped()) break;\n\n const eventHandlerMap = getEventHandlerListeners(\n currFiber.stateNode as Node,\n );\n if (!eventHandlerMap) continue;\n const rectifyName = nativeEventToRectifyName.get(domEventName);\n if (!rectifyName) continue;\n const handler = eventHandlerMap.get(rectifyName);\n\n if (!isFunction(handler)) continue;\n\n syntheticEvent.currentTarget = currFiber.stateNode as Element;\n setEventPriority(INPUT_LANE);\n try {\n handler(syntheticEvent);\n } finally {\n resetEventPriority();\n }\n }\n\n syntheticEvent.currentTarget = null;\n};\n","export function addEventBubbleListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, false);\n return listener;\n}\n\nexport function addEventCaptureListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, true);\n return listener;\n}\n\nexport function addEventCaptureListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n capture: true,\n passive,\n });\n return listener;\n}\n\nexport function addEventBubbleListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n passive,\n });\n return listener;\n}\n\nexport function removeEventListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n capture: boolean,\n): void {\n target.removeEventListener(eventType, listener, capture);\n}\n","import { createEventListenerWrapper } from \"./RectifyDomEventListener\";\nimport { addEventBubbleListener, addEventCaptureListener } from \"./RectifyEventListener\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport { allNativeEvents } from \"./RectifyEventRegistry\";\n\nconst listeningMarker =\n \"_rectifyEventListening$\" + Math.random().toString(36).slice(2);\n\nexport const isEventContainer = (dom: EventTarget): boolean =>\n !!(dom as any)[listeningMarker];\n\nexport const listenToAllEventSupported = (dom: EventTarget) => {\n if ((dom as any)[listeningMarker]) return;\n (dom as any)[listeningMarker] = true;\n\n allNativeEvents.forEach((domEventName) =>\n listenToNativeEvent(domEventName, dom),\n );\n};\n\nconst listenToNativeEvent = (\n domEventName: RectifyDomEventName,\n target: EventTarget,\n) => {\n const listener = createEventListenerWrapper(target, domEventName);\n addEventCaptureListener(target, domEventName, listener as any);\n};\n","import { RectifyDomEventName } from \"./../events/RectifyEventName\";\nimport { isPlainObject } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n setEventHandlerListeners,\n} from \"./RectifyDomComponentTree\";\nimport { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\n\nconst isEvent = (k: string) => k.startsWith(\"on\");\nconst isProperty = (k: string) =>\n k !== \"children\" && k !== \"ref\" && !isEvent(k);\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\n/**\n * SVG attributes that are genuinely camelCase in the SVG spec and must NOT\n * be converted to kebab-case when calling setAttribute.\n */\nconst SVG_CAMEL_ATTRS = new Set([\n \"viewBox\", \"preserveAspectRatio\",\n \"gradientTransform\", \"gradientUnits\",\n \"patternTransform\", \"patternUnits\", \"patternContentUnits\",\n \"clipPathUnits\", \"markerUnits\", \"markerWidth\", \"markerHeight\",\n \"refX\", \"refY\",\n \"textLength\", \"startOffset\",\n \"baseFrequency\", \"numOctaves\", \"stdDeviation\",\n \"filterUnits\", \"primitiveUnits\",\n \"tableValues\", \"kernelMatrix\", \"kernelUnitLength\",\n \"targetX\", \"targetY\",\n \"xChannelSelector\", \"yChannelSelector\",\n \"diffuseConstant\", \"surfaceScale\",\n \"specularConstant\", \"specularExponent\",\n \"limitingConeAngle\",\n \"pointsAtX\", \"pointsAtY\", \"pointsAtZ\",\n \"repeatX\", \"repeatY\",\n]);\n\n/** Converts camelCase to kebab-case, e.g. strokeWidth → stroke-width. */\nconst camelToKebab = (s: string) =>\n s.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n\n/** Returns the correct attribute name for an SVG element's prop key. */\nconst svgAttrName = (k: string): string =>\n SVG_CAMEL_ATTRS.has(k) ? k : camelToKebab(k);\n\nconst unitlessProperties = new Set([\n \"zIndex\",\n \"opacity\",\n \"fontWeight\",\n \"lineHeight\",\n \"flex\",\n \"flexGrow\",\n \"flexShrink\",\n]);\n\nfunction convertStyleObjectToString(styleObj: object) {\n return Object.entries(styleObj)\n .map(([key, value]) => {\n const cssKey = key.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n\n let cssValue = value;\n\n if (typeof value === \"number\" && !unitlessProperties.has(key)) {\n cssValue = `${value}px`;\n }\n\n return `${cssKey}:${cssValue}`;\n })\n .join(\"; \");\n}\n\nexport const applyPropsToDom = (\n node: Node,\n prevProps: any = {},\n nextProps: any = {},\n) => {\n const element = node as Element;\n const isSvg = element.namespaceURI === SVG_NS;\n\n const eventNode =\n getEventHandlerListeners(element) ||\n new Map<RectifyDomEventName, RectifyDOMEventHandleListener>();\n\n for (const k in prevProps) {\n if (isEvent(k) && !(k in nextProps)) {\n eventNode.delete(k as RectifyDomEventName);\n }\n if (isProperty(k) && !(k in nextProps)) {\n const attrName = isSvg ? svgAttrName(k) : k;\n (element as any)[k] = \"\";\n element.removeAttribute(attrName);\n }\n }\n\n for (const k in nextProps) {\n if (k === \"children\" || k === \"ref\") continue;\n\n if (isEvent(k)) {\n if (prevProps?.[k] !== nextProps?.[k]) {\n eventNode.set(k, nextProps[k]);\n }\n } else if (k === \"style\") {\n if (typeof nextProps[k] === \"string\") {\n element.setAttribute(\"style\", nextProps[k]);\n } else {\n element.setAttribute(\"style\", convertStyleObjectToString(nextProps[k]));\n }\n } else {\n const v = nextProps[k];\n if (k === \"className\") {\n element.setAttribute(\"class\", v ?? \"\");\n } else if (v === false || v === null || v === undefined) {\n const attrName = isSvg ? svgAttrName(k) : k;\n element.removeAttribute(attrName);\n } else {\n const attrName = isSvg ? svgAttrName(k) : k;\n element.setAttribute(attrName, String(v));\n }\n }\n }\n\n setEventHandlerListeners(element, eventNode);\n};\n","export const NoFlags /* */ = 0;\nexport const PlacementFlag /* */ = 1 << 0;\nexport const UpdateFlag /* */ = 1 << 1;\nexport const DeletionFlag /* */ = 1 << 2;\nexport const MoveFlag /* */ = 1 << 3; // fiber reused but at a different index\nexport const RefFlag /* */ = 1 << 4; // ref prop added, removed, or swapped\n","export type Lanes = number;\nexport type Lane = number;\n\nexport const NoLanes /* */ = 0b00000;\nexport const SyncLane /* */ = 0b00001; // Immediate / initial render\nexport const InputLane /* */ = 0b00010; // User interactions (click, keyboard …)\nexport const DefaultLane /* */ = 0b00100; // Async / normal state updates\nexport const TransitionLane /* */ = 0b01000; // Deferred (startTransition)\nexport const IdleLane /* */ = 0b10000; // Background / idle work\n","export const FunctionComponent /** */ = Symbol.for(\"rectify.function_component\");\nexport const ClassComponent /** */ = Symbol.for(\"rectify.class_component\");\nexport const HostComponent /** */ = Symbol.for(\"rectify.host_component\");\nexport const HostText /** */ = Symbol.for(\"rectify.host_text\");\nexport const HostRoot /** */ = Symbol.for(\"rectify.host_root\");\nexport const FragmentComponent /** */ = Symbol.for(\"rectify.fragment_component\");\nexport const ContextProvider /** */ = Symbol.for(\"rectify.context_provider\");\nexport const MemoComponent /** */ = Symbol.for(\"rectify.memo_component\");\nexport const LazyComponent /** */ = Symbol.for(\"rectify.lazy_component\");\nexport const SuspenseComponent /** */ = Symbol.for(\"rectify.suspense_component\");\nexport const PortalComponent /** */ = Symbol.for(\"rectify.portal_component\");","import {\n Fiber,\n isFunction,\n isPlainObject,\n omit,\n RECTIFY_ELEMENT_TYPE,\n RECTIFY_FRAGMENT_TYPE,\n RECTIFY_TEXT_TYPE,\n RECTIFY_PORTAL_TYPE,\n RectifyElement,\n shallowEqual,\n} from \"@rectify-dev/shared\";\nimport {\n FragmentComponent,\n FunctionComponent,\n ClassComponent,\n HostComponent,\n HostRoot,\n HostText,\n ContextProvider,\n MemoComponent,\n LazyComponent,\n SuspenseComponent,\n PortalComponent,\n} from \"./RectifyFiberWorkTags\";\nimport { PlacementFlag } from \"./RectifyFiberFlags\";\n\nconst addFlagToFiber = (fiber: Fiber, flag: number): void => {\n if (hasFlagOnFiber(fiber, flag)) return;\n fiber.flags |= flag;\n};\n\nconst removeFlagFromFiber = (fiber: Fiber | null, flag: number): void => {\n if (!hasFlagOnFiber(fiber, flag)) return;\n fiber!.flags &= ~flag;\n};\n\nconst hasFlagOnFiber = (fiber: Fiber | null, flag: number): boolean => {\n if (!fiber) return false;\n return (fiber.flags & flag) !== 0;\n};\n\nconst getFiberTagFromElement = (element: RectifyElement) => {\n switch (element.$$typeof) {\n case RECTIFY_PORTAL_TYPE:\n return PortalComponent;\n case RECTIFY_ELEMENT_TYPE:\n if (isFunction(element.type) && (element.type as any)?._context === element.type) {\n return ContextProvider;\n }\n if (isFunction(element.type) && (element.type as any)?._isMemo === true) {\n return MemoComponent;\n }\n if ((element.type as any)?._isSuspense === true) {\n return SuspenseComponent;\n }\n if ((element.type as any)?._isLazy === true) {\n return LazyComponent;\n }\n if ((element.type as any)?._isClassComponent === true) {\n return ClassComponent;\n }\n return isFunction(element.type) ? FunctionComponent : HostComponent;\n case RECTIFY_TEXT_TYPE:\n return HostText;\n case RECTIFY_FRAGMENT_TYPE:\n return FragmentComponent;\n default:\n return null;\n }\n};\n\nconst SVG_TAGS = new Set([\n \"svg\", \"circle\", \"ellipse\", \"line\", \"path\", \"polygon\", \"polyline\", \"rect\",\n \"g\", \"defs\", \"use\", \"symbol\", \"clipPath\", \"mask\", \"pattern\",\n \"linearGradient\", \"radialGradient\", \"stop\", \"marker\", \"image\",\n \"text\", \"tspan\", \"textPath\", \"foreignObject\",\n \"animate\", \"animateMotion\", \"animateTransform\",\n \"feBlend\", \"feColorMatrix\", \"feComposite\", \"feGaussianBlur\",\n \"feOffset\", \"feMerge\", \"feMergeNode\", \"feTurbulence\", \"feFlood\",\n]);\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nconst createDomElementFromFiber = (fiber: Fiber): Node => {\n switch (fiber.workTag) {\n case HostText:\n return document.createTextNode(fiber.pendingProps);\n default: {\n const tag = fiber.type as string;\n return SVG_TAGS.has(tag)\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n }\n }\n};\n\nconst getParentDom = (fiber: Fiber): Node => {\n if (fiber.workTag === HostRoot)\n return fiber.stateNode as Node;\n\n let p = fiber.return;\n while (p) {\n if (p.workTag === HostComponent) return p.stateNode as Node;\n if (p.workTag === HostRoot) return p.stateNode as Node;\n if (p.workTag === PortalComponent) return p.stateNode as Node;\n p = p.return;\n }\n\n throw new Error(\"No parent DOM found.\");\n};\n\n/**\n * Returns the first host DOM node (HostComponent or HostText) found by a\n * depth-first pre-order walk of the subtree rooted at `fiber`.\n * Returns null if the subtree contains no host nodes.\n */\nfunction findFirstHostNode(fiber: Fiber): Node | null {\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n return fiber.stateNode as Node;\n }\n\n let child = fiber.child;\n while (child) {\n const found = findFirstHostNode(child);\n if (found) return found;\n child = child.sibling;\n }\n\n return null;\n}\n\n/**\n * Finds the nearest host DOM node that this fiber should be inserted before.\n * Walks the fiber's siblings; for each sibling performs a full depth-first\n * search so arbitrarily nested FunctionComponent / FragmentComponent wrappers\n * are transparent.\n * Siblings that carry PlacementFlag are skipped — their DOM nodes have not\n * been committed yet and cannot serve as a valid insertBefore reference.\n */\nfunction getHostSibling(fiber: Fiber): Node | null {\n let sibling = fiber.sibling;\n while (sibling) {\n // Skip subtrees that are being placed in this same commit pass.\n // Their stateNode exists but is not yet a child of the parent DOM.\n if (!(sibling.flags & PlacementFlag)) {\n const node = findFirstHostNode(sibling);\n if (node) return node;\n }\n sibling = sibling.sibling;\n }\n\n return null;\n}\n\nconst hasPropsChanged = (prevProps: any, nextProps: any) => {\n const CHILDREN_KEY = \"children\";\n const REF_KEY = \"ref\";\n if (isPlainObject(prevProps) && isPlainObject(nextProps)) {\n return !shallowEqual(\n omit(prevProps, [CHILDREN_KEY, REF_KEY]),\n omit(nextProps, [CHILDREN_KEY, REF_KEY]),\n );\n }\n\n return prevProps !== nextProps;\n};\n\nexport {\n addFlagToFiber,\n removeFlagFromFiber,\n hasFlagOnFiber,\n getFiberTagFromElement,\n createDomElementFromFiber,\n getParentDom,\n getHostSibling,\n hasPropsChanged,\n};\n","import { Fiber, RectifyElement, RectifyKey } from \"@rectify-dev/shared\";\nimport { NoFlags } from \"./RectifyFiberFlags\";\nimport { NoLanes } from \"./RectifyFiberLanes\";\nimport { HostComponent, HostRoot } from \"./RectifyFiberWorkTags\";\nimport { getFiberTagFromElement } from \"./RectifyFiberService\";\n\nexport const createFiber = (\n workTag: symbol,\n pendingProps: any,\n key: RectifyKey = null,\n): Fiber => {\n return {\n index: 0,\n key,\n workTag,\n type: null,\n pendingProps,\n memoizedProps: null,\n child: null,\n sibling: null,\n return: null,\n stateNode: null,\n classInstance: null,\n deletions: null,\n alternate: null,\n\n lanes: NoLanes,\n childLanes: NoLanes,\n\n subtreeFlags: NoFlags,\n flags: NoFlags,\n\n memoizedState: null,\n refCleanup: null,\n };\n};\n\nexport const createHostRootFiber = (containerDom: Element) => {\n const root = createFiber(HostRoot, null);\n root.stateNode = containerDom; // containerDom lives on the fiber, not the global\n return {\n containerDom,\n root,\n pendingLanes: NoLanes,\n children: null,\n };\n};\n\nexport const createWorkInProgress = (current: Fiber, pendingProps: any) => {\n let wip = current.alternate;\n\n if (!wip) {\n wip = createFiber(current.workTag, pendingProps, current.key);\n wip.type = current.type;\n wip.stateNode = current.stateNode;\n\n wip.alternate = current;\n current.alternate = wip;\n } else {\n wip.pendingProps = pendingProps;\n wip.deletions = null;\n }\n\n wip.memoizedProps = current.memoizedProps;\n wip.memoizedState = current.memoizedState;\n wip.classInstance = current.classInstance;\n wip.refCleanup = current.refCleanup;\n wip.return = current.return;\n wip.child = current.child;\n wip.sibling = current.sibling;\n wip.flags = NoFlags;\n wip.subtreeFlags = NoFlags;\n wip.lanes = current.lanes;\n wip.childLanes = current.childLanes;\n return wip;\n};\n\nexport const createFiberFromRectifyElement = (\n element: RectifyElement,\n): Fiber => {\n const tag = getFiberTagFromElement(element) ?? HostComponent;\n return createFiber(tag, element.props, element.key);\n};\n","import { FiberRoot } from \"./RectifyFiberTypes\";\n\ntype Instance = {\n fiberRoot: FiberRoot | null;\n};\n\nconst instance: Instance = {\n fiberRoot: null,\n};\n\nexport const setScheduledFiberRoot = (fiberRoot: FiberRoot | null): void => {\n instance.fiberRoot = fiberRoot;\n};\n\nexport const getScheduledFiberRoot = (): FiberRoot | null => {\n return instance.fiberRoot;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport {\n DefaultLane,\n IdleLane,\n InputLane,\n Lane,\n Lanes,\n NoLanes,\n SyncLane,\n TransitionLane,\n} from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Frame budget / shouldYield\n// ---------------------------------------------------------------------------\n\n/** Max ms of render work to perform per scheduler task (foundation for time-slicing). */\nconst FRAME_BUDGET_MS = 5;\n\nlet frameStart = 0;\n\n/**\n * Returns true when the current work slice has run longer than FRAME_BUDGET_MS.\n * Use this inside tight work loops to yield back to the browser.\n */\nexport const shouldYield = (): boolean =>\n performance.now() - frameStart > FRAME_BUDGET_MS;\n\n// ---------------------------------------------------------------------------\n// Work callback – injected by the reconciler\n// ---------------------------------------------------------------------------\n\ntype WorkCallback = (lanes: Lanes) => void;\n\nlet doWork: WorkCallback | null = null;\n\n/** Inject the render function that the scheduler calls when a task fires. */\nexport const setWorkCallback = (cb: WorkCallback): void => {\n doWork = cb;\n};\n\n// ---------------------------------------------------------------------------\n// Resume cursor – the exact fiber workLoopConcurrent stopped at\n// ---------------------------------------------------------------------------\n\n/**\n * When workLoopConcurrent yields mid-tree this holds the exact fiber it\n * stopped at. The next task passes this back so work truly continues from\n * where it left off rather than restarting from the WIP root.\n */\nlet resumeCursor: Fiber | null = null;\n\nexport const setResumeCursor = (fiber: Fiber | null): void => {\n resumeCursor = fiber;\n};\n\nexport const getResumeCursor = (): Fiber | null => resumeCursor;\n\nexport const clearResumeCursor = (): void => {\n resumeCursor = null;\n};\n\n// ---------------------------------------------------------------------------\n// Pending lanes\n// ---------------------------------------------------------------------------\n\n/** Bitfield of lanes enqueued but not yet processed. */\nlet pendingLanes: Lanes = NoLanes;\n\n/**\n * Enqueue a render for `lane` and ensure the appropriate scheduler task is\n * posted. Multiple calls for the same lane before the task fires are\n * deduplicated – only one task is ever in flight per scheduling tier.\n */\nexport const scheduleRenderLane = (lane: Lane): void => {\n pendingLanes |= lane;\n\n if (lane & (SyncLane | InputLane)) {\n // Highest async priority: runs before the next paint via microtask queue.\n scheduleMicrotask();\n } else if (lane & DefaultLane) {\n // Normal async priority: MessageChannel macrotask, yields to browser.\n scheduleMessageTask();\n } else if (lane & TransitionLane) {\n // Deferred: setTimeout(0) – lower priority than regular tasks.\n scheduleTimeout();\n } else if (lane & IdleLane) {\n // Background: requestIdleCallback when the main thread is idle.\n scheduleIdle();\n }\n};\n\n// ---------------------------------------------------------------------------\n// Internal flush helper\n// ---------------------------------------------------------------------------\n\nconst flush = (mask: Lanes): void => {\n const lanes = pendingLanes & mask;\n if (!lanes) return;\n pendingLanes &= ~lanes;\n frameStart = performance.now();\n doWork?.(lanes);\n};\n\n// ---------------------------------------------------------------------------\n// Microtask scheduler (SyncLane | InputLane)\n// ---------------------------------------------------------------------------\n\nconst MICROTASK_MASK = SyncLane | InputLane;\nlet microtaskScheduled = false;\n\nconst scheduleMicrotask = (): void => {\n if (microtaskScheduled) return;\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n flush(MICROTASK_MASK);\n });\n};\n\n// ---------------------------------------------------------------------------\n// MessageChannel scheduler (DefaultLane)\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MASK = DefaultLane;\nconst mc = new MessageChannel();\nlet mcScheduled = false;\n\nmc.port1.onmessage = () => {\n mcScheduled = false;\n flush(DEFAULT_MASK);\n};\n\nconst scheduleMessageTask = (): void => {\n if (mcScheduled) return;\n mcScheduled = true;\n mc.port2.postMessage(null);\n};\n\n// ---------------------------------------------------------------------------\n// setTimeout scheduler (TransitionLane)\n// ---------------------------------------------------------------------------\n\nconst TRANSITION_MASK = TransitionLane;\nlet timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\nconst scheduleTimeout = (): void => {\n if (timeoutHandle !== null) return;\n timeoutHandle = setTimeout(() => {\n timeoutHandle = null;\n flush(TRANSITION_MASK);\n }, 0);\n};\n\n// ---------------------------------------------------------------------------\n// requestIdleCallback scheduler (IdleLane)\n// ---------------------------------------------------------------------------\n\nconst IDLE_MASK = IdleLane;\nlet idleHandle: number | null = null;\n\nconst scheduleIdle = (): void => {\n if (idleHandle !== null) return;\n\n const run = () => {\n idleHandle = null;\n flush(IDLE_MASK);\n };\n\n if (typeof requestIdleCallback !== \"undefined\") {\n idleHandle = requestIdleCallback(run, { timeout: 300 }) as unknown as number;\n } else {\n idleHandle = setTimeout(run, 300) as unknown as number;\n }\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\n\ntype ScheduleRerender = (fiber: Fiber) => void;\n\ntype Instance = {\n fiberRendering: Fiber | null;\n hookIndex: number;\n scheduleRerender: ScheduleRerender | null;\n};\n\nconst instance: Instance = {\n fiberRendering: null,\n hookIndex: 0,\n scheduleRerender: null,\n};\n\nexport const getFiberRendering = (): Fiber | null => instance.fiberRendering;\n\nexport const setFiberRendering = (fiber: Fiber | null): void => {\n instance.fiberRendering = fiber;\n};\n\nexport const getHookIndex = (): number => instance.hookIndex;\n\nexport const setHookIndex = (index: number): void => {\n instance.hookIndex = index;\n};\n\nexport const nextHookIndex = (): void => {\n instance.hookIndex += 1;\n};\n\nexport const setScheduleRerender = (fn: ScheduleRerender): void => {\n instance.scheduleRerender = fn;\n};\n\nexport const scheduleRerender = (fiber: Fiber): void => {\n instance.scheduleRerender?.(fiber);\n};\n\n// ---------------------------------------------------------------------------\n// Shared hook-slot utility\n// ---------------------------------------------------------------------------\n\n/**\n * Walks the hook linked list on `fiber` to the slot at `hookIndex`.\n * Returns the existing hook if found, or `null` on mount (slot doesn't exist\n * yet). In the mount case, `prevHook` points to the slot just before the gap\n * so the caller can attach the new hook.\n */\nexport const getHookSlot = (\n fiber: Fiber,\n hookIndex: number,\n): { hook: Hook | null; prevHook: Hook | null } => {\n let hook: Hook | null = fiber.memoizedState;\n let prevHook: Hook | null = null;\n\n for (let i = 0; i < hookIndex; i++) {\n prevHook = hook;\n hook = hook?.next ?? null;\n }\n\n return { hook, prevHook };\n};\n\n/**\n * Attaches `newHook` into `fiber`'s linked list at the position indicated by\n * `prevHook` (null means insert at the head).\n */\nexport const attachHook = (fiber: Fiber, newHook: Hook, prevHook: Hook | null): void => {\n if (prevHook) prevHook.next = newHook;\n else fiber.memoizedState = newHook;\n};\n","import { FC, Fiber } from \"@rectify-dev/shared\";\nimport { setFiberRendering, setHookIndex } from \"./RectifyHookRenderingFiber\";\n\nconst prepareToUseHooks = (wip: Fiber) => {\n setFiberRendering(wip);\n setHookIndex(0);\n};\n\nconst finishUsingHooks = () => {\n setFiberRendering(null);\n};\n\nconst withHooks = (wip: Fiber, Component: FC) => {\n const NewComponent = (props: any) => {\n prepareToUseHooks(wip);\n const result = Component(props);\n finishUsingHooks();\n return result;\n };\n\n return NewComponent;\n};\n\nexport { withHooks };\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport { StateDispatcher, StateUpdater } from \"./RectifyHookTypes\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\ntype StateInitializer<S> = S | (() => S);\n\nconst getInitialState = <S>(initialState: S | (() => S)): S =>\n isFunction(initialState) ? initialState() : initialState;\n\nconst getState = <S>(update: StateUpdater<S>, prevState: S) =>\n isFunction(update) ? update(prevState) : update;\n\nfunction useState<S>(): [S | undefined, StateDispatcher<S | undefined>];\nfunction useState<S>(initialState: S): [S, StateDispatcher<S>];\nfunction useState<S>(initialState: () => S): [S, StateDispatcher<S>];\nfunction useState<S>(\n initialState?: StateInitializer<S>,\n): [S | undefined, StateDispatcher<S | undefined>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useState must be used within a function component.\");\n }\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let { hook: state, prevHook } = getHookSlot(fiber, hookIndex) as {\n hook: Hook<S | undefined> | null;\n prevHook: Hook<S | undefined> | null;\n };\n\n if (!state) {\n state = {\n memoizedState: getInitialState(initialState),\n queue: null,\n next: null,\n };\n attachHook(fiber, state, prevHook);\n }\n\n let update = state.queue;\n while (update) {\n state.memoizedState = getState(update.action, state.memoizedState);\n update = update.next;\n }\n state.queue = null;\n\n const dispatcher = (updater: StateUpdater<S | undefined>) => {\n const update = { action: updater, next: null };\n\n if (!state.queue) {\n state.queue = update;\n } else {\n let last = state.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [state.memoizedState, dispatcher] as const;\n}\n\nexport default useState;\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type Reducer<S, A> = (state: S, action: A) => S;\nexport type Dispatch<A> = (action: A) => void;\n\nfunction useReducer<S, A>(reducer: Reducer<S, A>, initialState: S): [S, Dispatch<A>];\nfunction useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I,\n init: (arg: I) => S,\n): [S, Dispatch<A>];\nfunction useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: S | I,\n init?: (arg: I) => S,\n): [S, Dispatch<A>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useReducer must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let { hook, prevHook } = getHookSlot(fiber, hookIndex) as {\n hook: Hook<S> | null;\n prevHook: Hook<S> | null;\n };\n\n if (!hook) {\n // Mount — compute initial state once.\n const initialState: S = isFunction(init)\n ? (init as (arg: I) => S)(initialArg as I)\n : (initialArg as S);\n\n hook = { memoizedState: initialState, queue: null, next: null };\n attachHook(fiber, hook, prevHook);\n }\n\n // Drain the update queue, applying each action through the reducer.\n let update = hook.queue;\n while (update) {\n hook.memoizedState = reducer(hook.memoizedState, update.action as A);\n update = update.next;\n }\n hook.queue = null;\n\n const dispatch: Dispatch<A> = (action: A) => {\n // UpdateQueue<S> stores `action` as `S | ((prev: S) => S)`, but for\n // useReducer the action is an arbitrary type A — cast to satisfy the\n // shared queue type while keeping the public API fully typed.\n const update = { action: action as any, next: null };\n\n if (!hook!.queue) {\n hook!.queue = update;\n } else {\n let last = hook!.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [hook.memoizedState, dispatch];\n}\n\nexport default useReducer;\n","/**\n * Returns true when the dependency arrays are different.\n * Used by useEffect, useMemo and useCallback.\n */\nexport const depsChanged = (\n prev: any[] | undefined,\n next: any[] | undefined,\n): boolean => {\n if (!prev || !next) return true;\n if (prev.length !== next.length) return true;\n return next.some((dep, i) => !Object.is(dep, prev[i]));\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Effects collected during render, flushed after commit.\nconst pendingEffects: EffectState[] = [];\n\n// Cleanups deferred from the render phase — fired before new effects run.\nconst pendingCleanups: EffectState[] = [];\n\nfunction useEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run cleanups queued during the render phase (dep-changed effects).\n * Must be called after commit but before flushEffects.\n */\nexport const flushEffectCleanups = (): void => {\n for (const effect of pendingCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/** Run all effects collected during the last render. Called after commit. */\nexport const flushEffects = (): void => {\n for (const effect of pendingEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Walks a fiber's hook linked list\n * and fires the cleanup of every effect hook found on it.\n */\nexport const runEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useEffect;\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Layout effects collected during render, flushed synchronously after commit.\nconst pendingLayoutEffects: EffectState[] = [];\n\n// Layout cleanups deferred from the render phase.\nconst pendingLayoutCleanups: EffectState[] = [];\n\n/**\n * Like `useEffect`, but fires **synchronously after every DOM mutation** and\n * before the browser has a chance to paint. Use this when you need to read\n * layout or synchronously re-style the DOM (tooltips, scroll restoration,\n * measuring element sizes, etc.).\n *\n * Prefer `useEffect` for everything else — `useLayoutEffect` blocks the paint.\n *\n * @example\n * useLayoutEffect(() => {\n * const { height } = ref.current.getBoundingClientRect();\n * setTooltipTop(-height);\n * }, []);\n */\nfunction useLayoutEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useLayoutEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the layout effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingLayoutEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingLayoutCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingLayoutEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run layout cleanups queued during render (dep-changed layout effects).\n * Called synchronously after commit, before flushLayoutEffects.\n */\nexport const flushLayoutEffectCleanups = (): void => {\n for (const effect of pendingLayoutCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/**\n * Run all layout effects collected during the last render.\n * Called synchronously after commit, before the browser paints.\n */\nexport const flushLayoutEffects = (): void => {\n for (const effect of pendingLayoutEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Fires layout cleanups on removed\n * fibers so they don't observe a stale DOM.\n */\nexport const runLayoutEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useLayoutEffect;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type RefObject<T> = { current: T };\n\n/**\n * Returns a stable mutable ref object whose `.current` property is initialised\n * to `initialValue`. The same object is returned on every render — updating\n * `.current` does NOT trigger a re-render.\n *\n * Two common uses:\n * 1. Hold a DOM node: const el = useRef<HTMLDivElement>(null)\n * 2. Hold a mutable value across renders without causing re-renders.\n */\nfunction useRef<T>(initialValue: T): RefObject<T>;\nfunction useRef<T>(initialValue: T | null): RefObject<T | null>;\nfunction useRef<T = undefined>(): RefObject<T | undefined>;\nfunction useRef<T>(initialValue?: T): RefObject<T | undefined> {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useRef must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — create the ref object once and attach it to the linked list.\n const ref: RefObject<T | undefined> = { current: initialValue };\n const newHook = { memoizedState: ref, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n return ref;\n }\n\n // Update — the ref object already exists; return it unchanged.\n // Callers mutate .current directly, which never triggers a re-render.\n return hook.memoizedState as RefObject<T | undefined>;\n}\n\nexport default useRef;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\n\ntype MemoState<T> = {\n value: T;\n deps: any[] | undefined;\n};\n\n/**\n * Returns a memoized value. `factory` is only re-executed when one of the\n * `deps` changes (using `Object.is` comparison), otherwise the cached value\n * from the previous render is returned unchanged.\n *\n * @example\n * const sorted = useMemo(() => [...list].sort(), [list]);\n */\nfunction useMemo<T>(factory: () => T, deps: any[]): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useMemo must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount – compute and cache the initial value.\n const state: MemoState<T> = { value: factory(), deps };\n attachHook(fiber, { memoizedState: state, queue: null, next: null }, prevHook);\n return state.value;\n }\n\n // Update – recompute only when deps changed.\n const prev = hook.memoizedState as MemoState<T>;\n if (depsChanged(prev.deps, deps)) {\n const state: MemoState<T> = { value: factory(), deps };\n hook.memoizedState = state;\n return state.value;\n }\n\n return prev.value;\n}\n\nexport default useMemo;\n","import useMemo from \"./RectifyHookUseMemo\";\n\n/**\n * Returns a memoized callback. The same function reference is returned on\n * every render unless one of the `deps` changes.\n *\n * This is sugar over `useMemo(() => fn, deps)` — it keeps function identity\n * stable so child components that compare props by reference don't re-render\n * unnecessarily.\n *\n * @example\n * const handleClick = useCallback(() => doSomething(id), [id]);\n */\nfunction useCallback<T extends (...args: any[]) => any>(\n callback: T,\n deps: any[],\n): T {\n return useMemo(() => callback, deps);\n}\n\nexport default useCallback;\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { getFiberRendering } from \"./RectifyHookRenderingFiber\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A context object that is also its own Provider component.\n * Both forms are equivalent:\n * jsx(MyContext, { value, children }) // Context as Provider\n * jsx(MyContext.Provider, { value, children }) // Classic Provider form\n */\nexport type RectifyContext<T> = {\n (props: { value: T; children?: any }): null;\n /** Self-reference used by the reconciler to identify Provider fibers. */\n _context: RectifyContext<T>;\n _defaultValue: T;\n _subscribers: Set<Fiber>;\n /** Alias to self — `Context.Provider === Context`. */\n Provider: RectifyContext<T>;\n};\n\n// ---------------------------------------------------------------------------\n// Mark-dirty injection (provided by the reconciler at startup)\n// ---------------------------------------------------------------------------\n\ntype MarkFiberDirty = (fiber: Fiber) => void;\nlet markFiberDirtyFn: MarkFiberDirty | null = null;\n\n/** Injected by the reconciler so context can mark subscriber lanes directly. */\nexport const setMarkFiberDirty = (fn: MarkFiberDirty): void => {\n markFiberDirtyFn = fn;\n};\n\n// ---------------------------------------------------------------------------\n// Per-fiber subscription tracking (for cleanup on unmount)\n// ---------------------------------------------------------------------------\n\n/**\n * Maps each fiber to the contexts it has subscribed to.\n * WeakMap so fibers that become unreachable are GC'd automatically.\n */\nconst fiberSubscriptions = new WeakMap<Fiber, Set<RectifyContext<any>>>();\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a new context. The returned object is itself a Provider component,\n * so both forms below are equivalent:\n *\n * @example\n * const ThemeCtx = createContext<'light' | 'dark'>('light');\n *\n * // Option A – Context used directly as Provider\n * jsx(ThemeCtx, { value: 'dark', children: ... })\n *\n * // Option B – Classic .Provider form\n * jsx(ThemeCtx.Provider, { value: 'dark', children: ... })\n */\nexport function createContext<T>(defaultValue: T): RectifyContext<T> {\n // The function body is intentionally a no-op — the reconciler gives this\n // fiber a ContextProvider work tag and handles it without calling the fn.\n function ProviderFn(_props: { value: T; children?: any }): null {\n return null;\n }\n\n const context = ProviderFn as unknown as RectifyContext<T>;\n context._context = context; // self-reference: identifies Provider fibers\n context._defaultValue = defaultValue;\n context._subscribers = new Set();\n context.Provider = context; // Provider is an alias to self\n\n return context;\n}\n\n/**\n * Reads the current value of `context` for the calling component.\n *\n * Walks up the fiber tree to the nearest matching Provider and reads its\n * `pendingProps.value` directly — no render-time stack required. This means\n * the correct value is always returned even when the Provider did not\n * re-render in the current pass.\n *\n * The component re-renders whenever the nearest Provider supplies a new value\n * (compared with `Object.is`). Unlike other hooks this does NOT consume a\n * hook slot and may be called conditionally.\n *\n * @example\n * const theme = useContext(ThemeCtx); // 'light' | 'dark'\n */\nexport function useContext<T>(context: RectifyContext<T>): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useContext must be used within a function component.\");\n }\n\n // Walk up the fiber tree to find the nearest Provider for this context.\n let ancestor = fiber.return;\n while (ancestor) {\n if ((ancestor.type as any)?._context === context) {\n // Replace any stale subscription from the previous incarnation of this\n // fiber (its alternate) so the subscriber set never accumulates stale refs.\n if (fiber.alternate) {\n context._subscribers.delete(fiber.alternate);\n const altSet = fiberSubscriptions.get(fiber.alternate);\n if (altSet) {\n altSet.delete(context);\n if (altSet.size === 0) fiberSubscriptions.delete(fiber.alternate);\n }\n }\n\n context._subscribers.add(fiber);\n let ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) {\n ctxSet = new Set();\n fiberSubscriptions.set(fiber, ctxSet);\n }\n ctxSet.add(context);\n\n // Read the value straight from the Provider's pending props.\n // This is always correct: if the Provider re-rendered this pass its\n // pendingProps hold the new value; if it didn't, pendingProps equals\n // the last committed value (copied by createWorkInProgress).\n return ancestor.pendingProps.value as T;\n }\n ancestor = ancestor.return;\n }\n\n // No Provider found — return the default value (no subscription needed).\n return context._defaultValue;\n}\n\n// ---------------------------------------------------------------------------\n// Reconciler helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Mark all subscribers of `context` dirty so they skip the bailout and\n * re-render in the current pass. Called by `beginWork` when a ContextProvider\n * detects that its value has changed. Marks lanes directly instead of\n * scheduling a second render so consumers update in the same render pass.\n */\nexport function notifyContextConsumers<T>(context: RectifyContext<T>): void {\n if (!markFiberDirtyFn) return;\n for (const subscriber of context._subscribers) {\n markFiberDirtyFn(subscriber);\n }\n}\n\n/**\n * Unregister `fiber` from every context it subscribed to.\n * Called during the commit deletion pass.\n */\nexport function clearContextSubscriptions(fiber: Fiber): void {\n const ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) return;\n\n for (const context of ctxSet) {\n context._subscribers.delete(fiber);\n }\n\n fiberSubscriptions.delete(fiber);\n}\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\n\n/**\n * Counter that increments once per `useId` call across the whole render pass.\n * Reset to 0 before each component render via `prepareToUseHooks`.\n * Using a module-level counter keeps IDs stable across concurrent renders\n * because each fiber renders in isolation and the counter is local to the\n * hook slot (stored in memoizedState).\n */\nlet _idCounter = 0;\n\n/** Generate the next unique ID string. */\nconst generateId = (): string => `_r${(_idCounter++).toString(36)}_`;\n\n/**\n * Returns a stable, globally unique ID string that is consistent across\n * server and client renders within the same component instance.\n *\n * The ID is generated once on mount and returned unchanged on every\n * subsequent render — it never changes for the lifetime of the component.\n *\n * @example\n * const inputId = useId();\n * return (\n * <>\n * <label htmlFor={inputId}>Name</label>\n * <input id={inputId} />\n * </>\n * );\n */\nconst useId = (): string => {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useId must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount: generate and permanently store the ID.\n const newHook = {\n memoizedState: generateId(),\n queue: null,\n next: null,\n };\n attachHook(fiber, newHook, prevHook);\n return newHook.memoizedState as string;\n }\n\n // Update: return the already-stored ID unchanged.\n return hook.memoizedState as string;\n};\n\nexport default useId;\n","import { DefaultLane, Lane, Lanes, SyncLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Event priority – updated by the DOM event dispatcher\n// ---------------------------------------------------------------------------\n\nlet currentEventPriority: Lane = DefaultLane;\n\nexport const setCurrentEventPriority = (lane: Lane): void => {\n currentEventPriority = lane;\n};\n\nexport const resetCurrentEventPriority = (): void => {\n currentEventPriority = DefaultLane;\n};\n\n/**\n * Returns the lane that should be assigned to the current state update.\n * Inside a user event handler this will be InputLane; in async callbacks\n * (fetch, timers) it falls back to DefaultLane.\n */\nexport const requestUpdateLane = (): Lane => currentEventPriority;\n\n// ---------------------------------------------------------------------------\n// Rendering lanes – set by the scheduler before each render pass\n// ---------------------------------------------------------------------------\n\nlet currentRenderingLanes: Lanes = SyncLane;\n\nexport const setCurrentRenderingLanes = (lanes: Lanes): void => {\n currentRenderingLanes = lanes;\n};\n\nexport const getCurrentLanePriority = (): Lanes => currentRenderingLanes;\n","import {\n createElementFromRectifyNode,\n Fiber,\n isArray,\n isValidRectifyElement,\n RectifyElement,\n RectifyNode,\n} from \"@rectify-dev/shared\";\nimport { addFlagToFiber, hasPropsChanged } from \"./RectifyFiberService\";\nimport {\n DeletionFlag,\n MoveFlag,\n PlacementFlag,\n RefFlag,\n UpdateFlag,\n} from \"./RectifyFiberFlags\";\nimport {\n createFiberFromRectifyElement,\n createWorkInProgress,\n} from \"./RectifyFiber\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Mutable state threaded through the reconcileChildren pass functions. */\ntype ReconcileState = {\n wip: Fiber;\n newElements: RectifyElement[];\n deletions: Fiber[];\n prev: Fiber | null;\n index: number;\n};\n\n// ---------------------------------------------------------------------------\n// Fiber creation helpers\n// ---------------------------------------------------------------------------\n\n/** Reuse an existing fiber, marking it for update if its props changed. */\nconst reuseOrCreate = (\n oldFiber: Fiber,\n element: RectifyElement,\n wip: Fiber,\n): Fiber => {\n const newFiber = createWorkInProgress(oldFiber, element.props);\n\n if (hasPropsChanged(oldFiber.memoizedProps, element.props)) {\n addFlagToFiber(newFiber, UpdateFlag);\n }\n // Track ref changes independently so refs get attached/detached even when\n // no other props changed.\n if ((oldFiber.memoizedProps?.ref ?? null) !== (element.props?.ref ?? null)) {\n addFlagToFiber(newFiber, RefFlag);\n }\n\n newFiber.return = wip;\n return newFiber;\n};\n\n/** Create a brand-new fiber for `element` and mark it for DOM placement. */\nconst createAndPlace = (element: RectifyElement, wip: Fiber): Fiber => {\n const newFiber = createFiberFromRectifyElement(element);\n newFiber.type = element.type; // createFiberFromRectifyElement leaves type null\n addFlagToFiber(newFiber, PlacementFlag);\n newFiber.return = wip;\n return newFiber;\n};\n\n/**\n * Append `fiber` to the WIP child list at `index` and return it.\n * `prev` is the previously appended sibling (null for the first child).\n */\nconst appendFiber = (\n fiber: Fiber,\n prev: Fiber | null,\n index: number,\n wip: Fiber,\n): Fiber => {\n fiber.index = index;\n if (!prev) wip.child = fiber;\n else prev.sibling = fiber;\n return fiber;\n};\n\n// ---------------------------------------------------------------------------\n// Keyed map helpers\n// ---------------------------------------------------------------------------\n\ntype OldFiberStructures = {\n /** Fibers that carry an explicit key — looked up by key. */\n keyedMap: Map<string | number, Fiber>;\n /**\n * Fibers with no explicit key — grouped by type and consumed in order.\n * Matching by type means a component that shifts position (e.g. because a\n * sibling is conditionally inserted before it) is still reused rather than\n * unmounted and remounted.\n */\n unkeyedByType: Map<unknown, Fiber[]>;\n};\n\n/**\n * Partition remaining old fibers into keyed (explicit key) and unkeyed\n * (matched by type in order of appearance) buckets.\n */\nconst buildOldFiberStructures = (\n firstRemaining: Fiber | null,\n): OldFiberStructures => {\n const keyedMap = new Map<string | number, Fiber>();\n const unkeyedByType = new Map<unknown, Fiber[]>();\n let fiber: Fiber | null = firstRemaining;\n\n while (fiber) {\n if (fiber.key !== null && fiber.key !== undefined) {\n keyedMap.set(fiber.key, fiber);\n } else {\n const pool = unkeyedByType.get(fiber.type);\n if (pool) pool.push(fiber);\n else unkeyedByType.set(fiber.type, [fiber]);\n }\n fiber = fiber.sibling;\n }\n\n return { keyedMap, unkeyedByType };\n};\n\n// ---------------------------------------------------------------------------\n// Reconcile passes\n// ---------------------------------------------------------------------------\n\n/**\n * Sequential scan — fast path, no reordering.\n * Walks both lists left-to-right by index as long as keys match consecutively.\n * Stops at the first key divergence and hands the remainder to reconcileKeyed.\n * Returns the index at which it stopped and the next unconsumed old fiber.\n */\nconst reconcileSequential = (\n state: ReconcileState,\n firstOldFiber: Fiber | null,\n): { stoppedAt: number; oldFiber: Fiber | null } => {\n let oldFiber = firstOldFiber;\n\n for (let i = 0; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n\n if (!oldFiber) return { stoppedAt: i, oldFiber: null }; // old list exhausted\n if (oldFiber.key !== elementKey) return { stoppedAt: i, oldFiber }; // keys diverged\n\n if (oldFiber.type === elementType) {\n state.prev = appendFiber(\n reuseOrCreate(oldFiber, element, state.wip),\n state.prev,\n state.index++,\n state.wip,\n );\n } else if (elementKey !== null) {\n // Same explicit key, different type — the old fiber is definitively\n // replaced; delete it and place the new one.\n addFlagToFiber(oldFiber, DeletionFlag);\n state.deletions.push(oldFiber);\n state.prev = appendFiber(\n createAndPlace(element, state.wip),\n state.prev,\n state.index++,\n state.wip,\n );\n } else {\n // Unkeyed type mismatch — stop and let reconcileKeyed match by type.\n // Do NOT delete the old fiber here; it may match a later new element.\n return { stoppedAt: i, oldFiber };\n }\n\n oldFiber = oldFiber.sibling;\n }\n\n return { stoppedAt: state.newElements.length, oldFiber };\n};\n\n/**\n * Keyed lookup — handles reordering, insertions, and removals.\n * Fibers with explicit keys are matched by key.\n * Fibers with no key are matched by type in order of appearance — this means\n * a component that shifts position because a sibling is conditionally inserted\n * before it is still reused rather than unmounted and remounted.\n */\nconst reconcileKeyed = (\n state: ReconcileState,\n startAt: number,\n remainingOldFiber: Fiber | null,\n): void => {\n const { keyedMap, unkeyedByType } = buildOldFiberStructures(remainingOldFiber);\n\n // lastPlacedIndex tracks the highest committed index we have seen.\n // Any reused fiber whose committed index is below it was moved rightward.\n let lastPlacedIndex = 0;\n\n for (let i = startAt; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n\n let matched: Fiber | null = null;\n\n if (elementKey !== null) {\n // Explicit key — look up by key.\n const candidate = keyedMap.get(elementKey) ?? null;\n if (candidate && candidate.type === elementType) {\n keyedMap.delete(elementKey);\n matched = candidate;\n }\n } else {\n // No key — take the first queued fiber of the same type (if any).\n const pool = unkeyedByType.get(elementType);\n if (pool?.length) matched = pool.shift()!;\n }\n\n if (matched) {\n const newFiber = reuseOrCreate(matched, element, state.wip);\n\n if (matched.index < lastPlacedIndex) {\n addFlagToFiber(newFiber, MoveFlag); // moved right — needs re-insertion\n } else {\n lastPlacedIndex = matched.index;\n }\n\n state.prev = appendFiber(newFiber, state.prev, state.index++, state.wip);\n } else {\n state.prev = appendFiber(\n createAndPlace(element, state.wip),\n state.prev,\n state.index++,\n state.wip,\n );\n }\n }\n\n // Delete all remaining unmatched fibers.\n for (const orphan of keyedMap.values()) {\n addFlagToFiber(orphan, DeletionFlag);\n state.deletions.push(orphan);\n }\n for (const pool of unkeyedByType.values()) {\n for (const orphan of pool) {\n addFlagToFiber(orphan, DeletionFlag);\n state.deletions.push(orphan);\n }\n }\n};\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise the raw `children` value into a flat array of `RectifyNode` items\n * ready to be mapped through `createElementFromRectifyNode`.\n */\nconst toChildArray = (children: RectifyNode): RectifyNode[] => {\n if (children == null || typeof children === \"boolean\") return [];\n if (isArray(children)) return children as RectifyNode[];\n return [children as RectifyNode];\n};\n\nexport const reconcileChildren = (wip: Fiber, children: RectifyNode): void => {\n const newElements = toChildArray(children)\n .map(createElementFromRectifyNode)\n .filter(isValidRectifyElement);\n\n const state: ReconcileState = {\n wip,\n newElements,\n deletions: [],\n prev: null,\n index: 0,\n };\n const firstOldFiber: Fiber | null = wip.alternate?.child ?? null;\n\n const { stoppedAt, oldFiber } = reconcileSequential(state, firstOldFiber);\n\n if (stoppedAt < newElements.length) {\n // Sequential scan stopped early — resolve the remainder by key.\n reconcileKeyed(state, stoppedAt, oldFiber);\n } else {\n // Pass 1 consumed all new elements — delete any leftover old fibers.\n let leftover: Fiber | null = oldFiber;\n while (leftover) {\n addFlagToFiber(leftover, DeletionFlag);\n state.deletions.push(leftover);\n leftover = leftover.sibling;\n }\n }\n\n if (state.prev) state.prev.sibling = null; // terminate the new sibling chain\n if (state.deletions.length) wip.deletions = state.deletions;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { Lanes } from \"./RectifyFiberLanes\";\n\nexport type UpdateQueue = {\n lanes: Lanes;\n fiber: Fiber;\n next: UpdateQueue | null;\n};\n\ntype Instance = {\n head: UpdateQueue | null;\n tail: UpdateQueue | null;\n};\n\nconst instance: Instance = {\n head: null,\n tail: null,\n};\n\nconst enqueueUpdate = (update: UpdateQueue): void => {\n update.next = null;\n\n if (instance.tail === null) {\n instance.head = update;\n instance.tail = update;\n return;\n }\n\n instance.tail.next = update;\n instance.tail = update;\n};\n\nconst dequeueUpdate = (): UpdateQueue | null => {\n const first = instance.head;\n if (first === null) {\n return null;\n }\n\n instance.head = first.next;\n\n if (instance.head === null) {\n instance.tail = null;\n }\n\n first.next = null;\n return first;\n};\n\n/** Returns true when there is at least one pending update in the queue. */\nconst hasUpdate = (): boolean => instance.head !== null;\n\nexport { enqueueUpdate, dequeueUpdate, hasUpdate };\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { SuspenseComponent } from \"./RectifyFiberWorkTags\";\nimport { enqueueUpdate } from \"./RectifyFiberConcurrentUpdate\";\nimport { scheduleRenderLane } from \"./RectifyFiberScheduler\";\nimport { DefaultLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Suspension state\n// ---------------------------------------------------------------------------\n\n/**\n * Tracks which Suspense fibers are currently suspended.\n *\n * We key by the \"stable\" fiber — the committed (current) side of the\n * alternate pair — so the state survives across WIP ↔ current swaps.\n * The WeakSet lets GC reclaim entries when boundaries are unmounted.\n */\nconst suspendedBoundaries = new WeakSet<Fiber>();\n\n/** Resolve the committed side of a fiber for stable identity. */\nconst stableFiber = (fiber: Fiber): Fiber => fiber.alternate ?? fiber;\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/** Returns true when the Suspense boundary is currently showing its fallback. */\nexport const isSuspendedBoundary = (fiber: Fiber): boolean =>\n suspendedBoundaries.has(stableFiber(fiber));\n\n/**\n * Walk up the return chain and return the nearest ancestor whose workTag\n * is SuspenseComponent, or null if there is none.\n */\nexport const findNearestSuspenseBoundary = (fiber: Fiber): Fiber | null => {\n let current = fiber.return;\n while (current) {\n if (current.workTag === SuspenseComponent) return current;\n current = current.return;\n }\n return null;\n};\n\n/**\n * Called by the work loop when a child throws a thenable (promise).\n *\n * Responsibilities:\n * 1. Mark the boundary as suspended so `beginWork` renders the fallback.\n * 2. Reset its partial render (clear child / deletions).\n * 3. Subscribe to the thenable — when it resolves, clear the suspended\n * state and schedule a re-render of the boundary.\n */\nexport const handleSuspendedWork = (\n boundary: Fiber,\n thenable: Promise<any>,\n): void => {\n const stable = stableFiber(boundary);\n\n // Avoid double-subscribing if a second suspend fires for the same boundary.\n if (suspendedBoundaries.has(stable)) return;\n suspendedBoundaries.add(stable);\n\n // Discard any partially-rendered children so beginWork starts fresh\n // and reconciles against the fallback instead.\n boundary.child = null;\n boundary.deletions = null;\n\n thenable.then(\n () => {\n // Module loaded / promise resolved — un-suspend and re-render.\n suspendedBoundaries.delete(stable);\n enqueueUpdate({ lanes: DefaultLane, fiber: stable, next: null });\n scheduleRenderLane(DefaultLane);\n },\n () => {\n // Rejection: un-suspend so error boundaries (future work) can take over.\n suspendedBoundaries.delete(stable);\n },\n );\n};\n\n/** Returns true for any value that looks like a thenable (Promise or custom). */\nexport const isThenable = (value: unknown): value is Promise<any> =>\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as any).then === \"function\";\n","import { Fiber, isFunction, shallowEqual, LazyComponent as LazyComponentType } from \"@rectify-dev/shared\";\nimport {\n FunctionComponent,\n HostComponent,\n HostRoot,\n ContextProvider,\n MemoComponent,\n FragmentComponent,\n LazyComponent,\n SuspenseComponent,\n ClassComponent,\n PortalComponent,\n} from \"./RectifyFiberWorkTags\";\nimport { withHooks, notifyContextConsumers } from \"@rectify-dev/hook\";\nimport { createWorkInProgress } from \"./RectifyFiber\";\nimport { getCurrentLanePriority } from \"./RectifyFiberRenderPriority\";\nimport { reconcileChildren } from \"./RectifyFiberReconcileChildren\";\nimport { isSuspendedBoundary } from \"./RectifyFiberSuspense\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Returns true when this fiber has no own pending work in the current pass. */\nconst hasNoPendingWork = (wip: Fiber): boolean =>\n !(wip.lanes & getCurrentLanePriority());\n\n/** Returns true when this is an update (not a mount). */\nconst isUpdate = (wip: Fiber): boolean => wip.alternate !== null;\n\n/**\n * Applies all queued setState updates against `currentState` and returns the\n * resulting next state. Each functional updater receives the state produced\n * by the previous updater in the same batch, matching React semantics.\n */\nconst flushStateQueue = <S, P>(\n currentState: S,\n props: P,\n queue: Array<Partial<S> | ((s: S, p: P) => Partial<S>)>,\n): S => {\n let state = currentState;\n for (const update of queue) {\n const partial =\n typeof update === \"function\" ? update(state, props) : update;\n state = { ...state, ...partial };\n }\n return state;\n};\n\n/**\n * Runs a function component (or memo-wrapped component) through hooks,\n * then reconciles the output into children.\n */\nconst renderFunctionComponent = (wip: Fiber, Component: Function): void => {\n const ComponentWithHooks = withHooks(wip, Component as any);\n const children = ComponentWithHooks(wip.pendingProps);\n reconcileChildren(wip, children);\n};\n\n/** Reads the context object off a ContextProvider fiber's type. */\nconst getProviderContext = (wip: Fiber) =>\n (wip.type as unknown as { _context: any })._context;\n\n/**\n * Bailout helper: re-links the current tree's children as WIP nodes under\n * `wip` without calling the component function. Each cloned child will be\n * visited by the work loop and may itself bail out or re-render depending on\n * its own pending lanes.\n */\nexport const cloneChildFibers = (wip: Fiber): Fiber | null => {\n const currentChild = wip.alternate?.child ?? null;\n if (!currentChild) {\n wip.child = null;\n return null;\n }\n\n let oldChild: Fiber | null = currentChild;\n let prevNewChild: Fiber | null = null;\n\n while (oldChild) {\n const newChild = createWorkInProgress(oldChild, oldChild.pendingProps);\n newChild.return = wip;\n\n if (!prevNewChild) {\n wip.child = newChild;\n } else {\n prevNewChild.sibling = newChild;\n }\n\n prevNewChild = newChild;\n oldChild = oldChild.sibling;\n }\n\n if (prevNewChild) prevNewChild.sibling = null;\n\n return wip.child;\n};\n\n// ---------------------------------------------------------------------------\n// beginWork\n// ---------------------------------------------------------------------------\n\nexport const beginWork = (wip: Fiber): Fiber | null => {\n switch (wip.workTag) {\n case MemoComponent: {\n const memo = wip.type as any;\n const render = memo._render;\n if (!isFunction(render)) break;\n\n // Bailout: use custom comparator when provided, fall back to shallowEqual.\n if (isUpdate(wip) && hasNoPendingWork(wip)) {\n const equal = memo._compare\n ? memo._compare(wip.memoizedProps, wip.pendingProps)\n : shallowEqual(wip.memoizedProps, wip.pendingProps);\n if (equal) return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, render);\n break;\n }\n\n case FunctionComponent: {\n const Component = wip.type;\n if (!isFunction(Component)) break;\n\n // Bailout: props unchanged and no own pending state update.\n // Cloned children let the work loop still descend into any grandchild\n // that does have pending work.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n shallowEqual(wip.memoizedProps, wip.pendingProps)\n ) {\n return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, Component as Function);\n break;\n }\n\n case FragmentComponent:\n case HostRoot:\n case HostComponent: {\n reconcileChildren(wip, wip.pendingProps?.children);\n break;\n }\n\n case ContextProvider: {\n // Bailout: value unchanged and no own pending work.\n // Children are cloned so the work loop still descends into them —\n // each child manages its own bailout independently.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n Object.is(wip.alternate!.memoizedProps?.value, wip.pendingProps?.value)\n ) {\n return cloneChildFibers(wip);\n }\n\n // Reconcile first so WIP child fibers exist before we mark subscribers.\n reconcileChildren(wip, wip.pendingProps?.children);\n\n // Notify subscribers when value changed so they re-render in this pass.\n if (isUpdate(wip)) {\n const prevValue = wip.alternate!.memoizedProps?.value;\n const nextValue = wip.pendingProps?.value;\n if (!Object.is(prevValue, nextValue)) {\n notifyContextConsumers(getProviderContext(wip));\n }\n }\n break;\n }\n\n case SuspenseComponent: {\n // When suspended, render fallback; otherwise render children.\n const children = isSuspendedBoundary(wip)\n ? wip.pendingProps?.fallback\n : wip.pendingProps?.children;\n reconcileChildren(wip, children);\n break;\n }\n\n case ClassComponent: {\n const Ctor = wip.type as any;\n const isMount = !wip.classInstance;\n\n if (isMount) {\n // First render: create the instance and wire setState → reconciler.\n const instance = new Ctor(wip.pendingProps);\n instance._fiber = wip;\n wip.classInstance = instance;\n // Flush any setState calls made inside the constructor.\n if (instance._pendingStateQueue?.length) {\n instance.state = flushStateQueue(\n instance.state,\n instance.props,\n instance._pendingStateQueue,\n );\n instance._pendingStateQueue = [];\n }\n } else {\n const instance = wip.classInstance!;\n\n // Bailout: skip re-render when there is no queued state and the props\n // are shallowly equal to what was rendered last time.\n // We compare against instance.props (set at the end of every render)\n // rather than wip.memoizedProps because memoizedProps is not kept in\n // sync for non-host fibers.\n if (\n hasNoPendingWork(wip) &&\n !instance._pendingStateQueue?.length &&\n shallowEqual(instance.props, wip.pendingProps)\n ) {\n return cloneChildFibers(wip);\n }\n\n // 1. Snapshot the OLD values BEFORE touching anything.\n instance._prevProps = instance.props;\n instance._prevState = { ...instance.state };\n\n // 2. Flush queued setState updates so instance.state is now NEW.\n if (instance._pendingStateQueue?.length) {\n instance.state = flushStateQueue(\n instance.state,\n wip.pendingProps,\n instance._pendingStateQueue,\n );\n instance._pendingStateQueue = [];\n }\n\n instance.props = wip.pendingProps;\n instance._fiber = wip;\n\n // 3. Honour shouldComponentUpdate if defined.\n if (\n isUpdate(wip) &&\n typeof instance.shouldComponentUpdate === \"function\" &&\n !instance.shouldComponentUpdate(wip.pendingProps, instance.state)\n ) {\n return cloneChildFibers(wip);\n }\n }\n\n const children = wip.classInstance!.render();\n reconcileChildren(wip, children);\n break;\n }\n\n case LazyComponent: {\n const lazy = wip.type as unknown as LazyComponentType<any>;\n\n if (lazy._status === \"resolved\") {\n // Module loaded — render the component normally.\n renderFunctionComponent(wip, lazy._result as Function);\n break;\n }\n\n if (lazy._status === \"rejected\") {\n // Module failed — propagate the error (error boundary territory).\n throw lazy._result as Error;\n }\n\n // \"uninitialized\" or \"pending\": kick off / await the load and suspend.\n if (lazy._status === \"uninitialized\") {\n lazy._status = \"pending\";\n lazy._promise = lazy._factory().then(\n (module: any) => {\n lazy._status = \"resolved\";\n // Support both `export default` and bare-default modules.\n lazy._result = (module as any)?.default ?? module;\n },\n (error: unknown) => {\n lazy._status = \"rejected\";\n lazy._result = error as Error;\n },\n );\n }\n\n // Throwing a thenable signals the work loop to suspend the nearest\n // Suspense boundary and schedule a re-render when the promise resolves.\n throw lazy._promise;\n }\n\n case PortalComponent: {\n wip.stateNode = wip.pendingProps.containerInfo;\n reconcileChildren(wip, wip.pendingProps.children);\n break;\n }\n }\n\n return wip.child;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { NoFlags } from \"./RectifyFiberFlags\";\nimport { NoLanes } from \"./RectifyFiberLanes\";\nimport { getCurrentLanePriority } from \"./RectifyFiberRenderPriority\";\n\n// ---------------------------------------------------------------------------\n// bubbleProperties\n// ---------------------------------------------------------------------------\n\n/**\n * Clear this fiber's own lane (it has been processed) and roll up child flags\n * and child lanes from direct children so the work loop can skip clean subtrees.\n */\nexport const bubbleProperties = (wip: Fiber): void => {\n wip.lanes &= ~getCurrentLanePriority();\n let subtreeFlags = NoFlags;\n let childLanes = NoLanes;\n\n let child = wip.child;\n while (child) {\n subtreeFlags |= child.flags | child.subtreeFlags;\n childLanes |= child.lanes | child.childLanes;\n\n child.return = wip;\n child = child.sibling;\n }\n\n wip.subtreeFlags = subtreeFlags;\n wip.childLanes = childLanes;\n};\n\n// ---------------------------------------------------------------------------\n// bubbleFlagsToRoot\n// ---------------------------------------------------------------------------\n\n/**\n * After a concurrent subtree finishes, propagate its flags and lanes up to the\n * root so commitWork knows which parts of the tree need attention.\n */\nexport const bubbleFlagsToRoot = (wip: Fiber): void => {\n let current: Fiber = wip;\n let parent = current.return;\n\n while (parent) {\n parent.subtreeFlags |= current.flags | current.subtreeFlags;\n parent.childLanes |= current.lanes | current.childLanes;\n current = parent;\n parent = parent.return;\n }\n};\n\n// ---------------------------------------------------------------------------\n// completeUnitOfWork\n// ---------------------------------------------------------------------------\n\n/**\n * Walk back up the tree after a leaf is reached: bubble properties on each\n * completed unit, then move to its sibling or continue up to the parent.\n * Returns null when `stopAt` is reached (the work loop's root).\n */\nexport const completeUnitOfWork = (unit: Fiber, stopAt: Fiber): Fiber | null => {\n let completed: Fiber | null = unit;\n\n while (completed) {\n bubbleProperties(completed);\n\n if (completed === stopAt) return null;\n if (completed.sibling) return completed.sibling;\n\n completed = completed.return;\n }\n\n return null;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { Lanes, SyncLane, InputLane } from \"./RectifyFiberLanes\";\nimport { createWorkInProgress } from \"./RectifyFiber\";\nimport {\n shouldYield,\n getResumeCursor,\n setResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\nimport { beginWork } from \"./RectifyFiberBeginWork\";\nimport {\n completeUnitOfWork,\n bubbleFlagsToRoot,\n} from \"./RectifyFiberCompleteWork\";\nimport {\n isThenable,\n findNearestSuspenseBoundary,\n handleSuspendedWork,\n} from \"./RectifyFiberSuspense\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Swap the committed fiber (`current`) for its work-in-progress twin in the\n * parent's child/sibling chain so the work loop operates on the WIP tree.\n */\nconst swapCurrentForWip = (current: Fiber, wip: Fiber): void => {\n const parent = wip.return;\n if (!parent) return;\n\n if (parent.child === current) {\n parent.child = wip;\n return;\n }\n\n let prevSibling = parent.child;\n while (prevSibling && prevSibling.sibling !== current) {\n prevSibling = prevSibling.sibling;\n }\n if (prevSibling) prevSibling.sibling = wip;\n};\n\n// ---------------------------------------------------------------------------\n// Work loops\n// ---------------------------------------------------------------------------\n\n/** Synchronous work loop — runs to completion without yielding. */\nexport const workLoop = (wipRoot: Fiber): void => {\n let workInProgress: Fiber | null = wipRoot;\n\n while (workInProgress) {\n try {\n const next = beginWork(workInProgress);\n workInProgress = next ?? completeUnitOfWork(workInProgress, wipRoot);\n } catch (thrown) {\n if (isThenable(thrown) && workInProgress) {\n const boundary = findNearestSuspenseBoundary(workInProgress);\n if (boundary) {\n handleSuspendedWork(boundary, thrown);\n // Re-process the boundary, this time rendering the fallback.\n workInProgress = boundary;\n continue;\n }\n }\n throw thrown;\n }\n }\n};\n\n/**\n * Interruptible work loop used for non-urgent lanes (Default / Transition / Idle).\n * Yields back to the browser when the frame budget is exceeded; the scheduler\n * will re-post a task to continue with the remaining pending lanes.\n * Returns true when the tree is fully processed, false when it yielded early.\n */\nexport const workLoopConcurrent = (wipRoot: Fiber): boolean => {\n // Resume from the saved cursor if we yielded on a previous task,\n // otherwise start fresh from the WIP root.\n let workInProgress: Fiber | null = getResumeCursor() ?? wipRoot;\n clearResumeCursor();\n\n while (workInProgress && !shouldYield()) {\n try {\n const next = beginWork(workInProgress);\n workInProgress = next ?? completeUnitOfWork(workInProgress, wipRoot);\n } catch (thrown) {\n if (isThenable(thrown) && workInProgress) {\n const boundary = findNearestSuspenseBoundary(workInProgress);\n if (boundary) {\n handleSuspendedWork(boundary, thrown);\n // Re-process the boundary, this time rendering the fallback.\n workInProgress = boundary;\n continue;\n }\n }\n throw thrown;\n }\n }\n\n if (workInProgress !== null) {\n // Yielded early – save the cursor so the next task resumes here.\n setResumeCursor(workInProgress);\n return false;\n }\n\n return true;\n};\n\n/**\n * Descend into the fiber tree and process only fibers that have pending work\n * on `renderLanes`. Returns true when fully processed, false if yielded early.\n */\nexport const workLoopOnFiberLanes = (\n wipRoot: Fiber,\n renderLanes: Lanes,\n): boolean => {\n if (wipRoot.lanes & renderLanes) {\n const wip = createWorkInProgress(wipRoot, wipRoot.pendingProps);\n swapCurrentForWip(wipRoot, wip);\n\n const isSync = !!(renderLanes & (SyncLane | InputLane));\n const completed = isSync ? (workLoop(wip), true) : workLoopConcurrent(wip);\n\n if (completed) bubbleFlagsToRoot(wip);\n return completed;\n }\n\n if (wipRoot.childLanes & renderLanes) {\n let child: Fiber | null = wipRoot.child;\n while (child) {\n if (!workLoopOnFiberLanes(child, renderLanes)) return false; // propagate early-exit\n child = child.sibling;\n }\n }\n\n return true;\n};\n","import { Fiber, isFunction } from \"@rectify-dev/shared\";\n\n// ---------------------------------------------------------------------------\n// attachRef\n// ---------------------------------------------------------------------------\n\n/**\n * Attach a ref after a node is placed or the ref prop changes.\n * For callback refs, the return value is stored as a cleanup to be called\n * before the next attach or on unmount (React 19-style cleanup refs).\n */\nexport const attachRef = (wip: Fiber): void => {\n const ref = wip.pendingProps?.ref;\n if (!ref) return;\n\n if (isFunction(ref)) {\n const cleanup = ref(wip.stateNode);\n wip.refCleanup = isFunction(cleanup) ? cleanup : null;\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = wip.stateNode;\n }\n};\n\n// ---------------------------------------------------------------------------\n// detachRef\n// ---------------------------------------------------------------------------\n\n/**\n * Detach a ref when the fiber is removed or the ref prop changes.\n * Calls the stored cleanup (if any), otherwise falls back to `ref(null)` /\n * clearing `.current`.\n */\nexport const detachRef = (fiber: Fiber): void => {\n if (fiber.refCleanup) {\n fiber.refCleanup();\n fiber.refCleanup = null;\n return;\n }\n\n const ref = fiber.memoizedProps?.ref;\n if (!ref) return;\n\n if (typeof ref === \"function\") {\n ref(null);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = null;\n }\n};\n","import { precacheFiberNode } from \"@rectify-dev/dom-binding\";\nimport { Fiber } from \"@rectify-dev/shared\";\nimport { getParentDom, getHostSibling } from \"./RectifyFiberService\";\nimport { HostComponent, HostRoot } from \"./RectifyFiberWorkTags\";\nimport { attachRef } from \"./RectifyFiberCommitRef\";\n\n// ---------------------------------------------------------------------------\n// insertIntoParent\n// ---------------------------------------------------------------------------\n\nconst insertIntoParent = (wip: Fiber, node: Node): void => {\n const parentDom = getParentDom(wip);\n\n // Walk up through non-host ancestors looking for a host sibling to use as\n // an insertBefore reference. Only climbing as far as the host parent —\n // stopping at HostComponent/HostRoot prevents us from crossing into a\n // sibling DOM subtree that belongs to a different parent.\n let cursor: Fiber | null = wip;\n while (cursor) {\n const before = getHostSibling(cursor);\n if (before) {\n parentDom.insertBefore(node, before);\n return;\n }\n const parent: Fiber | null = cursor.return;\n // Stop once the immediate parent is itself a host node.\n if (!parent || parent.workTag === HostComponent || parent.workTag === HostRoot) break;\n cursor = parent;\n }\n\n parentDom.appendChild(node);\n};\n\n// ---------------------------------------------------------------------------\n// placeNode\n// ---------------------------------------------------------------------------\n\n/**\n * Physically place or re-place `node` in the DOM and attach its ref.\n * Used for both PlacementFlag (new nodes) and MoveFlag (reordered nodes).\n */\nexport const placeNode = (wip: Fiber, node: Node): void => {\n insertIntoParent(wip, node);\n precacheFiberNode(wip, node);\n attachRef(wip);\n};\n","import { applyPropsToDom, precacheFiberNode } from \"@rectify-dev/dom-binding\";\nimport { Fiber } from \"@rectify-dev/shared\";\nimport { MoveFlag, PlacementFlag, RefFlag, UpdateFlag } from \"./RectifyFiberFlags\";\nimport {\n createDomElementFromFiber,\n hasFlagOnFiber,\n removeFlagFromFiber,\n} from \"./RectifyFiberService\";\nimport { HostComponent, HostText } from \"./RectifyFiberWorkTags\";\nimport { attachRef, detachRef } from \"./RectifyFiberCommitRef\";\nimport { placeNode } from \"./RectifyFiberCommitPlacement\";\n\n// ---------------------------------------------------------------------------\n// Host element\n// ---------------------------------------------------------------------------\n\nconst commitMutationHostComponent = (wip: Fiber): void => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n applyPropsToDom(node, wip.memoizedProps, wip.pendingProps);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n // Node already exists in the DOM but at the wrong position — re-insert.\n (wip.stateNode as Element).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n applyPropsToDom(wip.stateNode, wip.memoizedProps, wip.pendingProps);\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n // ref attachment is handled exclusively via PlacementFlag/MoveFlag (placeNode)\n // and RefFlag (below) so we never double-invoke callback refs on plain updates.\n }\n\n if (hasFlagOnFiber(wip, RefFlag)) {\n // Detach the previously committed ref, then attach the incoming one.\n detachRef(wip); // reads memoizedProps.ref → sets .current = null\n attachRef(wip); // reads pendingProps.ref → sets .current = stateNode\n removeFlagFromFiber(wip, RefFlag);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Host text\n// ---------------------------------------------------------------------------\n\nconst commitMutationHostText = (wip: Fiber): void => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n (wip.stateNode as Text).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n if (wip.memoizedProps !== wip.pendingProps) {\n (wip.stateNode as Text).nodeValue = String(wip.pendingProps);\n }\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Dispatcher\n// ---------------------------------------------------------------------------\n\nexport const commitMutation = (fiber: Fiber): void => {\n switch (fiber.workTag) {\n case HostComponent:\n commitMutationHostComponent(fiber);\n break;\n case HostText:\n commitMutationHostText(fiber);\n break;\n }\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { runEffectCleanups, clearContextSubscriptions } from \"@rectify-dev/hook\";\nimport { ClassComponent, HostComponent, HostText } from \"./RectifyFiberWorkTags\";\nimport { detachRef } from \"./RectifyFiberCommitRef\";\n\n// ---------------------------------------------------------------------------\n// removeHostTree\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively unmount a fiber subtree:\n * 1. Call componentWillUnmount on class component instances.\n * 2. Run effect cleanups and unsubscribe from contexts.\n * 3. Detach refs and remove the DOM node for host fibers.\n * 4. Recurse into children.\n */\nexport const removeHostTree = (fiber: Fiber): void => {\n if (fiber.workTag === ClassComponent) {\n fiber.classInstance?.componentWillUnmount?.();\n }\n\n if (fiber.memoizedState) {\n runEffectCleanups(fiber);\n }\n clearContextSubscriptions(fiber);\n\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n detachRef(fiber);\n (fiber.stateNode as Element)?.remove();\n }\n\n let child = fiber.child;\n while (child) {\n removeHostTree(child);\n child = child.sibling;\n }\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { NoFlags, MoveFlag, PlacementFlag, RefFlag, UpdateFlag } from \"./RectifyFiberFlags\";\nimport { commitMutation } from \"./RectifyFiberCommitMutation\";\nimport { removeHostTree } from \"./RectifyFiberCommitRemoval\";\nimport { ClassComponent } from \"./RectifyFiberWorkTags\";\n\nconst MutationMask = PlacementFlag | UpdateFlag | MoveFlag | RefFlag;\n\n// ---------------------------------------------------------------------------\n// commitWork\n// ---------------------------------------------------------------------------\n\nexport const commitWork = (finishedWork: Fiber): void => {\n // 1. Remove deleted fibers first so the DOM is clean before mutations.\n if (finishedWork.deletions?.length) {\n finishedWork.deletions.forEach(removeHostTree);\n finishedWork.deletions = null;\n }\n\n // 2. Apply mutations on this fiber, then sync memoizedProps.\n if (finishedWork.flags & MutationMask) {\n commitMutation(finishedWork);\n finishedWork.memoizedProps = finishedWork.pendingProps;\n }\n\n // 3. Recurse into children that have pending mutations.\n if (finishedWork.subtreeFlags & MutationMask) {\n let child = finishedWork.child;\n while (child) {\n commitWork(child);\n child = child.sibling;\n }\n }\n\n // 4. Fire class component lifecycle hooks after the subtree is committed.\n if (finishedWork.workTag === ClassComponent && finishedWork.classInstance) {\n const instance = finishedWork.classInstance;\n const isMount = finishedWork.alternate === null;\n if (isMount) {\n instance.componentDidMount?.();\n } else if (instance._prevState !== undefined) {\n // _prevState is only set when the component actually rendered in this\n // pass (beginWork ClassComponent update path). If the component bailed\n // out it won't be set, so we correctly skip componentDidUpdate.\n instance.componentDidUpdate?.(\n instance._prevProps,\n instance._prevState,\n );\n instance._prevProps = undefined;\n instance._prevState = undefined;\n }\n }\n\n // 5. Reset flags after this node is fully committed.\n finishedWork.flags = NoFlags;\n finishedWork.subtreeFlags = NoFlags;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { FiberRoot } from \"./RectifyFiberTypes\";\nimport { workLoopOnFiberLanes } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport { markContainerAsRoot } from \"@rectify-dev/dom-binding\";\nimport {\n flushEffects,\n flushEffectCleanups,\n flushLayoutEffects,\n flushLayoutEffectCleanups,\n} from \"@rectify-dev/hook\";\nimport {\n dequeueUpdate,\n hasUpdate,\n UpdateQueue,\n} from \"./RectifyFiberConcurrentUpdate\";\nimport { setCurrentRenderingLanes } from \"./RectifyFiberRenderPriority\";\nimport { clearResumeCursor } from \"./RectifyFiberScheduler\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\n\n// When true, setState calls inside useLayoutEffect must NOT schedule async\n// tasks – they will be drained synchronously by flushLayoutPhase instead.\nlet _isFlushingLayoutEffects = false;\nexport const getIsFlushingLayoutEffects = (): boolean => _isFlushingLayoutEffects;\nexport const setIsFlushingLayoutEffects = (value: boolean): void => { _isFlushingLayoutEffects = value; };\n\n// ---------------------------------------------------------------------------\n// Passive effects\n// ---------------------------------------------------------------------------\n\n// A single reusable channel; the port1 handler is replaced each time so\n// only the most recently scheduled flush ever runs.\nconst passiveChannel = new MessageChannel();\n\nexport const schedulePassiveEffects = (): void => {\n passiveChannel.port1.onmessage = () => {\n flushEffectCleanups();\n flushEffects();\n };\n passiveChannel.port2.postMessage(null);\n};\n\n// ---------------------------------------------------------------------------\n// Layout phase\n// ---------------------------------------------------------------------------\n\n/**\n * Flush layout effects synchronously, then re-render and re-commit any state\n * updates triggered inside them – looping until stable. This mirrors React's\n * behavior where setState inside useLayoutEffect causes a synchronous\n * re-render that the browser never sees as an intermediate frame.\n */\nexport const flushLayoutPhase = (fiberRoot: FiberRoot): void => {\n while (true) {\n setIsFlushingLayoutEffects(true);\n flushLayoutEffectCleanups();\n flushLayoutEffects();\n setIsFlushingLayoutEffects(false);\n\n // No updates were triggered during layout effects – we are done.\n if (!hasUpdate()) break;\n\n // Drain the updates synchronously (they were enqueued with SyncLane).\n flushPendingUpdates();\n setCurrentRenderingLanes(SyncLane);\n const completed = workLoopOnFiberLanes(fiberRoot.root, SyncLane);\n if (!completed) break; // shouldn't happen for sync lanes\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Loop back to flush any layout effects produced by this new render.\n }\n};\n\n// ---------------------------------------------------------------------------\n// Pending update propagation\n// ---------------------------------------------------------------------------\n\nexport const flushPendingUpdates = (): void => {\n let update = dequeueUpdate();\n while (update) {\n propagateLaneToAncestors(update);\n update = dequeueUpdate();\n }\n};\n\n/**\n * Stamps `lane` onto the target fiber and bubbles it up as `childLanes` so\n * `workLoopOnFiberLanes` knows to descend into that subtree.\n */\nconst propagateLaneToAncestors = (updateQueue: UpdateQueue): void => {\n const lane = updateQueue.lanes;\n let fiber: Fiber | null = updateQueue.fiber;\n\n // Mark the fiber itself (and its alternate) with the lane.\n fiber.lanes |= lane;\n if (fiber.alternate) fiber.alternate.lanes |= lane;\n\n // Walk up and set childLanes on every ancestor.\n fiber = fiber.return;\n while (fiber) {\n fiber.childLanes |= lane;\n if (fiber.alternate) fiber.alternate.childLanes |= lane;\n fiber = fiber.return;\n }\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { setScheduleRerender, setMarkFiberDirty } from \"@rectify-dev/hook\";\nimport { enqueueUpdate } from \"./RectifyFiberConcurrentUpdate\";\nimport {\n requestUpdateLane,\n getCurrentLanePriority,\n} from \"./RectifyFiberRenderPriority\";\nimport { scheduleRenderLane } from \"./RectifyFiberScheduler\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\nimport { getIsFlushingLayoutEffects } from \"./RectifyFiberFlushPhase\";\n\n// ---------------------------------------------------------------------------\n// Injected callbacks — wired into the hook layer at startup\n// ---------------------------------------------------------------------------\n\n/**\n * Called by useState's dispatcher when state changes.\n * Enqueues the fiber for re-render on the appropriate lane.\n */\nconst onScheduleRerender = (fiber: Fiber): void => {\n // Inside useLayoutEffect: force SyncLane so the flush loop picks it up\n // synchronously instead of scheduling an async task.\n const lane = getIsFlushingLayoutEffects() ? SyncLane : requestUpdateLane();\n enqueueUpdate({ lanes: lane, fiber, next: null });\n if (!getIsFlushingLayoutEffects()) {\n scheduleRenderLane(lane);\n }\n};\n\n/**\n * Called by notifyContextConsumers when a Provider value changes.\n * Marks the subscriber's WIP fiber dirty so it fails the bailout and\n * re-renders in the current pass — no second render pass needed.\n *\n * The subscriber set holds committed (current) fibers; their WIP is .alternate.\n * We also bubble childLanes up the WIP tree so workLoopOnFiberLanes descends\n * into the subscriber's subtree.\n */\nconst onMarkFiberDirty = (fiber: Fiber): void => {\n const lane = getCurrentLanePriority();\n\n // Mark both sides so the lane survives createWorkInProgress copies.\n fiber.lanes |= lane;\n const wip = fiber.alternate;\n if (!wip) return;\n\n wip.lanes |= lane;\n\n let parent = wip.return;\n while (parent) {\n if ((parent.childLanes & lane) === lane) break; // already covered above\n parent.childLanes |= lane;\n parent = parent.return;\n }\n};\n\nsetScheduleRerender(onScheduleRerender);\nsetMarkFiberDirty(onMarkFiberDirty);\n","import {\n markContainerAsRoot,\n injectEventPriorityCallbacks,\n} from \"@rectify-dev/dom-binding\";\nimport { workLoopOnFiberLanes } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport { getScheduledFiberRoot } from \"./RectifyFiberInstance\";\nimport {\n setCurrentEventPriority,\n resetCurrentEventPriority,\n setCurrentRenderingLanes,\n} from \"./RectifyFiberRenderPriority\";\nimport {\n scheduleRenderLane,\n setWorkCallback,\n getResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\nimport {\n flushLayoutPhase,\n flushPendingUpdates,\n schedulePassiveEffects,\n} from \"./RectifyFiberFlushPhase\";\n// Side-effect import: wires onScheduleRerender / onMarkFiberDirty into the hook layer.\nimport \"./RectifyFiberHookBridge\";\n\n// ---------------------------------------------------------------------------\n// Wire up event priority into dom-binding\n// ---------------------------------------------------------------------------\ninjectEventPriorityCallbacks(\n setCurrentEventPriority,\n resetCurrentEventPriority,\n);\n\n// ---------------------------------------------------------------------------\n// Work callback – called by the scheduler for each lane tier\n// ---------------------------------------------------------------------------\nconst performWork = (lanes: number): void => {\n const fiberRoot = getScheduledFiberRoot();\n if (!fiberRoot) return;\n\n // Only flush pending updates when starting a fresh render,\n // not when resuming a yielded concurrent work loop.\n if (!getResumeCursor()) flushPendingUpdates();\n\n setCurrentRenderingLanes(lanes);\n const completed = workLoopOnFiberLanes(fiberRoot.root, lanes);\n\n if (!completed) {\n // workLoopConcurrent saved the cursor inside RectifyFiberScheduler.\n // Re-post a task for the same lane so work continues next frame.\n scheduleRenderLane(lanes);\n return;\n }\n\n // Tree fully reconciled – safe to commit.\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n\nsetWorkCallback(performWork);\n","import { RectifyNode } from \"@rectify-dev/shared\";\nimport { FiberRoot } from \"./RectifyFiberTypes\";\nimport { createHostRootFiber, createWorkInProgress } from \"./RectifyFiber\";\nimport { setScheduledFiberRoot } from \"./RectifyFiberInstance\";\nimport { markContainerAsRoot } from \"@rectify-dev/dom-binding\";\nimport { workLoop } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport { setCurrentRenderingLanes } from \"./RectifyFiberRenderPriority\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\nimport { flushLayoutPhase, schedulePassiveEffects } from \"./RectifyFiberFlushPhase\";\n// Side-effect import: wires up event priority, performWork, and hook callbacks.\nimport \"./RectifyFiberBootstrap\";\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\nexport const createContainer = (container: Element): FiberRoot => {\n return createHostRootFiber(container);\n};\n\nexport const updateContainer = (\n children: RectifyNode,\n fiberRoot: FiberRoot,\n): void => {\n fiberRoot.children = children;\n setScheduledFiberRoot(fiberRoot);\n\n const wipRoot = createWorkInProgress(fiberRoot.root, { children });\n setCurrentRenderingLanes(SyncLane);\n workLoop(wipRoot);\n commitWork(wipRoot);\n fiberRoot.root = wipRoot;\n markContainerAsRoot(wipRoot, fiberRoot.containerDom);\n setScheduledFiberRoot(fiberRoot);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n","import {\n listenToAllEventSupported,\n markContainerAsRoot,\n unmarkContainerAsRoot,\n} from \"@rectify-dev/dom-binding\";\nimport { createContainer, updateContainer } from \"@rectify-dev/reconciler\";\nimport { RectifyNode } from \"@rectify-dev/shared\";\n\ntype RectifyDomRoot = {\n render: (node: RectifyNode) => void;\n unmount: () => void;\n};\n\nexport const createRoot = (container: Element): RectifyDomRoot => {\n const hostRoot = createContainer(container);\n markContainerAsRoot(hostRoot.root, container);\n listenToAllEventSupported(container);\n return {\n render: (node: RectifyNode) => {\n updateContainer(node, hostRoot);\n },\n unmount: () => {\n unmarkContainerAsRoot(container);\n },\n };\n};\n","import { listenToAllEventSupported } from \"@rectify-dev/dom-binding\";\nimport { RECTIFY_PORTAL_TYPE } from \"@rectify-dev/shared\";\nimport type { RectifyKey, RectifyNode, RectifyPortal } from \"@rectify-dev/shared\";\n\nexport const createPortal = (\n children: RectifyNode,\n container: Element,\n key: RectifyKey = null,\n): RectifyPortal => {\n listenToAllEventSupported(container);\n return {\n $$typeof: RECTIFY_PORTAL_TYPE,\n type: null,\n key,\n props: {\n children,\n containerInfo: container,\n },\n };\n};\n","import { FC } from \"@rectify-dev/shared\";\n\nexport type MemoComponent<P = any> = FC<P> & {\n /** Marks this as a memo-wrapped component for the reconciler. */\n _isMemo: true;\n /** The wrapped component that will be called on actual renders. */\n _render: FC<P>;\n /** Custom comparator — defaults to shallow equality when absent. */\n _compare: ((prevProps: P, nextProps: P) => boolean) | null;\n};\n\n/**\n * Wraps a component with a custom props comparator.\n *\n * By default every component already bails out automatically when props are\n * shallowly equal. Use `memo` only when you need a **custom** comparison —\n * for example, deep equality on a specific prop, or ignoring certain keys.\n *\n * @example\n * // Ignore the `style` prop when deciding whether to re-render\n * const Chart = memo(\n * ({ data }) => jsx('canvas', { ... }),\n * (prev, next) => Object.is(prev.data, next.data),\n * );\n */\nexport function memo<P = any>(\n Component: FC<P>,\n compare?: (prevProps: P, nextProps: P) => boolean,\n): MemoComponent<P> {\n const wrapper = ((_props: P) => null) as unknown as MemoComponent<P>;\n wrapper._isMemo = true;\n wrapper._render = Component;\n wrapper._compare = compare ?? null;\n return wrapper;\n}\n","import type { LazyComponent } from \"@rectify-dev/shared\";\n\n/**\n * Lazily loads a component via a dynamic import factory.\n *\n * The returned object is used as a JSX element type and behaves like a normal\n * function component once loaded. While loading it suspends the nearest\n * `<Suspense>` boundary, which renders its `fallback` instead.\n *\n * @example\n * const HeavyChart = lazy(() => import(\"./HeavyChart\"));\n *\n * function App() {\n * return (\n * <Suspense fallback={<Spinner />}>\n * <HeavyChart />\n * </Suspense>\n * );\n * }\n */\nexport const lazy = <T>(\n factory: () => Promise<{ default: T } | T>,\n): LazyComponent<T> => {\n // Use Object.assign so the value has both the call signature (stub) and\n // the marker properties that the reconciler reads at runtime.\n const stub = (() => null) as unknown as LazyComponent<T>;\n return Object.assign(stub, {\n _isLazy: true as const,\n _status: \"uninitialized\" as const,\n _result: null,\n _promise: null,\n _factory: factory,\n });\n};\n","import type { SuspenseProps } from \"@rectify-dev/shared\";\n\n/**\n * Catches thrown promises from any child (including lazy components) and\n * renders `fallback` until they resolve.\n *\n * Marked as a sentinel with `_isSuspense` so the reconciler can identify it\n * without a dedicated $$typeof symbol — consistent with how MemoComponent\n * and ContextProvider are detected.\n *\n * @example\n * <Suspense fallback={<Spinner />}>\n * <LazyPage />\n * </Suspense>\n */\nexport const Suspense = (_props: SuspenseProps): null => null;\n(Suspense as any)._isSuspense = true;\n","import type { RectifyNode } from \"@rectify-dev/shared\";\nimport { scheduleRerender } from \"@rectify-dev/hook\";\n\n/**\n * Base class for Rectify class components.\n *\n * @example\n * class Counter extends Component<{}, { count: number }> {\n * state = { count: 0 };\n *\n * render() {\n * return (\n * <button onClick={() => this.setState({ count: this.state.count + 1 })}>\n * {this.state.count}\n * </button>\n * );\n * }\n * }\n */\nexport class Component<P = {}, S = {}> {\n /** Marks this as a class component for the reconciler. */\n static readonly _isClassComponent = true;\n\n props: P;\n state: S = {} as S;\n\n /**\n * @internal Set by the reconciler when the instance is created so\n * `setState` can enqueue a re-render on the correct fiber.\n */\n _fiber: import(\"@rectify-dev/shared\").Fiber | null = null;\n\n /**\n * @internal Snapshots taken by the reconciler in beginWork before each\n * update render so that `componentDidUpdate` receives the correct prev values.\n * Cleared after `componentDidUpdate` is called.\n */\n _prevProps: P | undefined = undefined;\n _prevState: S | undefined = undefined;\n\n /**\n * @internal Queue of pending setState updates, flushed by the reconciler\n * during beginWork so that prevState snapshots can be taken first.\n */\n _pendingStateQueue: Array<\n Partial<S> | ((prevState: S, prevProps: P) => Partial<S>)\n > = [];\n\n constructor(props: P) {\n this.props = props;\n }\n\n // ---------------------------------------------------------------------------\n // Lifecycle hooks (optional overrides)\n // ---------------------------------------------------------------------------\n\n /** Called once, immediately after the component is inserted into the DOM. */\n componentDidMount?(): void;\n\n /**\n * Called after every re-render.\n * @param prevProps — props before the update\n * @param prevState — state before the update\n */\n componentDidUpdate?(prevProps: P, prevState: S): void;\n\n /** Called immediately before the component is removed from the DOM. */\n componentWillUnmount?(): void;\n\n /**\n * Return false to skip re-rendering when props or state haven't changed.\n * Defaults to always re-render.\n */\n shouldComponentUpdate?(nextProps: P, nextState: S): boolean;\n\n // ---------------------------------------------------------------------------\n // Core API\n // ---------------------------------------------------------------------------\n\n /**\n * Merges `partialState` into the current state and schedules a re-render.\n * Accepts either a plain partial state object or an updater function.\n */\n setState(\n partialState: Partial<S> | ((prevState: S, prevProps: P) => Partial<S>),\n ): void {\n // Enqueue rather than apply immediately so that beginWork can snapshot\n // prevState BEFORE flushing — giving componentDidUpdate the correct value.\n this._pendingStateQueue.push(partialState);\n\n if (this._fiber) {\n scheduleRerender(this._fiber);\n }\n }\n\n /**\n * Must be implemented by every class component.\n * Returns the subtree to render.\n */\n render(): RectifyNode {\n return null;\n }\n}\n"]}
1
+ {"version":3,"sources":["../../rectify-dom-binding/src/events/RectifyEventRegistry.ts","../../rectify-dom-binding/src/events/__main.ts","../../rectify-dom-binding/src/clients/RectifyDomComponentTree.ts","../../rectify-dom-binding/src/events/SyntheticEvent.ts","../../rectify-dom-binding/src/events/RectifyEventPriority.ts","../../rectify-dom-binding/src/events/RectifyDomEventListener.ts","../../rectify-dom-binding/src/events/RectifyEventListener.ts","../../rectify-dom-binding/src/events/RectifyEvent.ts","../../rectify-dom-binding/src/clients/RectifyDomProperties.ts","../../rectify-reconciler/src/RectifyFiberFlags.ts","../../rectify-reconciler/src/RectifyFiberLanes.ts","../../rectify-reconciler/src/RectifyFiberWorkTags.ts","../../rectify-reconciler/src/RectifyFiberService.ts","../../rectify-reconciler/src/RectifyFiber.ts","../../rectify-reconciler/src/RectifyFiberInstance.ts","../../rectify-reconciler/src/RectifyFiberScheduler.ts","../../rectify-hook/src/RectifyHookRenderingFiber.ts","../../rectify-hook/src/RectifyHook.ts","../../rectify-hook/src/RectifyHookUseState.ts","../../rectify-hook/src/RectifyHookUseReducer.ts","../../rectify-hook/src/RectifyHookDeps.ts","../../rectify-hook/src/RectifyHookUseEffect.ts","../../rectify-hook/src/RectifyHookUseLayoutEffect.ts","../../rectify-hook/src/RectifyHookUseRef.ts","../../rectify-hook/src/RectifyHookUseMemo.ts","../../rectify-hook/src/RectifyHookUseCallback.ts","../../rectify-hook/src/RectifyHookContext.ts","../../rectify-hook/src/RectifyHookUseId.ts","../../rectify-reconciler/src/RectifyFiberRenderPriority.ts","../../rectify-reconciler/src/RectifyFiberReconcileChildren.ts","../../rectify-reconciler/src/RectifyFiberConcurrentUpdate.ts","../../rectify-reconciler/src/RectifyFiberSuspense.ts","../../rectify-reconciler/src/RectifyFiberBeginWork.ts","../../rectify-reconciler/src/RectifyFiberCompleteWork.ts","../../rectify-reconciler/src/RectifyFiberWorkLoop.ts","../../rectify-reconciler/src/RectifyFiberCommitRef.ts","../../rectify-reconciler/src/RectifyFiberCommitPlacement.ts","../../rectify-reconciler/src/RectifyFiberCommitMutation.ts","../../rectify-reconciler/src/RectifyFiberCommitRemoval.ts","../../rectify-reconciler/src/RectifyFiberCommitWork.ts","../../rectify-reconciler/src/RectifyFiberFlushPhase.ts","../../rectify-reconciler/src/RectifyFiberHookBridge.ts","../../rectify-reconciler/src/RectifyFiberBootstrap.ts","../../rectify-reconciler/src/RectifyFiberReconciler.ts","../../rectify-dom/src/RectifyDomRoot.ts","../../rectify-dom/src/RectifyDomPortal.ts","../src/RectifyMemo.ts","../src/RectifyLazy.ts","../src/RectifySuspense.ts","../src/RectifyComponent.ts"],"names":["isFunction","SVG_NS","instance","Component","update","memo","shallowEqual","lazy","RECTIFY_PORTAL_TYPE"],"mappings":"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","file":"index.js","sourcesContent":["import { RectifyDomEventName } from \"./RectifyEventName\";\n\nexport const allNativeEvents: Set<RectifyDomEventName> = new Set();\n\nexport const registrationNameDependencies: {\n [registrationName: string]: Array<RectifyDomEventName>;\n} = {};\n\nexport const nativeEventToRectifyName: Map<RectifyDomEventName, string> =\n new Map();\n\nexport function registerDirectEvent(\n registrationName: string,\n dependencies: Array<RectifyDomEventName>,\n) {\n registrationNameDependencies[registrationName] = dependencies;\n\n for (let i = 0; i < dependencies.length; i++) {\n const dependency = dependencies[i];\n\n allNativeEvents.add(dependency);\n\n if (!nativeEventToRectifyName.has(dependency)) {\n nativeEventToRectifyName.set(dependency, registrationName);\n }\n }\n}\n\nexport function registerNativeEvent() {\n // Mouse\n registerDirectEvent(\"onClick\", [\"click\"]);\n registerDirectEvent(\"onDoubleClick\", [\"dblclick\"]);\n registerDirectEvent(\"onMouseDown\", [\"mousedown\"]);\n registerDirectEvent(\"onMouseUp\", [\"mouseup\"]);\n registerDirectEvent(\"onMouseMove\", [\"mousemove\"]);\n registerDirectEvent(\"onMouseEnter\", [\"mouseenter\"]);\n registerDirectEvent(\"onMouseLeave\", [\"mouseleave\"]);\n registerDirectEvent(\"onContextMenu\", [\"contextmenu\"]);\n\n // Keyboard\n registerDirectEvent(\"onKeyDown\", [\"keydown\"]);\n registerDirectEvent(\"onKeyUp\", [\"keyup\"]);\n registerDirectEvent(\"onKeyPress\", [\"keypress\"]);\n\n // Input / Form\n registerDirectEvent(\"onInput\", [\"input\"]);\n registerDirectEvent(\"onChange\", [\"change\"]);\n registerDirectEvent(\"onSubmit\", [\"submit\"]);\n registerDirectEvent(\"onReset\", [\"reset\"]);\n\n // Focus\n registerDirectEvent(\"onFocus\", [\"focus\"]);\n registerDirectEvent(\"onBlur\", [\"blur\"]);\n\n // Clipboard\n registerDirectEvent(\"onCopy\", [\"copy\"]);\n registerDirectEvent(\"onCut\", [\"cut\"]);\n registerDirectEvent(\"onPaste\", [\"paste\"]);\n\n // Touch\n registerDirectEvent(\"onTouchStart\", [\"touchstart\"]);\n registerDirectEvent(\"onTouchMove\", [\"touchmove\"]);\n registerDirectEvent(\"onTouchEnd\", [\"touchend\"]);\n registerDirectEvent(\"onTouchCancel\", [\"touchcancel\"]);\n\n // Scroll / Wheel\n registerDirectEvent(\"onScroll\", [\"scroll\"]);\n registerDirectEvent(\"onWheel\", [\"wheel\"]);\n\n // Drag\n registerDirectEvent(\"onDrag\", [\"drag\"]);\n registerDirectEvent(\"onDragStart\", [\"dragstart\"]);\n registerDirectEvent(\"onDragEnd\", [\"dragend\"]);\n registerDirectEvent(\"onDragEnter\", [\"dragenter\"]);\n registerDirectEvent(\"onDragLeave\", [\"dragleave\"]);\n registerDirectEvent(\"onDragOver\", [\"dragover\"]);\n registerDirectEvent(\"onDrop\", [\"drop\"]);\n}\n","import { registerNativeEvent } from \"./RectifyEventRegistry\";\n\n/**\n * This function will run immediately when this file mount\n */\nconst main = () => {\n registerNativeEvent();\n};\n\nmain();\n","import { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\nimport { RectifyDomEventName } from \"../events/RectifyEventName\";\nimport { Fiber } from \"@rectify-dev/shared\";\n\nconst randomKey = Math.random().toString(36).slice(2);\nconst internalContainerInstanceKey = \"__rectifyContainer$\" + randomKey;\nconst internalInstanceKey = \"__rectifyFiber$\" + randomKey;\nconst internalEventHandlerListenersKey = \"__rectifyListeners$\" + randomKey;\nconst internalEventHandlesSetKey = \"__rectifyHandles$\" + randomKey;\n\nexport function markContainerAsRoot(\n hostRoot: Fiber,\n node: Element | Node,\n): void {\n (node as any)[internalContainerInstanceKey] = hostRoot;\n}\n\nexport function unmarkContainerAsRoot(node: Element | Node): void {\n (node as any)[internalContainerInstanceKey] = null;\n}\n\nexport function isContainerMarkedAsRoot(node: Element | Node): boolean {\n return !!(node as any)[internalContainerInstanceKey];\n}\n\nexport const precacheFiberNode = (fiber: Fiber, node: Node) => {\n if (!node) return;\n (node as any)[internalInstanceKey] = fiber;\n};\n\nexport const getFiberNodeCached = (node: Node): Fiber | null => {\n if (!node) return null;\n return (node as any)[internalInstanceKey] || null;\n};\n\nexport function setEventHandlerListeners(\n scope: EventTarget | null,\n listeners: Map<string, RectifyDOMEventHandleListener>,\n): void {\n if (!scope) return;\n (scope as any)[internalEventHandlerListenersKey] = listeners;\n}\n\nexport function getEventHandlerListeners(\n scope: EventTarget | null,\n): null | Map<string, RectifyDOMEventHandleListener> {\n if (!scope) return null;\n return (scope as any)[internalEventHandlerListenersKey] || null;\n}\n","import { AnyNativeEvent } from \"./RectifyDomEventListener\";\n\nclass SyntheticEvent {\n target: Element | null;\n currentTarget: Element | null = null;\n nativeEvent: AnyNativeEvent;\n\n private propagationStopped: boolean = false;\n\n constructor(nativeEvent: AnyNativeEvent) {\n this.target = nativeEvent.target as Element;\n this.nativeEvent = nativeEvent;\n }\n\n stopPropagation() {\n this.propagationStopped = true;\n this.nativeEvent.stopPropagation();\n }\n\n isPropagationStopped() {\n return this.propagationStopped;\n }\n}\n\nexport default SyntheticEvent;\n","/**\n * Event priority injection point.\n *\n * @rectify-dev/dom-binding has no dependency on @rectify-dev/reconciler, so the\n * reconciler injects its priority functions here at startup via\n * `injectEventPriorityCallbacks`. The event dispatcher then calls\n * `setEventPriority` / `resetEventPriority` around every handler invocation\n * so that state updates triggered by user events are assigned the correct lane.\n *\n * Lane values are plain numbers (not imported) to keep the dependency graph clean:\n * InputLane = 0b00010 = 2\n * DefaultLane = 0b00100 = 4 (used as the reset value)\n */\n\ntype PriorityFn = (priority: number) => void;\ntype ResetFn = () => void;\n\nlet _set: PriorityFn = () => {};\nlet _reset: ResetFn = () => {};\n\n/** Called once by the reconciler to wire up priority tracking. */\nexport const injectEventPriorityCallbacks = (\n set: PriorityFn,\n reset: ResetFn,\n): void => {\n _set = set;\n _reset = reset;\n};\n\n/** Mark the start of a user-interaction event (sets InputLane). */\nexport const setEventPriority = (priority: number): void => _set(priority);\n\n/** Restore default priority after an event handler returns. */\nexport const resetEventPriority = (): void => _reset();\n\n/** Numeric constant – mirrors InputLane in @rectify-dev/reconciler. */\nexport const INPUT_LANE = 0b00010;\n","import { Fiber, isFunction } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n getFiberNodeCached,\n} from \"../clients/RectifyDomComponentTree\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport SyntheticEvent from \"./SyntheticEvent\";\nimport { nativeEventToRectifyName } from \"./RectifyEventRegistry\";\nimport {\n INPUT_LANE,\n setEventPriority,\n resetEventPriority,\n} from \"./RectifyEventPriority\";\nimport { isEventContainer } from \"./RectifyEvent\";\n\nexport type AnyNativeEvent = Event | KeyboardEvent | MouseEvent | TouchEvent;\n\nexport const createEventListenerWrapper = (\n targetContainer: EventTarget,\n domEventName: RectifyDomEventName,\n) => {\n return dispatchEvent.bind(null, domEventName, targetContainer);\n};\n\nconst getEventTarget = (nativeEvent: AnyNativeEvent) => {\n return (nativeEvent.target || nativeEvent.srcElement) as Node;\n};\n\nconst dispatchEvent = (\n domEventName: RectifyDomEventName,\n targetContainer: EventTarget,\n nativeEvent: AnyNativeEvent,\n) => {\n const targetNode = getEventTarget(nativeEvent);\n const targetFiber = getFiberNodeCached(targetNode);\n\n if (!targetFiber) return;\n\n // If a more-specific event container sits between the event target and\n // targetContainer in the DOM, that container's own capture listener will\n // handle the event. Skip here to avoid double-dispatch.\n // This covers both createRoot containers (marked via markContainerAsRoot)\n // and portal containers (registered via listenToAllEventSupported).\n let domCursor: Node | null = targetNode.parentNode;\n while (domCursor && domCursor !== targetContainer) {\n if (isEventContainer(domCursor)) return;\n domCursor = (domCursor as Node).parentNode;\n }\n\n const syntheticEvent = new SyntheticEvent(nativeEvent);\n\n const path: Fiber[] = [];\n let fiber: Fiber | null = targetFiber;\n\n while (fiber) {\n path.push(fiber);\n if (fiber.stateNode === targetContainer) {\n break;\n }\n fiber = fiber.return;\n }\n\n for (const currFiber of path) {\n if (syntheticEvent.isPropagationStopped()) break;\n\n const eventHandlerMap = getEventHandlerListeners(\n currFiber.stateNode as Node,\n );\n if (!eventHandlerMap) continue;\n const rectifyName = nativeEventToRectifyName.get(domEventName);\n if (!rectifyName) continue;\n const handler = eventHandlerMap.get(rectifyName);\n\n if (!isFunction(handler)) continue;\n\n syntheticEvent.currentTarget = currFiber.stateNode as Element;\n setEventPriority(INPUT_LANE);\n try {\n handler(syntheticEvent);\n } finally {\n resetEventPriority();\n }\n }\n\n syntheticEvent.currentTarget = null;\n};\n","export function addEventBubbleListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, false);\n return listener;\n}\n\nexport function addEventCaptureListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, true);\n return listener;\n}\n\nexport function addEventCaptureListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n capture: true,\n passive,\n });\n return listener;\n}\n\nexport function addEventBubbleListenerWithPassiveFlag(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n passive: boolean,\n): EventListenerOrEventListenerObject | null {\n target.addEventListener(eventType, listener, {\n passive,\n });\n return listener;\n}\n\nexport function removeEventListener(\n target: EventTarget,\n eventType: string,\n listener: EventListenerOrEventListenerObject | null,\n capture: boolean,\n): void {\n target.removeEventListener(eventType, listener, capture);\n}\n","import { createEventListenerWrapper } from \"./RectifyDomEventListener\";\nimport { addEventBubbleListener, addEventCaptureListener } from \"./RectifyEventListener\";\nimport { RectifyDomEventName } from \"./RectifyEventName\";\nimport { allNativeEvents } from \"./RectifyEventRegistry\";\n\nconst listeningMarker =\n \"_rectifyEventListening$\" + Math.random().toString(36).slice(2);\n\nexport const isEventContainer = (dom: EventTarget): boolean =>\n !!(dom as any)[listeningMarker];\n\nexport const listenToAllEventSupported = (dom: EventTarget) => {\n if ((dom as any)[listeningMarker]) return;\n (dom as any)[listeningMarker] = true;\n\n allNativeEvents.forEach((domEventName) =>\n listenToNativeEvent(domEventName, dom),\n );\n};\n\nconst listenToNativeEvent = (\n domEventName: RectifyDomEventName,\n target: EventTarget,\n) => {\n const listener = createEventListenerWrapper(target, domEventName);\n addEventCaptureListener(target, domEventName, listener as any);\n};\n","import { RectifyDomEventName } from \"./../events/RectifyEventName\";\nimport { isPlainObject } from \"@rectify-dev/shared\";\nimport {\n getEventHandlerListeners,\n setEventHandlerListeners,\n} from \"./RectifyDomComponentTree\";\nimport { RectifyDOMEventHandleListener } from \"../events/RectifyDomEventTypes\";\n\nconst isEvent = (k: string) => k.startsWith(\"on\");\nconst isProperty = (k: string) =>\n k !== \"children\" && k !== \"ref\" && !isEvent(k);\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\n/**\n * SVG attributes that are genuinely camelCase in the SVG spec and must NOT\n * be converted to kebab-case when calling setAttribute.\n */\nconst SVG_CAMEL_ATTRS = new Set([\n \"viewBox\", \"preserveAspectRatio\",\n \"gradientTransform\", \"gradientUnits\",\n \"patternTransform\", \"patternUnits\", \"patternContentUnits\",\n \"clipPathUnits\", \"markerUnits\", \"markerWidth\", \"markerHeight\",\n \"refX\", \"refY\",\n \"textLength\", \"startOffset\",\n \"baseFrequency\", \"numOctaves\", \"stdDeviation\",\n \"filterUnits\", \"primitiveUnits\",\n \"tableValues\", \"kernelMatrix\", \"kernelUnitLength\",\n \"targetX\", \"targetY\",\n \"xChannelSelector\", \"yChannelSelector\",\n \"diffuseConstant\", \"surfaceScale\",\n \"specularConstant\", \"specularExponent\",\n \"limitingConeAngle\",\n \"pointsAtX\", \"pointsAtY\", \"pointsAtZ\",\n \"repeatX\", \"repeatY\",\n]);\n\n/** Converts camelCase to kebab-case, e.g. strokeWidth → stroke-width. */\nconst camelToKebab = (s: string) =>\n s.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n\n/** Returns the correct attribute name for an SVG element's prop key. */\nconst svgAttrName = (k: string): string =>\n SVG_CAMEL_ATTRS.has(k) ? k : camelToKebab(k);\n\nconst unitlessProperties = new Set([\n \"zIndex\",\n \"opacity\",\n \"fontWeight\",\n \"lineHeight\",\n \"flex\",\n \"flexGrow\",\n \"flexShrink\",\n]);\n\nfunction convertStyleObjectToString(styleObj: object) {\n return Object.entries(styleObj)\n .map(([key, value]) => {\n const cssKey = key.replace(/[A-Z]/g, (m) => \"-\" + m.toLowerCase());\n\n let cssValue = value;\n\n if (typeof value === \"number\" && !unitlessProperties.has(key)) {\n cssValue = `${value}px`;\n }\n\n return `${cssKey}:${cssValue}`;\n })\n .join(\"; \");\n}\n\nexport const applyPropsToDom = (\n node: Node,\n prevProps: any = {},\n nextProps: any = {},\n) => {\n const element = node as Element;\n const isSvg = element.namespaceURI === SVG_NS;\n\n const eventNode =\n getEventHandlerListeners(element) ||\n new Map<RectifyDomEventName, RectifyDOMEventHandleListener>();\n\n for (const k in prevProps) {\n if (isEvent(k) && !(k in nextProps)) {\n eventNode.delete(k as RectifyDomEventName);\n }\n if (isProperty(k) && !(k in nextProps)) {\n const attrName = isSvg ? svgAttrName(k) : k;\n (element as any)[k] = \"\";\n element.removeAttribute(attrName);\n }\n }\n\n for (const k in nextProps) {\n if (k === \"children\" || k === \"ref\") continue;\n\n if (isEvent(k)) {\n if (prevProps?.[k] !== nextProps?.[k]) {\n eventNode.set(k, nextProps[k]);\n }\n } else if (k === \"style\") {\n if (typeof nextProps[k] === \"string\") {\n element.setAttribute(\"style\", nextProps[k]);\n } else {\n element.setAttribute(\"style\", convertStyleObjectToString(nextProps[k]));\n }\n } else {\n const v = nextProps[k];\n if (k === \"className\") {\n element.setAttribute(\"class\", v ?? \"\");\n } else if (v === false || v === null || v === undefined) {\n const attrName = isSvg ? svgAttrName(k) : k;\n element.removeAttribute(attrName);\n } else {\n const attrName = isSvg ? svgAttrName(k) : k;\n element.setAttribute(attrName, String(v));\n }\n }\n }\n\n setEventHandlerListeners(element, eventNode);\n};\n","export const NoFlags /* */ = 0;\nexport const PlacementFlag /* */ = 1 << 0;\nexport const UpdateFlag /* */ = 1 << 1;\nexport const DeletionFlag /* */ = 1 << 2;\nexport const MoveFlag /* */ = 1 << 3; // fiber reused but at a different index\nexport const RefFlag /* */ = 1 << 4; // ref prop added, removed, or swapped\n","export type Lanes = number;\nexport type Lane = number;\n\nexport const NoLanes /* */ = 0b00000;\nexport const SyncLane /* */ = 0b00001; // Immediate / initial render\nexport const InputLane /* */ = 0b00010; // User interactions (click, keyboard …)\nexport const DefaultLane /* */ = 0b00100; // Async / normal state updates\nexport const TransitionLane /* */ = 0b01000; // Deferred (startTransition)\nexport const IdleLane /* */ = 0b10000; // Background / idle work\n","export const FunctionComponent /** */ = Symbol.for(\"rectify.function_component\");\nexport const ClassComponent /** */ = Symbol.for(\"rectify.class_component\");\nexport const HostComponent /** */ = Symbol.for(\"rectify.host_component\");\nexport const HostText /** */ = Symbol.for(\"rectify.host_text\");\nexport const HostRoot /** */ = Symbol.for(\"rectify.host_root\");\nexport const FragmentComponent /** */ = Symbol.for(\"rectify.fragment_component\");\nexport const ContextProvider /** */ = Symbol.for(\"rectify.context_provider\");\nexport const MemoComponent /** */ = Symbol.for(\"rectify.memo_component\");\nexport const LazyComponent /** */ = Symbol.for(\"rectify.lazy_component\");\nexport const SuspenseComponent /** */ = Symbol.for(\"rectify.suspense_component\");\nexport const PortalComponent /** */ = Symbol.for(\"rectify.portal_component\");","import {\n Fiber,\n isFunction,\n isPlainObject,\n omit,\n RECTIFY_ELEMENT_TYPE,\n RECTIFY_FRAGMENT_TYPE,\n RECTIFY_TEXT_TYPE,\n RECTIFY_PORTAL_TYPE,\n RectifyElement,\n shallowEqual,\n} from \"@rectify-dev/shared\";\nimport {\n FragmentComponent,\n FunctionComponent,\n ClassComponent,\n HostComponent,\n HostRoot,\n HostText,\n ContextProvider,\n MemoComponent,\n LazyComponent,\n SuspenseComponent,\n PortalComponent,\n} from \"./RectifyFiberWorkTags\";\nimport { PlacementFlag } from \"./RectifyFiberFlags\";\n\nconst addFlagToFiber = (fiber: Fiber, flag: number): void => {\n if (hasFlagOnFiber(fiber, flag)) return;\n fiber.flags |= flag;\n};\n\nconst removeFlagFromFiber = (fiber: Fiber | null, flag: number): void => {\n if (!hasFlagOnFiber(fiber, flag)) return;\n fiber!.flags &= ~flag;\n};\n\nconst hasFlagOnFiber = (fiber: Fiber | null, flag: number): boolean => {\n if (!fiber) return false;\n return (fiber.flags & flag) !== 0;\n};\n\nconst getFiberTagFromElement = (element: RectifyElement) => {\n switch (element.$$typeof) {\n case RECTIFY_PORTAL_TYPE:\n return PortalComponent;\n case RECTIFY_ELEMENT_TYPE:\n if (isFunction(element.type) && (element.type as any)?._context === element.type) {\n return ContextProvider;\n }\n if (isFunction(element.type) && (element.type as any)?._isMemo === true) {\n return MemoComponent;\n }\n if ((element.type as any)?._isSuspense === true) {\n return SuspenseComponent;\n }\n if ((element.type as any)?._isLazy === true) {\n return LazyComponent;\n }\n if ((element.type as any)?._isClassComponent === true) {\n return ClassComponent;\n }\n return isFunction(element.type) ? FunctionComponent : HostComponent;\n case RECTIFY_TEXT_TYPE:\n return HostText;\n case RECTIFY_FRAGMENT_TYPE:\n return FragmentComponent;\n default:\n return null;\n }\n};\n\nconst SVG_TAGS = new Set([\n \"svg\", \"circle\", \"ellipse\", \"line\", \"path\", \"polygon\", \"polyline\", \"rect\",\n \"g\", \"defs\", \"use\", \"symbol\", \"clipPath\", \"mask\", \"pattern\",\n \"linearGradient\", \"radialGradient\", \"stop\", \"marker\", \"image\",\n \"text\", \"tspan\", \"textPath\", \"foreignObject\",\n \"animate\", \"animateMotion\", \"animateTransform\",\n \"feBlend\", \"feColorMatrix\", \"feComposite\", \"feGaussianBlur\",\n \"feOffset\", \"feMerge\", \"feMergeNode\", \"feTurbulence\", \"feFlood\",\n]);\n\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\n\nconst createDomElementFromFiber = (fiber: Fiber): Node => {\n switch (fiber.workTag) {\n case HostText:\n return document.createTextNode(fiber.pendingProps);\n default: {\n const tag = fiber.type as string;\n return SVG_TAGS.has(tag)\n ? document.createElementNS(SVG_NS, tag)\n : document.createElement(tag);\n }\n }\n};\n\nconst getParentDom = (fiber: Fiber): Node => {\n if (fiber.workTag === HostRoot)\n return fiber.stateNode as Node;\n\n let p = fiber.return;\n while (p) {\n if (p.workTag === HostComponent) return p.stateNode as Node;\n if (p.workTag === HostRoot) return p.stateNode as Node;\n if (p.workTag === PortalComponent) return p.stateNode as Node;\n p = p.return;\n }\n\n throw new Error(\"No parent DOM found.\");\n};\n\n/**\n * Returns the first host DOM node (HostComponent or HostText) found by a\n * depth-first pre-order walk of the subtree rooted at `fiber`.\n * Returns null if the subtree contains no host nodes.\n */\nfunction findFirstHostNode(fiber: Fiber): Node | null {\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n return fiber.stateNode as Node;\n }\n\n let child = fiber.child;\n while (child) {\n const found = findFirstHostNode(child);\n if (found) return found;\n child = child.sibling;\n }\n\n return null;\n}\n\n/**\n * Finds the nearest host DOM node that this fiber should be inserted before.\n * Walks the fiber's siblings; for each sibling performs a full depth-first\n * search so arbitrarily nested FunctionComponent / FragmentComponent wrappers\n * are transparent.\n * Siblings that carry PlacementFlag are skipped — their DOM nodes have not\n * been committed yet and cannot serve as a valid insertBefore reference.\n */\nfunction getHostSibling(fiber: Fiber): Node | null {\n let sibling = fiber.sibling;\n while (sibling) {\n // Skip subtrees that are being placed in this same commit pass.\n // Their stateNode exists but is not yet a child of the parent DOM.\n if (!(sibling.flags & PlacementFlag)) {\n const node = findFirstHostNode(sibling);\n if (node) return node;\n }\n sibling = sibling.sibling;\n }\n\n return null;\n}\n\nconst hasPropsChanged = (prevProps: any, nextProps: any) => {\n const CHILDREN_KEY = \"children\";\n const REF_KEY = \"ref\";\n if (isPlainObject(prevProps) && isPlainObject(nextProps)) {\n return !shallowEqual(\n omit(prevProps, [CHILDREN_KEY, REF_KEY]),\n omit(nextProps, [CHILDREN_KEY, REF_KEY]),\n );\n }\n\n return prevProps !== nextProps;\n};\n\nexport {\n addFlagToFiber,\n removeFlagFromFiber,\n hasFlagOnFiber,\n getFiberTagFromElement,\n createDomElementFromFiber,\n getParentDom,\n getHostSibling,\n hasPropsChanged,\n};\n","import { Fiber, RectifyElement, RectifyKey } from \"@rectify-dev/shared\";\nimport { NoFlags } from \"./RectifyFiberFlags\";\nimport { NoLanes } from \"./RectifyFiberLanes\";\nimport { HostComponent, HostRoot } from \"./RectifyFiberWorkTags\";\nimport { getFiberTagFromElement } from \"./RectifyFiberService\";\n\nexport const createFiber = (\n workTag: symbol,\n pendingProps: any,\n key: RectifyKey = null,\n): Fiber => {\n return {\n index: 0,\n key,\n workTag,\n type: null,\n pendingProps,\n memoizedProps: null,\n child: null,\n sibling: null,\n return: null,\n stateNode: null,\n classInstance: null,\n deletions: null,\n alternate: null,\n\n lanes: NoLanes,\n childLanes: NoLanes,\n\n subtreeFlags: NoFlags,\n flags: NoFlags,\n\n memoizedState: null,\n refCleanup: null,\n };\n};\n\nexport const createHostRootFiber = (containerDom: Element) => {\n const root = createFiber(HostRoot, null);\n root.stateNode = containerDom; // containerDom lives on the fiber, not the global\n return {\n containerDom,\n root,\n pendingLanes: NoLanes,\n children: null,\n };\n};\n\nexport const createWorkInProgress = (current: Fiber, pendingProps: any) => {\n let wip = current.alternate;\n\n if (!wip) {\n wip = createFiber(current.workTag, pendingProps, current.key);\n wip.type = current.type;\n wip.stateNode = current.stateNode;\n\n wip.alternate = current;\n current.alternate = wip;\n } else {\n wip.pendingProps = pendingProps;\n wip.deletions = null;\n }\n\n wip.memoizedProps = current.memoizedProps;\n wip.memoizedState = current.memoizedState;\n wip.classInstance = current.classInstance;\n wip.refCleanup = current.refCleanup;\n wip.return = current.return;\n wip.child = current.child;\n wip.sibling = current.sibling;\n wip.flags = NoFlags;\n wip.subtreeFlags = NoFlags;\n wip.lanes = current.lanes;\n wip.childLanes = current.childLanes;\n return wip;\n};\n\nexport const createFiberFromRectifyElement = (\n element: RectifyElement,\n): Fiber => {\n const tag = getFiberTagFromElement(element) ?? HostComponent;\n return createFiber(tag, element.props, element.key);\n};\n","import { FiberRoot } from \"./RectifyFiberTypes\";\n\ntype Instance = {\n fiberRoot: FiberRoot | null;\n};\n\nconst instance: Instance = {\n fiberRoot: null,\n};\n\nexport const setScheduledFiberRoot = (fiberRoot: FiberRoot | null): void => {\n instance.fiberRoot = fiberRoot;\n};\n\nexport const getScheduledFiberRoot = (): FiberRoot | null => {\n return instance.fiberRoot;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport {\n DefaultLane,\n IdleLane,\n InputLane,\n Lane,\n Lanes,\n NoLanes,\n SyncLane,\n TransitionLane,\n} from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Frame budget / shouldYield\n// ---------------------------------------------------------------------------\n\n/** Max ms of render work to perform per scheduler task (foundation for time-slicing). */\nconst FRAME_BUDGET_MS = 5;\n\nlet frameStart = 0;\n\n/**\n * Returns true when the current work slice has run longer than FRAME_BUDGET_MS.\n * Use this inside tight work loops to yield back to the browser.\n */\nexport const shouldYield = (): boolean =>\n performance.now() - frameStart > FRAME_BUDGET_MS;\n\n// ---------------------------------------------------------------------------\n// Work callback – injected by the reconciler\n// ---------------------------------------------------------------------------\n\ntype WorkCallback = (lanes: Lanes) => void;\n\nlet doWork: WorkCallback | null = null;\n\n/** Inject the render function that the scheduler calls when a task fires. */\nexport const setWorkCallback = (cb: WorkCallback): void => {\n doWork = cb;\n};\n\n// ---------------------------------------------------------------------------\n// Resume cursor – the exact fiber workLoopConcurrent stopped at\n// ---------------------------------------------------------------------------\n\n/**\n * When workLoopConcurrent yields mid-tree this holds the exact fiber it\n * stopped at. The next task passes this back so work truly continues from\n * where it left off rather than restarting from the WIP root.\n */\nlet resumeCursor: Fiber | null = null;\n\nexport const setResumeCursor = (fiber: Fiber | null): void => {\n resumeCursor = fiber;\n};\n\nexport const getResumeCursor = (): Fiber | null => resumeCursor;\n\nexport const clearResumeCursor = (): void => {\n resumeCursor = null;\n};\n\n// ---------------------------------------------------------------------------\n// Pending lanes\n// ---------------------------------------------------------------------------\n\n/** Bitfield of lanes enqueued but not yet processed. */\nlet pendingLanes: Lanes = NoLanes;\n\n/**\n * Enqueue a render for `lane` and ensure the appropriate scheduler task is\n * posted. Multiple calls for the same lane before the task fires are\n * deduplicated – only one task is ever in flight per scheduling tier.\n */\nexport const scheduleRenderLane = (lane: Lane): void => {\n pendingLanes |= lane;\n\n if (lane & (SyncLane | InputLane)) {\n // Highest async priority: runs before the next paint via microtask queue.\n scheduleMicrotask();\n } else if (lane & DefaultLane) {\n // Normal async priority: MessageChannel macrotask, yields to browser.\n scheduleMessageTask();\n } else if (lane & TransitionLane) {\n // Deferred: setTimeout(0) – lower priority than regular tasks.\n scheduleTimeout();\n } else if (lane & IdleLane) {\n // Background: requestIdleCallback when the main thread is idle.\n scheduleIdle();\n }\n};\n\n// ---------------------------------------------------------------------------\n// Internal flush helper\n// ---------------------------------------------------------------------------\n\nconst flush = (mask: Lanes): void => {\n const lanes = pendingLanes & mask;\n if (!lanes) return;\n pendingLanes &= ~lanes;\n frameStart = performance.now();\n doWork?.(lanes);\n};\n\n// ---------------------------------------------------------------------------\n// Microtask scheduler (SyncLane | InputLane)\n// ---------------------------------------------------------------------------\n\nconst MICROTASK_MASK = SyncLane | InputLane;\nlet microtaskScheduled = false;\n\nconst scheduleMicrotask = (): void => {\n if (microtaskScheduled) return;\n microtaskScheduled = true;\n queueMicrotask(() => {\n microtaskScheduled = false;\n flush(MICROTASK_MASK);\n });\n};\n\n// ---------------------------------------------------------------------------\n// MessageChannel scheduler (DefaultLane)\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_MASK = DefaultLane;\nconst mc = new MessageChannel();\nlet mcScheduled = false;\n\nmc.port1.onmessage = () => {\n mcScheduled = false;\n flush(DEFAULT_MASK);\n};\n\nconst scheduleMessageTask = (): void => {\n if (mcScheduled) return;\n mcScheduled = true;\n mc.port2.postMessage(null);\n};\n\n// ---------------------------------------------------------------------------\n// setTimeout scheduler (TransitionLane)\n// ---------------------------------------------------------------------------\n\nconst TRANSITION_MASK = TransitionLane;\nlet timeoutHandle: ReturnType<typeof setTimeout> | null = null;\n\nconst scheduleTimeout = (): void => {\n if (timeoutHandle !== null) return;\n timeoutHandle = setTimeout(() => {\n timeoutHandle = null;\n flush(TRANSITION_MASK);\n }, 0);\n};\n\n// ---------------------------------------------------------------------------\n// requestIdleCallback scheduler (IdleLane)\n// ---------------------------------------------------------------------------\n\nconst IDLE_MASK = IdleLane;\nlet idleHandle: number | null = null;\n\nconst scheduleIdle = (): void => {\n if (idleHandle !== null) return;\n\n const run = () => {\n idleHandle = null;\n flush(IDLE_MASK);\n };\n\n if (typeof requestIdleCallback !== \"undefined\") {\n idleHandle = requestIdleCallback(run, { timeout: 300 }) as unknown as number;\n } else {\n idleHandle = setTimeout(run, 300) as unknown as number;\n }\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\n\ntype ScheduleRerender = (fiber: Fiber) => void;\n\ntype Instance = {\n fiberRendering: Fiber | null;\n hookIndex: number;\n scheduleRerender: ScheduleRerender | null;\n};\n\nconst instance: Instance = {\n fiberRendering: null,\n hookIndex: 0,\n scheduleRerender: null,\n};\n\nexport const getFiberRendering = (): Fiber | null => instance.fiberRendering;\n\nexport const setFiberRendering = (fiber: Fiber | null): void => {\n instance.fiberRendering = fiber;\n};\n\nexport const getHookIndex = (): number => instance.hookIndex;\n\nexport const setHookIndex = (index: number): void => {\n instance.hookIndex = index;\n};\n\nexport const nextHookIndex = (): void => {\n instance.hookIndex += 1;\n};\n\nexport const setScheduleRerender = (fn: ScheduleRerender): void => {\n instance.scheduleRerender = fn;\n};\n\nexport const scheduleRerender = (fiber: Fiber): void => {\n instance.scheduleRerender?.(fiber);\n};\n\n// ---------------------------------------------------------------------------\n// Shared hook-slot utility\n// ---------------------------------------------------------------------------\n\n/**\n * Walks the hook linked list on `fiber` to the slot at `hookIndex`.\n * Returns the existing hook if found, or `null` on mount (slot doesn't exist\n * yet). In the mount case, `prevHook` points to the slot just before the gap\n * so the caller can attach the new hook.\n */\nexport const getHookSlot = (\n fiber: Fiber,\n hookIndex: number,\n): { hook: Hook | null; prevHook: Hook | null } => {\n let hook: Hook | null = fiber.memoizedState;\n let prevHook: Hook | null = null;\n\n for (let i = 0; i < hookIndex; i++) {\n prevHook = hook;\n hook = hook?.next ?? null;\n }\n\n return { hook, prevHook };\n};\n\n/**\n * Attaches `newHook` into `fiber`'s linked list at the position indicated by\n * `prevHook` (null means insert at the head).\n */\nexport const attachHook = (fiber: Fiber, newHook: Hook, prevHook: Hook | null): void => {\n if (prevHook) prevHook.next = newHook;\n else fiber.memoizedState = newHook;\n};\n","import { FC, Fiber } from \"@rectify-dev/shared\";\nimport { setFiberRendering, setHookIndex } from \"./RectifyHookRenderingFiber\";\n\nconst prepareToUseHooks = (wip: Fiber) => {\n setFiberRendering(wip);\n setHookIndex(0);\n};\n\nconst finishUsingHooks = () => {\n setFiberRendering(null);\n};\n\nconst withHooks = (wip: Fiber, Component: FC) => {\n const NewComponent = (props: any) => {\n prepareToUseHooks(wip);\n const result = Component(props);\n finishUsingHooks();\n return result;\n };\n\n return NewComponent;\n};\n\nexport { withHooks };\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport { StateDispatcher, StateUpdater } from \"./RectifyHookTypes\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\ntype StateInitializer<S> = S | (() => S);\n\nconst getInitialState = <S>(initialState: S | (() => S)): S =>\n isFunction(initialState) ? initialState() : initialState;\n\nconst getState = <S>(update: StateUpdater<S>, prevState: S) =>\n isFunction(update) ? update(prevState) : update;\n\nfunction useState<S>(): [S | undefined, StateDispatcher<S | undefined>];\nfunction useState<S>(initialState: S): [S, StateDispatcher<S>];\nfunction useState<S>(initialState: () => S): [S, StateDispatcher<S>];\nfunction useState<S>(\n initialState?: StateInitializer<S>,\n): [S | undefined, StateDispatcher<S | undefined>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useState must be used within a function component.\");\n }\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let { hook: state, prevHook } = getHookSlot(fiber, hookIndex) as {\n hook: Hook<S | undefined> | null;\n prevHook: Hook<S | undefined> | null;\n };\n\n if (!state) {\n state = {\n memoizedState: getInitialState(initialState),\n queue: null,\n next: null,\n };\n attachHook(fiber, state, prevHook);\n }\n\n let update = state.queue;\n while (update) {\n state.memoizedState = getState(update.action, state.memoizedState);\n update = update.next;\n }\n state.queue = null;\n\n const dispatcher = (updater: StateUpdater<S | undefined>) => {\n const update = { action: updater, next: null };\n\n if (!state.queue) {\n state.queue = update;\n } else {\n let last = state.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [state.memoizedState, dispatcher] as const;\n}\n\nexport default useState;\n","import { Hook, isFunction } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n scheduleRerender,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type Reducer<S, A> = (state: S, action: A) => S;\nexport type Dispatch<A> = (action: A) => void;\n\nfunction useReducer<S, A>(reducer: Reducer<S, A>, initialState: S): [S, Dispatch<A>];\nfunction useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: I,\n init: (arg: I) => S,\n): [S, Dispatch<A>];\nfunction useReducer<S, A, I>(\n reducer: Reducer<S, A>,\n initialArg: S | I,\n init?: (arg: I) => S,\n): [S, Dispatch<A>] {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useReducer must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n let { hook, prevHook } = getHookSlot(fiber, hookIndex) as {\n hook: Hook<S> | null;\n prevHook: Hook<S> | null;\n };\n\n if (!hook) {\n // Mount — compute initial state once.\n const initialState: S = isFunction(init)\n ? (init as (arg: I) => S)(initialArg as I)\n : (initialArg as S);\n\n hook = { memoizedState: initialState, queue: null, next: null };\n attachHook(fiber, hook, prevHook);\n }\n\n // Drain the update queue, applying each action through the reducer.\n let update = hook.queue;\n while (update) {\n hook.memoizedState = reducer(hook.memoizedState, update.action as A);\n update = update.next;\n }\n hook.queue = null;\n\n const dispatch: Dispatch<A> = (action: A) => {\n // UpdateQueue<S> stores `action` as `S | ((prev: S) => S)`, but for\n // useReducer the action is an arbitrary type A — cast to satisfy the\n // shared queue type while keeping the public API fully typed.\n const update = { action: action as any, next: null };\n\n if (!hook!.queue) {\n hook!.queue = update;\n } else {\n let last = hook!.queue;\n while (last.next) {\n last = last.next;\n }\n last.next = update;\n }\n scheduleRerender(fiber);\n };\n\n return [hook.memoizedState, dispatch];\n}\n\nexport default useReducer;\n","/**\n * Returns true when the dependency arrays are different.\n * Used by useEffect, useMemo and useCallback.\n */\nexport const depsChanged = (\n prev: any[] | undefined,\n next: any[] | undefined,\n): boolean => {\n if (!prev || !next) return true;\n if (prev.length !== next.length) return true;\n return next.some((dep, i) => !Object.is(dep, prev[i]));\n};\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Effects collected during render, flushed after commit.\nconst pendingEffects: EffectState[] = [];\n\n// Cleanups deferred from the render phase — fired before new effects run.\nconst pendingCleanups: EffectState[] = [];\n\nfunction useEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run cleanups queued during the render phase (dep-changed effects).\n * Must be called after commit but before flushEffects.\n */\nexport const flushEffectCleanups = (): void => {\n for (const effect of pendingCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/** Run all effects collected during the last render. Called after commit. */\nexport const flushEffects = (): void => {\n for (const effect of pendingEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Walks a fiber's hook linked list\n * and fires the cleanup of every effect hook found on it.\n */\nexport const runEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useEffect;\n","import { Fiber, Hook } from \"@rectify-dev/shared\";\nimport {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\nimport type { EffectState } from \"./RectifyHookTypes\";\n\n// Layout effects collected during render, flushed synchronously after commit.\nconst pendingLayoutEffects: EffectState[] = [];\n\n// Layout cleanups deferred from the render phase.\nconst pendingLayoutCleanups: EffectState[] = [];\n\n/**\n * Like `useEffect`, but fires **synchronously after every DOM mutation** and\n * before the browser has a chance to paint. Use this when you need to read\n * layout or synchronously re-style the DOM (tooltips, scroll restoration,\n * measuring element sizes, etc.).\n *\n * Prefer `useEffect` for everything else — `useLayoutEffect` blocks the paint.\n *\n * @example\n * useLayoutEffect(() => {\n * const { height } = ref.current.getBoundingClientRect();\n * setTooltipTop(-height);\n * }, []);\n */\nfunction useLayoutEffect(\n create: () => void | (() => void),\n deps?: any[],\n): void {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useLayoutEffect must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — always schedule the layout effect.\n const effectState: EffectState = { create, deps, cleanup: undefined };\n const newHook: Hook = { memoizedState: effectState, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n pendingLayoutEffects.push(effectState);\n } else {\n // Update — only re-run if deps changed.\n const prev = hook.memoizedState as EffectState;\n if (depsChanged(prev.deps, deps)) {\n pendingLayoutCleanups.push(prev); // defer old cleanup to post-commit\n const effectState: EffectState = { create, deps, cleanup: undefined };\n hook.memoizedState = effectState;\n pendingLayoutEffects.push(effectState);\n }\n }\n}\n\n/**\n * Run layout cleanups queued during render (dep-changed layout effects).\n * Called synchronously after commit, before flushLayoutEffects.\n */\nexport const flushLayoutEffectCleanups = (): void => {\n for (const effect of pendingLayoutCleanups.splice(0)) {\n effect.cleanup?.();\n }\n};\n\n/**\n * Run all layout effects collected during the last render.\n * Called synchronously after commit, before the browser paints.\n */\nexport const flushLayoutEffects = (): void => {\n for (const effect of pendingLayoutEffects.splice(0)) {\n const cleanup = effect.create();\n if (typeof cleanup === \"function\") {\n effect.cleanup = cleanup;\n }\n }\n};\n\n/**\n * Called during the commit deletion pass. Fires layout cleanups on removed\n * fibers so they don't observe a stale DOM.\n */\nexport const runLayoutEffectCleanups = (fiber: Fiber): void => {\n let hook = fiber.memoizedState;\n while (hook) {\n const state = hook.memoizedState;\n if (state !== null && typeof (state as EffectState).create === \"function\") {\n (state as EffectState).cleanup?.();\n }\n hook = hook.next;\n }\n};\n\nexport default useLayoutEffect;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\n\nexport type RefObject<T> = { current: T };\n\n/**\n * Returns a stable mutable ref object whose `.current` property is initialised\n * to `initialValue`. The same object is returned on every render — updating\n * `.current` does NOT trigger a re-render.\n *\n * Two common uses:\n * 1. Hold a DOM node: const el = useRef<HTMLDivElement>(null)\n * 2. Hold a mutable value across renders without causing re-renders.\n */\nfunction useRef<T>(initialValue: T): RefObject<T>;\nfunction useRef<T>(initialValue: T | null): RefObject<T | null>;\nfunction useRef<T = undefined>(): RefObject<T | undefined>;\nfunction useRef<T>(initialValue?: T): RefObject<T | undefined> {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useRef must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount — create the ref object once and attach it to the linked list.\n const ref: RefObject<T | undefined> = { current: initialValue };\n const newHook = { memoizedState: ref, queue: null, next: null };\n attachHook(fiber, newHook, prevHook);\n return ref;\n }\n\n // Update — the ref object already exists; return it unchanged.\n // Callers mutate .current directly, which never triggers a re-render.\n return hook.memoizedState as RefObject<T | undefined>;\n}\n\nexport default useRef;\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\nimport { depsChanged } from \"./RectifyHookDeps\";\n\ntype MemoState<T> = {\n value: T;\n deps: any[] | undefined;\n};\n\n/**\n * Returns a memoized value. `factory` is only re-executed when one of the\n * `deps` changes (using `Object.is` comparison), otherwise the cached value\n * from the previous render is returned unchanged.\n *\n * @example\n * const sorted = useMemo(() => [...list].sort(), [list]);\n */\nfunction useMemo<T>(factory: () => T, deps: any[]): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useMemo must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount – compute and cache the initial value.\n const state: MemoState<T> = { value: factory(), deps };\n attachHook(fiber, { memoizedState: state, queue: null, next: null }, prevHook);\n return state.value;\n }\n\n // Update – recompute only when deps changed.\n const prev = hook.memoizedState as MemoState<T>;\n if (depsChanged(prev.deps, deps)) {\n const state: MemoState<T> = { value: factory(), deps };\n hook.memoizedState = state;\n return state.value;\n }\n\n return prev.value;\n}\n\nexport default useMemo;\n","import useMemo from \"./RectifyHookUseMemo\";\n\n/**\n * Returns a memoized callback. The same function reference is returned on\n * every render unless one of the `deps` changes.\n *\n * This is sugar over `useMemo(() => fn, deps)` — it keeps function identity\n * stable so child components that compare props by reference don't re-render\n * unnecessarily.\n *\n * @example\n * const handleClick = useCallback(() => doSomething(id), [id]);\n */\nfunction useCallback<T extends (...args: any[]) => any>(\n callback: T,\n deps: any[],\n): T {\n return useMemo(() => callback, deps);\n}\n\nexport default useCallback;\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { getFiberRendering } from \"./RectifyHookRenderingFiber\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/**\n * A context object that is also its own Provider component.\n * Both forms are equivalent:\n * jsx(MyContext, { value, children }) // Context as Provider\n * jsx(MyContext.Provider, { value, children }) // Classic Provider form\n */\nexport type RectifyContext<T> = {\n (props: { value: T; children?: any }): null;\n /** Self-reference used by the reconciler to identify Provider fibers. */\n _context: RectifyContext<T>;\n _defaultValue: T;\n _subscribers: Set<Fiber>;\n /** Alias to self — `Context.Provider === Context`. */\n Provider: RectifyContext<T>;\n};\n\n// ---------------------------------------------------------------------------\n// Mark-dirty injection (provided by the reconciler at startup)\n// ---------------------------------------------------------------------------\n\ntype MarkFiberDirty = (fiber: Fiber) => void;\nlet markFiberDirtyFn: MarkFiberDirty | null = null;\n\n/** Injected by the reconciler so context can mark subscriber lanes directly. */\nexport const setMarkFiberDirty = (fn: MarkFiberDirty): void => {\n markFiberDirtyFn = fn;\n};\n\n// ---------------------------------------------------------------------------\n// Per-fiber subscription tracking (for cleanup on unmount)\n// ---------------------------------------------------------------------------\n\n/**\n * Maps each fiber to the contexts it has subscribed to.\n * WeakMap so fibers that become unreachable are GC'd automatically.\n */\nconst fiberSubscriptions = new WeakMap<Fiber, Set<RectifyContext<any>>>();\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Creates a new context. The returned object is itself a Provider component,\n * so both forms below are equivalent:\n *\n * @example\n * const ThemeCtx = createContext<'light' | 'dark'>('light');\n *\n * // Option A – Context used directly as Provider\n * jsx(ThemeCtx, { value: 'dark', children: ... })\n *\n * // Option B – Classic .Provider form\n * jsx(ThemeCtx.Provider, { value: 'dark', children: ... })\n */\nexport function createContext<T>(defaultValue: T): RectifyContext<T> {\n // The function body is intentionally a no-op — the reconciler gives this\n // fiber a ContextProvider work tag and handles it without calling the fn.\n function ProviderFn(_props: { value: T; children?: any }): null {\n return null;\n }\n\n const context = ProviderFn as unknown as RectifyContext<T>;\n context._context = context; // self-reference: identifies Provider fibers\n context._defaultValue = defaultValue;\n context._subscribers = new Set();\n context.Provider = context; // Provider is an alias to self\n\n return context;\n}\n\n/**\n * Reads the current value of `context` for the calling component.\n *\n * Walks up the fiber tree to the nearest matching Provider and reads its\n * `pendingProps.value` directly — no render-time stack required. This means\n * the correct value is always returned even when the Provider did not\n * re-render in the current pass.\n *\n * The component re-renders whenever the nearest Provider supplies a new value\n * (compared with `Object.is`). Unlike other hooks this does NOT consume a\n * hook slot and may be called conditionally.\n *\n * @example\n * const theme = useContext(ThemeCtx); // 'light' | 'dark'\n */\nexport function useContext<T>(context: RectifyContext<T>): T {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useContext must be used within a function component.\");\n }\n\n // Walk up the fiber tree to find the nearest Provider for this context.\n let ancestor = fiber.return;\n while (ancestor) {\n if ((ancestor.type as any)?._context === context) {\n // Replace any stale subscription from the previous incarnation of this\n // fiber (its alternate) so the subscriber set never accumulates stale refs.\n if (fiber.alternate) {\n context._subscribers.delete(fiber.alternate);\n const altSet = fiberSubscriptions.get(fiber.alternate);\n if (altSet) {\n altSet.delete(context);\n if (altSet.size === 0) fiberSubscriptions.delete(fiber.alternate);\n }\n }\n\n context._subscribers.add(fiber);\n let ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) {\n ctxSet = new Set();\n fiberSubscriptions.set(fiber, ctxSet);\n }\n ctxSet.add(context);\n\n // Read the value straight from the Provider's pending props.\n // This is always correct: if the Provider re-rendered this pass its\n // pendingProps hold the new value; if it didn't, pendingProps equals\n // the last committed value (copied by createWorkInProgress).\n return ancestor.pendingProps.value as T;\n }\n ancestor = ancestor.return;\n }\n\n // No Provider found — return the default value (no subscription needed).\n return context._defaultValue;\n}\n\n// ---------------------------------------------------------------------------\n// Reconciler helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Mark all subscribers of `context` dirty so they skip the bailout and\n * re-render in the current pass. Called by `beginWork` when a ContextProvider\n * detects that its value has changed. Marks lanes directly instead of\n * scheduling a second render so consumers update in the same render pass.\n */\nexport function notifyContextConsumers<T>(context: RectifyContext<T>): void {\n if (!markFiberDirtyFn) return;\n for (const subscriber of context._subscribers) {\n markFiberDirtyFn(subscriber);\n }\n}\n\n/**\n * Unregister `fiber` from every context it subscribed to.\n * Called during the commit deletion pass.\n */\nexport function clearContextSubscriptions(fiber: Fiber): void {\n const ctxSet = fiberSubscriptions.get(fiber);\n if (!ctxSet) return;\n\n for (const context of ctxSet) {\n context._subscribers.delete(fiber);\n }\n\n fiberSubscriptions.delete(fiber);\n}\n","import {\n getFiberRendering,\n getHookIndex,\n nextHookIndex,\n getHookSlot,\n attachHook,\n} from \"./RectifyHookRenderingFiber\";\n\n/**\n * Counter that increments once per `useId` call across the whole render pass.\n * Reset to 0 before each component render via `prepareToUseHooks`.\n * Using a module-level counter keeps IDs stable across concurrent renders\n * because each fiber renders in isolation and the counter is local to the\n * hook slot (stored in memoizedState).\n */\nlet _idCounter = 0;\n\n/** Generate the next unique ID string. */\nconst generateId = (): string => `_r${(_idCounter++).toString(36)}_`;\n\n/**\n * Returns a stable, globally unique ID string that is consistent across\n * server and client renders within the same component instance.\n *\n * The ID is generated once on mount and returned unchanged on every\n * subsequent render — it never changes for the lifetime of the component.\n *\n * @example\n * const inputId = useId();\n * return (\n * <>\n * <label htmlFor={inputId}>Name</label>\n * <input id={inputId} />\n * </>\n * );\n */\nconst useId = (): string => {\n const fiber = getFiberRendering();\n if (!fiber) {\n throw new Error(\"useId must be used within a function component.\");\n }\n\n const hookIndex = getHookIndex();\n nextHookIndex();\n\n const { hook, prevHook } = getHookSlot(fiber, hookIndex);\n\n if (!hook) {\n // Mount: generate and permanently store the ID.\n const newHook = {\n memoizedState: generateId(),\n queue: null,\n next: null,\n };\n attachHook(fiber, newHook, prevHook);\n return newHook.memoizedState as string;\n }\n\n // Update: return the already-stored ID unchanged.\n return hook.memoizedState as string;\n};\n\nexport default useId;\n","import { DefaultLane, Lane, Lanes, SyncLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Event priority – updated by the DOM event dispatcher\n// ---------------------------------------------------------------------------\n\nlet currentEventPriority: Lane = DefaultLane;\n\nexport const setCurrentEventPriority = (lane: Lane): void => {\n currentEventPriority = lane;\n};\n\nexport const resetCurrentEventPriority = (): void => {\n currentEventPriority = DefaultLane;\n};\n\n/**\n * Returns the lane that should be assigned to the current state update.\n * Inside a user event handler this will be InputLane; in async callbacks\n * (fetch, timers) it falls back to DefaultLane.\n */\nexport const requestUpdateLane = (): Lane => currentEventPriority;\n\n// ---------------------------------------------------------------------------\n// Rendering lanes – set by the scheduler before each render pass\n// ---------------------------------------------------------------------------\n\nlet currentRenderingLanes: Lanes = SyncLane;\n\nexport const setCurrentRenderingLanes = (lanes: Lanes): void => {\n currentRenderingLanes = lanes;\n};\n\nexport const getCurrentLanePriority = (): Lanes => currentRenderingLanes;\n","import {\n createElementFromRectifyNode,\n Fiber,\n isArray,\n isValidRectifyElement,\n RectifyElement,\n RectifyNode,\n} from \"@rectify-dev/shared\";\nimport { addFlagToFiber, hasPropsChanged } from \"./RectifyFiberService\";\nimport {\n DeletionFlag,\n MoveFlag,\n PlacementFlag,\n RefFlag,\n UpdateFlag,\n} from \"./RectifyFiberFlags\";\nimport {\n createFiberFromRectifyElement,\n createWorkInProgress,\n} from \"./RectifyFiber\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Mutable state threaded through the reconcileChildren pass functions. */\ntype ReconcileState = {\n wip: Fiber;\n newElements: RectifyElement[];\n deletions: Fiber[];\n prev: Fiber | null;\n index: number;\n};\n\n// ---------------------------------------------------------------------------\n// Fiber creation helpers\n// ---------------------------------------------------------------------------\n\n/** Reuse an existing fiber, marking it for update if its props changed. */\nconst reuseOrCreate = (\n oldFiber: Fiber,\n element: RectifyElement,\n wip: Fiber,\n): Fiber => {\n const newFiber = createWorkInProgress(oldFiber, element.props);\n\n if (hasPropsChanged(oldFiber.memoizedProps, element.props)) {\n addFlagToFiber(newFiber, UpdateFlag);\n }\n // Track ref changes independently so refs get attached/detached even when\n // no other props changed.\n if ((oldFiber.memoizedProps?.ref ?? null) !== (element.props?.ref ?? null)) {\n addFlagToFiber(newFiber, RefFlag);\n }\n\n newFiber.return = wip;\n return newFiber;\n};\n\n/** Create a brand-new fiber for `element` and mark it for DOM placement. */\nconst createAndPlace = (element: RectifyElement, wip: Fiber): Fiber => {\n const newFiber = createFiberFromRectifyElement(element);\n newFiber.type = element.type; // createFiberFromRectifyElement leaves type null\n addFlagToFiber(newFiber, PlacementFlag);\n newFiber.return = wip;\n return newFiber;\n};\n\n/**\n * Append `fiber` to the WIP child list at `index` and return it.\n * `prev` is the previously appended sibling (null for the first child).\n */\nconst appendFiber = (\n fiber: Fiber,\n prev: Fiber | null,\n index: number,\n wip: Fiber,\n): Fiber => {\n fiber.index = index;\n if (!prev) wip.child = fiber;\n else prev.sibling = fiber;\n return fiber;\n};\n\n// ---------------------------------------------------------------------------\n// Keyed map helpers\n// ---------------------------------------------------------------------------\n\ntype OldFiberStructures = {\n /** Fibers that carry an explicit key — looked up by key. */\n keyedMap: Map<string | number, Fiber>;\n /**\n * Fibers with no explicit key — grouped by type and consumed in order.\n * Matching by type means a component that shifts position (e.g. because a\n * sibling is conditionally inserted before it) is still reused rather than\n * unmounted and remounted.\n */\n unkeyedByType: Map<unknown, Fiber[]>;\n};\n\n/**\n * Partition remaining old fibers into keyed (explicit key) and unkeyed\n * (matched by type in order of appearance) buckets.\n */\nconst buildOldFiberStructures = (\n firstRemaining: Fiber | null,\n): OldFiberStructures => {\n const keyedMap = new Map<string | number, Fiber>();\n const unkeyedByType = new Map<unknown, Fiber[]>();\n let fiber: Fiber | null = firstRemaining;\n\n while (fiber) {\n if (fiber.key !== null && fiber.key !== undefined) {\n keyedMap.set(fiber.key, fiber);\n } else {\n const pool = unkeyedByType.get(fiber.type);\n if (pool) pool.push(fiber);\n else unkeyedByType.set(fiber.type, [fiber]);\n }\n fiber = fiber.sibling;\n }\n\n return { keyedMap, unkeyedByType };\n};\n\n// ---------------------------------------------------------------------------\n// Reconcile passes\n// ---------------------------------------------------------------------------\n\n/**\n * Sequential scan — fast path, no reordering.\n * Walks both lists left-to-right by index as long as keys match consecutively.\n * Stops at the first key divergence and hands the remainder to reconcileKeyed.\n * Returns the index at which it stopped and the next unconsumed old fiber.\n */\nconst reconcileSequential = (\n state: ReconcileState,\n firstOldFiber: Fiber | null,\n): { stoppedAt: number; oldFiber: Fiber | null } => {\n let oldFiber = firstOldFiber;\n\n for (let i = 0; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n\n if (!oldFiber) return { stoppedAt: i, oldFiber: null }; // old list exhausted\n if (oldFiber.key !== elementKey) return { stoppedAt: i, oldFiber }; // keys diverged\n\n if (oldFiber.type === elementType) {\n state.prev = appendFiber(\n reuseOrCreate(oldFiber, element, state.wip),\n state.prev,\n state.index++,\n state.wip,\n );\n } else if (elementKey !== null) {\n // Same explicit key, different type — the old fiber is definitively\n // replaced; delete it and place the new one.\n addFlagToFiber(oldFiber, DeletionFlag);\n state.deletions.push(oldFiber);\n state.prev = appendFiber(\n createAndPlace(element, state.wip),\n state.prev,\n state.index++,\n state.wip,\n );\n } else {\n // Unkeyed type mismatch — stop and let reconcileKeyed match by type.\n // Do NOT delete the old fiber here; it may match a later new element.\n return { stoppedAt: i, oldFiber };\n }\n\n oldFiber = oldFiber.sibling;\n }\n\n return { stoppedAt: state.newElements.length, oldFiber };\n};\n\n/**\n * Keyed lookup — handles reordering, insertions, and removals.\n * Fibers with explicit keys are matched by key.\n * Fibers with no key are matched by type in order of appearance — this means\n * a component that shifts position because a sibling is conditionally inserted\n * before it is still reused rather than unmounted and remounted.\n */\nconst reconcileKeyed = (\n state: ReconcileState,\n startAt: number,\n remainingOldFiber: Fiber | null,\n): void => {\n const { keyedMap, unkeyedByType } = buildOldFiberStructures(remainingOldFiber);\n\n // lastPlacedIndex tracks the highest committed index we have seen.\n // Any reused fiber whose committed index is below it was moved rightward.\n let lastPlacedIndex = 0;\n\n for (let i = startAt; i < state.newElements.length; i++) {\n const element = state.newElements[i];\n const { key: elementKey = null, type: elementType } = element;\n\n let matched: Fiber | null = null;\n\n if (elementKey !== null) {\n // Explicit key — look up by key.\n const candidate = keyedMap.get(elementKey) ?? null;\n if (candidate && candidate.type === elementType) {\n keyedMap.delete(elementKey);\n matched = candidate;\n }\n } else {\n // No key — take the first queued fiber of the same type (if any).\n const pool = unkeyedByType.get(elementType);\n if (pool?.length) matched = pool.shift()!;\n }\n\n if (matched) {\n const newFiber = reuseOrCreate(matched, element, state.wip);\n\n if (matched.index < lastPlacedIndex) {\n addFlagToFiber(newFiber, MoveFlag); // moved right — needs re-insertion\n } else {\n lastPlacedIndex = matched.index;\n }\n\n state.prev = appendFiber(newFiber, state.prev, state.index++, state.wip);\n } else {\n state.prev = appendFiber(\n createAndPlace(element, state.wip),\n state.prev,\n state.index++,\n state.wip,\n );\n }\n }\n\n // Delete all remaining unmatched fibers.\n for (const orphan of keyedMap.values()) {\n addFlagToFiber(orphan, DeletionFlag);\n state.deletions.push(orphan);\n }\n for (const pool of unkeyedByType.values()) {\n for (const orphan of pool) {\n addFlagToFiber(orphan, DeletionFlag);\n state.deletions.push(orphan);\n }\n }\n};\n\n// ---------------------------------------------------------------------------\n// Entry point\n// ---------------------------------------------------------------------------\n\n/**\n * Normalise the raw `children` value into a flat array of `RectifyNode` items\n * ready to be mapped through `createElementFromRectifyNode`.\n */\nconst toChildArray = (children: RectifyNode): RectifyNode[] => {\n if (children == null || typeof children === \"boolean\") return [];\n if (isArray(children)) return children as RectifyNode[];\n return [children as RectifyNode];\n};\n\nexport const reconcileChildren = (wip: Fiber, children: RectifyNode): void => {\n const newElements = toChildArray(children)\n .map(createElementFromRectifyNode)\n .filter(isValidRectifyElement);\n\n const state: ReconcileState = {\n wip,\n newElements,\n deletions: [],\n prev: null,\n index: 0,\n };\n const firstOldFiber: Fiber | null = wip.alternate?.child ?? null;\n\n const { stoppedAt, oldFiber } = reconcileSequential(state, firstOldFiber);\n\n if (stoppedAt < newElements.length) {\n // Sequential scan stopped early — resolve the remainder by key.\n reconcileKeyed(state, stoppedAt, oldFiber);\n } else {\n // Pass 1 consumed all new elements — delete any leftover old fibers.\n let leftover: Fiber | null = oldFiber;\n while (leftover) {\n addFlagToFiber(leftover, DeletionFlag);\n state.deletions.push(leftover);\n leftover = leftover.sibling;\n }\n }\n\n if (state.prev) state.prev.sibling = null; // terminate the new sibling chain\n if (state.deletions.length) wip.deletions = state.deletions;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { Lanes } from \"./RectifyFiberLanes\";\n\nexport type UpdateQueue = {\n lanes: Lanes;\n fiber: Fiber;\n next: UpdateQueue | null;\n};\n\ntype Instance = {\n head: UpdateQueue | null;\n tail: UpdateQueue | null;\n};\n\nconst instance: Instance = {\n head: null,\n tail: null,\n};\n\nconst enqueueUpdate = (update: UpdateQueue): void => {\n update.next = null;\n\n if (instance.tail === null) {\n instance.head = update;\n instance.tail = update;\n return;\n }\n\n instance.tail.next = update;\n instance.tail = update;\n};\n\nconst dequeueUpdate = (): UpdateQueue | null => {\n const first = instance.head;\n if (first === null) {\n return null;\n }\n\n instance.head = first.next;\n\n if (instance.head === null) {\n instance.tail = null;\n }\n\n first.next = null;\n return first;\n};\n\n/** Returns true when there is at least one pending update in the queue. */\nconst hasUpdate = (): boolean => instance.head !== null;\n\nexport { enqueueUpdate, dequeueUpdate, hasUpdate };\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { SuspenseComponent } from \"./RectifyFiberWorkTags\";\nimport { enqueueUpdate } from \"./RectifyFiberConcurrentUpdate\";\nimport { scheduleRenderLane } from \"./RectifyFiberScheduler\";\nimport { DefaultLane } from \"./RectifyFiberLanes\";\n\n// ---------------------------------------------------------------------------\n// Suspension state\n// ---------------------------------------------------------------------------\n\n/**\n * Tracks which Suspense fibers are currently suspended.\n *\n * We key by the \"stable\" fiber — the committed (current) side of the\n * alternate pair — so the state survives across WIP ↔ current swaps.\n * The WeakSet lets GC reclaim entries when boundaries are unmounted.\n */\nconst suspendedBoundaries = new WeakSet<Fiber>();\n\n/** Resolve the committed side of a fiber for stable identity. */\nconst stableFiber = (fiber: Fiber): Fiber => fiber.alternate ?? fiber;\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/** Returns true when the Suspense boundary is currently showing its fallback. */\nexport const isSuspendedBoundary = (fiber: Fiber): boolean =>\n suspendedBoundaries.has(stableFiber(fiber));\n\n/**\n * Walk up the return chain and return the nearest ancestor whose workTag\n * is SuspenseComponent, or null if there is none.\n */\nexport const findNearestSuspenseBoundary = (fiber: Fiber): Fiber | null => {\n let current = fiber.return;\n while (current) {\n if (current.workTag === SuspenseComponent) return current;\n current = current.return;\n }\n return null;\n};\n\n/**\n * Called by the work loop when a child throws a thenable (promise).\n *\n * Responsibilities:\n * 1. Mark the boundary as suspended so `beginWork` renders the fallback.\n * 2. Reset its partial render (clear child / deletions).\n * 3. Subscribe to the thenable — when it resolves, clear the suspended\n * state and schedule a re-render of the boundary.\n */\nexport const handleSuspendedWork = (\n boundary: Fiber,\n thenable: Promise<any>,\n): void => {\n const stable = stableFiber(boundary);\n\n // Avoid double-subscribing if a second suspend fires for the same boundary.\n if (suspendedBoundaries.has(stable)) return;\n suspendedBoundaries.add(stable);\n\n // Discard any partially-rendered children so beginWork starts fresh\n // and reconciles against the fallback instead.\n boundary.child = null;\n boundary.deletions = null;\n\n thenable.then(\n () => {\n // Module loaded / promise resolved — un-suspend and re-render.\n suspendedBoundaries.delete(stable);\n enqueueUpdate({ lanes: DefaultLane, fiber: stable, next: null });\n scheduleRenderLane(DefaultLane);\n },\n () => {\n // Rejection: un-suspend so error boundaries (future work) can take over.\n suspendedBoundaries.delete(stable);\n },\n );\n};\n\n/** Returns true for any value that looks like a thenable (Promise or custom). */\nexport const isThenable = (value: unknown): value is Promise<any> =>\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as any).then === \"function\";\n","import { Fiber, isFunction, shallowEqual, LazyComponent as LazyComponentType } from \"@rectify-dev/shared\";\nimport {\n FunctionComponent,\n HostComponent,\n HostRoot,\n ContextProvider,\n MemoComponent,\n FragmentComponent,\n LazyComponent,\n SuspenseComponent,\n ClassComponent,\n PortalComponent,\n} from \"./RectifyFiberWorkTags\";\nimport { withHooks, notifyContextConsumers } from \"@rectify-dev/hook\";\nimport { createWorkInProgress } from \"./RectifyFiber\";\nimport { getCurrentLanePriority } from \"./RectifyFiberRenderPriority\";\nimport { reconcileChildren } from \"./RectifyFiberReconcileChildren\";\nimport { isSuspendedBoundary } from \"./RectifyFiberSuspense\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Returns true when this fiber has no own pending work in the current pass. */\nconst hasNoPendingWork = (wip: Fiber): boolean =>\n !(wip.lanes & getCurrentLanePriority());\n\n/** Returns true when this is an update (not a mount). */\nconst isUpdate = (wip: Fiber): boolean => wip.alternate !== null;\n\n/**\n * Applies all queued setState updates against `currentState` and returns the\n * resulting next state. Each functional updater receives the state produced\n * by the previous updater in the same batch, matching React semantics.\n */\nconst flushStateQueue = <S, P>(\n currentState: S,\n props: P,\n queue: Array<Partial<S> | ((s: S, p: P) => Partial<S>)>,\n): S => {\n let state = currentState;\n for (const update of queue) {\n const partial =\n typeof update === \"function\" ? update(state, props) : update;\n state = { ...state, ...partial };\n }\n return state;\n};\n\n/**\n * Runs a function component (or memo-wrapped component) through hooks,\n * then reconciles the output into children.\n */\nconst renderFunctionComponent = (wip: Fiber, Component: Function): void => {\n const ComponentWithHooks = withHooks(wip, Component as any);\n const children = ComponentWithHooks(wip.pendingProps);\n reconcileChildren(wip, children);\n};\n\n/** Reads the context object off a ContextProvider fiber's type. */\nconst getProviderContext = (wip: Fiber) =>\n (wip.type as unknown as { _context: any })._context;\n\n/**\n * Bailout helper: re-links the current tree's children as WIP nodes under\n * `wip` without calling the component function. Each cloned child will be\n * visited by the work loop and may itself bail out or re-render depending on\n * its own pending lanes.\n */\nexport const cloneChildFibers = (wip: Fiber): Fiber | null => {\n const currentChild = wip.alternate?.child ?? null;\n if (!currentChild) {\n wip.child = null;\n return null;\n }\n\n let oldChild: Fiber | null = currentChild;\n let prevNewChild: Fiber | null = null;\n\n while (oldChild) {\n const newChild = createWorkInProgress(oldChild, oldChild.pendingProps);\n newChild.return = wip;\n\n if (!prevNewChild) {\n wip.child = newChild;\n } else {\n prevNewChild.sibling = newChild;\n }\n\n prevNewChild = newChild;\n oldChild = oldChild.sibling;\n }\n\n if (prevNewChild) prevNewChild.sibling = null;\n\n return wip.child;\n};\n\n// ---------------------------------------------------------------------------\n// beginWork\n// ---------------------------------------------------------------------------\n\nexport const beginWork = (wip: Fiber): Fiber | null => {\n switch (wip.workTag) {\n case MemoComponent: {\n const memo = wip.type as any;\n const render = memo._render;\n if (!isFunction(render)) break;\n\n // Bailout: use custom comparator when provided, fall back to shallowEqual.\n if (isUpdate(wip) && hasNoPendingWork(wip)) {\n const equal = memo._compare\n ? memo._compare(wip.memoizedProps, wip.pendingProps)\n : shallowEqual(wip.memoizedProps, wip.pendingProps);\n if (equal) return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, render);\n break;\n }\n\n case FunctionComponent: {\n const Component = wip.type;\n if (!isFunction(Component)) break;\n\n // Bailout: props unchanged and no own pending state update.\n // Cloned children let the work loop still descend into any grandchild\n // that does have pending work.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n shallowEqual(wip.memoizedProps, wip.pendingProps)\n ) {\n return cloneChildFibers(wip);\n }\n\n renderFunctionComponent(wip, Component as Function);\n break;\n }\n\n case FragmentComponent:\n case HostRoot:\n case HostComponent: {\n reconcileChildren(wip, wip.pendingProps?.children);\n break;\n }\n\n case ContextProvider: {\n // Bailout: value unchanged and no own pending work.\n // Children are cloned so the work loop still descends into them —\n // each child manages its own bailout independently.\n if (\n isUpdate(wip) &&\n hasNoPendingWork(wip) &&\n Object.is(wip.alternate!.memoizedProps?.value, wip.pendingProps?.value)\n ) {\n return cloneChildFibers(wip);\n }\n\n // Reconcile first so WIP child fibers exist before we mark subscribers.\n reconcileChildren(wip, wip.pendingProps?.children);\n\n // Notify subscribers when value changed so they re-render in this pass.\n if (isUpdate(wip)) {\n const prevValue = wip.alternate!.memoizedProps?.value;\n const nextValue = wip.pendingProps?.value;\n if (!Object.is(prevValue, nextValue)) {\n notifyContextConsumers(getProviderContext(wip));\n }\n }\n break;\n }\n\n case SuspenseComponent: {\n // When suspended, render fallback; otherwise render children.\n const children = isSuspendedBoundary(wip)\n ? wip.pendingProps?.fallback\n : wip.pendingProps?.children;\n reconcileChildren(wip, children);\n break;\n }\n\n case ClassComponent: {\n const Ctor = wip.type as any;\n const isMount = !wip.classInstance;\n\n if (isMount) {\n // First render: create the instance and wire setState → reconciler.\n const instance = new Ctor(wip.pendingProps);\n instance._fiber = wip;\n wip.classInstance = instance;\n // Flush any setState calls made inside the constructor.\n if (instance._pendingStateQueue?.length) {\n instance.state = flushStateQueue(\n instance.state,\n instance.props,\n instance._pendingStateQueue,\n );\n instance._pendingStateQueue = [];\n }\n } else {\n const instance = wip.classInstance!;\n\n // Bailout: skip re-render when there is no queued state and the props\n // are shallowly equal to what was rendered last time.\n // We compare against instance.props (set at the end of every render)\n // rather than wip.memoizedProps because memoizedProps is not kept in\n // sync for non-host fibers.\n if (\n hasNoPendingWork(wip) &&\n !instance._pendingStateQueue?.length &&\n shallowEqual(instance.props, wip.pendingProps)\n ) {\n return cloneChildFibers(wip);\n }\n\n // 1. Snapshot the OLD values BEFORE touching anything.\n instance._prevProps = instance.props;\n instance._prevState = { ...instance.state };\n\n // 2. Flush queued setState updates so instance.state is now NEW.\n if (instance._pendingStateQueue?.length) {\n instance.state = flushStateQueue(\n instance.state,\n wip.pendingProps,\n instance._pendingStateQueue,\n );\n instance._pendingStateQueue = [];\n }\n\n instance.props = wip.pendingProps;\n instance._fiber = wip;\n\n // 3. Honour shouldComponentUpdate if defined.\n if (\n isUpdate(wip) &&\n typeof instance.shouldComponentUpdate === \"function\" &&\n !instance.shouldComponentUpdate(wip.pendingProps, instance.state)\n ) {\n return cloneChildFibers(wip);\n }\n }\n\n const children = wip.classInstance!.render();\n reconcileChildren(wip, children);\n break;\n }\n\n case LazyComponent: {\n const lazy = wip.type as unknown as LazyComponentType<any>;\n\n if (lazy._status === \"resolved\") {\n // Module loaded — render the component normally.\n renderFunctionComponent(wip, lazy._result as Function);\n break;\n }\n\n if (lazy._status === \"rejected\") {\n // Module failed — propagate the error (error boundary territory).\n throw lazy._result as Error;\n }\n\n // \"uninitialized\" or \"pending\": kick off / await the load and suspend.\n if (lazy._status === \"uninitialized\") {\n lazy._status = \"pending\";\n lazy._promise = lazy._factory().then(\n (module: any) => {\n lazy._status = \"resolved\";\n // Support both `export default` and bare-default modules.\n lazy._result = (module as any)?.default ?? module;\n },\n (error: unknown) => {\n lazy._status = \"rejected\";\n lazy._result = error as Error;\n },\n );\n }\n\n // Throwing a thenable signals the work loop to suspend the nearest\n // Suspense boundary and schedule a re-render when the promise resolves.\n throw lazy._promise;\n }\n\n case PortalComponent: {\n wip.stateNode = wip.pendingProps.containerInfo;\n reconcileChildren(wip, wip.pendingProps.children);\n break;\n }\n }\n\n return wip.child;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { NoFlags } from \"./RectifyFiberFlags\";\nimport { NoLanes } from \"./RectifyFiberLanes\";\nimport { getCurrentLanePriority } from \"./RectifyFiberRenderPriority\";\n\n// ---------------------------------------------------------------------------\n// bubbleProperties\n// ---------------------------------------------------------------------------\n\n/**\n * Clear this fiber's own lane (it has been processed) and roll up child flags\n * and child lanes from direct children so the work loop can skip clean subtrees.\n */\nexport const bubbleProperties = (wip: Fiber): void => {\n wip.lanes &= ~getCurrentLanePriority();\n let subtreeFlags = NoFlags;\n let childLanes = NoLanes;\n\n let child = wip.child;\n while (child) {\n subtreeFlags |= child.flags | child.subtreeFlags;\n childLanes |= child.lanes | child.childLanes;\n\n child.return = wip;\n child = child.sibling;\n }\n\n wip.subtreeFlags = subtreeFlags;\n wip.childLanes = childLanes;\n};\n\n// ---------------------------------------------------------------------------\n// bubbleFlagsToRoot\n// ---------------------------------------------------------------------------\n\n/**\n * After a concurrent subtree finishes, propagate its flags and lanes up to the\n * root so commitWork knows which parts of the tree need attention.\n */\nexport const bubbleFlagsToRoot = (wip: Fiber): void => {\n let current: Fiber = wip;\n let parent = current.return;\n\n while (parent) {\n parent.subtreeFlags |= current.flags | current.subtreeFlags;\n parent.childLanes |= current.lanes | current.childLanes;\n current = parent;\n parent = parent.return;\n }\n};\n\n// ---------------------------------------------------------------------------\n// completeUnitOfWork\n// ---------------------------------------------------------------------------\n\n/**\n * Walk back up the tree after a leaf is reached: bubble properties on each\n * completed unit, then move to its sibling or continue up to the parent.\n * Returns null when `stopAt` is reached (the work loop's root).\n */\nexport const completeUnitOfWork = (unit: Fiber, stopAt: Fiber): Fiber | null => {\n let completed: Fiber | null = unit;\n\n while (completed) {\n bubbleProperties(completed);\n\n if (completed === stopAt) return null;\n if (completed.sibling) return completed.sibling;\n\n completed = completed.return;\n }\n\n return null;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { Lanes, SyncLane, InputLane } from \"./RectifyFiberLanes\";\nimport { createWorkInProgress } from \"./RectifyFiber\";\nimport {\n shouldYield,\n getResumeCursor,\n setResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\nimport { beginWork } from \"./RectifyFiberBeginWork\";\nimport {\n completeUnitOfWork,\n bubbleFlagsToRoot,\n} from \"./RectifyFiberCompleteWork\";\nimport {\n isThenable,\n findNearestSuspenseBoundary,\n handleSuspendedWork,\n} from \"./RectifyFiberSuspense\";\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/**\n * Swap the committed fiber (`current`) for its work-in-progress twin in the\n * parent's child/sibling chain so the work loop operates on the WIP tree.\n */\nconst swapCurrentForWip = (current: Fiber, wip: Fiber): void => {\n const parent = wip.return;\n if (!parent) return;\n\n if (parent.child === current) {\n parent.child = wip;\n return;\n }\n\n let prevSibling = parent.child;\n while (prevSibling && prevSibling.sibling !== current) {\n prevSibling = prevSibling.sibling;\n }\n if (prevSibling) prevSibling.sibling = wip;\n};\n\n// ---------------------------------------------------------------------------\n// Work loops\n// ---------------------------------------------------------------------------\n\n/** Synchronous work loop — runs to completion without yielding. */\nexport const workLoop = (wipRoot: Fiber): void => {\n let workInProgress: Fiber | null = wipRoot;\n\n while (workInProgress) {\n try {\n const next = beginWork(workInProgress);\n workInProgress = next ?? completeUnitOfWork(workInProgress, wipRoot);\n } catch (thrown) {\n if (isThenable(thrown) && workInProgress) {\n const boundary = findNearestSuspenseBoundary(workInProgress);\n if (boundary) {\n handleSuspendedWork(boundary, thrown);\n // Re-process the boundary, this time rendering the fallback.\n workInProgress = boundary;\n continue;\n }\n }\n throw thrown;\n }\n }\n};\n\n/**\n * Interruptible work loop used for non-urgent lanes (Default / Transition / Idle).\n * Yields back to the browser when the frame budget is exceeded; the scheduler\n * will re-post a task to continue with the remaining pending lanes.\n * Returns true when the tree is fully processed, false when it yielded early.\n */\nexport const workLoopConcurrent = (wipRoot: Fiber): boolean => {\n // Resume from the saved cursor if we yielded on a previous task,\n // otherwise start fresh from the WIP root.\n let workInProgress: Fiber | null = getResumeCursor() ?? wipRoot;\n clearResumeCursor();\n\n while (workInProgress && !shouldYield()) {\n try {\n const next = beginWork(workInProgress);\n workInProgress = next ?? completeUnitOfWork(workInProgress, wipRoot);\n } catch (thrown) {\n if (isThenable(thrown) && workInProgress) {\n const boundary = findNearestSuspenseBoundary(workInProgress);\n if (boundary) {\n handleSuspendedWork(boundary, thrown);\n // Re-process the boundary, this time rendering the fallback.\n workInProgress = boundary;\n continue;\n }\n }\n throw thrown;\n }\n }\n\n if (workInProgress !== null) {\n // Yielded early – save the cursor so the next task resumes here.\n setResumeCursor(workInProgress);\n return false;\n }\n\n return true;\n};\n\n/**\n * Descend into the fiber tree and process only fibers that have pending work\n * on `renderLanes`. Returns true when fully processed, false if yielded early.\n */\nexport const workLoopOnFiberLanes = (\n wipRoot: Fiber,\n renderLanes: Lanes,\n): boolean => {\n if (wipRoot.lanes & renderLanes) {\n const wip = createWorkInProgress(wipRoot, wipRoot.pendingProps);\n swapCurrentForWip(wipRoot, wip);\n\n const isSync = !!(renderLanes & (SyncLane | InputLane));\n const completed = isSync ? (workLoop(wip), true) : workLoopConcurrent(wip);\n\n if (completed) bubbleFlagsToRoot(wip);\n return completed;\n }\n\n if (wipRoot.childLanes & renderLanes) {\n let child: Fiber | null = wipRoot.child;\n while (child) {\n if (!workLoopOnFiberLanes(child, renderLanes)) return false; // propagate early-exit\n child = child.sibling;\n }\n }\n\n return true;\n};\n","import { Fiber, isFunction } from \"@rectify-dev/shared\";\n\n// ---------------------------------------------------------------------------\n// attachRef\n// ---------------------------------------------------------------------------\n\n/**\n * Attach a ref after a node is placed or the ref prop changes.\n * For callback refs, the return value is stored as a cleanup to be called\n * before the next attach or on unmount (React 19-style cleanup refs).\n */\nexport const attachRef = (wip: Fiber): void => {\n const ref = wip.pendingProps?.ref;\n if (!ref) return;\n\n if (isFunction(ref)) {\n const cleanup = ref(wip.stateNode);\n wip.refCleanup = isFunction(cleanup) ? cleanup : null;\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = wip.stateNode;\n }\n};\n\n// ---------------------------------------------------------------------------\n// detachRef\n// ---------------------------------------------------------------------------\n\n/**\n * Detach a ref when the fiber is removed or the ref prop changes.\n * Calls the stored cleanup (if any), otherwise falls back to `ref(null)` /\n * clearing `.current`.\n */\nexport const detachRef = (fiber: Fiber): void => {\n if (fiber.refCleanup) {\n fiber.refCleanup();\n fiber.refCleanup = null;\n return;\n }\n\n const ref = fiber.memoizedProps?.ref;\n if (!ref) return;\n\n if (typeof ref === \"function\") {\n ref(null);\n } else if (typeof ref === \"object\" && \"current\" in ref) {\n ref.current = null;\n }\n};\n","import { precacheFiberNode } from \"@rectify-dev/dom-binding\";\nimport { Fiber } from \"@rectify-dev/shared\";\nimport { getParentDom, getHostSibling } from \"./RectifyFiberService\";\nimport { HostComponent, HostRoot } from \"./RectifyFiberWorkTags\";\nimport { attachRef } from \"./RectifyFiberCommitRef\";\n\n// ---------------------------------------------------------------------------\n// insertIntoParent\n// ---------------------------------------------------------------------------\n\nconst insertIntoParent = (wip: Fiber, node: Node): void => {\n const parentDom = getParentDom(wip);\n\n // Walk up through non-host ancestors looking for a host sibling to use as\n // an insertBefore reference. Only climbing as far as the host parent —\n // stopping at HostComponent/HostRoot prevents us from crossing into a\n // sibling DOM subtree that belongs to a different parent.\n let cursor: Fiber | null = wip;\n while (cursor) {\n const before = getHostSibling(cursor);\n if (before) {\n parentDom.insertBefore(node, before);\n return;\n }\n const parent: Fiber | null = cursor.return;\n // Stop once the immediate parent is itself a host node.\n if (!parent || parent.workTag === HostComponent || parent.workTag === HostRoot) break;\n cursor = parent;\n }\n\n parentDom.appendChild(node);\n};\n\n// ---------------------------------------------------------------------------\n// placeNode\n// ---------------------------------------------------------------------------\n\n/**\n * Physically place or re-place `node` in the DOM and attach its ref.\n * Used for both PlacementFlag (new nodes) and MoveFlag (reordered nodes).\n */\nexport const placeNode = (wip: Fiber, node: Node): void => {\n insertIntoParent(wip, node);\n precacheFiberNode(wip, node);\n attachRef(wip);\n};\n","import { applyPropsToDom, listenToAllEventSupported, precacheFiberNode } from \"@rectify-dev/dom-binding\";\nimport { Fiber } from \"@rectify-dev/shared\";\nimport { MoveFlag, PlacementFlag, RefFlag, UpdateFlag } from \"./RectifyFiberFlags\";\nimport {\n createDomElementFromFiber,\n hasFlagOnFiber,\n removeFlagFromFiber,\n} from \"./RectifyFiberService\";\nimport { HostComponent, HostText, PortalComponent } from \"./RectifyFiberWorkTags\";\nimport { attachRef, detachRef } from \"./RectifyFiberCommitRef\";\nimport { placeNode } from \"./RectifyFiberCommitPlacement\";\n\n// ---------------------------------------------------------------------------\n// Host element\n// ---------------------------------------------------------------------------\n\nconst commitMutationHostComponent = (wip: Fiber): void => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n applyPropsToDom(node, wip.memoizedProps, wip.pendingProps);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n // Node already exists in the DOM but at the wrong position — re-insert.\n (wip.stateNode as Element).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n applyPropsToDom(wip.stateNode, wip.memoizedProps, wip.pendingProps);\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n // ref attachment is handled exclusively via PlacementFlag/MoveFlag (placeNode)\n // and RefFlag (below) so we never double-invoke callback refs on plain updates.\n }\n\n if (hasFlagOnFiber(wip, RefFlag)) {\n // Detach the previously committed ref, then attach the incoming one.\n detachRef(wip); // reads memoizedProps.ref → sets .current = null\n attachRef(wip); // reads pendingProps.ref → sets .current = stateNode\n removeFlagFromFiber(wip, RefFlag);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Host text\n// ---------------------------------------------------------------------------\n\nconst commitMutationHostText = (wip: Fiber): void => {\n if (!wip.stateNode) {\n const node = createDomElementFromFiber(wip);\n precacheFiberNode(wip, node);\n wip.stateNode = node;\n }\n\n if (hasFlagOnFiber(wip, PlacementFlag)) {\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, PlacementFlag);\n }\n\n if (hasFlagOnFiber(wip, MoveFlag)) {\n (wip.stateNode as Text).remove();\n placeNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, MoveFlag);\n }\n\n if (hasFlagOnFiber(wip, UpdateFlag)) {\n if (wip.memoizedProps !== wip.pendingProps) {\n (wip.stateNode as Text).nodeValue = String(wip.pendingProps);\n }\n precacheFiberNode(wip, wip.stateNode!);\n removeFlagFromFiber(wip, UpdateFlag);\n }\n};\n\n// ---------------------------------------------------------------------------\n// Dispatcher\n// ---------------------------------------------------------------------------\n\nexport const commitMutation = (fiber: Fiber): void => {\n switch (fiber.workTag) {\n case HostComponent:\n commitMutationHostComponent(fiber);\n break;\n case HostText:\n commitMutationHostText(fiber);\n break;\n case PortalComponent:\n // Register delegated event listeners on the portal container the first\n // time it is committed. Doing this here (commit phase) rather than in\n // createPortal (render phase) prevents mid-dispatch listener registration:\n // a sync re-render triggered by a click would otherwise attach listeners\n // to the container while the native capture phase is still propagating,\n // causing the same event to fire a second time through the new listener.\n listenToAllEventSupported(fiber.stateNode as Element);\n break;\n }\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { runEffectCleanups, clearContextSubscriptions } from \"@rectify-dev/hook\";\nimport { ClassComponent, HostComponent, HostText } from \"./RectifyFiberWorkTags\";\nimport { detachRef } from \"./RectifyFiberCommitRef\";\n\n// ---------------------------------------------------------------------------\n// removeHostTree\n// ---------------------------------------------------------------------------\n\n/**\n * Recursively unmount a fiber subtree:\n * 1. Call componentWillUnmount on class component instances.\n * 2. Run effect cleanups and unsubscribe from contexts.\n * 3. Detach refs and remove the DOM node for host fibers.\n * 4. Recurse into children.\n */\nexport const removeHostTree = (fiber: Fiber): void => {\n if (fiber.workTag === ClassComponent) {\n fiber.classInstance?.componentWillUnmount?.();\n }\n\n if (fiber.memoizedState) {\n runEffectCleanups(fiber);\n }\n clearContextSubscriptions(fiber);\n\n if (fiber.workTag === HostComponent || fiber.workTag === HostText) {\n detachRef(fiber);\n (fiber.stateNode as Element)?.remove();\n }\n\n let child = fiber.child;\n while (child) {\n removeHostTree(child);\n child = child.sibling;\n }\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { NoFlags, MoveFlag, PlacementFlag, RefFlag, UpdateFlag } from \"./RectifyFiberFlags\";\nimport { commitMutation } from \"./RectifyFiberCommitMutation\";\nimport { removeHostTree } from \"./RectifyFiberCommitRemoval\";\nimport { ClassComponent } from \"./RectifyFiberWorkTags\";\n\nconst MutationMask = PlacementFlag | UpdateFlag | MoveFlag | RefFlag;\n\n// ---------------------------------------------------------------------------\n// commitWork\n// ---------------------------------------------------------------------------\n\nexport const commitWork = (finishedWork: Fiber): void => {\n // 1. Remove deleted fibers first so the DOM is clean before mutations.\n if (finishedWork.deletions?.length) {\n finishedWork.deletions.forEach(removeHostTree);\n finishedWork.deletions = null;\n }\n\n // 2. Apply mutations on this fiber, then sync memoizedProps.\n if (finishedWork.flags & MutationMask) {\n commitMutation(finishedWork);\n finishedWork.memoizedProps = finishedWork.pendingProps;\n }\n\n // 3. Recurse into children that have pending mutations.\n if (finishedWork.subtreeFlags & MutationMask) {\n let child = finishedWork.child;\n while (child) {\n commitWork(child);\n child = child.sibling;\n }\n }\n\n // 4. Fire class component lifecycle hooks after the subtree is committed.\n if (finishedWork.workTag === ClassComponent && finishedWork.classInstance) {\n const instance = finishedWork.classInstance;\n const isMount = finishedWork.alternate === null;\n if (isMount) {\n instance.componentDidMount?.();\n } else if (instance._prevState !== undefined) {\n // _prevState is only set when the component actually rendered in this\n // pass (beginWork ClassComponent update path). If the component bailed\n // out it won't be set, so we correctly skip componentDidUpdate.\n instance.componentDidUpdate?.(\n instance._prevProps,\n instance._prevState,\n );\n instance._prevProps = undefined;\n instance._prevState = undefined;\n }\n }\n\n // 5. Reset flags after this node is fully committed.\n finishedWork.flags = NoFlags;\n finishedWork.subtreeFlags = NoFlags;\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { FiberRoot } from \"./RectifyFiberTypes\";\nimport { workLoopOnFiberLanes } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport { markContainerAsRoot } from \"@rectify-dev/dom-binding\";\nimport {\n flushEffects,\n flushEffectCleanups,\n flushLayoutEffects,\n flushLayoutEffectCleanups,\n} from \"@rectify-dev/hook\";\nimport {\n dequeueUpdate,\n hasUpdate,\n UpdateQueue,\n} from \"./RectifyFiberConcurrentUpdate\";\nimport { setCurrentRenderingLanes } from \"./RectifyFiberRenderPriority\";\nimport { clearResumeCursor } from \"./RectifyFiberScheduler\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\n\n// When true, setState calls inside useLayoutEffect must NOT schedule async\n// tasks – they will be drained synchronously by flushLayoutPhase instead.\nlet _isFlushingLayoutEffects = false;\nexport const getIsFlushingLayoutEffects = (): boolean => _isFlushingLayoutEffects;\nexport const setIsFlushingLayoutEffects = (value: boolean): void => { _isFlushingLayoutEffects = value; };\n\n// ---------------------------------------------------------------------------\n// Passive effects\n// ---------------------------------------------------------------------------\n\n// A single reusable channel; the port1 handler is replaced each time so\n// only the most recently scheduled flush ever runs.\nconst passiveChannel = new MessageChannel();\n\nexport const schedulePassiveEffects = (): void => {\n passiveChannel.port1.onmessage = () => {\n flushEffectCleanups();\n flushEffects();\n };\n passiveChannel.port2.postMessage(null);\n};\n\n// ---------------------------------------------------------------------------\n// Layout phase\n// ---------------------------------------------------------------------------\n\n/**\n * Flush layout effects synchronously, then re-render and re-commit any state\n * updates triggered inside them – looping until stable. This mirrors React's\n * behavior where setState inside useLayoutEffect causes a synchronous\n * re-render that the browser never sees as an intermediate frame.\n */\nexport const flushLayoutPhase = (fiberRoot: FiberRoot): void => {\n while (true) {\n setIsFlushingLayoutEffects(true);\n flushLayoutEffectCleanups();\n flushLayoutEffects();\n setIsFlushingLayoutEffects(false);\n\n // No updates were triggered during layout effects – we are done.\n if (!hasUpdate()) break;\n\n // Drain the updates synchronously (they were enqueued with SyncLane).\n flushPendingUpdates();\n setCurrentRenderingLanes(SyncLane);\n const completed = workLoopOnFiberLanes(fiberRoot.root, SyncLane);\n if (!completed) break; // shouldn't happen for sync lanes\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Loop back to flush any layout effects produced by this new render.\n }\n};\n\n// ---------------------------------------------------------------------------\n// Pending update propagation\n// ---------------------------------------------------------------------------\n\nexport const flushPendingUpdates = (): void => {\n let update = dequeueUpdate();\n while (update) {\n propagateLaneToAncestors(update);\n update = dequeueUpdate();\n }\n};\n\n/**\n * Stamps `lane` onto the target fiber and bubbles it up as `childLanes` so\n * `workLoopOnFiberLanes` knows to descend into that subtree.\n */\nconst propagateLaneToAncestors = (updateQueue: UpdateQueue): void => {\n const lane = updateQueue.lanes;\n let fiber: Fiber | null = updateQueue.fiber;\n\n // Mark the fiber itself (and its alternate) with the lane.\n fiber.lanes |= lane;\n if (fiber.alternate) fiber.alternate.lanes |= lane;\n\n // Walk up and set childLanes on every ancestor.\n fiber = fiber.return;\n while (fiber) {\n fiber.childLanes |= lane;\n if (fiber.alternate) fiber.alternate.childLanes |= lane;\n fiber = fiber.return;\n }\n};\n","import { Fiber } from \"@rectify-dev/shared\";\nimport { setScheduleRerender, setMarkFiberDirty } from \"@rectify-dev/hook\";\nimport { enqueueUpdate } from \"./RectifyFiberConcurrentUpdate\";\nimport {\n requestUpdateLane,\n getCurrentLanePriority,\n} from \"./RectifyFiberRenderPriority\";\nimport { scheduleRenderLane } from \"./RectifyFiberScheduler\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\nimport { getIsFlushingLayoutEffects } from \"./RectifyFiberFlushPhase\";\n\n// ---------------------------------------------------------------------------\n// Injected callbacks — wired into the hook layer at startup\n// ---------------------------------------------------------------------------\n\n/**\n * Called by useState's dispatcher when state changes.\n * Enqueues the fiber for re-render on the appropriate lane.\n */\nconst onScheduleRerender = (fiber: Fiber): void => {\n // Inside useLayoutEffect: force SyncLane so the flush loop picks it up\n // synchronously instead of scheduling an async task.\n const lane = getIsFlushingLayoutEffects() ? SyncLane : requestUpdateLane();\n enqueueUpdate({ lanes: lane, fiber, next: null });\n if (!getIsFlushingLayoutEffects()) {\n scheduleRenderLane(lane);\n }\n};\n\n/**\n * Called by notifyContextConsumers when a Provider value changes.\n * Marks the subscriber's WIP fiber dirty so it fails the bailout and\n * re-renders in the current pass — no second render pass needed.\n *\n * The subscriber set holds committed (current) fibers; their WIP is .alternate.\n * We also bubble childLanes up the WIP tree so workLoopOnFiberLanes descends\n * into the subscriber's subtree.\n */\nconst onMarkFiberDirty = (fiber: Fiber): void => {\n const lane = getCurrentLanePriority();\n\n // Mark both sides so the lane survives createWorkInProgress copies.\n fiber.lanes |= lane;\n const wip = fiber.alternate;\n if (!wip) return;\n\n wip.lanes |= lane;\n\n let parent = wip.return;\n while (parent) {\n if ((parent.childLanes & lane) === lane) break; // already covered above\n parent.childLanes |= lane;\n parent = parent.return;\n }\n};\n\nsetScheduleRerender(onScheduleRerender);\nsetMarkFiberDirty(onMarkFiberDirty);\n","import {\n markContainerAsRoot,\n injectEventPriorityCallbacks,\n} from \"@rectify-dev/dom-binding\";\nimport { workLoopOnFiberLanes } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport { getScheduledFiberRoot } from \"./RectifyFiberInstance\";\nimport {\n setCurrentEventPriority,\n resetCurrentEventPriority,\n setCurrentRenderingLanes,\n} from \"./RectifyFiberRenderPriority\";\nimport {\n scheduleRenderLane,\n setWorkCallback,\n getResumeCursor,\n clearResumeCursor,\n} from \"./RectifyFiberScheduler\";\nimport {\n flushLayoutPhase,\n flushPendingUpdates,\n schedulePassiveEffects,\n} from \"./RectifyFiberFlushPhase\";\n// Side-effect import: wires onScheduleRerender / onMarkFiberDirty into the hook layer.\nimport \"./RectifyFiberHookBridge\";\n\n// ---------------------------------------------------------------------------\n// Wire up event priority into dom-binding\n// ---------------------------------------------------------------------------\ninjectEventPriorityCallbacks(\n setCurrentEventPriority,\n resetCurrentEventPriority,\n);\n\n// ---------------------------------------------------------------------------\n// Work callback – called by the scheduler for each lane tier\n// ---------------------------------------------------------------------------\nconst performWork = (lanes: number): void => {\n const fiberRoot = getScheduledFiberRoot();\n if (!fiberRoot) return;\n\n // Only flush pending updates when starting a fresh render,\n // not when resuming a yielded concurrent work loop.\n if (!getResumeCursor()) flushPendingUpdates();\n\n setCurrentRenderingLanes(lanes);\n const completed = workLoopOnFiberLanes(fiberRoot.root, lanes);\n\n if (!completed) {\n // workLoopConcurrent saved the cursor inside RectifyFiberScheduler.\n // Re-post a task for the same lane so work continues next frame.\n scheduleRenderLane(lanes);\n return;\n }\n\n // Tree fully reconciled – safe to commit.\n clearResumeCursor();\n commitWork(fiberRoot.root);\n markContainerAsRoot(fiberRoot.root, fiberRoot.containerDom);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n\nsetWorkCallback(performWork);\n","import { RectifyNode } from \"@rectify-dev/shared\";\nimport { FiberRoot } from \"./RectifyFiberTypes\";\nimport { createHostRootFiber, createWorkInProgress } from \"./RectifyFiber\";\nimport { setScheduledFiberRoot } from \"./RectifyFiberInstance\";\nimport { markContainerAsRoot } from \"@rectify-dev/dom-binding\";\nimport { workLoop } from \"./RectifyFiberWorkLoop\";\nimport { commitWork } from \"./RectifyFiberCommitWork\";\nimport { setCurrentRenderingLanes } from \"./RectifyFiberRenderPriority\";\nimport { SyncLane } from \"./RectifyFiberLanes\";\nimport { flushLayoutPhase, schedulePassiveEffects } from \"./RectifyFiberFlushPhase\";\n// Side-effect import: wires up event priority, performWork, and hook callbacks.\nimport \"./RectifyFiberBootstrap\";\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\nexport const createContainer = (container: Element): FiberRoot => {\n return createHostRootFiber(container);\n};\n\nexport const updateContainer = (\n children: RectifyNode,\n fiberRoot: FiberRoot,\n): void => {\n fiberRoot.children = children;\n setScheduledFiberRoot(fiberRoot);\n\n const wipRoot = createWorkInProgress(fiberRoot.root, { children });\n setCurrentRenderingLanes(SyncLane);\n workLoop(wipRoot);\n commitWork(wipRoot);\n fiberRoot.root = wipRoot;\n markContainerAsRoot(wipRoot, fiberRoot.containerDom);\n setScheduledFiberRoot(fiberRoot);\n // Flush layout effects synchronously, draining any setState they trigger\n // before the browser gets a chance to paint.\n flushLayoutPhase(fiberRoot);\n // Passive effects (useEffect) are deferred so the browser can paint first.\n schedulePassiveEffects();\n};\n","import {\n listenToAllEventSupported,\n markContainerAsRoot,\n unmarkContainerAsRoot,\n} from \"@rectify-dev/dom-binding\";\nimport { createContainer, updateContainer } from \"@rectify-dev/reconciler\";\nimport { RectifyNode } from \"@rectify-dev/shared\";\n\ntype RectifyDomRoot = {\n render: (node: RectifyNode) => void;\n unmount: () => void;\n};\n\nexport const createRoot = (container: Element): RectifyDomRoot => {\n const hostRoot = createContainer(container);\n markContainerAsRoot(hostRoot.root, container);\n listenToAllEventSupported(container);\n return {\n render: (node: RectifyNode) => {\n updateContainer(node, hostRoot);\n },\n unmount: () => {\n unmarkContainerAsRoot(container);\n },\n };\n};\n","import { RECTIFY_PORTAL_TYPE } from \"@rectify-dev/shared\";\nimport type { RectifyKey, RectifyNode, RectifyPortal } from \"@rectify-dev/shared\";\n\nexport const createPortal = (\n children: RectifyNode,\n container: Element,\n key: RectifyKey = null,\n): RectifyPortal => {\n return {\n $$typeof: RECTIFY_PORTAL_TYPE,\n type: null,\n key,\n props: {\n children,\n containerInfo: container,\n },\n };\n};\n","import { FC } from \"@rectify-dev/shared\";\n\nexport type MemoComponent<P = any> = FC<P> & {\n /** Marks this as a memo-wrapped component for the reconciler. */\n _isMemo: true;\n /** The wrapped component that will be called on actual renders. */\n _render: FC<P>;\n /** Custom comparator — defaults to shallow equality when absent. */\n _compare: ((prevProps: P, nextProps: P) => boolean) | null;\n};\n\n/**\n * Wraps a component with a custom props comparator.\n *\n * By default every component already bails out automatically when props are\n * shallowly equal. Use `memo` only when you need a **custom** comparison —\n * for example, deep equality on a specific prop, or ignoring certain keys.\n *\n * @example\n * // Ignore the `style` prop when deciding whether to re-render\n * const Chart = memo(\n * ({ data }) => jsx('canvas', { ... }),\n * (prev, next) => Object.is(prev.data, next.data),\n * );\n */\nexport function memo<P = any>(\n Component: FC<P>,\n compare?: (prevProps: P, nextProps: P) => boolean,\n): MemoComponent<P> {\n const wrapper = ((_props: P) => null) as unknown as MemoComponent<P>;\n wrapper._isMemo = true;\n wrapper._render = Component;\n wrapper._compare = compare ?? null;\n return wrapper;\n}\n","import type { LazyComponent } from \"@rectify-dev/shared\";\n\n/**\n * Lazily loads a component via a dynamic import factory.\n *\n * The returned object is used as a JSX element type and behaves like a normal\n * function component once loaded. While loading it suspends the nearest\n * `<Suspense>` boundary, which renders its `fallback` instead.\n *\n * @example\n * const HeavyChart = lazy(() => import(\"./HeavyChart\"));\n *\n * function App() {\n * return (\n * <Suspense fallback={<Spinner />}>\n * <HeavyChart />\n * </Suspense>\n * );\n * }\n */\nexport const lazy = <T>(\n factory: () => Promise<{ default: T } | T>,\n): LazyComponent<T> => {\n // Use Object.assign so the value has both the call signature (stub) and\n // the marker properties that the reconciler reads at runtime.\n const stub = (() => null) as unknown as LazyComponent<T>;\n return Object.assign(stub, {\n _isLazy: true as const,\n _status: \"uninitialized\" as const,\n _result: null,\n _promise: null,\n _factory: factory,\n });\n};\n","import type { SuspenseProps } from \"@rectify-dev/shared\";\n\n/**\n * Catches thrown promises from any child (including lazy components) and\n * renders `fallback` until they resolve.\n *\n * Marked as a sentinel with `_isSuspense` so the reconciler can identify it\n * without a dedicated $$typeof symbol — consistent with how MemoComponent\n * and ContextProvider are detected.\n *\n * @example\n * <Suspense fallback={<Spinner />}>\n * <LazyPage />\n * </Suspense>\n */\nexport const Suspense = (_props: SuspenseProps): null => null;\n(Suspense as any)._isSuspense = true;\n","import type { RectifyNode } from \"@rectify-dev/shared\";\nimport { scheduleRerender } from \"@rectify-dev/hook\";\n\n/**\n * Base class for Rectify class components.\n *\n * @example\n * class Counter extends Component<{}, { count: number }> {\n * state = { count: 0 };\n *\n * render() {\n * return (\n * <button onClick={() => this.setState({ count: this.state.count + 1 })}>\n * {this.state.count}\n * </button>\n * );\n * }\n * }\n */\nexport class Component<P = {}, S = {}> {\n /** Marks this as a class component for the reconciler. */\n static readonly _isClassComponent = true;\n\n props: P;\n state: S = {} as S;\n\n /**\n * @internal Set by the reconciler when the instance is created so\n * `setState` can enqueue a re-render on the correct fiber.\n */\n _fiber: import(\"@rectify-dev/shared\").Fiber | null = null;\n\n /**\n * @internal Snapshots taken by the reconciler in beginWork before each\n * update render so that `componentDidUpdate` receives the correct prev values.\n * Cleared after `componentDidUpdate` is called.\n */\n _prevProps: P | undefined = undefined;\n _prevState: S | undefined = undefined;\n\n /**\n * @internal Queue of pending setState updates, flushed by the reconciler\n * during beginWork so that prevState snapshots can be taken first.\n */\n _pendingStateQueue: Array<\n Partial<S> | ((prevState: S, prevProps: P) => Partial<S>)\n > = [];\n\n constructor(props: P) {\n this.props = props;\n }\n\n // ---------------------------------------------------------------------------\n // Lifecycle hooks (optional overrides)\n // ---------------------------------------------------------------------------\n\n /** Called once, immediately after the component is inserted into the DOM. */\n componentDidMount?(): void;\n\n /**\n * Called after every re-render.\n * @param prevProps — props before the update\n * @param prevState — state before the update\n */\n componentDidUpdate?(prevProps: P, prevState: S): void;\n\n /** Called immediately before the component is removed from the DOM. */\n componentWillUnmount?(): void;\n\n /**\n * Return false to skip re-rendering when props or state haven't changed.\n * Defaults to always re-render.\n */\n shouldComponentUpdate?(nextProps: P, nextState: S): boolean;\n\n // ---------------------------------------------------------------------------\n // Core API\n // ---------------------------------------------------------------------------\n\n /**\n * Merges `partialState` into the current state and schedules a re-render.\n * Accepts either a plain partial state object or an updater function.\n */\n setState(\n partialState: Partial<S> | ((prevState: S, prevProps: P) => Partial<S>),\n ): void {\n // Enqueue rather than apply immediately so that beginWork can snapshot\n // prevState BEFORE flushing — giving componentDidUpdate the correct value.\n this._pendingStateQueue.push(partialState);\n\n if (this._fiber) {\n scheduleRerender(this._fiber);\n }\n }\n\n /**\n * Must be implemented by every class component.\n * Returns the subtree to render.\n */\n render(): RectifyNode {\n return null;\n }\n}\n"]}