@unsetsoft/ryunixjs 1.2.4-canary.21 → 1.2.4-canary.23
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/Ryunix.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Ryunix.esm.js","sources":["../src/utils/index.js","../src/lib/createElement.js","../src/lib/effects.js","../src/utils/svgAttributes.js","../src/lib/priority.js","../src/lib/dom.js","../src/lib/portal.js","../src/lib/commits.js","../src/lib/reconciler.js","../src/lib/bridge.js","../src/lib/batching.js","../src/lib/devtools.js","../src/lib/hooks.js","../src/lib/components.js","../src/lib/profiler.js","../src/lib/workers.js","../src/lib/render.js","../src/lib/server.js","../src/lib/memo.js","../src/lib/lazy.js","../src/lib/forwardRef.js","../src/lib/serverBoundary.js","../src/lib/errorBoundary.js","../src/lib/serverActions.js","../src/main.js"],"sourcesContent":["// Improved state management - avoid global mutable object\r\n// Instead, create a state manager that can be instantiated per render tree\r\n\r\nconst IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined'\r\n\r\nconst rIC =\r\n typeof requestIdleCallback !== 'undefined'\r\n ? requestIdleCallback\r\n : (cb) => setTimeout(() => cb({ timeRemaining: () => 1 }), 1)\r\n\r\nconst createRenderState = () => ({\r\n containerRoot: null,\r\n nextUnitOfWork: null,\r\n currentRoot: null,\r\n wipRoot: null,\r\n deletions: [],\r\n wipFiber: null,\r\n hookIndex: 0,\r\n effects: [],\r\n})\r\n\r\n// Singleton for backward compatibility, but allows testing with isolated instances\r\nlet globalState = createRenderState()\r\n\r\nconst getState = () => globalState\r\nconst resetState = () => {\r\n globalState = createRenderState()\r\n return globalState\r\n}\r\n\r\n// Use const for regex to prevent accidental modification\r\nconst CAMEL_TO_KEBAB_REGEX = /[A-Z]/g\r\n\r\nconst RYUNIX_TYPES = Object.freeze({\r\n TEXT_ELEMENT: Symbol.for('ryunix.text.element'),\r\n RYUNIX_ELEMENT: Symbol.for('ryunix.element'),\r\n RYUNIX_EFFECT: Symbol.for('ryunix.effect'),\r\n RYUNIX_MEMO: Symbol.for('ryunix.memo'),\r\n RYUNIX_URL_QUERY: Symbol.for('ryunix.urlQuery'),\r\n RYUNIX_REF: Symbol.for('ryunix.ref'),\r\n RYUNIX_STORE: Symbol.for('ryunix.store'),\r\n RYUNIX_REDUCE: Symbol.for('ryunix.reduce'),\r\n RYUNIX_FRAGMENT: Symbol.for('ryunix.fragment'),\r\n RYUNIX_CONTEXT: Symbol.for('ryunix.context'),\r\n RYUNIX_SUSPENSE: Symbol.for('ryunix.suspense'),\r\n})\r\n\r\nconst STRINGS = Object.freeze({\r\n OBJECT: 'object',\r\n FUNCTION: 'function',\r\n STYLE: 'ryunix-style',\r\n CLASS_NAME: 'ryunix-class',\r\n CHILDREN: 'children',\r\n BOOLEAN: 'boolean',\r\n STRING: 'string',\r\n UNDEFINED: 'undefined',\r\n})\r\n\r\nconst OLD_STRINGS = Object.freeze({\r\n STYLE: 'style',\r\n CLASS_NAME: 'className',\r\n})\r\n\r\nconst EFFECT_TAGS = Object.freeze({\r\n PLACEMENT: Symbol.for('ryunix.reconciler.status.placement'),\r\n UPDATE: Symbol.for('ryunix.reconciler.status.update'),\r\n DELETION: Symbol.for('ryunix.reconciler.status.deletion'),\r\n NO_EFFECT: Symbol.for('ryunix.reconciler.status.no_effect'),\r\n HYDRATE: Symbol.for('ryunix.reconciler.status.hydrate'),\r\n})\r\n\r\n/**\r\n * Generate a unique hash with optional prefix\r\n * @param {string} prefix - Optional prefix for the hash\r\n * @returns {string} Unique hash string\r\n */\r\nconst generateHash = (prefix = 'ryunix') => {\r\n const randomPart = Math.random().toString(36).substring(2, 11)\r\n const timestamp = Date.now().toString(36)\r\n return `${prefix}-${timestamp}-${randomPart}`\r\n}\r\n\r\n/**\r\n * Match a route pattern against a path\r\n * @param {string} pattern - Route pattern with :params\r\n * @param {string} path - URL path to match\r\n * @returns {Object|null} Params object or null if no match\r\n */\r\nconst matchPath = (pattern, path) => {\r\n if (!pattern || !path) return null\r\n\r\n // Wildcard matches everything\r\n if (pattern === '*') return {}\r\n\r\n const patternSegments = pattern.split('/').filter(Boolean)\r\n const pathSegments = path.split('/').filter(Boolean)\r\n\r\n // Different number of segments = no match\r\n if (patternSegments.length !== pathSegments.length) return null\r\n\r\n const params = {}\r\n\r\n for (let i = 0; i < patternSegments.length; i++) {\r\n const patternSeg = patternSegments[i]\r\n const pathSeg = pathSegments[i]\r\n\r\n if (patternSeg.startsWith(':')) {\r\n // Dynamic segment\r\n const paramName = patternSeg.slice(1)\r\n params[paramName] = decodeURIComponent(pathSeg)\r\n } else if (patternSeg !== pathSeg) {\r\n // Static segment doesn't match\r\n return null\r\n }\r\n }\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Parse query string into object\r\n * @param {string} search - Query string (with or without ?)\r\n * @returns {Object} Parsed query parameters\r\n */\r\nconst parseQuery = (search) => {\r\n if (!search) return {}\r\n\r\n // Remove leading ? if present\r\n const cleanSearch = search.startsWith('?') ? search.slice(1) : search\r\n\r\n if (!cleanSearch) return {}\r\n\r\n try {\r\n return Object.fromEntries(new URLSearchParams(cleanSearch))\r\n } catch (error) {\r\n console.warn('Failed to parse query string:', error)\r\n return {}\r\n }\r\n}\r\n\r\n/**\r\n * Deep equality check for hook dependencies\r\n * @param {Array} prevDeps - Previous dependencies\r\n * @param {Array} nextDeps - Next dependencies\r\n * @returns {boolean} Whether dependencies changed\r\n */\r\nconst haveDepsChanged = (prevDeps, nextDeps) => {\r\n if (!prevDeps || !nextDeps) return true\r\n if (prevDeps.length !== nextDeps.length) return true\r\n\r\n return prevDeps.some((dep, index) => !Object.is(dep, nextDeps[index]))\r\n}\r\n\r\n/**\r\n * Safe array flattening\r\n * @param {Array} arr - Array to flatten\r\n * @param {number} depth - Depth to flatten (default: 1)\r\n * @returns {Array} Flattened array\r\n */\r\nconst flattenArray = (arr, depth = 1) => {\r\n if (!Array.isArray(arr)) return [arr]\r\n if (depth < 1) return arr.slice()\r\n\r\n return arr.reduce((acc, val) => {\r\n if (Array.isArray(val) && depth > 0) {\r\n acc.push(...flattenArray(val, depth - 1))\r\n } else {\r\n acc.push(val)\r\n }\r\n return acc\r\n }, [])\r\n}\r\n\r\nconst is = {\r\n object: (val) => val !== null && typeof val === STRINGS.OBJECT,\r\n function: (val) => typeof val === STRINGS.FUNCTION,\r\n string: (val) => typeof val === STRINGS.STRING,\r\n undefined: (val) => typeof val === STRINGS.UNDEFINED,\r\n null: (val) => val === null,\r\n array: (val) => Array.isArray(val),\r\n promise: (val) => val instanceof Promise,\r\n}\r\n\r\nconst getTypeLabel = (type) => {\r\n if (typeof type === 'symbol') return type.description || type.toString()\r\n if (typeof type === 'function') return type.name || 'anonymous'\r\n return String(type)\r\n}\r\n\r\nconst nextValidSibling = (node) => {\r\n let next = node\r\n while (next && (next.nodeType === 3 && !next.nodeValue.trim() || next.nodeType === 8)) {\r\n next = next.nextSibling\r\n }\r\n return next\r\n}\r\n\r\nexport {\r\n getState,\r\n resetState,\r\n createRenderState,\r\n CAMEL_TO_KEBAB_REGEX,\r\n RYUNIX_TYPES,\r\n EFFECT_TAGS,\r\n STRINGS,\r\n OLD_STRINGS,\r\n generateHash,\r\n matchPath,\r\n parseQuery,\r\n haveDepsChanged,\r\n flattenArray,\r\n is,\r\n IS_BROWSER,\r\n rIC,\r\n nextValidSibling,\r\n getTypeLabel,\r\n}\r\n","import { RYUNIX_TYPES, STRINGS, is } from '../utils/index.js'\r\n\r\n/**\r\n * The `createTextElement` function creates a text element with the specified text content.\r\n * @param text - The `text` parameter in the `createTextElement` function is the text content that you\r\n * want to create a text element for. This text will be set as the `nodeValue` of the text element in\r\n * the returned object.\r\n * @returns A text element object is being returned with a type of RYUNIX_TYPES.TEXT_ELEMENT and props\r\n * containing the text value provided in the function argument.\r\n */\r\nconst createTextElement = (text) => {\r\n return {\r\n type: RYUNIX_TYPES.TEXT_ELEMENT,\r\n props: {\r\n nodeValue: text,\r\n children: [],\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * The `createElement` function creates a virtual DOM element with specified type, properties, and\r\n * children.\r\n * @param type - The `type` parameter in the `createElement` function represents the type of element\r\n * you want to create, such as a HTML tag like 'div', 'span', 'p', etc.\r\n * @param props - The `props` parameter in the `createElement` function is an object that contains the\r\n * properties or attributes for the element being created. These properties can include things like\r\n * class names, styles, event handlers, and any other custom attributes you want to assign to the\r\n * element. In the code snippet you provided,\r\n * @param children - The `children` parameter in the `createElement` function represents the child\r\n * elements or text content that will be nested within the created element. These children can be\r\n * passed as arguments to the `createElement` function and will be rendered as part of the element's\r\n * content.\r\n * @returns An object is being returned with a `type` property representing the type of element, and a\r\n * `props` property containing the element's properties. The `props` object includes the children of\r\n * the element, which are processed to ensure they are in the correct format.\r\n */\r\nconst createElement = (type, props, ...children) => {\r\n const safeProps = props || {}\r\n let rawChildren = children\r\n if (children.length === 0 && safeProps.children !== undefined) {\r\n rawChildren = Array.isArray(safeProps.children) ? safeProps.children : [safeProps.children]\r\n }\r\n\r\n rawChildren = rawChildren\r\n .flat()\r\n .filter((child) => child != null && child !== false && child !== true)\r\n\r\n const normalizedChildren = []\r\n let currentText = ''\r\n\r\n for (const child of rawChildren) {\r\n if (typeof child !== STRINGS.OBJECT) {\r\n currentText += String(child)\r\n } else {\r\n if (currentText !== '') {\r\n normalizedChildren.push(createTextElement(currentText))\r\n currentText = ''\r\n }\r\n normalizedChildren.push(child)\r\n }\r\n }\r\n\r\n if (currentText !== '') {\r\n normalizedChildren.push(createTextElement(currentText))\r\n }\r\n\r\n return {\r\n type,\r\n props: {\r\n ...safeProps,\r\n children: normalizedChildren,\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * The `Fragment` function in JavaScript creates a fragment element with the given children.\r\n * @param props - The `props` parameter in the `Fragment` function is an object that contains the\r\n * properties passed to the `Fragment` component. These properties can include `children`, which\r\n * represents the child elements or components nested within the `Fragment`.\r\n * @returns The `Fragment` component is returning a Ryunix fragment element created using the\r\n * `createElement` function. The element is of type `RYUNIX_TYPES.RYUNIX_FRAGMENT` and contains the\r\n * children passed to the `Fragment` component. If `props.children` is not an array, it is converted\r\n * into an array before being spread into the `createElement` function.\r\n */\r\nconst Fragment = (props) => {\r\n const children = Array.isArray(props.children)\r\n ? props.children\r\n : [props.children]\r\n return createElement(RYUNIX_TYPES.RYUNIX_FRAGMENT, {}, ...children)\r\n}\r\n\r\n/**\r\n * Clone element utility\r\n */\r\nconst cloneElement = (element, props = {}, ...children) => {\r\n if (!element || !is.object(element)) {\r\n throw new Error('cloneElement requires a valid element')\r\n }\r\n\r\n const newChildren = children.length > 0 ? children : element.props.children\r\n\r\n return createElement(\r\n element.type,\r\n { ...element.props, ...props },\r\n ...(Array.isArray(newChildren) ? newChildren : [newChildren]),\r\n )\r\n}\r\n\r\n/**\r\n * Check if valid element\r\n */\r\nconst isValidElement = (object) => {\r\n return (\r\n is.object(object) && object.type !== undefined && object.props !== undefined\r\n )\r\n}\r\n\r\nexport {\r\n createElement,\r\n createTextElement,\r\n Fragment,\r\n cloneElement,\r\n isValidElement,\r\n}\r\n","import { RYUNIX_TYPES, STRINGS, is } from '../utils/index.js'\r\n\r\n/**\r\n * Check if a key is an event handler\r\n * @param {string} key - Prop key\r\n * @returns {boolean}\r\n */\r\nconst isEvent = (key) => key.startsWith('on')\r\n\r\n/**\r\n * Check if a key is a property (not children or event)\r\n * @param {string} key - Prop key\r\n * @returns {boolean}\r\n */\r\nconst isProperty = (key) => key !== STRINGS.CHILDREN && !isEvent(key)\r\n\r\n/**\r\n * Check if a property is new or changed\r\n * @param {Object} prev - Previous props\r\n * @param {Object} next - Next props\r\n * @returns {Function}\r\n */\r\nconst isNew = (prev, next) => (key) => {\r\n // Use Object.is for better comparison (handles NaN, -0, +0)\r\n return !Object.is(prev[key], next[key])\r\n}\r\n\r\n/**\r\n * Check if a property was removed\r\n * @param {Object} next - Next props\r\n * @returns {Function}\r\n */\r\nconst isGone = (next) => (key) => !(key in next)\r\n\r\n/**\r\n * Check if dependencies array has changed\r\n * @param {Array} prevDeps - Previous dependencies\r\n * @param {Array} nextDeps - Next dependencies\r\n * @returns {boolean}\r\n */\r\nconst haveDepsChanged = (prevDeps, nextDeps) => {\r\n if (!prevDeps || !nextDeps) return true\r\n if (prevDeps.length !== nextDeps.length) return true\r\n return prevDeps.some((dep, index) => !Object.is(dep, nextDeps[index]))\r\n}\r\n\r\n/**\r\n * Cancel effects for a single fiber\r\n * @param {Object} fiber - Fiber node\r\n */\r\nconst cancelEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n fiber.hooks\r\n .filter(\r\n (hook) =>\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT && is.function(hook.cancel),\r\n )\r\n .forEach((hook) => {\r\n try {\r\n hook.cancel()\r\n hook.cancel = null // Clear reference to prevent memory leaks\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect cleanup:', error)\r\n }\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Recursively cancel effects in fiber tree\r\n * @param {Object} fiber - Root fiber node\r\n */\r\nconst cancelEffectsDeep = (fiber) => {\r\n if (!fiber) return\r\n\r\n // Cancel effects for current fiber\r\n if (fiber.hooks?.length > 0) {\r\n fiber.hooks\r\n .filter(\r\n (hook) =>\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT && is.function(hook.cancel),\r\n )\r\n .forEach((hook) => {\r\n try {\r\n hook.cancel()\r\n hook.cancel = null // Clear reference\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in deep effect cleanup:', error)\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Recursively process children\r\n if (fiber.child) cancelEffectsDeep(fiber.child)\r\n if (fiber.sibling) cancelEffectsDeep(fiber.sibling)\r\n}\r\n\r\n/**\r\n * Run effects for a fiber\r\n * @param {Object} fiber - Fiber node\r\n */\r\nconst runEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n for (let i = 0; i < fiber.hooks.length; i++) {\r\n const hook = fiber.hooks[i]\r\n\r\n if (hook.type === RYUNIX_TYPES.RYUNIX_EFFECT && is.function(hook.effect)) {\r\n // Cancel previous cleanup if exists\r\n if (is.function(hook.cancel)) {\r\n try {\r\n hook.cancel()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect cleanup:', error)\r\n }\r\n }\r\n }\r\n\r\n // Run new effect\r\n try {\r\n const cleanup = hook.effect()\r\n\r\n // Store cleanup function if returned\r\n if (is.function(cleanup)) {\r\n hook.cancel = cleanup\r\n } else {\r\n hook.cancel = null\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect:', error)\r\n }\r\n hook.cancel = null\r\n }\r\n\r\n // Clear effect reference after running\r\n hook.effect = null\r\n }\r\n }\r\n}\r\n\r\nlet isBatchingEffects = false\r\nlet pendingEffectCallbacks = []\r\n\r\n/**\r\n * Batch multiple effect operations for performance.\r\n * Effects queued during the batch are flushed together after the callback completes.\r\n * @param {Function} callback - Callback containing effect operations\r\n */\r\nconst batchEffects = (callback) => {\r\n const wasBatching = isBatchingEffects\r\n isBatchingEffects = true\r\n\r\n try {\r\n callback()\r\n } finally {\r\n isBatchingEffects = wasBatching\r\n\r\n if (!isBatchingEffects && pendingEffectCallbacks.length > 0) {\r\n const effects = pendingEffectCallbacks\r\n pendingEffectCallbacks = []\r\n effects.forEach((fn) => {\r\n try {\r\n fn()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in batched effect:', error)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Queue an effect to be run. If we're inside a batch, it's deferred.\r\n * @param {Function} fn - Effect function\r\n */\r\nconst queueEffect = (fn) => {\r\n if (isBatchingEffects) {\r\n pendingEffectCallbacks.push(fn)\r\n } else {\r\n fn()\r\n }\r\n}\r\n\r\nexport {\r\n runEffects,\r\n cancelEffects,\r\n cancelEffectsDeep,\r\n isEvent,\r\n isProperty,\r\n isNew,\r\n isGone,\r\n haveDepsChanged,\r\n batchEffects,\r\n queueEffect,\r\n}\r\n","/**\r\n * SVG attribute name mapping: camelCase → kebab-case\r\n * Centralized to avoid duplication across dom.js and server.js\r\n */\r\nconst SVG_ATTR_MAP = {\r\n strokeWidth: 'stroke-width',\r\n strokeLinecap: 'stroke-linecap',\r\n strokeLinejoin: 'stroke-linejoin',\r\n strokeDasharray: 'stroke-dasharray',\r\n strokeDashoffset: 'stroke-dashoffset',\r\n strokeMiterlimit: 'stroke-miterlimit',\r\n strokeOpacity: 'stroke-opacity',\r\n fillRule: 'fill-rule',\r\n fillOpacity: 'fill-opacity',\r\n clipRule: 'clip-rule',\r\n clipPath: 'clip-path',\r\n fontFamily: 'font-family',\r\n fontSize: 'font-size',\r\n fontWeight: 'font-weight',\r\n textAnchor: 'text-anchor',\r\n textDecoration: 'text-decoration',\r\n dominantBaseline: 'dominant-baseline',\r\n alignmentBaseline: 'alignment-baseline',\r\n baselineShift: 'baseline-shift',\r\n stopColor: 'stop-color',\r\n stopOpacity: 'stop-opacity',\r\n floodColor: 'flood-color',\r\n floodOpacity: 'flood-opacity',\r\n lightingColor: 'lighting-color',\r\n colorInterpolation: 'color-interpolation',\r\n colorInterpolationFilters: 'color-interpolation-filters',\r\n pointerEvents: 'pointer-events',\r\n shapeRendering: 'shape-rendering',\r\n imageRendering: 'image-rendering',\r\n markerStart: 'marker-start',\r\n markerMid: 'marker-mid',\r\n markerEnd: 'marker-end',\r\n}\r\n\r\n/**\r\n * Convert a camelCase SVG attribute name to its kebab-case equivalent.\r\n * Returns the original name if no mapping exists.\r\n * @param {string} name - camelCase attribute name\r\n * @returns {string} kebab-case attribute name\r\n */\r\nconst toSvgAttrName = (name) => SVG_ATTR_MAP[name] || name\r\n\r\nexport { SVG_ATTR_MAP, toSvgAttrName }\r\n","/**\r\n * Priority levels for updates\r\n */\r\nconst Priority = {\r\n IMMEDIATE: 1, // User input (clicks, typing)\r\n USER_BLOCKING: 2, // Hover, scroll\r\n NORMAL: 3, // Data fetching\r\n LOW: 4, // Analytics\r\n IDLE: 5, // Background tasks\r\n}\r\n\r\nimport { rIC } from '../utils/index.js'\r\n\r\nlet currentPriority = Priority.NORMAL\r\nlet pendingUpdates = []\r\nlet isScheduling = false\r\n\r\n/**\r\n * Schedule update with priority\r\n */\r\nconst scheduleUpdate = (callback, priority = Priority.NORMAL) => {\r\n pendingUpdates.push({ callback, priority, timestamp: Date.now() })\r\n\r\n if (!isScheduling) {\r\n isScheduling = true\r\n rIC(processPendingUpdates)\r\n }\r\n}\r\n\r\n/**\r\n * Process updates by priority\r\n */\r\nconst processPendingUpdates = (deadline) => {\r\n pendingUpdates.sort((a, b) => a.priority - b.priority)\r\n\r\n while (pendingUpdates.length > 0 && deadline.timeRemaining() > 1) {\r\n const update = pendingUpdates.shift()\r\n currentPriority = update.priority\r\n update.callback()\r\n }\r\n\r\n if (pendingUpdates.length > 0) {\r\n rIC(processPendingUpdates)\r\n } else {\r\n isScheduling = false\r\n currentPriority = Priority.NORMAL\r\n }\r\n}\r\n\r\n/**\r\n * Run callback with specific priority\r\n */\r\nconst runWithPriority = (priority, callback) => {\r\n const previousPriority = currentPriority\r\n currentPriority = priority\r\n\r\n try {\r\n return callback()\r\n } finally {\r\n currentPriority = previousPriority\r\n }\r\n}\r\n\r\n/**\r\n * Get current priority\r\n */\r\nconst getCurrentPriority = () => currentPriority\r\n\r\n/**\r\n * Wrap setState with priority\r\n */\r\nconst createPriorityDispatch = (dispatch) => {\r\n return (action, priority = currentPriority) => {\r\n scheduleUpdate(() => dispatch(action), priority)\r\n }\r\n}\r\n\r\nexport {\r\n Priority,\r\n scheduleUpdate,\r\n runWithPriority,\r\n getCurrentPriority,\r\n createPriorityDispatch,\r\n}\r\n","import { isEvent, isGone, isNew, isProperty } from './effects.js'\r\nimport {\r\n RYUNIX_TYPES,\r\n STRINGS,\r\n OLD_STRINGS,\r\n CAMEL_TO_KEBAB_REGEX,\r\n is,\r\n} from '../utils/index.js'\r\nimport { toSvgAttrName } from '../utils/svgAttributes.js'\r\nimport { Priority, runWithPriority } from './priority.js'\r\n\r\n/**\r\n * Convert camelCase to kebab-case for CSS properties\r\n * @param {string} camelCase - CamelCase string\r\n * @returns {string} Kebab-case string\r\n */\r\nconst camelToKebab = (camelCase) => {\r\n return camelCase.replace(\r\n CAMEL_TO_KEBAB_REGEX,\r\n (match) => `-${match.toLowerCase()}`,\r\n )\r\n}\r\n\r\n/**\r\n * Apply styles to DOM element\r\n * @param {HTMLElement} dom - DOM element\r\n * @param {Object} styleObj - Style object\r\n */\r\nconst applyStyles = (dom, styleObj) => {\r\n if (!is.object(styleObj) || is.null(styleObj)) {\r\n dom.style.cssText = ''\r\n return\r\n }\r\n\r\n try {\r\n const cssText = Object.entries(styleObj)\r\n .filter(([_, value]) => value != null) // Filter out null/undefined\r\n .map(([key, value]) => {\r\n const kebabKey = camelToKebab(key)\r\n return `${kebabKey}: ${value}`\r\n })\r\n .join('; ')\r\n\r\n dom.style.cssText = cssText\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error applying styles:', error)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply CSS classes to DOM element\r\n * @param {HTMLElement} dom - DOM element\r\n * @param {string} prevClasses - Previous class string\r\n * @param {string} nextClasses - Next class string\r\n */\r\nconst applyClasses = (dom, prevClasses, nextClasses) => {\r\n // Allow empty/undefined - just remove classes\r\n if (!nextClasses || nextClasses.trim() === '') {\r\n if (prevClasses) {\r\n const oldClasses = prevClasses.split(/\\s+/).filter(Boolean)\r\n dom.classList.remove(...oldClasses)\r\n }\r\n return\r\n }\r\n\r\n // Remove old classes\r\n if (prevClasses) {\r\n const oldClasses = prevClasses.split(/\\s+/).filter(Boolean)\r\n dom.classList.remove(...oldClasses)\r\n }\r\n\r\n // Add new classes\r\n const newClasses = nextClasses.split(/\\s+/).filter(Boolean)\r\n if (newClasses.length > 0) {\r\n dom.classList.add(...newClasses)\r\n }\r\n}\r\n\r\n/**\r\n * Create a DOM element from fiber\r\n * @param {Object} fiber - Fiber node\r\n * @returns {HTMLElement|Text|null}\r\n */\r\nconst createDom = (fiber) => {\r\n // Fragments and Context Providers don't create real DOM nodes\r\n if (\r\n fiber.type === RYUNIX_TYPES.RYUNIX_FRAGMENT ||\r\n fiber.type === RYUNIX_TYPES.RYUNIX_CONTEXT ||\r\n fiber.type === Symbol.for('ryunix.portal')\r\n ) {\r\n return null\r\n }\r\n\r\n let dom\r\n\r\n try {\r\n if (fiber.type === RYUNIX_TYPES.TEXT_ELEMENT) {\r\n dom = document.createTextNode('')\r\n } else if (is.string(fiber.type)) {\r\n const isSvg = [\r\n 'svg', 'path', 'g', 'circle', 'polygon', 'rect', 'line', 'polyline',\r\n 'ellipse', 'text', 'tspan', 'defs', 'use', 'symbol', 'mask',\r\n 'clipPath', 'linearGradient', 'radialGradient', 'stop', 'filter',\r\n 'feGaussianBlur', 'feOffset', 'feMerge', 'feMergeNode', 'feBlend',\r\n 'feColorMatrix', 'feComposite', 'foreignObject', 'image', 'marker',\r\n 'pattern', 'textPath',\r\n ].includes(fiber.type)\r\n\r\n if (isSvg) {\r\n dom = document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\r\n } else {\r\n dom = document.createElement(fiber.type)\r\n }\r\n } else {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n 'Attempted to create DOM for non-host component:',\r\n fiber.type,\r\n )\r\n }\r\n return null\r\n }\r\n\r\n updateDom(dom, {}, fiber.props)\r\n return dom\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error creating DOM element:', error, fiber)\r\n }\r\n return null\r\n }\r\n}\r\n\r\nexport const validateUri = (name, value) => {\r\n if (typeof value !== 'string') return value\r\n const attr = name.toLowerCase()\r\n if (attr !== 'href' && attr !== 'src' && attr !== 'action' && attr !== 'formaction') {\r\n return value\r\n }\r\n\r\n const normalized = value.replace(/\\s+/g, '').toLowerCase()\r\n if (\r\n normalized.startsWith('javascript:') ||\r\n normalized.startsWith('vbscript:') ||\r\n normalized.startsWith('data:')\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(`[Ryunix Security] Blocked dangerous ${name} URI: ${value}`)\r\n }\r\n return 'javascript:void(0)'\r\n }\r\n\r\n return value\r\n}\r\n\r\n/**\r\n * Update DOM element with new props\r\n * @param {HTMLElement|Text} dom - DOM element\r\n * @param {Object} prevProps - Previous props\r\n * @param {Object} nextProps - Next props\r\n */\r\nconst updateDom = (dom, prevProps = {}, nextProps = {}) => {\r\n if (dom.nodeType === 3) {\r\n if (prevProps.nodeValue !== nextProps.nodeValue) {\r\n dom.nodeValue = nextProps.nodeValue\r\n }\r\n return\r\n }\r\n // Remove old event listeners\r\n Object.keys(prevProps)\r\n .filter(isEvent)\r\n .filter((key) => isGone(nextProps)(key) || isNew(prevProps, nextProps)(key))\r\n .forEach((name) => {\r\n const eventType = name.toLowerCase().substring(2)\r\n try {\r\n const originalHandler = prevProps[name]\r\n const wrappedHandler = dom._ryunixHandlers?.get(originalHandler) || originalHandler\r\n dom.removeEventListener(eventType, wrappedHandler)\r\n if (dom._ryunixHandlers) {\r\n dom._ryunixHandlers.delete(originalHandler)\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Error removing event listener:', error)\r\n }\r\n }\r\n })\r\n\r\n\r\n // Remove old properties\r\n Object.keys(prevProps)\r\n .filter(isProperty)\r\n .filter(isGone(nextProps))\r\n .forEach((name) => {\r\n // Skip special properties\r\n if (\r\n [\r\n STRINGS.STYLE,\r\n OLD_STRINGS.STYLE,\r\n STRINGS.CLASS_NAME,\r\n OLD_STRINGS.CLASS_NAME,\r\n ].includes(name)\r\n ) {\r\n return\r\n }\r\n if (dom instanceof SVGElement) {\r\n const attrName = toSvgAttrName(name)\r\n dom.removeAttribute(attrName)\r\n } else {\r\n dom[name] = ''\r\n dom.removeAttribute(name)\r\n }\r\n })\r\n\r\n // Set new properties\r\n Object.keys(nextProps)\r\n .filter(isProperty)\r\n .filter(isNew(prevProps, nextProps))\r\n .forEach((name) => {\r\n try {\r\n // Handle style properties\r\n if (name === STRINGS.STYLE || name === OLD_STRINGS.STYLE) {\r\n const styleValue = nextProps[name]\r\n applyStyles(dom, styleValue)\r\n }\r\n // Handle className properties\r\n else if (name === STRINGS.CLASS_NAME) {\r\n applyClasses(\r\n dom,\r\n prevProps[STRINGS.CLASS_NAME],\r\n nextProps[STRINGS.CLASS_NAME],\r\n )\r\n } else if (name === OLD_STRINGS.CLASS_NAME) {\r\n applyClasses(\r\n dom,\r\n prevProps[OLD_STRINGS.CLASS_NAME],\r\n nextProps[OLD_STRINGS.CLASS_NAME],\r\n )\r\n }\r\n // Handle other properties\r\n else {\r\n // Special handling for value and checked (controlled components)\r\n if (name === 'value' || name === 'checked') {\r\n if (dom[name] !== nextProps[name]) {\r\n dom[name] = nextProps[name]\r\n }\r\n } else {\r\n const isSvgNode = dom instanceof SVGElement\r\n if (isSvgNode) {\r\n const attrName = toSvgAttrName(name)\r\n const validatedValue = validateUri(attrName, nextProps[name])\r\n // viewBox is case sensitive, we respect the camelCase for it.\r\n dom.setAttribute(attrName, validatedValue)\r\n } else {\r\n const validatedValue = validateUri(name, nextProps[name])\r\n dom[name] = validatedValue\r\n // Best effort: set html attributes if it's not a primitive component property\r\n if (typeof nextProps[name] !== 'object' && typeof nextProps[name] !== 'function') {\r\n dom.setAttribute(name, validatedValue)\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(`Error setting property ${name}:`, error)\r\n }\r\n }\r\n })\r\n\r\n // Add new event listeners\r\n Object.keys(nextProps)\r\n .filter(isEvent)\r\n .filter(isNew(prevProps, nextProps))\r\n .forEach((name) => {\r\n const eventType = name.toLowerCase().substring(2)\r\n try {\r\n const handler = (e) => {\r\n runWithPriority(Priority.IMMEDIATE, () => nextProps[name](e))\r\n }\r\n // Store the wrapped handler so it can be removed later\r\n // Note: For simplicity, we could also just wrap it on the fly, \r\n // but we need the exact reference for removeEventListener.\r\n // Actually, the current removeDom logic uses prevProps[name], \r\n // which won't work if we wrap it here and don't store it.\r\n // Wait, the current removeEventListener call in dom.js:177 is:\r\n // dom.removeEventListener(eventType, prevProps[name])\r\n // If we wrap it, we MUST store the wrapper.\r\n \r\n // Let's use a weakMap or a property on the DOM node to store the wrappers.\r\n if (!dom._ryunixHandlers) dom._ryunixHandlers = new Map()\r\n dom._ryunixHandlers.set(nextProps[name], handler)\r\n \r\n dom.addEventListener(eventType, handler)\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Error adding event listener:', error)\r\n }\r\n }\r\n })\r\n}\r\n\r\n\r\n/**\r\n * Remove DOM element safely\r\n * @param {HTMLElement} dom - DOM element to remove\r\n */\r\nconst removeDom = (dom) => {\r\n try {\r\n if (dom && dom.parentNode) {\r\n dom.parentNode.removeChild(dom)\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error removing DOM element:', error)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clear all children from a DOM element\r\n * @param {HTMLElement} container - DOM element to clear\r\n */\r\nconst clearContainer = (container) => {\r\n if (!container) return\r\n while (container.firstChild) {\r\n container.removeChild(container.firstChild)\r\n }\r\n}\r\n\r\nexport {\r\n createDom,\r\n updateDom,\r\n applyStyles,\r\n applyClasses,\r\n removeDom,\r\n camelToKebab,\r\n clearContainer,\r\n}\r\n","/**\r\n * Portal type marker\r\n */\r\nconst RYUNIX_PORTAL = Symbol.for('ryunix.portal')\r\n\r\n/**\r\n * createPortal - Renders children into a different DOM container,\r\n * outside the normal parent hierarchy (e.g., for modals, tooltips, dropdowns).\r\n *\r\n * Usage:\r\n * const Modal = ({ children }) => {\r\n * return createPortal(\r\n * createElement('div', { className: 'modal' }, children),\r\n * document.getElementById('modal-root')\r\n * )\r\n * }\r\n *\r\n * @param {Object} children - Element(s) to render\r\n * @param {HTMLElement} container - DOM container to render into\r\n * @returns {Object} Portal element\r\n */\r\nconst createPortal = (children, container) => {\r\n if (!container) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('createPortal: target container is not a DOM element.')\r\n }\r\n return null\r\n }\r\n\r\n return {\r\n type: RYUNIX_PORTAL,\r\n props: {\r\n children: Array.isArray(children) ? children : [children],\r\n },\r\n containerInfo: container,\r\n _isPortal: true,\r\n }\r\n}\r\n\r\nexport { createPortal, RYUNIX_PORTAL }\r\n","import { updateDom } from './dom.js'\r\nimport { cancelEffects, cancelEffectsDeep } from './effects.js'\r\nimport { EFFECT_TAGS, RYUNIX_TYPES, getState, is } from '../utils/index.js'\r\nimport { RYUNIX_PORTAL } from './portal.js'\r\n\r\n/**\r\n * Run layout effects (useLayoutEffect) synchronously during commit.\r\n * These run after DOM mutations but before the browser paints.\r\n */\r\nconst runLayoutEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n for (let i = 0; i < fiber.hooks.length; i++) {\r\n const hook = fiber.hooks[i]\r\n\r\n if (\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT &&\r\n hook.isLayout &&\r\n is.function(hook.effect)\r\n ) {\r\n // Cancel previous layout cleanup if exists\r\n if (is.function(hook.cancel)) {\r\n try {\r\n hook.cancel()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in layout effect cleanup:', error)\r\n }\r\n }\r\n }\r\n\r\n // Run new layout effect synchronously\r\n try {\r\n const cleanup = hook.effect()\r\n hook.cancel = is.function(cleanup) ? cleanup : null\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in layout effect:', error)\r\n }\r\n hook.cancel = null\r\n }\r\n\r\n hook.effect = null\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Run normal (non-layout) effects asynchronously after paint.\r\n */\r\nconst runNormalEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n for (let i = 0; i < fiber.hooks.length; i++) {\r\n const hook = fiber.hooks[i]\r\n\r\n if (\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT &&\r\n !hook.isLayout &&\r\n is.function(hook.effect)\r\n ) {\r\n // Cancel previous cleanup if exists\r\n if (is.function(hook.cancel)) {\r\n try {\r\n hook.cancel()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect cleanup:', error)\r\n }\r\n }\r\n }\r\n\r\n // Run new effect\r\n try {\r\n const cleanup = hook.effect()\r\n hook.cancel = is.function(cleanup) ? cleanup : null\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect:', error)\r\n }\r\n hook.cancel = null\r\n }\r\n\r\n hook.effect = null\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The `commitRoot` function commits the changes made to the virtual DOM by updating the actual DOM.\r\n */\r\nfunction commitRoot() {\r\n const state = getState()\r\n state.deletions.forEach(commitWork)\r\n\r\n const finishedWork = state.wipRoot\r\n\r\n // Swap the currentRoot pointer BEFORE running effects\r\n // This allows dispatches inside effects to base their new work on the just-finished tree\r\n state.currentRoot = finishedWork\r\n\r\n // After hydration is done, reset the flag and cleanup unconsumed nodes\r\n if (state.isHydrating || state.hydrationFailed) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] commitRoot - isHydrating: ${state.isHydrating}, hydrationFailed: ${state.hydrationFailed}`);\r\n }\r\n if (state.hydrationFailed) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Hydration failed. Clearing container.');\r\n }\r\n const container = state.containerRoot || finishedWork.dom\r\n if (container) {\r\n container.textContent = ''\r\n }\r\n } else {\r\n // If there is a cursor left, it means these are SSR nodes that weren't matched\r\n // by any client fiber. We must remove them to avoid duplication.\r\n let cursor = state.hydrateCursor\r\n if (cursor && process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Removing unmatched root siblings.');\r\n }\r\n while (cursor) {\r\n const next = cursor.nextSibling\r\n if (cursor.parentNode) {\r\n cursor.parentNode.removeChild(cursor)\r\n }\r\n cursor = next\r\n }\r\n }\r\n\r\n state.isHydrating = false\r\n state.hydrationFailed = false\r\n state.hydrateCursor = null\r\n }\r\n\r\n\r\n commitWork(finishedWork.child)\r\n\r\n // If wipRoot was not reassigned by a synchronous dispatch during effects, clear it\r\n if (state.wipRoot === finishedWork) {\r\n state.wipRoot = null\r\n }\r\n}\r\n\r\nfunction commitWork(fiber) {\r\n if (!fiber) {\r\n return\r\n }\r\n\r\n // Handle portal fibers — they render into a different container\r\n if (fiber.type === RYUNIX_PORTAL || fiber._isPortal) {\r\n const portalContainer = fiber.containerInfo\r\n if (portalContainer) {\r\n // Process portal children into the portal container\r\n const portalFiber = fiber.child\r\n if (portalFiber) {\r\n commitPortalWork(portalFiber, portalContainer)\r\n }\r\n }\r\n commitWork(fiber.sibling)\r\n return\r\n }\r\n\r\n let domParentFiber = fiber.parent\r\n while (domParentFiber && !domParentFiber.dom) {\r\n domParentFiber = domParentFiber.parent\r\n }\r\n\r\n if (!domParentFiber) {\r\n return\r\n }\r\n\r\n const domParent = domParentFiber.dom\r\n\r\n if (fiber.effectTag === EFFECT_TAGS.PLACEMENT) {\r\n if (fiber.dom != null) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Appending PLACEMENT:', fiber.type);\r\n }\r\n domParent.appendChild(fiber.dom)\r\n }\r\n // Layout effects run synchronously during commit\r\n runLayoutEffects(fiber)\r\n // Normal effects run after paint\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.UPDATE) {\r\n cancelEffects(fiber)\r\n if (fiber.dom != null) {\r\n updateDom(fiber.dom, fiber.alternate.props, fiber.props)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.HYDRATE) {\r\n const state = getState()\r\n if (state.hydrationFailed) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Hydration fallback PLACEMENT:', fiber.type);\r\n }\r\n // Since container is cleared on fallback, treat as normal placement\r\n // No need to check fiber.dom.parentNode !== domParent because the container was cleared.\r\n if (fiber.dom != null) {\r\n domParent.appendChild(fiber.dom)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Hydrating node:', fiber.type);\r\n }\r\n if (fiber.dom != null) {\r\n updateDom(fiber.dom, {}, fiber.props)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n }\r\n } else if (fiber.effectTag === EFFECT_TAGS.DELETION) {\r\n // Run cleanups BEFORE removing DOM to allow cleanup functions to read DOM state\r\n cancelEffectsDeep(fiber)\r\n commitDeletion(fiber, domParent)\r\n return\r\n }\r\n\r\n commitWork(fiber.child)\r\n commitWork(fiber.sibling)\r\n}\r\n\r\n/**\r\n * Commit work for portal children into a specific container\r\n */\r\nconst commitPortalWork = (fiber, portalContainer) => {\r\n if (!fiber) return\r\n\r\n if (fiber.effectTag === EFFECT_TAGS.PLACEMENT) {\r\n if (fiber.dom != null) {\r\n portalContainer.appendChild(fiber.dom)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.UPDATE) {\r\n cancelEffects(fiber)\r\n if (fiber.dom != null) {\r\n updateDom(fiber.dom, fiber.alternate.props, fiber.props)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.DELETION) {\r\n cancelEffectsDeep(fiber)\r\n commitDeletion(fiber, portalContainer)\r\n return\r\n }\r\n\r\n commitPortalWork(fiber.child, portalContainer)\r\n commitPortalWork(fiber.sibling, portalContainer)\r\n}\r\n\r\nconst commitDeletion = (fiber, domParent) => {\r\n if (fiber.dom) {\r\n if (fiber.dom.parentNode) {\r\n fiber.dom.parentNode.removeChild(fiber.dom)\r\n }\r\n } else {\r\n let child = fiber.child\r\n while (child) {\r\n commitDeletion(child, domParent)\r\n child = child.sibling\r\n }\r\n }\r\n}\r\n\r\nexport { commitDeletion, commitWork, commitRoot }\r\n","import { EFFECT_TAGS, getState } from '../utils/index.js'\r\n\r\n/**\r\n * Reconcile children with key optimization\r\n */\r\nconst reconcileChildren = (wipFiber, elements) => {\r\n const state = getState()\r\n let index = 0\r\n let prevSibling\r\n let isFirstChild = true\r\n\r\n // Build map of old fibers by key/index\r\n const oldFiberMap = new Map()\r\n let oldFiber = wipFiber.alternate?.child\r\n let position = 0\r\n\r\n while (oldFiber) {\r\n const key = oldFiber.key ?? `__index_${oldFiber.index ?? position}__`\r\n oldFiberMap.set(key, oldFiber)\r\n oldFiber = oldFiber.sibling\r\n position++\r\n }\r\n\r\n // Process new elements\r\n while (index < elements.length) {\r\n const element = elements[index]\r\n if (!element) {\r\n index++\r\n continue\r\n }\r\n\r\n const key = element.key ?? `__index_${index}__`\r\n const matchedFiber = oldFiberMap.get(key)\r\n\r\n let newFiber\r\n const sameType = matchedFiber && element.type === matchedFiber.type\r\n\r\n if (sameType) {\r\n // Update existing fiber\r\n newFiber = {\r\n type: matchedFiber.type,\r\n props: element.props,\r\n dom: matchedFiber.dom,\r\n parent: wipFiber,\r\n alternate: matchedFiber,\r\n effectTag: EFFECT_TAGS.UPDATE,\r\n hooks: matchedFiber.hooks,\r\n key: element.key,\r\n index,\r\n }\r\n oldFiberMap.delete(key)\r\n } else {\r\n // Create new fiber\r\n newFiber = {\r\n type: element.type,\r\n props: element.props,\r\n dom: null,\r\n parent: wipFiber,\r\n alternate: null,\r\n effectTag: state.isHydrating ? EFFECT_TAGS.HYDRATE : EFFECT_TAGS.PLACEMENT,\r\n key: element.key,\r\n index,\r\n }\r\n\r\n // Mark matched fiber for deletion if exists\r\n if (matchedFiber) {\r\n matchedFiber.effectTag = EFFECT_TAGS.DELETION\r\n state.deletions.push(matchedFiber)\r\n oldFiberMap.delete(key)\r\n }\r\n }\r\n\r\n // Link fibers\r\n if (isFirstChild) {\r\n wipFiber.child = newFiber\r\n isFirstChild = false\r\n } else if (newFiber) {\r\n prevSibling.sibling = newFiber\r\n }\r\n\r\n prevSibling = newFiber\r\n index++\r\n }\r\n\r\n // Delete remaining old fibers\r\n oldFiberMap.forEach((fiber) => {\r\n fiber.effectTag = EFFECT_TAGS.DELETION\r\n state.deletions.push(fiber)\r\n })\r\n}\r\n\r\nexport { reconcileChildren }\r\n","/**\r\n * Bridge module to break circular dependencies between hooks and workers.\r\n */\r\nlet scheduleWorkFn = null;\r\n\r\nexport const setScheduleWork = (fn) => {\r\n scheduleWorkFn = fn;\r\n};\r\n\r\nexport const scheduleWork = (root, priority) => {\r\n if (scheduleWorkFn) {\r\n return scheduleWorkFn(root, priority);\r\n }\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('[Ryunix] scheduleWork called before being initialized.');\r\n }\r\n};\r\n","let isBatching = false\r\nlet pendingUpdates = []\r\n\r\n/**\r\n * The `batchUpdates` function in JavaScript allows for batching multiple updates and flushing them all\r\n * at once.\r\n * @param callback - The `callback` parameter in the `batchUpdates` function is a function that will be\r\n * executed within a batch update. This function can contain multiple updates that need to be processed\r\n * together in a batch to improve performance and avoid unnecessary re-renders.\r\n */\r\nconst batchUpdates = (callback) => {\r\n const wasBatching = isBatching\r\n isBatching = true\r\n\r\n try {\r\n callback()\r\n } finally {\r\n isBatching = wasBatching\r\n\r\n if (!isBatching && pendingUpdates.length > 0) {\r\n flushUpdates()\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The `queueUpdate` function adds an update to a queue and flushes the updates if not currently\r\n * batching.\r\n * @param update - The `update` parameter is the new update that needs to be added to the queue for\r\n * processing.\r\n */\r\nconst queueUpdate = (update) => {\r\n pendingUpdates.push(update)\r\n\r\n if (!isBatching) {\r\n flushUpdates()\r\n }\r\n}\r\n\r\n/**\r\n * The `flushUpdates` function processes and executes pending updates stored in an array.\r\n * @returns If the `pendingUpdates` array is empty, the `flushUpdates` function will return nothing\r\n * (undefined).\r\n */\r\nconst flushUpdates = () => {\r\n if (pendingUpdates.length === 0) return\r\n\r\n const updates = pendingUpdates\r\n pendingUpdates = []\r\n\r\n // Execute all updates\r\n updates.forEach((update) => update())\r\n}\r\n\r\nexport { batchUpdates, queueUpdate, flushUpdates }\r\n","import { getState } from '../utils/index.js'\r\n\r\n/**\r\n * Development warnings\r\n */\r\nconst isDevelopment = process.env.NODE_ENV !== 'production'\r\n\r\nconst warning = (condition, message) => {\r\n if (!isDevelopment) return\r\n if (condition) return\r\n console.warn(`[Ryunix Warning] ${message}`)\r\n}\r\n\r\nconst error = (message) => {\r\n if (!isDevelopment) return\r\n console.error(`[Ryunix Error] ${message}`)\r\n}\r\n\r\n/**\r\n * Component name detection\r\n */\r\nconst getComponentName = (component) => {\r\n if (!component) return 'Unknown'\r\n return component.displayName || component.name || 'Anonymous'\r\n}\r\n\r\n/**\r\n * Hook call validation\r\n */\r\nconst validateHookContext = (hookName = 'A hook') => {\r\n const state = getState()\r\n if (!state.wipFiber) {\r\n throw new Error(\r\n `${hookName} can only be called inside function components. ` +\r\n 'Make sure you are calling hooks at the top level of your component.',\r\n )\r\n }\r\n if (!Array.isArray(state.wipFiber.hooks)) {\r\n state.wipFiber.hooks = []\r\n }\r\n}\r\n\r\n/**\r\n * Performance tracking utilities\r\n */\r\nconst perfTracker = {\r\n marks: new Map(),\r\n\r\n mark(name) {\r\n if (!isDevelopment) return\r\n this.marks.set(name, Date.now())\r\n },\r\n\r\n measure(name, startMark) {\r\n if (!isDevelopment) return\r\n const start = this.marks.get(startMark)\r\n if (!start) return\r\n\r\n const duration = Date.now() - start\r\n console.log(`[Ryunix Performance] ${name}: ${duration}ms`)\r\n },\r\n\r\n clear() {\r\n this.marks.clear()\r\n },\r\n}\r\n\r\n/**\r\n * Deprecation warnings\r\n */\r\nconst deprecated = (oldAPI, newAPI, version) => {\r\n if (!isDevelopment) return\r\n console.warn(\r\n `[Ryunix Deprecated] ${oldAPI} is deprecated and will be removed in version ${version}. ` +\r\n `Use ${newAPI} instead.`,\r\n )\r\n}\r\n\r\nexport {\r\n warning,\r\n error,\r\n getComponentName,\r\n validateHookContext,\r\n perfTracker,\r\n deprecated,\r\n}\r\n","import { RYUNIX_TYPES, getState, is, flattenArray } from '../utils/index.js'\r\nimport { createElement, Fragment } from './createElement.js'\r\nimport { scheduleWork } from './bridge.js'\r\nimport { Priority, scheduleUpdate, runWithPriority, getCurrentPriority } from './priority.js'\r\nimport { RYUNIX_PORTAL } from './portal.js'\r\nimport { queueUpdate } from './batching.js'\r\nimport { validateHookContext as validateHookCall } from './devtools.js'\r\n\r\n\r\nconst haveDepsChanged = (oldDeps, newDeps) => {\r\n if (!oldDeps || !newDeps) return true\r\n if (oldDeps.length !== newDeps.length) return true\r\n return oldDeps.some((dep, i) => !Object.is(dep, newDeps[i]))\r\n}\r\n\r\nconst useStore = (initialState, priority = getCurrentPriority()) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return [is.function(initialState) ? initialState() : initialState, () => { }]\r\n }\r\n\r\n const reducer = (state, action) =>\r\n is.function(action) ? action(state) : action\r\n return useReducer(reducer, initialState, undefined, priority)\r\n}\r\n\r\n\r\nconst useReducer = (reducer, initialState, init, defaultPriority = getCurrentPriority()) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return [init ? init(initialState) : initialState, () => { }]\r\n }\r\n\r\n validateHookCall()\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_STORE,\r\n state: oldHook ? oldHook.state : init ? init(initialState) : initialState,\r\n queue: [],\r\n }\r\n\r\n if (oldHook?.queue) {\r\n oldHook.queue.forEach((action) => {\r\n try {\r\n hook.state = reducer(hook.state, action)\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in reducer:', error)\r\n }\r\n }\r\n })\r\n }\r\n\r\n const dispatch = (action, priority = defaultPriority) => {\r\n if (action === undefined) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('dispatch called with undefined action')\r\n }\r\n return\r\n }\r\n\r\n hook.queue.push(action)\r\n\r\n const currentState = getState()\r\n const activeRoot = currentState.currentRoot || currentState.wipRoot\r\n\r\n if (!activeRoot) return\r\n\r\n currentState.wipRoot = {\r\n dom: activeRoot.dom,\r\n props: activeRoot.props,\r\n alternate: currentState.currentRoot || null,\r\n }\r\n currentState.deletions = []\r\n currentState.hookIndex = 0\r\n queueUpdate(() => scheduleWork(currentState.wipRoot, priority))\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return [hook.state, dispatch]\r\n}\r\n\r\n\r\n/**\r\n * The `useEffect` function in JavaScript is used to manage side effects in functional components by\r\n * comparing dependencies and executing a callback function when dependencies change.\r\n * @param callback - The `callback` parameter in the `useEffect` function is a function that will be\r\n * executed as the effect. This function can perform side effects like data fetching, subscriptions, or\r\n * DOM manipulations.\r\n * @param deps - The `deps` parameter in the `useEffect` function stands for dependencies. It is an\r\n * optional array that contains values that the effect depends on. The effect will only re-run if any\r\n * of the values in the `deps` array have changed since the last render. If the `deps` array\r\n */\r\nconst useEffect = (callback, deps) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return\r\n }\r\n\r\n validateHookCall()\r\n\r\n if (!is.function(callback)) {\r\n throw new Error('useEffect callback must be a function')\r\n }\r\n if (deps !== undefined && !Array.isArray(deps)) {\r\n throw new Error('useEffect dependencies must be an array or undefined')\r\n }\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n const hasChanged = haveDepsChanged(oldHook?.deps, deps)\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_EFFECT,\r\n deps,\r\n effect: hasChanged ? callback : null,\r\n cancel: oldHook?.cancel,\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n}\r\n\r\n/**\r\n * The useRef function in JavaScript creates a reference object with an initial value for use in functional components.\r\n * @param initialValue - The `initialValue` parameter in the `useRef` function represents the initial\r\n * value that will be assigned to the `current` property of the reference object. This initial value\r\n * will be used if there is no previous value stored in the hook.\r\n * @returns The `useRef` function is returning the `current` property of the `hook.value` object, which\r\n * contains the initial value passed to the `useRef` function.\r\n */\r\nconst useRef = (initialValue) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return { current: initialValue }\r\n }\r\n\r\n validateHookCall()\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_REF,\r\n value: oldHook ? oldHook.value : { current: initialValue },\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return hook.value\r\n}\r\n\r\n/**\r\n * The useMemo function in JavaScript is used to memoize the result of a computation based on\r\n * dependencies.\r\n * @param compute - The `compute` parameter in the `useMemo` function is a callback function that\r\n * calculates the value that `useMemo` will memoize and return. This function will be called to compute\r\n * the memoized value when necessary.\r\n * @param deps - The `deps` parameter in the `useMemo` function refers to an array of dependencies.\r\n * These dependencies are used to determine whether the memoized value needs to be recalculated or if\r\n * the previously calculated value can be reused. The `useMemo` hook will recompute the memoized value\r\n * only if\r\n * @returns The `useMemo` function is returning the `value` calculated by the `compute` function.\r\n */\r\nconst useMemo = (compute, deps) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return compute()\r\n }\r\n\r\n validateHookCall()\r\n\r\n if (!is.function(compute)) {\r\n throw new Error('useMemo callback must be a function')\r\n }\r\n if (!Array.isArray(deps)) {\r\n throw new Error('useMemo requires a dependencies array')\r\n }\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n let value\r\n if (oldHook && !haveDepsChanged(oldHook.deps, deps)) {\r\n value = oldHook.value\r\n } else {\r\n try {\r\n value = compute()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in useMemo computation:', error)\r\n }\r\n throw error\r\n }\r\n }\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_MEMO,\r\n value,\r\n deps,\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return value\r\n}\r\n\r\n/**\r\n * The useCallback function in JavaScript ensures that a callback function is memoized based on its\r\n * dependencies.\r\n * @param callback - A function that you want to memoize and return for later use.\r\n * @param deps - The `deps` parameter in the `useCallback` function refers to an array of dependencies.\r\n * These dependencies are used to determine when the callback function should be re-evaluated and\r\n * memoized. If any of the dependencies change, the callback function will be re-executed and the\r\n * memoized value will\r\n * @returns The useCallback function is returning the memoized version of the callback function passed\r\n * as the first argument, based on the dependencies array provided as the second argument.\r\n */\r\nconst useCallback = (callback, deps) => {\r\n if (!is.function(callback)) {\r\n throw new Error('useCallback requires a function as first argument')\r\n }\r\n return useMemo(() => callback, deps)\r\n}\r\n\r\n/**\r\n * The createContext function creates a context provider and useContext hook in JavaScript.\r\n * @param [contextId] - The `contextId` parameter in the `createContext` function is used to specify\r\n * the unique identifier for the context being created. It defaults to `RYUNIX_TYPES.RYUNIX_CONTEXT` if\r\n * not provided.\r\n * @param [defaultValue] - The `defaultValue` parameter in the `createContext` function is used to\r\n * specify the default value that will be returned by the `useContext` hook if no provider is found in\r\n * the component tree. It is an optional parameter, and if not provided, an empty object `{}` will be\r\n * used as\r\n * @returns The `createContext` function returns an object with two properties: `Provider` and\r\n * `useContext`. The `Provider` property is a component that accepts `children` and `value` props, and\r\n * sets the `_contextId` and `_contextValue` properties on the element. The `useContext` property is a\r\n * hook function that retrieves the context value based on the context ID provided, or\r\n */\r\nconst createContext = (\r\n contextId = RYUNIX_TYPES.RYUNIX_CONTEXT,\r\n defaultValue = {},\r\n) => {\r\n const Provider = ({ value, children }) => {\r\n return createElement(\r\n RYUNIX_TYPES.RYUNIX_CONTEXT,\r\n { value, children, _contextId: contextId },\r\n ...flattenArray([children])\r\n )\r\n }\r\n\r\n Provider._contextId = contextId\r\n\r\n const useContext = (ctxID = contextId) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return (state.ssrContexts && state.ssrContexts[ctxID] !== undefined)\r\n ? state.ssrContexts[ctxID]\r\n : defaultValue\r\n }\r\n\r\n validateHookCall()\r\n\r\n let fiber = state.wipFiber\r\n\r\n while (fiber) {\r\n if (fiber._contextId === ctxID && fiber._contextValue !== undefined) {\r\n return fiber._contextValue\r\n }\r\n if (\r\n fiber.type?._contextId === ctxID &&\r\n fiber.props?.value !== undefined\r\n ) {\r\n return fiber.props.value\r\n }\r\n fiber = fiber.parent\r\n }\r\n return defaultValue\r\n }\r\n\r\n return { Provider, useContext }\r\n}\r\n\r\n/**\r\n * The `useQuery` function extracts query parameters from the URL in a browser environment.\r\n * @returns An object containing the query parameters from the current URL is being returned.\r\n */\r\nconst useQuery = () => {\r\n if (typeof window === 'undefined') return {}\r\n\r\n const searchParams = new URLSearchParams(window.location.search)\r\n const query = {}\r\n for (const [key, value] of searchParams.entries()) {\r\n query[key] = value\r\n }\r\n return query\r\n}\r\n\r\n/**\r\n * The function `useHash` in JavaScript is used to manage and update the hash portion of the URL in a\r\n * web application.\r\n * @returns The `useHash` function returns the current hash value from the window's location. If the\r\n * window is undefined (e.g., in a server-side environment), it returns an empty string. The function\r\n * also sets up an event listener to update the hash value when the hash in the URL changes and removes\r\n * the event listener when the component unmounts.\r\n */\r\nconst useHash = () => {\r\n if (typeof window === 'undefined') return ''\r\n\r\n const [hash, setHash] = useStore(window.location.hash)\r\n useEffect(() => {\r\n const onHashChange = () => setHash(window.location.hash)\r\n window.addEventListener('hashchange', onHashChange)\r\n return () => window.removeEventListener('hashchange', onHashChange)\r\n }, [])\r\n return hash\r\n}\r\n\r\n/**\r\n * The `useMetadata` function in JavaScript is used to dynamically update metadata tags in the document\r\n * head based on provided tags and options.\r\n * @param [tags] - The `tags` parameter in the `useMetadata` function is an object that contains\r\n * metadata information for the webpage. It can include properties like `pageTitle`, `canonical`, and\r\n * other custom metadata tags like `og:title`, `og:description`, `twitter:title`,\r\n * `twitter:description`, etc. These tags\r\n * @param [options] - The `options` parameter in the `useMetadata` function is an object that can\r\n * contain the following properties:\r\n * - `title`: An object that can have the following properties:\r\n * - `template`: A string that defines the template for the page title. It can include a placeholder\r\n * `%s` that will be replaced with the actual page title.\r\n * - `prefix`: A string that will be used as the default title if no specific page title is provided.\r\n * @returns The `useMetadata` function does not return anything. It is a custom hook that updates the\r\n * document's metadata (such as title and meta tags) based on the provided `tags` and `options` whenever\r\n * they change.\r\n * This hook can't be reached by google crawler.\r\n */\r\n\r\nconst useMetadata = (tags = {}, options = {}) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n state.ssrMetadata = { ...state.ssrMetadata, ...tags }\r\n return\r\n }\r\n\r\n useEffect(() => {\r\n if (typeof document === 'undefined') return\r\n // ...\r\n\r\n let finalTitle = 'Ryunix App'\r\n const template = options.title?.template\r\n const defaultTitle = options.title?.prefix || 'Ryunix App'\r\n const pageTitle = tags.pageTitle || tags.title\r\n\r\n if (is.string(pageTitle) && pageTitle.trim()) {\r\n finalTitle = template?.includes('%s')\r\n ? template.replace('%s', pageTitle)\r\n : pageTitle\r\n } else {\r\n finalTitle = defaultTitle\r\n }\r\n\r\n document.title = finalTitle\r\n\r\n if (tags.canonical) {\r\n let link = document.querySelector('link[rel=\"canonical\"]')\r\n if (!link) {\r\n link = document.createElement('link')\r\n link.setAttribute('rel', 'canonical')\r\n document.head.appendChild(link)\r\n }\r\n link.setAttribute('href', tags.canonical)\r\n }\r\n\r\n Object.entries(tags).forEach(([key, value]) => {\r\n if (['title', 'pageTitle', 'canonical'].includes(key)) return\r\n\r\n const isProperty = key.startsWith('og:') || key.startsWith('twitter:')\r\n const selector = `meta[${isProperty ? 'property' : 'name'}='${key}']`\r\n let meta = document.head.querySelector(selector)\r\n\r\n if (!meta) {\r\n meta = document.createElement('meta')\r\n meta.setAttribute(isProperty ? 'property' : 'name', key)\r\n document.head.appendChild(meta)\r\n }\r\n meta.setAttribute('content', value)\r\n })\r\n }, [JSON.stringify(tags), JSON.stringify(options)])\r\n}\r\n\r\n// Router Context\r\nconst RouterContext = createContext('ryunix.navigation', {\r\n location: '/',\r\n params: {},\r\n query: {},\r\n navigate: (path) => {},\r\n route: null,\r\n})\r\n\r\nconst findRoute = (routes, path) => {\r\n const pathname = path.split('?')[0].split('#')[0]\r\n const notFoundRoute = routes.find((route) => route.NotFound)\r\n const notFound = notFoundRoute\r\n ? { route: { component: notFoundRoute.NotFound }, params: {} }\r\n : { route: { component: null }, params: {} }\r\n\r\n for (const route of routes) {\r\n if (route.subRoutes) {\r\n const childRoute = findRoute(route.subRoutes, path)\r\n if (childRoute) return childRoute\r\n }\r\n if (route.path === '*') return notFound\r\n if (!route.path || typeof route.path !== 'string') continue\r\n\r\n const keys = []\r\n const pattern = new RegExp(\r\n `^${route.path.replace(/:(\\.\\.\\.)?(\\w+)/g, (match, isCatchAll, key) => {\r\n keys.push({ key, isCatchAll: !!isCatchAll })\r\n return isCatchAll ? '(.+)' : '([^/]+)'\r\n })}$`,\r\n )\r\n\r\n const matchPath = pathname.match(pattern)\r\n if (matchPath) {\r\n const params = keys.reduce((acc, keyObj, index) => {\r\n const val = matchPath[index + 1]\r\n acc[keyObj.key] = keyObj.isCatchAll && val ? val.split('/') : val\r\n return acc\r\n }, {})\r\n return { route, params }\r\n }\r\n }\r\n return notFound\r\n}\r\n\r\n/**\r\n * The `RouterProvider` component manages routing in a Ryunix application by updating the location based\r\n * on window events and providing context for the current route.\r\n * @returns The `RouterProvider` component is returning a `RouterContext.Provider` component with a\r\n * `value` prop set to `contextValue`, and wrapping the `children` within a `Fragment`.\r\n */\r\nconst RouterProvider = ({ routes, children }) => {\r\n const [location, setLocation] = useStore(\r\n typeof window !== 'undefined' ? window.location.pathname : '/'\r\n )\r\n\r\n useEffect(() => {\r\n const update = () => setLocation(window.location.pathname)\r\n window.addEventListener('popstate', update)\r\n window.addEventListener('hashchange', update)\r\n return () => {\r\n window.removeEventListener('popstate', update)\r\n window.removeEventListener('hashchange', update)\r\n }\r\n }, [])\r\n\r\n const navigate = (path) => {\r\n if (typeof window !== 'undefined' && window.__RYUNIX_MPA__) {\r\n window.location.assign(path)\r\n return\r\n }\r\n window.history.pushState({}, '', path)\r\n setLocation(path)\r\n }\r\n\r\n const currentRouteData = findRoute(routes, location) || {}\r\n const query = useQuery()\r\n\r\n const contextValue = {\r\n location,\r\n params: currentRouteData.params || {},\r\n query,\r\n navigate,\r\n route: currentRouteData.route,\r\n }\r\n\r\n return createElement(\r\n RouterContext.Provider,\r\n { value: contextValue },\r\n Fragment({ children }),\r\n )\r\n}\r\n\r\n/**\r\n * The function `useRouter` returns the context of the Router for navigation in a Ryunix application.\r\n * @returns The `useRouter` function is returning the result of calling\r\n * `RouterContext.useContext('ryunix.navigation')`. This function is likely attempting to retrieve the\r\n * navigation context from the RouterContext.\r\n */\r\nconst useRouter = () => {\r\n return RouterContext.useContext('ryunix.navigation')\r\n}\r\n\r\n/**\r\n * The `Children` function in JavaScript uses router hooks to handle scrolling to a specific element\r\n * based on the hash in the URL.\r\n * @returns The `Children` component is returning the result of calling `createElement` with\r\n * `route.component` as the first argument and an object with `key`, `params`, `query`, and `hash`\r\n * properties as the second argument. The `key` property is set to `location`, and the `params`,\r\n * `query`, and `hash` properties are passed as values from the component's props.\r\n */\r\nconst Children = () => {\r\n const { route, params, query, location } = useRouter()\r\n if (!route || !route.component) return null\r\n const hash = useHash()\r\n\r\n useEffect(() => {\r\n if (hash) {\r\n const id = hash.slice(1)\r\n const el = document.getElementById(id)\r\n if (el) el.scrollIntoView({ block: 'start', behavior: 'smooth' })\r\n }\r\n }, [hash])\r\n\r\n return createElement(route.component, {\r\n key: location,\r\n params,\r\n query,\r\n hash,\r\n location,\r\n })\r\n}\r\n\r\n/**\r\n * usePathname - Returns the current pathname\r\n */\r\nconst usePathname = () => {\r\n const { location } = useRouter()\r\n return location.split('?')[0].split('#')[0]\r\n}\r\n\r\n/**\r\n * useSearchParams - Returns the current URLSearchParams object\r\n */\r\nconst useSearchParams = () => {\r\n const { query } = useRouter()\r\n return new URLSearchParams(query)\r\n}\r\n\r\n/**\r\n * Link - Base link component for SPA navigation\r\n * Supports optional prefetching of lazy components.\r\n */\r\nconst Link = ({ to, prefetch = true, ...props }) => {\r\n const { navigate } = useRouter()\r\n\r\n const handleClick = (e) => {\r\n if (e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) {\r\n return\r\n }\r\n\r\n e.preventDefault()\r\n navigate(to)\r\n }\r\n\r\n const handleMouseEnter = () => {\r\n if (prefetch && typeof window !== 'undefined') {\r\n // Logic for prefetching could go here if route component is known\r\n }\r\n }\r\n\r\n const { className: _omitClassName, ...cleanedProps } = props\r\n\r\n return createElement(\r\n 'a',\r\n {\r\n href: to,\r\n onClick: handleClick,\r\n onMouseEnter: handleMouseEnter,\r\n className: props.className || props['ryunix-class'],\r\n ...cleanedProps,\r\n },\r\n props.children,\r\n )\r\n}\r\n\r\n/**\r\n * The NavLink function in JavaScript is a component that generates a link element with customizable\r\n * classes and active state based on the current location.\r\n * @returns The `NavLink` component is returning a JSX element representing an anchor (`<a>`) tag with\r\n * the following attributes and properties:\r\n */\r\nconst NavLink = ({ to, exact = false, ...props }) => {\r\n const { location, navigate } = useRouter()\r\n const isActive = exact ? location === to : location.startsWith(to)\r\n\r\n const resolveClass = (cls) =>\r\n typeof cls === 'function' ? cls({ isActive }) : cls || ''\r\n\r\n const handleClick = (e) => {\r\n if (e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) {\r\n return\r\n }\r\n e.preventDefault()\r\n navigate(to)\r\n }\r\n\r\n const classAttrName = props['ryunix-class'] ? 'ryunix-class' : 'className'\r\n const classAttrValue = resolveClass(\r\n props['ryunix-class'] || props['className'],\r\n )\r\n\r\n const {\r\n ['ryunix-class']: _omitRyunix,\r\n className: _omitClassName,\r\n ...cleanedProps\r\n } = props\r\n\r\n return createElement(\r\n 'a',\r\n {\r\n href: to,\r\n onClick: handleClick,\r\n [classAttrName]: classAttrValue,\r\n ...cleanedProps,\r\n },\r\n props.children,\r\n )\r\n}\r\n\r\n/**\r\n * useStore with priority support\r\n */\r\nconst useStorePriority = (initialState) => {\r\n const reducer = (state, action) =>\r\n typeof action === 'function' ? action.value(state) : action.value\r\n\r\n const [state, baseDispatch] = useReducer(reducer, initialState)\r\n\r\n const dispatch = (action, priority = Priority.NORMAL) => {\r\n const wrappedAction = {\r\n value: action,\r\n priority,\r\n }\r\n\r\n scheduleUpdate(() => baseDispatch(wrappedAction, priority), priority)\r\n }\r\n\r\n return [state, dispatch]\r\n}\r\n\r\n/**\r\n * useTransition - Mark updates as non-urgent\r\n */\r\nconst useTransition = () => {\r\n const [isPending, setIsPending] = useStorePriority(false)\r\n\r\n const startTransition = (callback) => {\r\n setIsPending(true, Priority.IMMEDIATE)\r\n\r\n setTimeout(() => {\r\n runWithPriority(Priority.LOW, () => {\r\n callback()\r\n setIsPending(false, Priority.LOW)\r\n })\r\n }, 0)\r\n }\r\n\r\n return [isPending, startTransition]\r\n}\r\n\r\n/**\r\n * useDeferredValue - Defer value updates\r\n */\r\nconst useDeferredValue = (value) => {\r\n const [deferredValue, setDeferredValue] = useStorePriority(value)\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => {\r\n setDeferredValue(value, Priority.LOW)\r\n }, 100)\r\n\r\n return () => clearTimeout(timeout)\r\n }, [value])\r\n\r\n return deferredValue\r\n}\r\n\r\n/**\r\n * The `usePersitentStore` function manages state using local storage in JavaScript, allowing for easy\r\n * storage and retrieval of data.\r\n * @param key - The `key` parameter in the `usePersitentStore` function is a string that represents the key\r\n * under which the data will be stored in the browser's local storage. It is used to retrieve and store\r\n * data associated with this specific key.\r\n * @param [initialState] - The `initialState` parameter in the `usePersitentStore` function is the initial\r\n * value that will be used if there is no data stored in the local storage under the specified `key`.\r\n * It serves as the default value for the state if no data is retrieved from the local storage.\r\n * @returns The `usePersitentStore` function returns an array containing two elements:\r\n * 1. The current state value retrieved from local storage or the initial state if not found.\r\n * 2. The `setValue` function that updates the state value and stores it in the local storage as a JSON\r\n * string.\r\n */\r\nconst usePersistentStore = (key, initialState = '') => {\r\n const [state, dispatch] = useStore(() => {\r\n try {\r\n const item = window.localStorage.getItem(key)\r\n return item ? JSON.parse(item) : initialState\r\n } catch (error) {\r\n return initialState\r\n }\r\n })\r\n\r\n /**\r\n * The function `setValue` dispatches a value and stores it in the local storage as a JSON string,\r\n * handling any errors with a console log.\r\n * @param value - The `value` parameter in the `setValue` function is the data that you want to set.\r\n * It is dispatched to update the state and then stored in the browser's local storage after being\r\n * converted to a JSON string.\r\n */\r\n const setValue = (value) => {\r\n try {\r\n dispatch(value)\r\n window.localStorage.setItem(key, JSON.stringify(value))\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n }\r\n\r\n return [state, setValue]\r\n}\r\n\r\n/**\r\n * The `useSwitch` function returns a state value and a toggle function to switch the state between\r\n * true and false.\r\n * @param [initialState=false] - The `initialState` parameter in the `useSwitch` function is used to\r\n * set the initial value of the state. If no value is provided when calling `useSwitch`, the default\r\n * initial state will be `false`.\r\n * @returns An array containing the current state value and a function `toggle` that toggles the state\r\n * value.\r\n */\r\nconst useSwitch = (initialState = false) => {\r\n const [state, dispatch] = useStore(initialState)\r\n\r\n /**\r\n * The function `toggle` toggles the state by dispatching the opposite value of the current state.\r\n * Uses functional update to avoid stale closure issues with rapid calls.\r\n */\r\n const toggle = () => {\r\n dispatch((prev) => !prev)\r\n }\r\n\r\n return [state, toggle]\r\n}\r\n\r\n/**\r\n * useLayoutEffect - Like useEffect but runs synchronously after DOM mutations\r\n * and before the browser paints. Use for DOM measurements.\r\n * @param {Function} callback - Effect callback\r\n * @param {Array} deps - Dependencies array\r\n */\r\nconst useLayoutEffect = (callback, deps) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return\r\n }\r\n\r\n validateHookCall()\r\n\r\n if (!is.function(callback)) {\r\n throw new Error('useLayoutEffect callback must be a function')\r\n }\r\n if (deps !== undefined && !Array.isArray(deps)) {\r\n throw new Error('useLayoutEffect dependencies must be an array or undefined')\r\n }\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n const hasChanged = haveDepsChanged(oldHook?.deps, deps)\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_EFFECT,\r\n deps,\r\n effect: hasChanged ? callback : null,\r\n cancel: oldHook?.cancel,\r\n isLayout: true, // Flag to run synchronously during commit\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n}\r\n\r\n// Counter for deterministic ID generation\r\nlet idCounter = 0\r\n\r\n/**\r\n * useId - Generate a deterministic, unique ID that is stable across SSR and hydration.\r\n * @returns {string} A unique ID string\r\n */\r\nconst useId = () => {\r\n const state = getState()\r\n\r\n if (state.isServerRendering) {\r\n // On server, use a simple incrementing counter (reset per renderToString call)\r\n return `:r${idCounter++}:`\r\n }\r\n\r\n validateHookCall()\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_REF,\r\n value: oldHook ? oldHook.value : `:r${idCounter++}:`,\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return hook.value\r\n}\r\n\r\n/**\r\n * useDebounce - Returns a debounced version of the value that only updates\r\n * after the specified delay has passed since the last change.\r\n * @param {*} value - Value to debounce\r\n * @param {number} delay - Delay in milliseconds (default: 300)\r\n * @returns {*} Debounced value\r\n */\r\nconst useDebounce = (value, delay = 300) => {\r\n const [debouncedValue, setDebouncedValue] = useStore(value)\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n setDebouncedValue(value)\r\n }, delay)\r\n\r\n return () => clearTimeout(timer)\r\n }, [value, delay])\r\n\r\n return debouncedValue\r\n}\r\n\r\n/**\r\n * useThrottle - Returns a throttled version of the value that only updates\r\n * at most once per specified interval.\r\n * @param {*} value - Value to throttle\r\n * @param {number} interval - Minimum interval in milliseconds (default: 300)\r\n * @returns {*} Throttled value\r\n */\r\nconst useThrottle = (value, interval = 300) => {\r\n const [throttledValue, setThrottledValue] = useStore(value)\r\n const lastUpdated = useRef(Date.now())\r\n\r\n useEffect(() => {\r\n const now = Date.now()\r\n const elapsed = now - lastUpdated.current\r\n\r\n if (elapsed >= interval) {\r\n lastUpdated.current = now\r\n setThrottledValue(value)\r\n } else {\r\n const timer = setTimeout(() => {\r\n lastUpdated.current = Date.now()\r\n setThrottledValue(value)\r\n }, interval - elapsed)\r\n\r\n return () => clearTimeout(timer)\r\n }\r\n }, [value, interval])\r\n\r\n return throttledValue\r\n}\r\n\r\nexport {\r\n useStore,\r\n useReducer,\r\n useEffect,\r\n useLayoutEffect,\r\n useRef,\r\n useMemo,\r\n useCallback,\r\n createContext,\r\n useQuery,\r\n useHash,\r\n useMetadata,\r\n useId,\r\n useDebounce,\r\n useThrottle,\r\n useStorePriority,\r\n useTransition,\r\n useDeferredValue,\r\n usePersistentStore,\r\n usePersistentStore as usePersitentStore, // backwards-compatible alias\r\n useSwitch,\r\n // Router exports\r\n RouterProvider,\r\n useRouter,\r\n Children,\r\n NavLink,\r\n Link,\r\n usePathname,\r\n useSearchParams,\r\n}\r\n\r\n","import { createDom, clearContainer } from './dom.js'\r\nimport { reconcileChildren } from './reconciler.js'\r\nimport { getState, RYUNIX_TYPES, EFFECT_TAGS, nextValidSibling } from '../utils/index.js'\r\nimport { createElement } from './createElement.js'\r\nimport { createContext } from './hooks.js'\r\n\r\nconst updateFunctionComponent = (fiber) => {\r\n const state = getState()\r\n state.wipFiber = fiber\r\n state.hookIndex = 0\r\n state.wipFiber.hooks = []\r\n\r\n if (state.isHydrating) {\r\n fiber.effectTag = EFFECT_TAGS.HYDRATE\r\n }\r\n\r\n let children = [fiber.type(fiber.props)]\r\n\r\n if (fiber.type._contextId && fiber.props.value !== undefined) {\r\n fiber._contextId = fiber.type._contextId\r\n fiber._contextValue = fiber.props.value\r\n }\r\n\r\n reconcileChildren(fiber, children)\r\n}\r\n\r\nconst updateHostComponent = (fiber) => {\r\n const state = getState()\r\n\r\n if (fiber.type === RYUNIX_TYPES.RYUNIX_CONTEXT) {\r\n fiber._contextId = fiber.props?._contextId\r\n fiber._contextValue = fiber.props?.value\r\n }\r\n\r\n const isPassthrough =\r\n fiber.type === RYUNIX_TYPES.RYUNIX_FRAGMENT ||\r\n fiber.type === RYUNIX_TYPES.RYUNIX_CONTEXT ||\r\n fiber.type === Symbol.for('ryunix.portal')\r\n\r\n if (state.isHydrating && isPassthrough) {\r\n fiber.effectTag = EFFECT_TAGS.HYDRATE\r\n } else if (!fiber.dom) {\r\n if (state.isHydrating && state.hydrateCursor) {\r\n const domNode = state.hydrateCursor\r\n const isText =\r\n fiber.type === RYUNIX_TYPES.TEXT_ELEMENT && domNode.nodeType === 3\r\n const isElement =\r\n typeof fiber.type === 'string' &&\r\n domNode.nodeType === 1 &&\r\n domNode.tagName.toLowerCase() === fiber.type.toLowerCase()\r\n\r\n if (isText || isElement) {\r\n fiber.dom = domNode\r\n fiber.effectTag = EFFECT_TAGS.HYDRATE\r\n // Move cursor to first child for children to consume\r\n state.hydrateCursor = nextValidSibling(domNode.firstChild)\r\n } else {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n `[Hydration] Mismatch at ${getTypeLabel(fiber.type)}. Expected ${domNode.nodeType === 1 ? domNode.tagName : 'text'\r\n } but got ${fiber.type}. Falling back to CSR.`,\r\n )\r\n }\r\n state.isHydrating = false\r\n state.hydrationFailed = true\r\n state.hydrateCursor = null\r\n fiber.dom = createDom(fiber)\r\n fiber.effectTag = EFFECT_TAGS.PLACEMENT\r\n }\r\n } else {\r\n fiber.dom = createDom(fiber)\r\n }\r\n }\r\n\r\n const children = fiber.props?.children || []\r\n reconcileChildren(fiber, children)\r\n}\r\n\r\nconst getTypeLabel = (type) => {\r\n if (typeof type === 'symbol') return type.description || type.toString()\r\n if (typeof type === 'function') return type.name || 'anonymous'\r\n return String(type)\r\n}\r\n\r\n\r\n/**\r\n * The Component `Image` takes in a `src` and other props, and returns an `img` element with the\r\n * specified `src` and props.\r\n * @returns The `Image` component is being returned. It is a functional component that renders an `img`\r\n * element with the specified `src` and other props passed to it.\r\n */\r\nconst Image = ({ src, ...props }) => {\r\n return createElement('img', { ...props, src })\r\n}\r\n\r\nconst { Provider: MDXProvider, useContext: useMDXComponents } = createContext(\r\n 'ryunix.mdx',\r\n {},\r\n)\r\n\r\n/**\r\n * Get merged MDX components from context and provided components\r\n * @param {Object} components - Additional components to merge\r\n * @returns {Object} Merged components object\r\n */\r\nconst getMDXComponents = (components) => {\r\n const contextComponents = useMDXComponents()\r\n return {\r\n ...contextComponents,\r\n ...components,\r\n }\r\n}\r\n\r\n/**\r\n * Default MDX components with Ryunix-optimized rendering\r\n */\r\nconst defaultComponents = {\r\n // Headings\r\n h1: (props) => createElement('h1', { ...props }),\r\n h2: (props) => createElement('h2', { ...props }),\r\n h3: (props) => createElement('h3', { ...props }),\r\n h4: (props) => createElement('h4', { ...props }),\r\n h5: (props) => createElement('h5', { ...props }),\r\n h6: (props) => createElement('h6', { ...props }),\r\n\r\n // Text\r\n p: (props) => createElement('p', { ...props }),\r\n a: (props) => createElement('a', { ...props }),\r\n strong: (props) => createElement('strong', { ...props }),\r\n em: (props) => createElement('em', { ...props }),\r\n code: (props) => createElement('code', { ...props }),\r\n\r\n // Lists\r\n ul: (props) => createElement('ul', { ...props }),\r\n ol: (props) => createElement('ol', { ...props }),\r\n li: (props) => createElement('li', { ...props }),\r\n\r\n // Blocks\r\n blockquote: (props) => createElement('blockquote', { ...props }),\r\n pre: (props) => createElement('pre', { ...props }),\r\n hr: (props) => createElement('hr', { ...props }),\r\n\r\n // Tables\r\n table: (props) => createElement('table', { ...props }),\r\n thead: (props) => createElement('thead', { ...props }),\r\n tbody: (props) => createElement('tbody', { ...props }),\r\n tr: (props) => createElement('tr', { ...props }),\r\n th: (props) => createElement('th', { ...props }),\r\n td: (props) => createElement('td', { ...props }),\r\n\r\n // Media\r\n img: (props) => createElement('img', { ...props }),\r\n}\r\n\r\n/**\r\n * MDX Wrapper component\r\n * Provides default styling and components for MDX content\r\n */\r\nconst MDXContent = ({ children, components = {} }) => {\r\n const mergedComponents = getMDXComponents(components)\r\n\r\n return createElement(\r\n MDXProvider,\r\n { value: mergedComponents },\r\n createElement('div', null, children),\r\n )\r\n}\r\n\r\nexport {\r\n // Internal use\r\n updateFunctionComponent,\r\n updateHostComponent,\r\n\r\n // Built-in components\r\n\r\n // MDX Support\r\n MDXContent,\r\n MDXProvider,\r\n useMDXComponents,\r\n getMDXComponents,\r\n defaultComponents,\r\n\r\n // Custom components\r\n Image,\r\n}\r\n","// Safe performance.now() wrapper for SSR/Node environments\r\nconst perfNow = () =>\r\n typeof performance !== 'undefined' ? performance.now() : Date.now()\r\n\r\n/**\r\n * Performance profiler for Ryunix\r\n */\r\nclass Profiler {\r\n constructor() {\r\n this.enabled = process.env.NODE_ENV !== 'production'\r\n this.measures = new Map()\r\n this.renderTimes = []\r\n this.maxSamples = 100\r\n }\r\n\r\n startMeasure(name) {\r\n if (!this.enabled) return\r\n this.measures.set(name, perfNow())\r\n }\r\n\r\n endMeasure(name) {\r\n if (!this.enabled) return\r\n const start = this.measures.get(name)\r\n if (!start) return\r\n\r\n const duration = perfNow() - start\r\n this.measures.delete(name)\r\n\r\n return duration\r\n }\r\n\r\n recordRender(componentName, duration) {\r\n if (!this.enabled) return\r\n\r\n this.renderTimes.push({\r\n component: componentName,\r\n duration,\r\n timestamp: Date.now(),\r\n })\r\n\r\n if (this.renderTimes.length > this.maxSamples) {\r\n this.renderTimes.shift()\r\n }\r\n }\r\n\r\n getStats() {\r\n if (!this.enabled) return null\r\n\r\n const total = this.renderTimes.reduce((sum, r) => sum + r.duration, 0)\r\n const avg = total / this.renderTimes.length\r\n const max = Math.max(...this.renderTimes.map((r) => r.duration))\r\n const min = Math.min(...this.renderTimes.map((r) => r.duration))\r\n\r\n return { total, avg, max, min, count: this.renderTimes.length }\r\n }\r\n\r\n getSlowestComponents(limit = 10) {\r\n if (!this.enabled) return []\r\n\r\n const byComponent = new Map()\r\n\r\n this.renderTimes.forEach(({ component, duration }) => {\r\n if (!byComponent.has(component)) {\r\n byComponent.set(component, { total: 0, count: 0, max: 0 })\r\n }\r\n const stats = byComponent.get(component)\r\n stats.total += duration\r\n stats.count++\r\n stats.max = Math.max(stats.max, duration)\r\n })\r\n\r\n return Array.from(byComponent.entries())\r\n .map(([name, stats]) => ({\r\n name,\r\n avg: stats.total / stats.count,\r\n max: stats.max,\r\n count: stats.count,\r\n }))\r\n .sort((a, b) => b.avg - a.avg)\r\n .slice(0, limit)\r\n }\r\n\r\n logStats() {\r\n if (!this.enabled) return\r\n\r\n const stats = this.getStats()\r\n if (!stats) return\r\n\r\n console.group('🔍 Ryunix Performance Stats')\r\n console.log(`Total renders: ${stats.count}`)\r\n console.log(`Avg render time: ${stats.avg.toFixed(2)}ms`)\r\n console.log(\r\n `Min: ${stats.min.toFixed(2)}ms | Max: ${stats.max.toFixed(2)}ms`,\r\n )\r\n\r\n const slowest = this.getSlowestComponents(5)\r\n if (slowest.length > 0) {\r\n console.log('\\n⚠️ Slowest components:')\r\n slowest.forEach((comp, i) => {\r\n console.log(\r\n `${i + 1}. ${comp.name}: ${comp.avg.toFixed(2)}ms avg (${comp.count} renders)`,\r\n )\r\n })\r\n }\r\n console.groupEnd()\r\n }\r\n\r\n clear() {\r\n this.renderTimes = []\r\n this.measures.clear()\r\n }\r\n\r\n enable() {\r\n this.enabled = true\r\n }\r\n\r\n disable() {\r\n this.enabled = false\r\n }\r\n}\r\n\r\n// Global profiler instance\r\nconst profiler = new Profiler()\r\n\r\n/**\r\n * Hook to profile component render\r\n */\r\nconst useProfiler = (componentName) => {\r\n const startTime = perfNow()\r\n\r\n return () => {\r\n const duration = perfNow() - startTime\r\n profiler.recordRender(componentName, duration)\r\n }\r\n}\r\n\r\n/**\r\n * HOC to profile component\r\n */\r\nconst withProfiler = (Component, name) => {\r\n return (props) => {\r\n profiler.startMeasure(name)\r\n const result = Component(props)\r\n const duration = profiler.endMeasure(name)\r\n if (duration) profiler.recordRender(name, duration)\r\n return result\r\n }\r\n}\r\n\r\nexport { profiler, useProfiler, withProfiler }\r\n","import { commitRoot } from './commits.js'\r\nimport { updateFunctionComponent, updateHostComponent } from './components.js'\r\nimport { getState, rIC, nextValidSibling, getTypeLabel } from '../utils/index.js'\r\nimport { getCurrentPriority, Priority } from './priority.js'\r\nimport { profiler } from './profiler.js'\r\nimport { setScheduleWork } from './bridge.js'\r\n\r\nlet workQueue = []\r\nlet isWorkLoopScheduled = false\r\n\r\n\r\nfunction performUnitOfWork(fiber) {\r\n const state = getState()\r\n const isFunctionComponent =\r\n fiber.type instanceof Function || typeof fiber.type === 'function'\r\n\r\n try {\r\n if (isFunctionComponent) {\r\n updateFunctionComponent(fiber)\r\n } else {\r\n updateHostComponent(fiber)\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('[Ryunix ErrorBoundary] Caught error during render:', error)\r\n }\r\n\r\n // Traverse upwards to find nearest ErrorBoundary\r\n let boundaryFiber = fiber.parent\r\n let foundBoundary = false\r\n\r\n while (boundaryFiber) {\r\n if (\r\n boundaryFiber.type &&\r\n boundaryFiber.type.ryunix_type === 'RYUNIX_ERROR_BOUNDARY'\r\n ) {\r\n foundBoundary = true\r\n break\r\n }\r\n boundaryFiber = boundaryFiber.parent\r\n }\r\n\r\n if (foundBoundary) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n '[Ryunix ErrorBoundary] Recovering tree at nearest boundary.',\r\n )\r\n }\r\n // Assign the error state to the boundary so it can render the fallback\r\n boundaryFiber.stateError = error\r\n // Discard the corrupted children of the crashing fiber to prevent undefined behavior\r\n fiber.child = null\r\n\r\n // Rewind the rendering context to the ErrorBoundary fiber\r\n // so the work loop immediately starts re-evaluating the boundary branch\r\n return boundaryFiber\r\n } else {\r\n // Uncaught fatal error: stop the work loop entirely\r\n console.error(\r\n '[Ryunix] Fatal Uncaught Error. No ErrorBoundary was found in the tree to handle this exception:\\n',\r\n error,\r\n )\r\n state.nextUnitOfWork = null\r\n return null\r\n }\r\n }\r\n\r\n if (fiber.child) {\r\n return fiber.child\r\n }\r\n\r\n let nextFiber = fiber\r\n while (nextFiber) {\r\n // If we just finished a Host node during hydration, \r\n // the next fiber (sibling) should start at the next DOM sibling.\r\n if (state.isHydrating && nextFiber.dom) {\r\n state.hydrateCursor = nextValidSibling(nextFiber.dom.nextSibling)\r\n }\r\n\r\n if (nextFiber.sibling) {\r\n return nextFiber.sibling\r\n }\r\n\r\n nextFiber = nextFiber.parent\r\n // When ascending, we don't need to do anything else,\r\n // the loop will handle the parent's sibling or end.\r\n }\r\n}\r\n\r\n\r\nconst workLoop = (deadline) => {\r\n const state = getState()\r\n let shouldYield = false\r\n\r\n while ((state.nextUnitOfWork || workQueue.length > 0) && !shouldYield) {\r\n if (!state.nextUnitOfWork && workQueue.length > 0) {\r\n const nextRoot = workQueue.shift()\r\n state.wipRoot = nextRoot\r\n state.nextUnitOfWork = nextRoot\r\n state.deletions = []\r\n\r\n // Restore specific hydration state for this root\r\n if (nextRoot.isHydrating !== undefined) {\r\n state.isHydrating = nextRoot.isHydrating\r\n state.hydrateCursor = nextRoot.hydrateCursor\r\n }\r\n }\r\n\r\n if (state.nextUnitOfWork) {\r\n state.nextUnitOfWork = performUnitOfWork(state.nextUnitOfWork)\r\n }\r\n\r\n shouldYield = deadline.timeRemaining() < 1\r\n }\r\n\r\n if (!state.nextUnitOfWork && state.wipRoot) {\r\n commitRoot()\r\n }\r\n\r\n if (state.nextUnitOfWork || workQueue.length > 0) {\r\n rIC(workLoop)\r\n } else {\r\n isWorkLoopScheduled = false\r\n }\r\n}\r\n\r\n// ... performUnitOfWork stays same ...\r\n\r\nconst scheduleWork = (root, priority = getCurrentPriority()) => {\r\n const state = getState()\r\n\r\n if (state.wipRoot) {\r\n workQueue.push(root)\r\n } else {\r\n state.nextUnitOfWork = root\r\n state.wipRoot = root\r\n state.deletions = []\r\n\r\n // Set immediate hydration state\r\n if (root.isHydrating !== undefined) {\r\n state.isHydrating = root.isHydrating\r\n state.hydrateCursor = root.hydrateCursor\r\n }\r\n }\r\n\r\n state.hookIndex = 0\r\n state.effects = []\r\n\r\n if (!isWorkLoopScheduled) {\r\n isWorkLoopScheduled = true\r\n if (priority <= Priority.USER_BLOCKING) {\r\n // High priority: run as soon as possible in a micro-task\r\n // We provide a synthetic deadline that allows some work before yielding\r\n Promise.resolve().then(() => {\r\n workLoop({ timeRemaining: () => 10, didTimeout: true })\r\n })\r\n } else {\r\n // Low priority: wait for browser idleness\r\n rIC(workLoop)\r\n }\r\n }\r\n}\r\n\r\n\r\nsetScheduleWork(scheduleWork)\r\n\r\nexport { performUnitOfWork, workLoop, scheduleWork }\r\n","import { clearContainer } from './dom.js'\r\nimport { getState } from '../utils/index.js'\r\nimport { scheduleWork } from './workers.js'\r\nimport { createElement } from './createElement.js'\r\n\r\n/**\r\n * The `render` function in JavaScript updates the DOM with a new element and schedules work to be done\r\n * on the element.\r\n * @param element - The `element` parameter in the `render` function is the element that you want to\r\n * render in the specified container. It could be a DOM element, a component, or any other valid\r\n * element that you want to display on the screen.\r\n * @param container - The `container` parameter in the `render` function is the DOM element where the\r\n * `element` will be rendered. It is the target container where the element will be appended as a\r\n * child.\r\n * @returns The `render` function is returning the `state.wipRoot` object.\r\n */\r\nconst render = (element, container) => {\r\n const state = getState()\r\n\r\n // Clear container before CSR render to avoid duplication\r\n clearContainer(container)\r\n\r\n const root = {\r\n dom: container,\r\n props: {\r\n children: [element],\r\n },\r\n alternate: state.currentRoot,\r\n isHydrating: false,\r\n hydrateCursor: null,\r\n }\r\n\r\n scheduleWork(root)\r\n return root\r\n}\r\n\r\nconst nextValidSibling = (node) => {\r\n let next = node\r\n while (next && (next.nodeType === 3 && !next.nodeValue.trim() || next.nodeType === 8)) {\r\n next = next.nextSibling\r\n }\r\n return next\r\n}\r\n\r\n/**\r\n * The `hydrate` function attaches Ryunix to an existing server-rendered DOM tree.\r\n * Instead of clearing and re-rendering, it walks the existing DOM nodes and\r\n * attaches event listeners and reconciles state, preserving SSR HTML.\r\n */\r\nconst hydrate = (element, container) => {\r\n const state = getState()\r\n\r\n state.containerRoot = container\r\n\r\n const root = {\r\n dom: container,\r\n props: {\r\n children: [element],\r\n },\r\n alternate: state.currentRoot,\r\n isHydrating: true,\r\n hydrateCursor: nextValidSibling(container.firstChild),\r\n }\r\n\r\n scheduleWork(root)\r\n return root\r\n}\r\n\r\nconst sanitizeProps = (props) => {\r\n if (!props || typeof props !== 'object' || Array.isArray(props)) return props\r\n const sanitized = {}\r\n for (const key in props) {\r\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue\r\n sanitized[key] = props[key]\r\n }\r\n return sanitized\r\n}\r\n\r\nconst init = (MainElement, root = '__ryunix', components = {}) => {\r\n const state = getState()\r\n state.containerRoot = document.getElementById(root)\r\n\r\n // Reset any stale hydration flags\r\n state.isHydrating = false\r\n state.hydrationFailed = false\r\n\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] init: RYUNIX_SSR=${process.env.RYUNIX_SSR}, hasChildNodes=${state.containerRoot.hasChildNodes()}`);\r\n }\r\n\r\n if (process.env.RYUNIX_SSR && state.containerRoot.hasChildNodes()) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] init: SSR content detected. Starting hydration on #${root}`);\r\n }\r\n const res = hydrate(MainElement, state.containerRoot)\r\n return res\r\n }\r\n\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] init: No SSR content or SSR disabled. Starting normal render on #${root}`);\r\n }\r\n const res = render(MainElement, state.containerRoot)\r\n return res\r\n}\r\n\r\nconst safeRender = (component, props, onError) => {\r\n try {\r\n return component(props)\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Component error:', error)\r\n }\r\n if (onError) onError(error)\r\n return null\r\n }\r\n}\r\n\r\nexport { init, render, safeRender, hydrate, clearContainer }\r\n","import { RYUNIX_TYPES, STRINGS, OLD_STRINGS, is, getState } from '../utils/index.js'\r\nimport { camelToKebab, validateUri } from './dom.js'\r\nimport { toSvgAttrName } from '../utils/svgAttributes.js'\r\n\r\nexport const escapeHtml = (unsafe) => {\r\n if (typeof unsafe !== 'string') return String(unsafe)\r\n return unsafe\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n}\r\n\r\nconst renderStyle = (styleObj) => {\r\n if (!is.object(styleObj) || is.null(styleObj)) return ''\r\n return Object.entries(styleObj)\r\n .filter(([_, value]) => value != null)\r\n .map(([key, value]) => `${camelToKebab(key)}:${value}`)\r\n .join(';')\r\n}\r\n\r\nconst VOID_ELEMENTS = new Set([\r\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\r\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\r\n])\r\n\r\nconst renderToStringImpl = (element) => {\r\n if (element == null || typeof element === 'boolean') {\r\n return ''\r\n }\r\n\r\n if (typeof element === 'string' || typeof element === 'number') {\r\n return escapeHtml(element)\r\n }\r\n\r\n if (Array.isArray(element)) {\r\n return element.map(child => renderToStringImpl(child)).join('')\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.TEXT_ELEMENT) {\r\n return escapeHtml(element.props.nodeValue)\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_FRAGMENT) {\r\n const children = element.props?.children || []\r\n return children.map(child => renderToStringImpl(child)).join('')\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_CONTEXT) {\r\n // Context Providers just render their children transparently on the server\r\n const state = getState()\r\n state.ssrContexts = state.ssrContexts || {}\r\n const ctxId = element.props?._contextId\r\n const prevCtx = state.ssrContexts[ctxId]\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = element.props?.value\r\n }\r\n\r\n const children = element.props?.children || []\r\n let result = ''\r\n if (Array.isArray(children)) {\r\n result = children.map(child => renderToStringImpl(child)).join('')\r\n } else {\r\n result = renderToStringImpl(children)\r\n }\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = prevCtx\r\n }\r\n\r\n return result\r\n }\r\n\r\n if (typeof element.type === 'function') {\r\n const type = element.type\r\n const props = element.props || {}\r\n const renderedElement = type(props)\r\n return renderToStringImpl(renderedElement)\r\n }\r\n\r\n // It's a standard host element\r\n const type = element.type\r\n const props = element.props || {}\r\n\r\n let attributes = ''\r\n let htmlChildren = ''\r\n let innerHTML = null\r\n\r\n Object.entries(props).forEach(([key, value]) => {\r\n if (key === 'children') {\r\n if (Array.isArray(value)) {\r\n htmlChildren = value.map(child => renderToStringImpl(child)).join('')\r\n } else {\r\n htmlChildren = renderToStringImpl(value)\r\n }\r\n } else if (key === 'dangerouslySetInnerHTML' && value?.__html) {\r\n innerHTML = value.__html\r\n } else if (key === STRINGS.STYLE || key === OLD_STRINGS.STYLE) {\r\n const styleString = renderStyle(value)\r\n if (styleString) {\r\n attributes += ` style=\"${escapeHtml(styleString)}\"`\r\n }\r\n } else if (key === STRINGS.CLASS_NAME || key === OLD_STRINGS.CLASS_NAME) {\r\n if (value) {\r\n attributes += ` class=\"${escapeHtml(value)}\"`\r\n }\r\n } else if (!key.startsWith('on')) { // Ignore event listeners\r\n if (typeof value === 'boolean') {\r\n if (value) attributes += ` ${key}=\"\"`\r\n } else if (value != null) {\r\n let attrName = toSvgAttrName(key)\r\n let validatedValue = validateUri(attrName, value)\r\n attributes += ` ${attrName}=\"${escapeHtml(validatedValue)}\"`\r\n }\r\n }\r\n })\r\n\r\n if (VOID_ELEMENTS.has(type)) {\r\n return `<${type}${attributes} />`\r\n }\r\n\r\n const finalContent = innerHTML !== null ? innerHTML : htmlChildren\r\n\r\n return `<${type}${attributes}>${finalContent}</${type}>`\r\n}\r\n\r\nconst RC_SCRIPT = `\r\nfunction $RC(id, templateId) {\r\n var b = document.getElementById(id);\r\n var t = document.getElementById(templateId);\r\n if (b && t) {\r\n b.innerHTML = t.innerHTML;\r\n t.remove();\r\n }\r\n}\r\n`.replace(/\\s+/g, ' ').trim()\r\n\r\nconst renderToStreamImpl = async (element, push, suspenseTasks = []) => {\r\n if (element == null || typeof element === 'boolean') {\r\n return\r\n }\r\n\r\n // Await the element if it's a promise (e.g. from an async Server Component directly rendered)\r\n if (element instanceof Promise) {\r\n element = await element;\r\n if (element == null || typeof element === 'boolean') return;\r\n }\r\n\r\n if (typeof element === 'string' || typeof element === 'number') {\r\n push(escapeHtml(element))\r\n return\r\n }\r\n\r\n if (Array.isArray(element)) {\r\n for (const child of element) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n return\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.TEXT_ELEMENT) {\r\n push(escapeHtml(element.props.nodeValue))\r\n return\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_FRAGMENT) {\r\n const children = element.props?.children || []\r\n for (const child of children) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n return\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_CONTEXT) {\r\n const state = getState()\r\n state.ssrContexts = state.ssrContexts || {}\r\n const ctxId = element.props?._contextId\r\n const prevCtx = state.ssrContexts[ctxId]\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = element.props?.value\r\n }\r\n\r\n const children = element.props?.children || []\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n } else {\r\n await renderToStreamImpl(children, push, suspenseTasks)\r\n }\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = prevCtx\r\n }\r\n\r\n return\r\n }\r\n\r\n // Handle Suspense specifically\r\n if (element.type === RYUNIX_TYPES.RYUNIX_SUSPENSE || element.type?.type === RYUNIX_TYPES.RYUNIX_SUSPENSE) {\r\n const { fallback, children } = element.props\r\n const id = `s-${Math.random().toString(36).slice(2, 9)}`\r\n\r\n // In universal mode, Suspense renders children if ready, or fallback if pending.\r\n // BUT we want to force a background task for the REAL children if we hit a lazy component.\r\n\r\n push(`<!--$?--><template id=\"B:${id}\"></template><div id=\"S:${id}\">`)\r\n\r\n // 1. Start rendering the actual content in the background\r\n const task = (async () => {\r\n const state = getState()\r\n const wasBackground = state.isSuspenseBackground\r\n state.isSuspenseBackground = true\r\n\r\n let content = ''\r\n const subPush = (chunk) => content += chunk\r\n try {\r\n await renderToStreamImpl(children, subPush, suspenseTasks)\r\n return { id, content, success: true }\r\n } catch (e) {\r\n return { id, content: '', success: false, error: e }\r\n } finally {\r\n state.isSuspenseBackground = wasBackground\r\n }\r\n })()\r\n\r\n suspenseTasks.push(task)\r\n\r\n // 2. Render fallback immediately for the main stream\r\n await renderToStreamImpl(fallback, push, suspenseTasks)\r\n push(`</div><!--$/-->`)\r\n return\r\n }\r\n\r\n let type = element.type\r\n let props = element.props || {}\r\n\r\n if (typeof type === 'function') {\r\n if (process.env.RYUNIX_DEBUG) {\r\n console.log('[SSR Debug] Rendering function:', type.name || 'anonymous');\r\n }\r\n const renderedElement = await type(props)\r\n await renderToStreamImpl(renderedElement, push, suspenseTasks)\r\n return\r\n }\r\n\r\n // It's a standard host element\r\n let attributes = ''\r\n let innerHTML = null\r\n let children = props.children || []\r\n\r\n Object.entries(props).forEach(([key, value]) => {\r\n if (key === 'children') {\r\n // Ignored here, handled below\r\n } else if (key === 'dangerouslySetInnerHTML' && value?.__html) {\r\n innerHTML = value.__html\r\n } else if (key === STRINGS.STYLE || key === OLD_STRINGS.STYLE) {\r\n const styleString = renderStyle(value)\r\n if (styleString) {\r\n attributes += ` style=\"${escapeHtml(styleString)}\"`\r\n }\r\n } else if (key === STRINGS.CLASS_NAME || key === OLD_STRINGS.CLASS_NAME) {\r\n if (value) {\r\n attributes += ` class=\"${escapeHtml(value)}\"`\r\n }\r\n } else if (!key.startsWith('on')) {\r\n if (typeof value === 'boolean') {\r\n if (value) attributes += ` ${key}=\"\"`\r\n } else if (value != null) {\r\n const attrName = toSvgAttrName(key)\r\n const validatedValue = validateUri(attrName, value)\r\n attributes += ` ${attrName}=\"${escapeHtml(validatedValue)}\"`\r\n }\r\n }\r\n })\r\n\r\n push(`<${type}${attributes}>`)\r\n\r\n if (innerHTML !== null) {\r\n push(innerHTML)\r\n } else {\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n } else {\r\n await renderToStreamImpl(children, push, suspenseTasks)\r\n }\r\n }\r\n\r\n if (!VOID_ELEMENTS.has(type)) {\r\n push(`</${type}>`)\r\n }\r\n}\r\n\r\nexport const renderToReadableStream = (element, options = {}) => {\r\n const state = getState()\r\n const encoder = new TextEncoder()\r\n\r\n return new ReadableStream({\r\n async start(controller) {\r\n const wasServerRendering = state.isServerRendering\r\n state.isServerRendering = true\r\n state.ssrMetadata = {}\r\n\r\n const push = (text) => controller.enqueue(encoder.encode(text))\r\n const suspenseTasks = []\r\n\r\n try {\r\n // 0. Inject RC helper script first\r\n const nonceAttr = options.nonce ? ` nonce=\"${options.nonce}\"` : ''\r\n push(`<script${nonceAttr}>${RC_SCRIPT}</script>`)\r\n\r\n // 1. Render initial tree (with fallbacks)\r\n await renderToStreamImpl(element, push, suspenseTasks)\r\n\r\n // 2. Process suspense tasks as they complete\r\n // For now, we wait for all, but in a real streaming scenario,\r\n // we could push them as they resolve.\r\n while (suspenseTasks.length > 0) {\r\n const task = suspenseTasks.shift()\r\n const res = await task\r\n if (res.success) {\r\n push(`<template id=\"P:${res.id}\">${res.content}</template>`)\r\n push(`<script${nonceAttr}>$RC(\"S:${res.id}\", \"P:${res.id}\")</script>`)\r\n }\r\n }\r\n\r\n controller.close()\r\n } catch (e) {\r\n controller.error(e)\r\n } finally {\r\n state.isServerRendering = wasServerRendering\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport const renderToString = (element, options = {}) => {\r\n const state = getState()\r\n const wasServerRendering = state.isServerRendering\r\n state.isServerRendering = true\r\n state.ssrMetadata = {}\r\n try {\r\n return renderToStringImpl(element)\r\n } finally {\r\n state.isServerRendering = wasServerRendering\r\n }\r\n}\r\n\r\nexport const renderToStringAsync = async (element, options = {}) => {\r\n const stream = renderToReadableStream(element, options);\r\n const reader = stream.getReader();\r\n const decoder = new TextDecoder();\r\n let result = '';\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n result += decoder.decode(value, { stream: true });\r\n }\r\n\r\n result += decoder.decode();\r\n return result;\r\n}\n","/**\r\n * memo - Memoize component to prevent unnecessary re-renders\r\n * @param {Function} Component - Component to memoize\r\n * @param {Function} [arePropsEqual] - Custom comparison function (defaults to shallowEqual)\r\n * @returns {Function} Memoized component\r\n */\r\nconst memo = (Component, arePropsEqual = shallowEqual) => {\r\n let prevProps = null\r\n let prevResult = null\r\n\r\n const MemoizedComponent = (props) => {\r\n if (prevProps && arePropsEqual(prevProps, props)) {\r\n return prevResult\r\n }\r\n prevProps = props\r\n prevResult = Component(props)\r\n return prevResult\r\n }\r\n\r\n MemoizedComponent.displayName = `Memo(${Component.displayName || Component.name || 'Component'})`\r\n return MemoizedComponent\r\n}\r\n\r\n/**\r\n * Custom comparison function for memo\r\n */\r\nconst shallowEqual = (prevProps, nextProps) => {\r\n const prevKeys = Object.keys(prevProps)\r\n const nextKeys = Object.keys(nextProps)\r\n\r\n if (prevKeys.length !== nextKeys.length) return false\r\n\r\n return prevKeys.every((key) => Object.is(prevProps[key], nextProps[key]))\r\n}\r\n\r\n/**\r\n * Deep comparison for complex objects\r\n */\r\nconst deepEqual = (a, b) => {\r\n if (a === b) return true\r\n if (a == null || b == null) return false\r\n if (typeof a !== 'object' || typeof b !== 'object') return false\r\n\r\n const keysA = Object.keys(a)\r\n const keysB = Object.keys(b)\r\n\r\n if (keysA.length !== keysB.length) return false\r\n\r\n return keysA.every((key) => deepEqual(a[key], b[key]))\r\n}\r\n\r\nexport { memo, shallowEqual, deepEqual }\r\n","import { RYUNIX_TYPES, getState } from '../utils/index.js'\r\nimport { createElement, Fragment } from './createElement.js'\r\nimport { useStore, useEffect } from './hooks.js'\r\n\r\n/**\r\n * Suspense status tracking\r\n */\r\nconst SUSPENSE_STATUS = {\r\n PENDING: 'pending',\r\n RESOLVED: 'resolved',\r\n REJECTED: 'rejected',\r\n}\r\n\r\n/**\r\n * Lazy load component with real Suspense integration.\r\n * The loaded module is cached so subsequent renders are synchronous.\r\n *\r\n * @param {Function} importFn - Function returning a dynamic import() promise\r\n * @returns {Function} A Ryunix component\r\n */\r\nconst lazy = (importFn) => {\r\n let status = SUSPENSE_STATUS.PENDING\r\n let Component = null\r\n let error = null\r\n let promise = null\r\n\r\n const LazyComponent = (props) => {\r\n // If already resolved, render synchronously\r\n if (status === SUSPENSE_STATUS.RESOLVED && Component) {\r\n return createElement(Component, props)\r\n }\r\n\r\n // If already errored, throw to nearest error boundary\r\n if (status === SUSPENSE_STATUS.REJECTED && error) {\r\n throw error\r\n }\r\n\r\n // Start loading if not already\r\n if (!promise) {\r\n promise = importFn()\r\n .then((module) => {\r\n Component = module.default || module\r\n status = SUSPENSE_STATUS.RESOLVED\r\n })\r\n .catch((err) => {\r\n error = err\r\n status = SUSPENSE_STATUS.REJECTED\r\n })\r\n }\r\n\r\n // Use useStore + useEffect to re-render when loading completes\r\n const [, forceUpdate] = useStore(0)\r\n\r\n useEffect(() => {\r\n if (status === SUSPENSE_STATUS.PENDING && promise) {\r\n let active = true\r\n promise.then(() => {\r\n if (active) forceUpdate((x) => x + 1)\r\n }).catch(() => {\r\n if (active) forceUpdate((x) => x + 1)\r\n })\r\n return () => { active = false }\r\n }\r\n }, [])\r\n\r\n // While pending, return null — Suspense will show fallback\r\n return null\r\n }\r\n\r\n // Mark as lazy for Suspense detection\r\n LazyComponent._isLazy = true\r\n LazyComponent._getStatus = () => status\r\n\r\n return LazyComponent\r\n}\r\n\r\n/**\r\n * Suspense component — shows a fallback while lazy children are loading.\r\n *\r\n * @param {Object} props\r\n * @param {*} props.fallback - Element to show while loading\r\n * @param {*} props.children - Lazy component(s)\r\n * @returns {*} Rendered element\r\n */\r\nconst Suspense = ({ fallback, children }) => {\r\n const [isLoaded, setIsLoaded] = useStore(false)\r\n\r\n // Check if any child is a lazy component still pending\r\n const childArray = Array.isArray(children) ? children : [children]\r\n let anyPending = false\r\n\r\n for (const child of childArray) {\r\n if (child && child.type && child.type._isLazy) {\r\n const status = child.type._getStatus()\r\n if (status === SUSPENSE_STATUS.PENDING) {\r\n anyPending = true\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!anyPending && !isLoaded) {\r\n setIsLoaded(true)\r\n }\r\n }, [anyPending])\r\n\r\n // Show fallback while any child is pending\r\n // On server background task, we want to render ACTUAL children to capture them\r\n if (anyPending && !getState().isSuspenseBackground) {\r\n return fallback || null\r\n }\r\n\r\n return createElement(Fragment, { children })\r\n}\r\n\r\nSuspense.type = RYUNIX_TYPES.RYUNIX_SUSPENSE\r\n\r\n/**\r\n * Preload component for prefetching — starts the import immediately\r\n * so it's cached when later rendered.\r\n *\r\n * @param {Function} importFn - Dynamic import function\r\n * @returns {Promise} The import promise\r\n */\r\nconst preload = (importFn) => {\r\n return importFn()\r\n}\r\n\r\nexport { lazy, Suspense, preload, SUSPENSE_STATUS }\r\n","/**\r\n * forwardRef - Allows parent components to pass a ref to a child component.\r\n *\r\n * Usage:\r\n * const MyInput = forwardRef((props, ref) => {\r\n * return createElement('input', { ...props, ref })\r\n * })\r\n *\r\n * @param {Function} render - A function component that receives (props, ref)\r\n * @returns {Function} A component that forwards refs\r\n */\r\nconst forwardRef = (render) => {\r\n if (typeof render !== 'function') {\r\n throw new Error('forwardRef requires a render function')\r\n }\r\n\r\n const ForwardRefComponent = (props) => {\r\n const { ref, ...restProps } = props || {}\r\n return render(restProps, ref || null)\r\n }\r\n\r\n ForwardRefComponent.displayName = `ForwardRef(${render.displayName || render.name || 'Component'})`\r\n ForwardRefComponent._isForwardRef = true\r\n ForwardRefComponent._render = render\r\n\r\n return ForwardRefComponent\r\n}\r\n\r\nexport { forwardRef }\r\n","import { createElement } from './createElement.js';\r\n\r\n/**\r\n * ServerBoundary is a special component used to wrap content that is rendered\r\n * exclusively on the server. During hydration, Ryunix will skip this node's\r\n * children, preserving the server-rendered HTML.\r\n */\r\nexport function ServerBoundary({ children, id }) {\r\n // On the client, this component just renders a container.\r\n // The children are already in the DOM from the server.\r\n return createElement('div', { 'data-ryunix-server': id, style: { display: 'contents' } }, children);\r\n}\r\n\r\nServerBoundary.ryunix_type = 'RYUNIX_SERVER_BOUNDARY';\r\n","import { createElement } from './createElement.js'\r\nimport { getState } from '../utils/index.js'\r\n\r\n/**\r\n * ErrorBoundary is a native Ryunix component that catches JavaScript errors anywhere in its child component tree,\r\n * logs those errors, and displays a fallback UI instead of the component tree that crashed.\r\n * \r\n * It hooks directly into the `performUnitOfWork` reconciler loop.\r\n */\r\nexport function ErrorBoundary({ children, fallback }) {\r\n const state = getState()\r\n \r\n // If the engine caught an error for this boundary, render the fallback\r\n if (state.wipFiber && state.wipFiber.stateError) {\r\n if (typeof fallback === 'function') {\r\n return fallback(state.wipFiber.stateError)\r\n }\r\n return fallback\r\n }\r\n\r\n // Otherwise render children normally\r\n return createElement('ryunix-error-boundary-wrapper', { style: { display: 'contents' } }, children)\r\n}\r\n\r\nErrorBoundary.ryunix_type = 'RYUNIX_ERROR_BOUNDARY'\r\n","export function createActionProxy(actionId) {\r\n return async function (...args) {\r\n const response = await fetch('/_ryunix/action', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Ryunix-Action': 'true',\r\n },\r\n body: JSON.stringify({ actionId, args }),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'Server Action failed');\r\n }\r\n\r\n return response.json();\r\n };\r\n}\r\n","import * as Ryunix from './lib/index.js'\r\n\r\nexport * from './lib/index.js'\r\nexport {\r\n Image,\r\n MDXContent,\r\n MDXProvider,\r\n useMDXComponents,\r\n getMDXComponents,\r\n defaultComponents,\r\n} from './lib/components.js'\r\nif (typeof window !== 'undefined') window.Ryunix = Ryunix;\r\nexport default Ryunix\r\n"],"names":["nextValidSibling","pendingUpdates","scheduleWork","validateHookCall"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Ryunix.esm.js","sources":["../src/utils/index.js","../src/lib/createElement.js","../src/lib/effects.js","../src/utils/svgAttributes.js","../src/lib/priority.js","../src/lib/dom.js","../src/lib/portal.js","../src/lib/commits.js","../src/lib/reconciler.js","../src/lib/bridge.js","../src/lib/batching.js","../src/lib/devtools.js","../src/lib/hooks.js","../src/lib/components.js","../src/lib/profiler.js","../src/lib/workers.js","../src/lib/render.js","../src/lib/server.js","../src/lib/memo.js","../src/lib/lazy.js","../src/lib/forwardRef.js","../src/lib/serverBoundary.js","../src/lib/errorBoundary.js","../src/lib/serverActions.js","../src/main.js"],"sourcesContent":["// Improved state management - avoid global mutable object\r\n// Instead, create a state manager that can be instantiated per render tree\r\n\r\nconst IS_BROWSER = typeof window !== 'undefined' && typeof document !== 'undefined'\r\n\r\nconst rIC =\r\n typeof requestIdleCallback !== 'undefined'\r\n ? requestIdleCallback\r\n : (cb) => setTimeout(() => cb({ timeRemaining: () => 1 }), 1)\r\n\r\nconst createRenderState = () => ({\r\n containerRoot: null,\r\n nextUnitOfWork: null,\r\n currentRoot: null,\r\n wipRoot: null,\r\n deletions: [],\r\n wipFiber: null,\r\n hookIndex: 0,\r\n effects: [],\r\n})\r\n\r\n// Singleton for backward compatibility, but allows testing with isolated instances\r\nlet globalState = createRenderState()\r\n\r\nconst getState = () => globalState\r\nconst resetState = () => {\r\n globalState = createRenderState()\r\n return globalState\r\n}\r\n\r\n// Use const for regex to prevent accidental modification\r\nconst CAMEL_TO_KEBAB_REGEX = /[A-Z]/g\r\n\r\nconst RYUNIX_TYPES = Object.freeze({\r\n TEXT_ELEMENT: Symbol.for('ryunix.text.element'),\r\n RYUNIX_ELEMENT: Symbol.for('ryunix.element'),\r\n RYUNIX_EFFECT: Symbol.for('ryunix.effect'),\r\n RYUNIX_MEMO: Symbol.for('ryunix.memo'),\r\n RYUNIX_URL_QUERY: Symbol.for('ryunix.urlQuery'),\r\n RYUNIX_REF: Symbol.for('ryunix.ref'),\r\n RYUNIX_STORE: Symbol.for('ryunix.store'),\r\n RYUNIX_REDUCE: Symbol.for('ryunix.reduce'),\r\n RYUNIX_FRAGMENT: Symbol.for('ryunix.fragment'),\r\n RYUNIX_CONTEXT: Symbol.for('ryunix.context'),\r\n RYUNIX_SUSPENSE: Symbol.for('ryunix.suspense'),\r\n})\r\n\r\nconst STRINGS = Object.freeze({\r\n OBJECT: 'object',\r\n FUNCTION: 'function',\r\n STYLE: 'ryunix-style',\r\n CLASS_NAME: 'ryunix-class',\r\n CHILDREN: 'children',\r\n BOOLEAN: 'boolean',\r\n STRING: 'string',\r\n UNDEFINED: 'undefined',\r\n})\r\n\r\nconst OLD_STRINGS = Object.freeze({\r\n STYLE: 'style',\r\n CLASS_NAME: 'className',\r\n})\r\n\r\nconst EFFECT_TAGS = Object.freeze({\r\n PLACEMENT: Symbol.for('ryunix.reconciler.status.placement'),\r\n UPDATE: Symbol.for('ryunix.reconciler.status.update'),\r\n DELETION: Symbol.for('ryunix.reconciler.status.deletion'),\r\n NO_EFFECT: Symbol.for('ryunix.reconciler.status.no_effect'),\r\n HYDRATE: Symbol.for('ryunix.reconciler.status.hydrate'),\r\n})\r\n\r\n/**\r\n * Generate a unique hash with optional prefix\r\n * @param {string} prefix - Optional prefix for the hash\r\n * @returns {string} Unique hash string\r\n */\r\nconst generateHash = (prefix = 'ryunix') => {\r\n const randomPart = Math.random().toString(36).substring(2, 11)\r\n const timestamp = Date.now().toString(36)\r\n return `${prefix}-${timestamp}-${randomPart}`\r\n}\r\n\r\n/**\r\n * Match a route pattern against a path\r\n * @param {string} pattern - Route pattern with :params\r\n * @param {string} path - URL path to match\r\n * @returns {Object|null} Params object or null if no match\r\n */\r\nconst matchPath = (pattern, path) => {\r\n if (!pattern || !path) return null\r\n\r\n // Wildcard matches everything\r\n if (pattern === '*') return {}\r\n\r\n const patternSegments = pattern.split('/').filter(Boolean)\r\n const pathSegments = path.split('/').filter(Boolean)\r\n\r\n // Different number of segments = no match\r\n if (patternSegments.length !== pathSegments.length) return null\r\n\r\n const params = {}\r\n\r\n for (let i = 0; i < patternSegments.length; i++) {\r\n const patternSeg = patternSegments[i]\r\n const pathSeg = pathSegments[i]\r\n\r\n if (patternSeg.startsWith(':')) {\r\n // Dynamic segment\r\n const paramName = patternSeg.slice(1)\r\n params[paramName] = decodeURIComponent(pathSeg)\r\n } else if (patternSeg !== pathSeg) {\r\n // Static segment doesn't match\r\n return null\r\n }\r\n }\r\n\r\n return params\r\n}\r\n\r\n/**\r\n * Parse query string into object\r\n * @param {string} search - Query string (with or without ?)\r\n * @returns {Object} Parsed query parameters\r\n */\r\nconst parseQuery = (search) => {\r\n if (!search) return {}\r\n\r\n // Remove leading ? if present\r\n const cleanSearch = search.startsWith('?') ? search.slice(1) : search\r\n\r\n if (!cleanSearch) return {}\r\n\r\n try {\r\n return Object.fromEntries(new URLSearchParams(cleanSearch))\r\n } catch (error) {\r\n console.warn('Failed to parse query string:', error)\r\n return {}\r\n }\r\n}\r\n\r\n/**\r\n * Deep equality check for hook dependencies\r\n * @param {Array} prevDeps - Previous dependencies\r\n * @param {Array} nextDeps - Next dependencies\r\n * @returns {boolean} Whether dependencies changed\r\n */\r\nconst haveDepsChanged = (prevDeps, nextDeps) => {\r\n if (!prevDeps || !nextDeps) return true\r\n if (prevDeps.length !== nextDeps.length) return true\r\n\r\n return prevDeps.some((dep, index) => !Object.is(dep, nextDeps[index]))\r\n}\r\n\r\n/**\r\n * Safe array flattening\r\n * @param {Array} arr - Array to flatten\r\n * @param {number} depth - Depth to flatten (default: 1)\r\n * @returns {Array} Flattened array\r\n */\r\nconst flattenArray = (arr, depth = 1) => {\r\n if (!Array.isArray(arr)) return [arr]\r\n if (depth < 1) return arr.slice()\r\n\r\n return arr.reduce((acc, val) => {\r\n if (Array.isArray(val) && depth > 0) {\r\n acc.push(...flattenArray(val, depth - 1))\r\n } else {\r\n acc.push(val)\r\n }\r\n return acc\r\n }, [])\r\n}\r\n\r\nconst is = {\r\n object: (val) => val !== null && typeof val === STRINGS.OBJECT,\r\n function: (val) => typeof val === STRINGS.FUNCTION,\r\n string: (val) => typeof val === STRINGS.STRING,\r\n undefined: (val) => typeof val === STRINGS.UNDEFINED,\r\n null: (val) => val === null,\r\n array: (val) => Array.isArray(val),\r\n promise: (val) => val instanceof Promise,\r\n}\r\n\r\nconst getTypeLabel = (type) => {\r\n if (typeof type === 'symbol') return type.description || type.toString()\r\n if (typeof type === 'function') return type.name || 'anonymous'\r\n return String(type)\r\n}\r\n\r\nconst nextValidSibling = (node) => {\r\n let next = node\r\n while (next && (next.nodeType === 3 && !next.nodeValue.trim() || next.nodeType === 8)) {\r\n next = next.nextSibling\r\n }\r\n return next\r\n}\r\n\r\nexport {\r\n getState,\r\n resetState,\r\n createRenderState,\r\n CAMEL_TO_KEBAB_REGEX,\r\n RYUNIX_TYPES,\r\n EFFECT_TAGS,\r\n STRINGS,\r\n OLD_STRINGS,\r\n generateHash,\r\n matchPath,\r\n parseQuery,\r\n haveDepsChanged,\r\n flattenArray,\r\n is,\r\n IS_BROWSER,\r\n rIC,\r\n nextValidSibling,\r\n getTypeLabel,\r\n}\r\n","import { RYUNIX_TYPES, STRINGS, is } from '../utils/index.js'\r\n\r\n/**\r\n * The `createTextElement` function creates a text element with the specified text content.\r\n * @param text - The `text` parameter in the `createTextElement` function is the text content that you\r\n * want to create a text element for. This text will be set as the `nodeValue` of the text element in\r\n * the returned object.\r\n * @returns A text element object is being returned with a type of RYUNIX_TYPES.TEXT_ELEMENT and props\r\n * containing the text value provided in the function argument.\r\n */\r\nconst createTextElement = (text) => {\r\n return {\r\n type: RYUNIX_TYPES.TEXT_ELEMENT,\r\n props: {\r\n nodeValue: text,\r\n children: [],\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * The `createElement` function creates a virtual DOM element with specified type, properties, and\r\n * children.\r\n * @param type - The `type` parameter in the `createElement` function represents the type of element\r\n * you want to create, such as a HTML tag like 'div', 'span', 'p', etc.\r\n * @param props - The `props` parameter in the `createElement` function is an object that contains the\r\n * properties or attributes for the element being created. These properties can include things like\r\n * class names, styles, event handlers, and any other custom attributes you want to assign to the\r\n * element. In the code snippet you provided,\r\n * @param children - The `children` parameter in the `createElement` function represents the child\r\n * elements or text content that will be nested within the created element. These children can be\r\n * passed as arguments to the `createElement` function and will be rendered as part of the element's\r\n * content.\r\n * @returns An object is being returned with a `type` property representing the type of element, and a\r\n * `props` property containing the element's properties. The `props` object includes the children of\r\n * the element, which are processed to ensure they are in the correct format.\r\n */\r\nconst createElement = (type, props, ...children) => {\r\n const safeProps = props || {}\r\n let rawChildren = children\r\n if (children.length === 0 && safeProps.children !== undefined) {\r\n rawChildren = Array.isArray(safeProps.children) ? safeProps.children : [safeProps.children]\r\n }\r\n\r\n rawChildren = rawChildren\r\n .flat()\r\n .filter((child) => child != null && child !== false && child !== true)\r\n\r\n const normalizedChildren = []\r\n let currentText = ''\r\n\r\n for (const child of rawChildren) {\r\n if (typeof child !== STRINGS.OBJECT) {\r\n currentText += String(child)\r\n } else {\r\n if (currentText !== '') {\r\n normalizedChildren.push(createTextElement(currentText))\r\n currentText = ''\r\n }\r\n normalizedChildren.push(child)\r\n }\r\n }\r\n\r\n if (currentText !== '') {\r\n normalizedChildren.push(createTextElement(currentText))\r\n }\r\n\r\n return {\r\n type,\r\n props: {\r\n ...safeProps,\r\n children: normalizedChildren,\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * The `Fragment` function in JavaScript creates a fragment element with the given children.\r\n * @param props - The `props` parameter in the `Fragment` function is an object that contains the\r\n * properties passed to the `Fragment` component. These properties can include `children`, which\r\n * represents the child elements or components nested within the `Fragment`.\r\n * @returns The `Fragment` component is returning a Ryunix fragment element created using the\r\n * `createElement` function. The element is of type `RYUNIX_TYPES.RYUNIX_FRAGMENT` and contains the\r\n * children passed to the `Fragment` component. If `props.children` is not an array, it is converted\r\n * into an array before being spread into the `createElement` function.\r\n */\r\nconst Fragment = (props) => {\r\n const children = Array.isArray(props.children)\r\n ? props.children\r\n : [props.children]\r\n return createElement(RYUNIX_TYPES.RYUNIX_FRAGMENT, {}, ...children)\r\n}\r\n\r\n/**\r\n * Clone element utility\r\n */\r\nconst cloneElement = (element, props = {}, ...children) => {\r\n if (!element || !is.object(element)) {\r\n throw new Error('cloneElement requires a valid element')\r\n }\r\n\r\n const newChildren = children.length > 0 ? children : element.props.children\r\n\r\n return createElement(\r\n element.type,\r\n { ...element.props, ...props },\r\n ...(Array.isArray(newChildren) ? newChildren : [newChildren]),\r\n )\r\n}\r\n\r\n/**\r\n * Check if valid element\r\n */\r\nconst isValidElement = (object) => {\r\n return (\r\n is.object(object) && object.type !== undefined && object.props !== undefined\r\n )\r\n}\r\n\r\nexport {\r\n createElement,\r\n createTextElement,\r\n Fragment,\r\n cloneElement,\r\n isValidElement,\r\n}\r\n","import { RYUNIX_TYPES, STRINGS, is } from '../utils/index.js'\r\n\r\n/**\r\n * Check if a key is an event handler\r\n * @param {string} key - Prop key\r\n * @returns {boolean}\r\n */\r\nconst isEvent = (key) => key.startsWith('on')\r\n\r\n/**\r\n * Check if a key is a property (not children or event)\r\n * @param {string} key - Prop key\r\n * @returns {boolean}\r\n */\r\nconst isProperty = (key) => key !== STRINGS.CHILDREN && !isEvent(key)\r\n\r\n/**\r\n * Check if a property is new or changed\r\n * @param {Object} prev - Previous props\r\n * @param {Object} next - Next props\r\n * @returns {Function}\r\n */\r\nconst isNew = (prev, next) => (key) => {\r\n // Use Object.is for better comparison (handles NaN, -0, +0)\r\n return !Object.is(prev[key], next[key])\r\n}\r\n\r\n/**\r\n * Check if a property was removed\r\n * @param {Object} next - Next props\r\n * @returns {Function}\r\n */\r\nconst isGone = (next) => (key) => !(key in next)\r\n\r\n/**\r\n * Check if dependencies array has changed\r\n * @param {Array} prevDeps - Previous dependencies\r\n * @param {Array} nextDeps - Next dependencies\r\n * @returns {boolean}\r\n */\r\nconst haveDepsChanged = (prevDeps, nextDeps) => {\r\n if (!prevDeps || !nextDeps) return true\r\n if (prevDeps.length !== nextDeps.length) return true\r\n return prevDeps.some((dep, index) => !Object.is(dep, nextDeps[index]))\r\n}\r\n\r\n/**\r\n * Cancel effects for a single fiber\r\n * @param {Object} fiber - Fiber node\r\n */\r\nconst cancelEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n fiber.hooks\r\n .filter(\r\n (hook) =>\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT && is.function(hook.cancel),\r\n )\r\n .forEach((hook) => {\r\n try {\r\n hook.cancel()\r\n hook.cancel = null // Clear reference to prevent memory leaks\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect cleanup:', error)\r\n }\r\n }\r\n })\r\n}\r\n\r\n/**\r\n * Recursively cancel effects in fiber tree\r\n * @param {Object} fiber - Root fiber node\r\n */\r\nconst cancelEffectsDeep = (fiber) => {\r\n if (!fiber) return\r\n\r\n // Cancel effects for current fiber\r\n if (fiber.hooks?.length > 0) {\r\n fiber.hooks\r\n .filter(\r\n (hook) =>\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT && is.function(hook.cancel),\r\n )\r\n .forEach((hook) => {\r\n try {\r\n hook.cancel()\r\n hook.cancel = null // Clear reference\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in deep effect cleanup:', error)\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Recursively process children\r\n if (fiber.child) cancelEffectsDeep(fiber.child)\r\n if (fiber.sibling) cancelEffectsDeep(fiber.sibling)\r\n}\r\n\r\n/**\r\n * Run effects for a fiber\r\n * @param {Object} fiber - Fiber node\r\n */\r\nconst runEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n for (let i = 0; i < fiber.hooks.length; i++) {\r\n const hook = fiber.hooks[i]\r\n\r\n if (hook.type === RYUNIX_TYPES.RYUNIX_EFFECT && is.function(hook.effect)) {\r\n // Cancel previous cleanup if exists\r\n if (is.function(hook.cancel)) {\r\n try {\r\n hook.cancel()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect cleanup:', error)\r\n }\r\n }\r\n }\r\n\r\n // Run new effect\r\n try {\r\n const cleanup = hook.effect()\r\n\r\n // Store cleanup function if returned\r\n if (is.function(cleanup)) {\r\n hook.cancel = cleanup\r\n } else {\r\n hook.cancel = null\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect:', error)\r\n }\r\n hook.cancel = null\r\n }\r\n\r\n // Clear effect reference after running\r\n hook.effect = null\r\n }\r\n }\r\n}\r\n\r\nlet isBatchingEffects = false\r\nlet pendingEffectCallbacks = []\r\n\r\n/**\r\n * Batch multiple effect operations for performance.\r\n * Effects queued during the batch are flushed together after the callback completes.\r\n * @param {Function} callback - Callback containing effect operations\r\n */\r\nconst batchEffects = (callback) => {\r\n const wasBatching = isBatchingEffects\r\n isBatchingEffects = true\r\n\r\n try {\r\n callback()\r\n } finally {\r\n isBatchingEffects = wasBatching\r\n\r\n if (!isBatchingEffects && pendingEffectCallbacks.length > 0) {\r\n const effects = pendingEffectCallbacks\r\n pendingEffectCallbacks = []\r\n effects.forEach((fn) => {\r\n try {\r\n fn()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in batched effect:', error)\r\n }\r\n }\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Queue an effect to be run. If we're inside a batch, it's deferred.\r\n * @param {Function} fn - Effect function\r\n */\r\nconst queueEffect = (fn) => {\r\n if (isBatchingEffects) {\r\n pendingEffectCallbacks.push(fn)\r\n } else {\r\n fn()\r\n }\r\n}\r\n\r\nexport {\r\n runEffects,\r\n cancelEffects,\r\n cancelEffectsDeep,\r\n isEvent,\r\n isProperty,\r\n isNew,\r\n isGone,\r\n haveDepsChanged,\r\n batchEffects,\r\n queueEffect,\r\n}\r\n","/**\r\n * SVG attribute name mapping: camelCase → kebab-case\r\n * Centralized to avoid duplication across dom.js and server.js\r\n */\r\nconst SVG_ATTR_MAP = {\r\n strokeWidth: 'stroke-width',\r\n strokeLinecap: 'stroke-linecap',\r\n strokeLinejoin: 'stroke-linejoin',\r\n strokeDasharray: 'stroke-dasharray',\r\n strokeDashoffset: 'stroke-dashoffset',\r\n strokeMiterlimit: 'stroke-miterlimit',\r\n strokeOpacity: 'stroke-opacity',\r\n fillRule: 'fill-rule',\r\n fillOpacity: 'fill-opacity',\r\n clipRule: 'clip-rule',\r\n clipPath: 'clip-path',\r\n fontFamily: 'font-family',\r\n fontSize: 'font-size',\r\n fontWeight: 'font-weight',\r\n textAnchor: 'text-anchor',\r\n textDecoration: 'text-decoration',\r\n dominantBaseline: 'dominant-baseline',\r\n alignmentBaseline: 'alignment-baseline',\r\n baselineShift: 'baseline-shift',\r\n stopColor: 'stop-color',\r\n stopOpacity: 'stop-opacity',\r\n floodColor: 'flood-color',\r\n floodOpacity: 'flood-opacity',\r\n lightingColor: 'lighting-color',\r\n colorInterpolation: 'color-interpolation',\r\n colorInterpolationFilters: 'color-interpolation-filters',\r\n pointerEvents: 'pointer-events',\r\n shapeRendering: 'shape-rendering',\r\n imageRendering: 'image-rendering',\r\n markerStart: 'marker-start',\r\n markerMid: 'marker-mid',\r\n markerEnd: 'marker-end',\r\n}\r\n\r\n/**\r\n * Convert a camelCase SVG attribute name to its kebab-case equivalent.\r\n * Returns the original name if no mapping exists.\r\n * @param {string} name - camelCase attribute name\r\n * @returns {string} kebab-case attribute name\r\n */\r\nconst toSvgAttrName = (name) => SVG_ATTR_MAP[name] || name\r\n\r\nexport { SVG_ATTR_MAP, toSvgAttrName }\r\n","/**\r\n * Priority levels for updates\r\n */\r\nconst Priority = {\r\n IMMEDIATE: 1, // User input (clicks, typing)\r\n USER_BLOCKING: 2, // Hover, scroll\r\n NORMAL: 3, // Data fetching\r\n LOW: 4, // Analytics\r\n IDLE: 5, // Background tasks\r\n}\r\n\r\nimport { rIC } from '../utils/index.js'\r\n\r\nlet currentPriority = Priority.NORMAL\r\nlet pendingUpdates = []\r\nlet isScheduling = false\r\n\r\n/**\r\n * Schedule update with priority\r\n */\r\nconst scheduleUpdate = (callback, priority = Priority.NORMAL) => {\r\n pendingUpdates.push({ callback, priority, timestamp: Date.now() })\r\n\r\n if (!isScheduling) {\r\n isScheduling = true\r\n rIC(processPendingUpdates)\r\n }\r\n}\r\n\r\n/**\r\n * Process updates by priority\r\n */\r\nconst processPendingUpdates = (deadline) => {\r\n pendingUpdates.sort((a, b) => a.priority - b.priority)\r\n\r\n while (pendingUpdates.length > 0 && deadline.timeRemaining() > 1) {\r\n const update = pendingUpdates.shift()\r\n currentPriority = update.priority\r\n update.callback()\r\n }\r\n\r\n if (pendingUpdates.length > 0) {\r\n rIC(processPendingUpdates)\r\n } else {\r\n isScheduling = false\r\n currentPriority = Priority.NORMAL\r\n }\r\n}\r\n\r\n/**\r\n * Run callback with specific priority\r\n */\r\nconst runWithPriority = (priority, callback) => {\r\n const previousPriority = currentPriority\r\n currentPriority = priority\r\n\r\n try {\r\n return callback()\r\n } finally {\r\n currentPriority = previousPriority\r\n }\r\n}\r\n\r\n/**\r\n * Get current priority\r\n */\r\nconst getCurrentPriority = () => currentPriority\r\n\r\n/**\r\n * Wrap setState with priority\r\n */\r\nconst createPriorityDispatch = (dispatch) => {\r\n return (action, priority = currentPriority) => {\r\n scheduleUpdate(() => dispatch(action), priority)\r\n }\r\n}\r\n\r\nexport {\r\n Priority,\r\n scheduleUpdate,\r\n runWithPriority,\r\n getCurrentPriority,\r\n createPriorityDispatch,\r\n}\r\n","import { isEvent, isGone, isNew, isProperty } from './effects.js'\r\nimport {\r\n RYUNIX_TYPES,\r\n STRINGS,\r\n OLD_STRINGS,\r\n CAMEL_TO_KEBAB_REGEX,\r\n is,\r\n} from '../utils/index.js'\r\nimport { toSvgAttrName } from '../utils/svgAttributes.js'\r\nimport { Priority, runWithPriority } from './priority.js'\r\n\r\n/**\r\n * Convert camelCase to kebab-case for CSS properties\r\n * @param {string} camelCase - CamelCase string\r\n * @returns {string} Kebab-case string\r\n */\r\nconst camelToKebab = (camelCase) => {\r\n return camelCase.replace(\r\n CAMEL_TO_KEBAB_REGEX,\r\n (match) => `-${match.toLowerCase()}`,\r\n )\r\n}\r\n\r\n/**\r\n * Apply styles to DOM element\r\n * @param {HTMLElement} dom - DOM element\r\n * @param {Object} styleObj - Style object\r\n */\r\nconst applyStyles = (dom, styleObj) => {\r\n if (!is.object(styleObj) || is.null(styleObj)) {\r\n dom.style.cssText = ''\r\n return\r\n }\r\n\r\n try {\r\n const cssText = Object.entries(styleObj)\r\n .filter(([_, value]) => value != null) // Filter out null/undefined\r\n .map(([key, value]) => {\r\n const kebabKey = camelToKebab(key)\r\n return `${kebabKey}: ${value}`\r\n })\r\n .join('; ')\r\n\r\n dom.style.cssText = cssText\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error applying styles:', error)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply CSS classes to DOM element\r\n * @param {HTMLElement} dom - DOM element\r\n * @param {string} prevClasses - Previous class string\r\n * @param {string} nextClasses - Next class string\r\n */\r\nconst applyClasses = (dom, prevClasses, nextClasses) => {\r\n // Allow empty/undefined - just remove classes\r\n if (!nextClasses || nextClasses.trim() === '') {\r\n if (prevClasses) {\r\n const oldClasses = prevClasses.split(/\\s+/).filter(Boolean)\r\n dom.classList.remove(...oldClasses)\r\n }\r\n return\r\n }\r\n\r\n // Remove old classes\r\n if (prevClasses) {\r\n const oldClasses = prevClasses.split(/\\s+/).filter(Boolean)\r\n dom.classList.remove(...oldClasses)\r\n }\r\n\r\n // Add new classes\r\n const newClasses = nextClasses.split(/\\s+/).filter(Boolean)\r\n if (newClasses.length > 0) {\r\n dom.classList.add(...newClasses)\r\n }\r\n}\r\n\r\n/**\r\n * Create a DOM element from fiber\r\n * @param {Object} fiber - Fiber node\r\n * @returns {HTMLElement|Text|null}\r\n */\r\nconst createDom = (fiber) => {\r\n // Fragments and Context Providers don't create real DOM nodes\r\n if (\r\n fiber.type === RYUNIX_TYPES.RYUNIX_FRAGMENT ||\r\n fiber.type === RYUNIX_TYPES.RYUNIX_CONTEXT ||\r\n fiber.type === Symbol.for('ryunix.portal')\r\n ) {\r\n return null\r\n }\r\n\r\n let dom\r\n\r\n try {\r\n if (fiber.type === RYUNIX_TYPES.TEXT_ELEMENT) {\r\n dom = document.createTextNode('')\r\n } else if (is.string(fiber.type)) {\r\n const isSvg = [\r\n 'svg', 'path', 'g', 'circle', 'polygon', 'rect', 'line', 'polyline',\r\n 'ellipse', 'text', 'tspan', 'defs', 'use', 'symbol', 'mask',\r\n 'clipPath', 'linearGradient', 'radialGradient', 'stop', 'filter',\r\n 'feGaussianBlur', 'feOffset', 'feMerge', 'feMergeNode', 'feBlend',\r\n 'feColorMatrix', 'feComposite', 'foreignObject', 'image', 'marker',\r\n 'pattern', 'textPath',\r\n ].includes(fiber.type)\r\n\r\n if (isSvg) {\r\n dom = document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\r\n } else {\r\n dom = document.createElement(fiber.type)\r\n }\r\n } else {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n 'Attempted to create DOM for non-host component:',\r\n fiber.type,\r\n )\r\n }\r\n return null\r\n }\r\n\r\n updateDom(dom, {}, fiber.props)\r\n return dom\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error creating DOM element:', error, fiber)\r\n }\r\n return null\r\n }\r\n}\r\n\r\nexport const validateUri = (name, value) => {\r\n if (typeof value !== 'string') return value\r\n const attr = name.toLowerCase()\r\n if (attr !== 'href' && attr !== 'src' && attr !== 'action' && attr !== 'formaction') {\r\n return value\r\n }\r\n\r\n const normalized = value.replace(/\\s+/g, '').toLowerCase()\r\n if (\r\n normalized.startsWith('javascript:') ||\r\n normalized.startsWith('vbscript:') ||\r\n normalized.startsWith('data:')\r\n ) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(`[Ryunix Security] Blocked dangerous ${name} URI: ${value}`)\r\n }\r\n return 'javascript:void(0)'\r\n }\r\n\r\n return value\r\n}\r\n\r\n/**\r\n * Update DOM element with new props\r\n * @param {HTMLElement|Text} dom - DOM element\r\n * @param {Object} prevProps - Previous props\r\n * @param {Object} nextProps - Next props\r\n */\r\nconst updateDom = (dom, prevProps = {}, nextProps = {}) => {\r\n if (dom.nodeType === 3) {\r\n if (prevProps.nodeValue !== nextProps.nodeValue) {\r\n dom.nodeValue = nextProps.nodeValue\r\n }\r\n return\r\n }\r\n // Remove old event listeners\r\n Object.keys(prevProps)\r\n .filter(isEvent)\r\n .filter((key) => isGone(nextProps)(key) || isNew(prevProps, nextProps)(key))\r\n .forEach((name) => {\r\n const eventType = name.toLowerCase().substring(2)\r\n try {\r\n const originalHandler = prevProps[name]\r\n const wrappedHandler = dom._ryunixHandlers?.get(originalHandler) || originalHandler\r\n dom.removeEventListener(eventType, wrappedHandler)\r\n if (dom._ryunixHandlers) {\r\n dom._ryunixHandlers.delete(originalHandler)\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Error removing event listener:', error)\r\n }\r\n }\r\n })\r\n\r\n\r\n // Remove old properties\r\n Object.keys(prevProps)\r\n .filter(isProperty)\r\n .filter(isGone(nextProps))\r\n .forEach((name) => {\r\n // Skip special properties\r\n if (\r\n [\r\n STRINGS.STYLE,\r\n OLD_STRINGS.STYLE,\r\n STRINGS.CLASS_NAME,\r\n OLD_STRINGS.CLASS_NAME,\r\n ].includes(name)\r\n ) {\r\n return\r\n }\r\n if (dom instanceof SVGElement) {\r\n const attrName = toSvgAttrName(name)\r\n dom.removeAttribute(attrName)\r\n } else {\r\n dom[name] = ''\r\n dom.removeAttribute(name)\r\n }\r\n })\r\n\r\n // Set new properties\r\n Object.keys(nextProps)\r\n .filter(isProperty)\r\n .filter(isNew(prevProps, nextProps))\r\n .forEach((name) => {\r\n try {\r\n // Handle style properties\r\n if (name === STRINGS.STYLE || name === OLD_STRINGS.STYLE) {\r\n const styleValue = nextProps[name]\r\n applyStyles(dom, styleValue)\r\n }\r\n // Handle className properties\r\n else if (name === STRINGS.CLASS_NAME) {\r\n applyClasses(\r\n dom,\r\n prevProps[STRINGS.CLASS_NAME],\r\n nextProps[STRINGS.CLASS_NAME],\r\n )\r\n } else if (name === OLD_STRINGS.CLASS_NAME) {\r\n applyClasses(\r\n dom,\r\n prevProps[OLD_STRINGS.CLASS_NAME],\r\n nextProps[OLD_STRINGS.CLASS_NAME],\r\n )\r\n }\r\n // Handle other properties\r\n else {\r\n // Special handling for value and checked (controlled components)\r\n if (name === 'value' || name === 'checked') {\r\n if (dom[name] !== nextProps[name]) {\r\n dom[name] = nextProps[name]\r\n }\r\n } else {\r\n const isSvgNode = dom instanceof SVGElement\r\n if (isSvgNode) {\r\n const attrName = toSvgAttrName(name)\r\n const validatedValue = validateUri(attrName, nextProps[name])\r\n // viewBox is case sensitive, we respect the camelCase for it.\r\n dom.setAttribute(attrName, validatedValue)\r\n } else {\r\n const validatedValue = validateUri(name, nextProps[name])\r\n dom[name] = validatedValue\r\n // Best effort: set html attributes if it's not a primitive component property\r\n if (typeof nextProps[name] !== 'object' && typeof nextProps[name] !== 'function') {\r\n dom.setAttribute(name, validatedValue)\r\n }\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(`Error setting property ${name}:`, error)\r\n }\r\n }\r\n })\r\n\r\n // Add new event listeners\r\n Object.keys(nextProps)\r\n .filter(isEvent)\r\n .filter(isNew(prevProps, nextProps))\r\n .forEach((name) => {\r\n const eventType = name.toLowerCase().substring(2)\r\n try {\r\n const handler = (e) => {\r\n runWithPriority(Priority.IMMEDIATE, () => nextProps[name](e))\r\n }\r\n // Store the wrapped handler so it can be removed later\r\n // Note: For simplicity, we could also just wrap it on the fly, \r\n // but we need the exact reference for removeEventListener.\r\n // Actually, the current removeDom logic uses prevProps[name], \r\n // which won't work if we wrap it here and don't store it.\r\n // Wait, the current removeEventListener call in dom.js:177 is:\r\n // dom.removeEventListener(eventType, prevProps[name])\r\n // If we wrap it, we MUST store the wrapper.\r\n \r\n // Let's use a weakMap or a property on the DOM node to store the wrappers.\r\n if (!dom._ryunixHandlers) dom._ryunixHandlers = new Map()\r\n dom._ryunixHandlers.set(nextProps[name], handler)\r\n \r\n dom.addEventListener(eventType, handler)\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('Error adding event listener:', error)\r\n }\r\n }\r\n })\r\n}\r\n\r\n\r\n/**\r\n * Remove DOM element safely\r\n * @param {HTMLElement} dom - DOM element to remove\r\n */\r\nconst removeDom = (dom) => {\r\n try {\r\n if (dom && dom.parentNode) {\r\n dom.parentNode.removeChild(dom)\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error removing DOM element:', error)\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Clear all children from a DOM element\r\n * @param {HTMLElement} container - DOM element to clear\r\n */\r\nconst clearContainer = (container) => {\r\n if (!container) return\r\n while (container.firstChild) {\r\n container.removeChild(container.firstChild)\r\n }\r\n}\r\n\r\nexport {\r\n createDom,\r\n updateDom,\r\n applyStyles,\r\n applyClasses,\r\n removeDom,\r\n camelToKebab,\r\n clearContainer,\r\n}\r\n","/**\r\n * Portal type marker\r\n */\r\nconst RYUNIX_PORTAL = Symbol.for('ryunix.portal')\r\n\r\n/**\r\n * createPortal - Renders children into a different DOM container,\r\n * outside the normal parent hierarchy (e.g., for modals, tooltips, dropdowns).\r\n *\r\n * Usage:\r\n * const Modal = ({ children }) => {\r\n * return createPortal(\r\n * createElement('div', { className: 'modal' }, children),\r\n * document.getElementById('modal-root')\r\n * )\r\n * }\r\n *\r\n * @param {Object} children - Element(s) to render\r\n * @param {HTMLElement} container - DOM container to render into\r\n * @returns {Object} Portal element\r\n */\r\nconst createPortal = (children, container) => {\r\n if (!container) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('createPortal: target container is not a DOM element.')\r\n }\r\n return null\r\n }\r\n\r\n return {\r\n type: RYUNIX_PORTAL,\r\n props: {\r\n children: Array.isArray(children) ? children : [children],\r\n },\r\n containerInfo: container,\r\n _isPortal: true,\r\n }\r\n}\r\n\r\nexport { createPortal, RYUNIX_PORTAL }\r\n","import { updateDom } from './dom.js'\r\nimport { cancelEffects, cancelEffectsDeep } from './effects.js'\r\nimport { EFFECT_TAGS, RYUNIX_TYPES, getState, is } from '../utils/index.js'\r\nimport { RYUNIX_PORTAL } from './portal.js'\r\n\r\n/**\r\n * Run layout effects (useLayoutEffect) synchronously during commit.\r\n * These run after DOM mutations but before the browser paints.\r\n */\r\nconst runLayoutEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n for (let i = 0; i < fiber.hooks.length; i++) {\r\n const hook = fiber.hooks[i]\r\n\r\n if (\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT &&\r\n hook.isLayout &&\r\n is.function(hook.effect)\r\n ) {\r\n // Cancel previous layout cleanup if exists\r\n if (is.function(hook.cancel)) {\r\n try {\r\n hook.cancel()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in layout effect cleanup:', error)\r\n }\r\n }\r\n }\r\n\r\n // Run new layout effect synchronously\r\n try {\r\n const cleanup = hook.effect()\r\n hook.cancel = is.function(cleanup) ? cleanup : null\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in layout effect:', error)\r\n }\r\n hook.cancel = null\r\n }\r\n\r\n hook.effect = null\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Run normal (non-layout) effects asynchronously after paint.\r\n */\r\nconst runNormalEffects = (fiber) => {\r\n if (!fiber?.hooks?.length) return\r\n\r\n for (let i = 0; i < fiber.hooks.length; i++) {\r\n const hook = fiber.hooks[i]\r\n\r\n if (\r\n hook.type === RYUNIX_TYPES.RYUNIX_EFFECT &&\r\n !hook.isLayout &&\r\n is.function(hook.effect)\r\n ) {\r\n // Cancel previous cleanup if exists\r\n if (is.function(hook.cancel)) {\r\n try {\r\n hook.cancel()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect cleanup:', error)\r\n }\r\n }\r\n }\r\n\r\n // Run new effect\r\n try {\r\n const cleanup = hook.effect()\r\n hook.cancel = is.function(cleanup) ? cleanup : null\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in effect:', error)\r\n }\r\n hook.cancel = null\r\n }\r\n\r\n hook.effect = null\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The `commitRoot` function commits the changes made to the virtual DOM by updating the actual DOM.\r\n */\r\nfunction commitRoot() {\r\n const state = getState()\r\n state.deletions.forEach(commitWork)\r\n\r\n const finishedWork = state.wipRoot\r\n\r\n // Swap the currentRoot pointer BEFORE running effects\r\n // This allows dispatches inside effects to base their new work on the just-finished tree\r\n state.currentRoot = finishedWork\r\n\r\n // After hydration is done, reset the flag and cleanup unconsumed nodes\r\n if (state.isHydrating || state.hydrationFailed) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] commitRoot - isHydrating: ${state.isHydrating}, hydrationFailed: ${state.hydrationFailed}`);\r\n }\r\n if (state.hydrationFailed) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Hydration failed. Clearing container.');\r\n }\r\n const container = state.containerRoot || finishedWork.dom\r\n if (container) {\r\n container.textContent = ''\r\n }\r\n } else {\r\n // If there is a cursor left, it means these are SSR nodes that weren't matched\r\n // by any client fiber. We must remove them to avoid duplication.\r\n let cursor = state.hydrateCursor\r\n if (cursor && process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Removing unmatched root siblings.');\r\n }\r\n while (cursor) {\r\n const next = cursor.nextSibling\r\n if (cursor.parentNode) {\r\n cursor.parentNode.removeChild(cursor)\r\n }\r\n cursor = next\r\n }\r\n }\r\n\r\n state.isHydrating = false\r\n state.hydrationFailed = false\r\n state.hydrateCursor = null\r\n }\r\n\r\n\r\n commitWork(finishedWork.child)\r\n\r\n // If wipRoot was not reassigned by a synchronous dispatch during effects, clear it\r\n if (state.wipRoot === finishedWork) {\r\n state.wipRoot = null\r\n }\r\n}\r\n\r\nfunction commitWork(fiber) {\r\n if (!fiber) {\r\n return\r\n }\r\n\r\n // Handle portal fibers — they render into a different container\r\n if (fiber.type === RYUNIX_PORTAL || fiber._isPortal) {\r\n const portalContainer = fiber.containerInfo\r\n if (portalContainer) {\r\n // Process portal children into the portal container\r\n const portalFiber = fiber.child\r\n if (portalFiber) {\r\n commitPortalWork(portalFiber, portalContainer)\r\n }\r\n }\r\n commitWork(fiber.sibling)\r\n return\r\n }\r\n\r\n let domParentFiber = fiber.parent\r\n while (domParentFiber && !domParentFiber.dom) {\r\n domParentFiber = domParentFiber.parent\r\n }\r\n\r\n if (!domParentFiber) {\r\n return\r\n }\r\n\r\n const domParent = domParentFiber.dom\r\n\r\n if (fiber.effectTag === EFFECT_TAGS.PLACEMENT) {\r\n if (fiber.dom != null) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Appending PLACEMENT:', fiber.type);\r\n }\r\n domParent.appendChild(fiber.dom)\r\n }\r\n // Layout effects run synchronously during commit\r\n runLayoutEffects(fiber)\r\n // Normal effects run after paint\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.UPDATE) {\r\n cancelEffects(fiber)\r\n if (fiber.dom != null) {\r\n updateDom(fiber.dom, fiber.alternate.props, fiber.props)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.HYDRATE) {\r\n const state = getState()\r\n if (state.hydrationFailed) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Hydration fallback PLACEMENT:', fiber.type);\r\n }\r\n // Since container is cleared on fallback, treat as normal placement\r\n // No need to check fiber.dom.parentNode !== domParent because the container was cleared.\r\n if (fiber.dom != null) {\r\n domParent.appendChild(fiber.dom)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log('[Ryunix Debug] Hydrating node:', fiber.type);\r\n }\r\n if (fiber.dom != null) {\r\n updateDom(fiber.dom, {}, fiber.props)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n }\r\n } else if (fiber.effectTag === EFFECT_TAGS.DELETION) {\r\n // Run cleanups BEFORE removing DOM to allow cleanup functions to read DOM state\r\n cancelEffectsDeep(fiber)\r\n commitDeletion(fiber, domParent)\r\n return\r\n }\r\n\r\n commitWork(fiber.child)\r\n commitWork(fiber.sibling)\r\n}\r\n\r\n/**\r\n * Commit work for portal children into a specific container\r\n */\r\nconst commitPortalWork = (fiber, portalContainer) => {\r\n if (!fiber) return\r\n\r\n if (fiber.effectTag === EFFECT_TAGS.PLACEMENT) {\r\n if (fiber.dom != null) {\r\n portalContainer.appendChild(fiber.dom)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.UPDATE) {\r\n cancelEffects(fiber)\r\n if (fiber.dom != null) {\r\n updateDom(fiber.dom, fiber.alternate.props, fiber.props)\r\n }\r\n runLayoutEffects(fiber)\r\n runNormalEffects(fiber)\r\n } else if (fiber.effectTag === EFFECT_TAGS.DELETION) {\r\n cancelEffectsDeep(fiber)\r\n commitDeletion(fiber, portalContainer)\r\n return\r\n }\r\n\r\n commitPortalWork(fiber.child, portalContainer)\r\n commitPortalWork(fiber.sibling, portalContainer)\r\n}\r\n\r\nconst commitDeletion = (fiber, domParent) => {\r\n if (fiber.dom) {\r\n if (fiber.dom.parentNode) {\r\n fiber.dom.parentNode.removeChild(fiber.dom)\r\n }\r\n } else {\r\n let child = fiber.child\r\n while (child) {\r\n commitDeletion(child, domParent)\r\n child = child.sibling\r\n }\r\n }\r\n}\r\n\r\nexport { commitDeletion, commitWork, commitRoot }\r\n","import { EFFECT_TAGS, getState } from '../utils/index.js'\r\n\r\n/**\r\n * Reconcile children with key optimization\r\n */\r\nconst reconcileChildren = (wipFiber, elements) => {\r\n const state = getState()\r\n let index = 0\r\n let prevSibling\r\n let isFirstChild = true\r\n\r\n // Build map of old fibers by key/index\r\n const oldFiberMap = new Map()\r\n let oldFiber = wipFiber.alternate?.child\r\n let position = 0\r\n\r\n while (oldFiber) {\r\n const key = oldFiber.key ?? `__index_${oldFiber.index ?? position}__`\r\n oldFiberMap.set(key, oldFiber)\r\n oldFiber = oldFiber.sibling\r\n position++\r\n }\r\n\r\n // Process new elements\r\n while (index < elements.length) {\r\n const element = elements[index]\r\n if (!element) {\r\n index++\r\n continue\r\n }\r\n\r\n const key = element.key ?? `__index_${index}__`\r\n const matchedFiber = oldFiberMap.get(key)\r\n\r\n let newFiber\r\n const sameType = matchedFiber && element.type === matchedFiber.type\r\n\r\n if (sameType) {\r\n // Update existing fiber\r\n newFiber = {\r\n type: matchedFiber.type,\r\n props: element.props,\r\n dom: matchedFiber.dom,\r\n parent: wipFiber,\r\n alternate: matchedFiber,\r\n effectTag: EFFECT_TAGS.UPDATE,\r\n hooks: matchedFiber.hooks,\r\n key: element.key,\r\n index,\r\n }\r\n oldFiberMap.delete(key)\r\n } else {\r\n // Create new fiber\r\n newFiber = {\r\n type: element.type,\r\n props: element.props,\r\n dom: null,\r\n parent: wipFiber,\r\n alternate: null,\r\n effectTag: state.isHydrating ? EFFECT_TAGS.HYDRATE : EFFECT_TAGS.PLACEMENT,\r\n key: element.key,\r\n index,\r\n }\r\n\r\n // Mark matched fiber for deletion if exists\r\n if (matchedFiber) {\r\n matchedFiber.effectTag = EFFECT_TAGS.DELETION\r\n state.deletions.push(matchedFiber)\r\n oldFiberMap.delete(key)\r\n }\r\n }\r\n\r\n // Link fibers\r\n if (isFirstChild) {\r\n wipFiber.child = newFiber\r\n isFirstChild = false\r\n } else if (newFiber) {\r\n prevSibling.sibling = newFiber\r\n }\r\n\r\n prevSibling = newFiber\r\n index++\r\n }\r\n\r\n // Delete remaining old fibers\r\n oldFiberMap.forEach((fiber) => {\r\n fiber.effectTag = EFFECT_TAGS.DELETION\r\n state.deletions.push(fiber)\r\n })\r\n}\r\n\r\nexport { reconcileChildren }\r\n","/**\r\n * Bridge module to break circular dependencies between hooks and workers.\r\n */\r\nlet scheduleWorkFn = null;\r\n\r\nexport const setScheduleWork = (fn) => {\r\n scheduleWorkFn = fn;\r\n};\r\n\r\nexport const scheduleWork = (root, priority) => {\r\n if (scheduleWorkFn) {\r\n return scheduleWorkFn(root, priority);\r\n }\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('[Ryunix] scheduleWork called before being initialized.');\r\n }\r\n};\r\n","let isBatching = false\r\nlet pendingUpdates = []\r\n\r\n/**\r\n * The `batchUpdates` function in JavaScript allows for batching multiple updates and flushing them all\r\n * at once.\r\n * @param callback - The `callback` parameter in the `batchUpdates` function is a function that will be\r\n * executed within a batch update. This function can contain multiple updates that need to be processed\r\n * together in a batch to improve performance and avoid unnecessary re-renders.\r\n */\r\nconst batchUpdates = (callback) => {\r\n const wasBatching = isBatching\r\n isBatching = true\r\n\r\n try {\r\n callback()\r\n } finally {\r\n isBatching = wasBatching\r\n\r\n if (!isBatching && pendingUpdates.length > 0) {\r\n flushUpdates()\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * The `queueUpdate` function adds an update to a queue and flushes the updates if not currently\r\n * batching.\r\n * @param update - The `update` parameter is the new update that needs to be added to the queue for\r\n * processing.\r\n */\r\nconst queueUpdate = (update) => {\r\n pendingUpdates.push(update)\r\n\r\n if (!isBatching) {\r\n flushUpdates()\r\n }\r\n}\r\n\r\n/**\r\n * The `flushUpdates` function processes and executes pending updates stored in an array.\r\n * @returns If the `pendingUpdates` array is empty, the `flushUpdates` function will return nothing\r\n * (undefined).\r\n */\r\nconst flushUpdates = () => {\r\n if (pendingUpdates.length === 0) return\r\n\r\n const updates = pendingUpdates\r\n pendingUpdates = []\r\n\r\n // Execute all updates\r\n updates.forEach((update) => update())\r\n}\r\n\r\nexport { batchUpdates, queueUpdate, flushUpdates }\r\n","import { getState } from '../utils/index.js'\r\n\r\n/**\r\n * Development warnings\r\n */\r\nconst isDevelopment = process.env.NODE_ENV !== 'production'\r\n\r\nconst warning = (condition, message) => {\r\n if (!isDevelopment) return\r\n if (condition) return\r\n console.warn(`[Ryunix Warning] ${message}`)\r\n}\r\n\r\nconst error = (message) => {\r\n if (!isDevelopment) return\r\n console.error(`[Ryunix Error] ${message}`)\r\n}\r\n\r\n/**\r\n * Component name detection\r\n */\r\nconst getComponentName = (component) => {\r\n if (!component) return 'Unknown'\r\n return component.displayName || component.name || 'Anonymous'\r\n}\r\n\r\n/**\r\n * Hook call validation\r\n */\r\nconst validateHookContext = (hookName = 'A hook') => {\r\n const state = getState()\r\n if (!state.wipFiber) {\r\n throw new Error(\r\n `${hookName} can only be called inside function components. ` +\r\n 'Make sure you are calling hooks at the top level of your component.',\r\n )\r\n }\r\n if (!Array.isArray(state.wipFiber.hooks)) {\r\n state.wipFiber.hooks = []\r\n }\r\n}\r\n\r\n/**\r\n * Performance tracking utilities\r\n */\r\nconst perfTracker = {\r\n marks: new Map(),\r\n\r\n mark(name) {\r\n if (!isDevelopment) return\r\n this.marks.set(name, Date.now())\r\n },\r\n\r\n measure(name, startMark) {\r\n if (!isDevelopment) return\r\n const start = this.marks.get(startMark)\r\n if (!start) return\r\n\r\n const duration = Date.now() - start\r\n console.log(`[Ryunix Performance] ${name}: ${duration}ms`)\r\n },\r\n\r\n clear() {\r\n this.marks.clear()\r\n },\r\n}\r\n\r\n/**\r\n * Deprecation warnings\r\n */\r\nconst deprecated = (oldAPI, newAPI, version) => {\r\n if (!isDevelopment) return\r\n console.warn(\r\n `[Ryunix Deprecated] ${oldAPI} is deprecated and will be removed in version ${version}. ` +\r\n `Use ${newAPI} instead.`,\r\n )\r\n}\r\n\r\nexport {\r\n warning,\r\n error,\r\n getComponentName,\r\n validateHookContext,\r\n perfTracker,\r\n deprecated,\r\n}\r\n","import { RYUNIX_TYPES, getState, is, flattenArray } from '../utils/index.js'\r\nimport { createElement, Fragment } from './createElement.js'\r\nimport { scheduleWork } from './bridge.js'\r\nimport { Priority, scheduleUpdate, runWithPriority, getCurrentPriority } from './priority.js'\r\nimport { RYUNIX_PORTAL } from './portal.js'\r\nimport { queueUpdate } from './batching.js'\r\nimport { validateHookContext as validateHookCall } from './devtools.js'\r\n\r\n\r\nconst haveDepsChanged = (oldDeps, newDeps) => {\r\n if (!oldDeps || !newDeps) return true\r\n if (oldDeps.length !== newDeps.length) return true\r\n return oldDeps.some((dep, i) => !Object.is(dep, newDeps[i]))\r\n}\r\n\r\nconst useStore = (initialState, priority = getCurrentPriority()) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return [is.function(initialState) ? initialState() : initialState, () => { }]\r\n }\r\n\r\n const reducer = (state, action) =>\r\n is.function(action) ? action(state) : action\r\n return useReducer(reducer, initialState, undefined, priority)\r\n}\r\n\r\n\r\nconst useReducer = (reducer, initialState, init, defaultPriority = getCurrentPriority()) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return [init ? init(initialState) : initialState, () => { }]\r\n }\r\n\r\n validateHookCall()\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_STORE,\r\n state: oldHook ? oldHook.state : init ? init(initialState) : initialState,\r\n queue: [],\r\n }\r\n\r\n if (oldHook?.queue) {\r\n oldHook.queue.forEach((action) => {\r\n try {\r\n hook.state = reducer(hook.state, action)\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in reducer:', error)\r\n }\r\n }\r\n })\r\n }\r\n\r\n const dispatch = (action, priority = defaultPriority) => {\r\n if (action === undefined) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn('dispatch called with undefined action')\r\n }\r\n return\r\n }\r\n\r\n hook.queue.push(action)\r\n\r\n const currentState = getState()\r\n const activeRoot = currentState.currentRoot || currentState.wipRoot\r\n\r\n if (!activeRoot) return\r\n\r\n currentState.wipRoot = {\r\n dom: activeRoot.dom,\r\n props: activeRoot.props,\r\n alternate: currentState.currentRoot || null,\r\n }\r\n currentState.deletions = []\r\n currentState.hookIndex = 0\r\n queueUpdate(() => scheduleWork(currentState.wipRoot, priority))\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return [hook.state, dispatch]\r\n}\r\n\r\n\r\n/**\r\n * The `useEffect` function in JavaScript is used to manage side effects in functional components by\r\n * comparing dependencies and executing a callback function when dependencies change.\r\n * @param callback - The `callback` parameter in the `useEffect` function is a function that will be\r\n * executed as the effect. This function can perform side effects like data fetching, subscriptions, or\r\n * DOM manipulations.\r\n * @param deps - The `deps` parameter in the `useEffect` function stands for dependencies. It is an\r\n * optional array that contains values that the effect depends on. The effect will only re-run if any\r\n * of the values in the `deps` array have changed since the last render. If the `deps` array\r\n */\r\nconst useEffect = (callback, deps) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return\r\n }\r\n\r\n validateHookCall()\r\n\r\n if (!is.function(callback)) {\r\n throw new Error('useEffect callback must be a function')\r\n }\r\n if (deps !== undefined && !Array.isArray(deps)) {\r\n throw new Error('useEffect dependencies must be an array or undefined')\r\n }\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n const hasChanged = haveDepsChanged(oldHook?.deps, deps)\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_EFFECT,\r\n deps,\r\n effect: hasChanged ? callback : null,\r\n cancel: oldHook?.cancel,\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n}\r\n\r\n/**\r\n * The useRef function in JavaScript creates a reference object with an initial value for use in functional components.\r\n * @param initialValue - The `initialValue` parameter in the `useRef` function represents the initial\r\n * value that will be assigned to the `current` property of the reference object. This initial value\r\n * will be used if there is no previous value stored in the hook.\r\n * @returns The `useRef` function is returning the `current` property of the `hook.value` object, which\r\n * contains the initial value passed to the `useRef` function.\r\n */\r\nconst useRef = (initialValue) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return { current: initialValue }\r\n }\r\n\r\n validateHookCall()\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_REF,\r\n value: oldHook ? oldHook.value : { current: initialValue },\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return hook.value\r\n}\r\n\r\n/**\r\n * The useMemo function in JavaScript is used to memoize the result of a computation based on\r\n * dependencies.\r\n * @param compute - The `compute` parameter in the `useMemo` function is a callback function that\r\n * calculates the value that `useMemo` will memoize and return. This function will be called to compute\r\n * the memoized value when necessary.\r\n * @param deps - The `deps` parameter in the `useMemo` function refers to an array of dependencies.\r\n * These dependencies are used to determine whether the memoized value needs to be recalculated or if\r\n * the previously calculated value can be reused. The `useMemo` hook will recompute the memoized value\r\n * only if\r\n * @returns The `useMemo` function is returning the `value` calculated by the `compute` function.\r\n */\r\nconst useMemo = (compute, deps) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return compute()\r\n }\r\n\r\n validateHookCall()\r\n\r\n if (!is.function(compute)) {\r\n throw new Error('useMemo callback must be a function')\r\n }\r\n if (!Array.isArray(deps)) {\r\n throw new Error('useMemo requires a dependencies array')\r\n }\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n let value\r\n if (oldHook && !haveDepsChanged(oldHook.deps, deps)) {\r\n value = oldHook.value\r\n } else {\r\n try {\r\n value = compute()\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Error in useMemo computation:', error)\r\n }\r\n throw error\r\n }\r\n }\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_MEMO,\r\n value,\r\n deps,\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return value\r\n}\r\n\r\n/**\r\n * The useCallback function in JavaScript ensures that a callback function is memoized based on its\r\n * dependencies.\r\n * @param callback - A function that you want to memoize and return for later use.\r\n * @param deps - The `deps` parameter in the `useCallback` function refers to an array of dependencies.\r\n * These dependencies are used to determine when the callback function should be re-evaluated and\r\n * memoized. If any of the dependencies change, the callback function will be re-executed and the\r\n * memoized value will\r\n * @returns The useCallback function is returning the memoized version of the callback function passed\r\n * as the first argument, based on the dependencies array provided as the second argument.\r\n */\r\nconst useCallback = (callback, deps) => {\r\n if (!is.function(callback)) {\r\n throw new Error('useCallback requires a function as first argument')\r\n }\r\n return useMemo(() => callback, deps)\r\n}\r\n\r\n/**\r\n * The createContext function creates a context provider and useContext hook in JavaScript.\r\n * @param [contextId] - The `contextId` parameter in the `createContext` function is used to specify\r\n * the unique identifier for the context being created. It defaults to `RYUNIX_TYPES.RYUNIX_CONTEXT` if\r\n * not provided.\r\n * @param [defaultValue] - The `defaultValue` parameter in the `createContext` function is used to\r\n * specify the default value that will be returned by the `useContext` hook if no provider is found in\r\n * the component tree. It is an optional parameter, and if not provided, an empty object `{}` will be\r\n * used as\r\n * @returns The `createContext` function returns an object with two properties: `Provider` and\r\n * `useContext`. The `Provider` property is a component that accepts `children` and `value` props, and\r\n * sets the `_contextId` and `_contextValue` properties on the element. The `useContext` property is a\r\n * hook function that retrieves the context value based on the context ID provided, or\r\n */\r\nconst createContext = (\r\n contextId = RYUNIX_TYPES.RYUNIX_CONTEXT,\r\n defaultValue = {},\r\n) => {\r\n const Provider = ({ value, children }) => {\r\n return createElement(\r\n RYUNIX_TYPES.RYUNIX_CONTEXT,\r\n { value, children, _contextId: contextId },\r\n ...flattenArray([children])\r\n )\r\n }\r\n\r\n Provider._contextId = contextId\r\n\r\n const useContext = (ctxID = contextId) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return (state.ssrContexts && state.ssrContexts[ctxID] !== undefined)\r\n ? state.ssrContexts[ctxID]\r\n : defaultValue\r\n }\r\n\r\n validateHookCall()\r\n\r\n let fiber = state.wipFiber\r\n\r\n while (fiber) {\r\n if (fiber._contextId === ctxID && fiber._contextValue !== undefined) {\r\n return fiber._contextValue\r\n }\r\n if (\r\n fiber.type?._contextId === ctxID &&\r\n fiber.props?.value !== undefined\r\n ) {\r\n return fiber.props.value\r\n }\r\n fiber = fiber.parent\r\n }\r\n return defaultValue\r\n }\r\n\r\n return { Provider, useContext }\r\n}\r\n\r\n/**\r\n * The `useQuery` function extracts query parameters from the URL in a browser environment.\r\n * @returns An object containing the query parameters from the current URL is being returned.\r\n */\r\nconst useQuery = () => {\r\n if (typeof window === 'undefined') return {}\r\n\r\n const searchParams = new URLSearchParams(window.location.search)\r\n const query = {}\r\n for (const [key, value] of searchParams.entries()) {\r\n query[key] = value\r\n }\r\n return query\r\n}\r\n\r\n/**\r\n * The function `useHash` in JavaScript is used to manage and update the hash portion of the URL in a\r\n * web application.\r\n * @returns The `useHash` function returns the current hash value from the window's location. If the\r\n * window is undefined (e.g., in a server-side environment), it returns an empty string. The function\r\n * also sets up an event listener to update the hash value when the hash in the URL changes and removes\r\n * the event listener when the component unmounts.\r\n */\r\nconst useHash = () => {\r\n if (typeof window === 'undefined') return ''\r\n\r\n const [hash, setHash] = useStore(window.location.hash)\r\n useEffect(() => {\r\n const onHashChange = () => setHash(window.location.hash)\r\n window.addEventListener('hashchange', onHashChange)\r\n return () => window.removeEventListener('hashchange', onHashChange)\r\n }, [])\r\n return hash\r\n}\r\n\r\n/**\r\n * The `useMetadata` function in JavaScript is used to dynamically update metadata tags in the document\r\n * head based on provided tags and options.\r\n * @param [tags] - The `tags` parameter in the `useMetadata` function is an object that contains\r\n * metadata information for the webpage. It can include properties like `pageTitle`, `canonical`, and\r\n * other custom metadata tags like `og:title`, `og:description`, `twitter:title`,\r\n * `twitter:description`, etc. These tags\r\n * @param [options] - The `options` parameter in the `useMetadata` function is an object that can\r\n * contain the following properties:\r\n * - `title`: An object that can have the following properties:\r\n * - `template`: A string that defines the template for the page title. It can include a placeholder\r\n * `%s` that will be replaced with the actual page title.\r\n * - `prefix`: A string that will be used as the default title if no specific page title is provided.\r\n * @returns The `useMetadata` function does not return anything. It is a custom hook that updates the\r\n * document's metadata (such as title and meta tags) based on the provided `tags` and `options` whenever\r\n * they change.\r\n * This hook can't be reached by google crawler.\r\n */\r\n\r\nconst useMetadata = (tags = {}, options = {}) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n state.ssrMetadata = { ...state.ssrMetadata, ...tags }\r\n return\r\n }\r\n\r\n useEffect(() => {\r\n if (typeof document === 'undefined') return\r\n // ...\r\n\r\n let finalTitle = 'Ryunix App'\r\n const template = options.title?.template\r\n const defaultTitle = options.title?.prefix || 'Ryunix App'\r\n const pageTitle = tags.pageTitle || tags.title\r\n\r\n if (is.string(pageTitle) && pageTitle.trim()) {\r\n finalTitle = template?.includes('%s')\r\n ? template.replace('%s', pageTitle)\r\n : pageTitle\r\n } else {\r\n finalTitle = defaultTitle\r\n }\r\n\r\n document.title = finalTitle\r\n\r\n if (tags.canonical) {\r\n let link = document.querySelector('link[rel=\"canonical\"]')\r\n if (!link) {\r\n link = document.createElement('link')\r\n link.setAttribute('rel', 'canonical')\r\n document.head.appendChild(link)\r\n }\r\n link.setAttribute('href', tags.canonical)\r\n }\r\n\r\n Object.entries(tags).forEach(([key, value]) => {\r\n if (['title', 'pageTitle', 'canonical'].includes(key)) return\r\n\r\n const isProperty = key.startsWith('og:') || key.startsWith('twitter:')\r\n const selector = `meta[${isProperty ? 'property' : 'name'}='${key}']`\r\n let meta = document.head.querySelector(selector)\r\n\r\n if (!meta) {\r\n meta = document.createElement('meta')\r\n meta.setAttribute(isProperty ? 'property' : 'name', key)\r\n document.head.appendChild(meta)\r\n }\r\n meta.setAttribute('content', value)\r\n })\r\n }, [JSON.stringify(tags), JSON.stringify(options)])\r\n}\r\n\r\n// Router Context\r\nconst RouterContext = createContext('ryunix.navigation', {\r\n location: '/',\r\n params: {},\r\n query: {},\r\n navigate: (path) => {},\r\n route: null,\r\n})\r\n\r\nconst findRoute = (routes, path) => {\r\n const pathname = path.split('?')[0].split('#')[0]\r\n const notFoundRoute = routes.find((route) => route.NotFound)\r\n const notFound = notFoundRoute\r\n ? { route: { component: notFoundRoute.NotFound }, params: {} }\r\n : { route: { component: null }, params: {} }\r\n\r\n for (const route of routes) {\r\n if (route.subRoutes) {\r\n const childRoute = findRoute(route.subRoutes, path)\r\n if (childRoute) return childRoute\r\n }\r\n if (route.path === '*') return notFound\r\n if (!route.path || typeof route.path !== 'string') continue\r\n\r\n const keys = []\r\n const pattern = new RegExp(\r\n `^${route.path.replace(/:(\\.\\.\\.)?(\\w+)/g, (match, isCatchAll, key) => {\r\n keys.push({ key, isCatchAll: !!isCatchAll })\r\n return isCatchAll ? '(.+)' : '([^/]+)'\r\n })}$`,\r\n )\r\n\r\n const matchPath = pathname.match(pattern)\r\n if (matchPath) {\r\n const params = keys.reduce((acc, keyObj, index) => {\r\n const val = matchPath[index + 1]\r\n acc[keyObj.key] = keyObj.isCatchAll && val ? val.split('/') : val\r\n return acc\r\n }, {})\r\n return { route, params }\r\n }\r\n }\r\n return notFound\r\n}\r\n\r\n/**\r\n * The `RouterProvider` component manages routing in a Ryunix application by updating the location based\r\n * on window events and providing context for the current route.\r\n * @returns The `RouterProvider` component is returning a `RouterContext.Provider` component with a\r\n * `value` prop set to `contextValue`, and wrapping the `children` within a `Fragment`.\r\n */\r\nconst RouterProvider = ({ routes, children }) => {\r\n const [location, setLocation] = useStore(\r\n typeof window !== 'undefined' ? window.location.pathname : '/'\r\n )\r\n\r\n useEffect(() => {\r\n const update = () => setLocation(window.location.pathname)\r\n window.addEventListener('popstate', update)\r\n window.addEventListener('hashchange', update)\r\n return () => {\r\n window.removeEventListener('popstate', update)\r\n window.removeEventListener('hashchange', update)\r\n }\r\n }, [])\r\n\r\n const navigate = (path) => {\r\n if (typeof window !== 'undefined' && window.__RYUNIX_MPA__) {\r\n window.location.assign(path)\r\n return\r\n }\r\n window.history.pushState({}, '', path)\r\n setLocation(path)\r\n }\r\n\r\n const currentRouteData = findRoute(routes, location) || {}\r\n const query = useQuery()\r\n\r\n const contextValue = {\r\n location,\r\n params: currentRouteData.params || {},\r\n query,\r\n navigate,\r\n route: currentRouteData.route,\r\n }\r\n\r\n return createElement(\r\n RouterContext.Provider,\r\n { value: contextValue },\r\n Fragment({ children }),\r\n )\r\n}\r\n\r\n/**\r\n * The function `useRouter` returns the context of the Router for navigation in a Ryunix application.\r\n * @returns The `useRouter` function is returning the result of calling\r\n * `RouterContext.useContext('ryunix.navigation')`. This function is likely attempting to retrieve the\r\n * navigation context from the RouterContext.\r\n */\r\nconst useRouter = () => {\r\n return RouterContext.useContext('ryunix.navigation')\r\n}\r\n\r\n/**\r\n * The `Children` function in JavaScript uses router hooks to handle scrolling to a specific element\r\n * based on the hash in the URL.\r\n * @returns The `Children` component is returning the result of calling `createElement` with\r\n * `route.component` as the first argument and an object with `key`, `params`, `query`, and `hash`\r\n * properties as the second argument. The `key` property is set to `location`, and the `params`,\r\n * `query`, and `hash` properties are passed as values from the component's props.\r\n */\r\nconst Children = () => {\r\n const { route, params, query, location } = useRouter()\r\n if (!route || !route.component) return null\r\n const hash = useHash()\r\n\r\n useEffect(() => {\r\n if (hash) {\r\n const id = hash.slice(1)\r\n const el = document.getElementById(id)\r\n if (el) el.scrollIntoView({ block: 'start', behavior: 'smooth' })\r\n }\r\n }, [hash])\r\n\r\n return createElement(route.component, {\r\n key: location,\r\n params,\r\n query,\r\n hash,\r\n location,\r\n })\r\n}\r\n\r\n/**\r\n * usePathname - Returns the current pathname\r\n */\r\nconst usePathname = () => {\r\n const { location } = useRouter()\r\n return location.split('?')[0].split('#')[0]\r\n}\r\n\r\n/**\r\n * useSearchParams - Returns the current URLSearchParams object\r\n */\r\nconst useSearchParams = () => {\r\n const { query } = useRouter()\r\n return new URLSearchParams(query)\r\n}\r\n\r\n/**\r\n * Link - Base link component for SPA navigation\r\n * Supports optional prefetching of lazy components.\r\n */\r\nconst Link = ({ to, prefetch = true, ...props }) => {\r\n const { navigate } = useRouter()\r\n\r\n const handleClick = (e) => {\r\n if (e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) {\r\n return\r\n }\r\n\r\n e.preventDefault()\r\n navigate(to)\r\n }\r\n\r\n const handleMouseEnter = () => {\r\n if (prefetch && typeof window !== 'undefined') {\r\n // Logic for prefetching could go here if route component is known\r\n }\r\n }\r\n\r\n const { className: _omitClassName, ...cleanedProps } = props\r\n\r\n return createElement(\r\n 'a',\r\n {\r\n href: to,\r\n onClick: handleClick,\r\n onMouseEnter: handleMouseEnter,\r\n className: props.className || props['ryunix-class'],\r\n ...cleanedProps,\r\n },\r\n props.children,\r\n )\r\n}\r\n\r\n/**\r\n * The NavLink function in JavaScript is a component that generates a link element with customizable\r\n * classes and active state based on the current location.\r\n * @returns The `NavLink` component is returning a JSX element representing an anchor (`<a>`) tag with\r\n * the following attributes and properties:\r\n */\r\nconst NavLink = ({ to, exact = false, ...props }) => {\r\n const { location, navigate } = useRouter()\r\n const isActive = exact ? location === to : location.startsWith(to)\r\n\r\n const resolveClass = (cls) =>\r\n typeof cls === 'function' ? cls({ isActive }) : cls || ''\r\n\r\n const handleClick = (e) => {\r\n if (e.button !== 0 || e.metaKey || e.altKey || e.ctrlKey || e.shiftKey) {\r\n return\r\n }\r\n e.preventDefault()\r\n navigate(to)\r\n }\r\n\r\n const classAttrName = props['ryunix-class'] ? 'ryunix-class' : 'className'\r\n const classAttrValue = resolveClass(\r\n props['ryunix-class'] || props['className'],\r\n )\r\n\r\n const {\r\n ['ryunix-class']: _omitRyunix,\r\n className: _omitClassName,\r\n ...cleanedProps\r\n } = props\r\n\r\n return createElement(\r\n 'a',\r\n {\r\n href: to,\r\n onClick: handleClick,\r\n [classAttrName]: classAttrValue,\r\n ...cleanedProps,\r\n },\r\n props.children,\r\n )\r\n}\r\n\r\n/**\r\n * useStore with priority support\r\n */\r\nconst useStorePriority = (initialState) => {\r\n const reducer = (state, action) =>\r\n typeof action === 'function' ? action.value(state) : action.value\r\n\r\n const [state, baseDispatch] = useReducer(reducer, initialState)\r\n\r\n const dispatch = (action, priority = Priority.NORMAL) => {\r\n const wrappedAction = {\r\n value: action,\r\n priority,\r\n }\r\n\r\n scheduleUpdate(() => baseDispatch(wrappedAction, priority), priority)\r\n }\r\n\r\n return [state, dispatch]\r\n}\r\n\r\n/**\r\n * useTransition - Mark updates as non-urgent\r\n */\r\nconst useTransition = () => {\r\n const [isPending, setIsPending] = useStorePriority(false)\r\n\r\n const startTransition = (callback) => {\r\n setIsPending(true, Priority.IMMEDIATE)\r\n\r\n setTimeout(() => {\r\n runWithPriority(Priority.LOW, () => {\r\n callback()\r\n setIsPending(false, Priority.LOW)\r\n })\r\n }, 0)\r\n }\r\n\r\n return [isPending, startTransition]\r\n}\r\n\r\n/**\r\n * useDeferredValue - Defer value updates\r\n */\r\nconst useDeferredValue = (value) => {\r\n const [deferredValue, setDeferredValue] = useStorePriority(value)\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => {\r\n setDeferredValue(value, Priority.LOW)\r\n }, 100)\r\n\r\n return () => clearTimeout(timeout)\r\n }, [value])\r\n\r\n return deferredValue\r\n}\r\n\r\n/**\r\n * The `usePersitentStore` function manages state using local storage in JavaScript, allowing for easy\r\n * storage and retrieval of data.\r\n * @param key - The `key` parameter in the `usePersitentStore` function is a string that represents the key\r\n * under which the data will be stored in the browser's local storage. It is used to retrieve and store\r\n * data associated with this specific key.\r\n * @param [initialState] - The `initialState` parameter in the `usePersitentStore` function is the initial\r\n * value that will be used if there is no data stored in the local storage under the specified `key`.\r\n * It serves as the default value for the state if no data is retrieved from the local storage.\r\n * @returns The `usePersitentStore` function returns an array containing two elements:\r\n * 1. The current state value retrieved from local storage or the initial state if not found.\r\n * 2. The `setValue` function that updates the state value and stores it in the local storage as a JSON\r\n * string.\r\n */\r\nconst usePersistentStore = (key, initialState = '') => {\r\n const [state, dispatch] = useStore(() => {\r\n try {\r\n const item = window.localStorage.getItem(key)\r\n return item ? JSON.parse(item) : initialState\r\n } catch (error) {\r\n return initialState\r\n }\r\n })\r\n\r\n /**\r\n * The function `setValue` dispatches a value and stores it in the local storage as a JSON string,\r\n * handling any errors with a console log.\r\n * @param value - The `value` parameter in the `setValue` function is the data that you want to set.\r\n * It is dispatched to update the state and then stored in the browser's local storage after being\r\n * converted to a JSON string.\r\n */\r\n const setValue = (value) => {\r\n try {\r\n dispatch(value)\r\n window.localStorage.setItem(key, JSON.stringify(value))\r\n } catch (error) {\r\n console.error(error)\r\n }\r\n }\r\n\r\n return [state, setValue]\r\n}\r\n\r\n/**\r\n * The `useSwitch` function returns a state value and a toggle function to switch the state between\r\n * true and false.\r\n * @param [initialState=false] - The `initialState` parameter in the `useSwitch` function is used to\r\n * set the initial value of the state. If no value is provided when calling `useSwitch`, the default\r\n * initial state will be `false`.\r\n * @returns An array containing the current state value and a function `toggle` that toggles the state\r\n * value.\r\n */\r\nconst useSwitch = (initialState = false) => {\r\n const [state, dispatch] = useStore(initialState)\r\n\r\n /**\r\n * The function `toggle` toggles the state by dispatching the opposite value of the current state.\r\n * Uses functional update to avoid stale closure issues with rapid calls.\r\n */\r\n const toggle = () => {\r\n dispatch((prev) => !prev)\r\n }\r\n\r\n return [state, toggle]\r\n}\r\n\r\n/**\r\n * useLayoutEffect - Like useEffect but runs synchronously after DOM mutations\r\n * and before the browser paints. Use for DOM measurements.\r\n * @param {Function} callback - Effect callback\r\n * @param {Array} deps - Dependencies array\r\n */\r\nconst useLayoutEffect = (callback, deps) => {\r\n const state = getState()\r\n if (state.isServerRendering) {\r\n return\r\n }\r\n\r\n validateHookCall()\r\n\r\n if (!is.function(callback)) {\r\n throw new Error('useLayoutEffect callback must be a function')\r\n }\r\n if (deps !== undefined && !Array.isArray(deps)) {\r\n throw new Error('useLayoutEffect dependencies must be an array or undefined')\r\n }\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n const hasChanged = haveDepsChanged(oldHook?.deps, deps)\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_EFFECT,\r\n deps,\r\n effect: hasChanged ? callback : null,\r\n cancel: oldHook?.cancel,\r\n isLayout: true, // Flag to run synchronously during commit\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n}\r\n\r\n// Counter for deterministic ID generation\r\nlet idCounter = 0\r\n\r\n/**\r\n * useId - Generate a deterministic, unique ID that is stable across SSR and hydration.\r\n * @returns {string} A unique ID string\r\n */\r\nconst useId = () => {\r\n const state = getState()\r\n\r\n if (state.isServerRendering) {\r\n // On server, use a simple incrementing counter (reset per renderToString call)\r\n return `:r${idCounter++}:`\r\n }\r\n\r\n validateHookCall()\r\n\r\n const { wipFiber, hookIndex } = state\r\n const oldHook = wipFiber.alternate?.hooks?.[hookIndex]\r\n\r\n const hook = {\r\n hookID: hookIndex,\r\n type: RYUNIX_TYPES.RYUNIX_REF,\r\n value: oldHook ? oldHook.value : `:r${idCounter++}:`,\r\n }\r\n\r\n wipFiber.hooks[hookIndex] = hook\r\n state.hookIndex++\r\n return hook.value\r\n}\r\n\r\n/**\r\n * useDebounce - Returns a debounced version of the value that only updates\r\n * after the specified delay has passed since the last change.\r\n * @param {*} value - Value to debounce\r\n * @param {number} delay - Delay in milliseconds (default: 300)\r\n * @returns {*} Debounced value\r\n */\r\nconst useDebounce = (value, delay = 300) => {\r\n const [debouncedValue, setDebouncedValue] = useStore(value)\r\n\r\n useEffect(() => {\r\n const timer = setTimeout(() => {\r\n setDebouncedValue(value)\r\n }, delay)\r\n\r\n return () => clearTimeout(timer)\r\n }, [value, delay])\r\n\r\n return debouncedValue\r\n}\r\n\r\n/**\r\n * useThrottle - Returns a throttled version of the value that only updates\r\n * at most once per specified interval.\r\n * @param {*} value - Value to throttle\r\n * @param {number} interval - Minimum interval in milliseconds (default: 300)\r\n * @returns {*} Throttled value\r\n */\r\nconst useThrottle = (value, interval = 300) => {\r\n const [throttledValue, setThrottledValue] = useStore(value)\r\n const lastUpdated = useRef(Date.now())\r\n\r\n useEffect(() => {\r\n const now = Date.now()\r\n const elapsed = now - lastUpdated.current\r\n\r\n if (elapsed >= interval) {\r\n lastUpdated.current = now\r\n setThrottledValue(value)\r\n } else {\r\n const timer = setTimeout(() => {\r\n lastUpdated.current = Date.now()\r\n setThrottledValue(value)\r\n }, interval - elapsed)\r\n\r\n return () => clearTimeout(timer)\r\n }\r\n }, [value, interval])\r\n\r\n return throttledValue\r\n}\r\n\r\nexport {\r\n useStore,\r\n useReducer,\r\n useEffect,\r\n useLayoutEffect,\r\n useRef,\r\n useMemo,\r\n useCallback,\r\n createContext,\r\n useQuery,\r\n useHash,\r\n useMetadata,\r\n useId,\r\n useDebounce,\r\n useThrottle,\r\n useStorePriority,\r\n useTransition,\r\n useDeferredValue,\r\n usePersistentStore,\r\n usePersistentStore as usePersitentStore, // backwards-compatible alias\r\n useSwitch,\r\n // Router exports\r\n RouterProvider,\r\n useRouter,\r\n Children,\r\n NavLink,\r\n Link,\r\n usePathname,\r\n useSearchParams,\r\n}\r\n\r\n","import { createDom, clearContainer } from './dom.js'\r\nimport { reconcileChildren } from './reconciler.js'\r\nimport { getState, RYUNIX_TYPES, EFFECT_TAGS, nextValidSibling } from '../utils/index.js'\r\nimport { createElement } from './createElement.js'\r\nimport { createContext } from './hooks.js'\r\n\r\nconst updateFunctionComponent = (fiber) => {\r\n const state = getState()\r\n state.wipFiber = fiber\r\n state.hookIndex = 0\r\n state.wipFiber.hooks = []\r\n\r\n if (state.isHydrating) {\r\n fiber.effectTag = EFFECT_TAGS.HYDRATE\r\n }\r\n\r\n let children = [fiber.type(fiber.props)]\r\n\r\n if (fiber.type._contextId && fiber.props.value !== undefined) {\r\n fiber._contextId = fiber.type._contextId\r\n fiber._contextValue = fiber.props.value\r\n }\r\n\r\n reconcileChildren(fiber, children)\r\n}\r\n\r\nconst updateHostComponent = (fiber) => {\r\n const state = getState()\r\n\r\n if (fiber.type === RYUNIX_TYPES.RYUNIX_CONTEXT) {\r\n fiber._contextId = fiber.props?._contextId\r\n fiber._contextValue = fiber.props?.value\r\n }\r\n\r\n const isPassthrough =\r\n fiber.type === RYUNIX_TYPES.RYUNIX_FRAGMENT ||\r\n fiber.type === RYUNIX_TYPES.RYUNIX_CONTEXT ||\r\n fiber.type === Symbol.for('ryunix.portal')\r\n\r\n if (state.isHydrating && isPassthrough) {\r\n fiber.effectTag = EFFECT_TAGS.HYDRATE\r\n } else if (!fiber.dom) {\r\n if (state.isHydrating && state.hydrateCursor) {\r\n const domNode = state.hydrateCursor\r\n const isText =\r\n fiber.type === RYUNIX_TYPES.TEXT_ELEMENT && domNode.nodeType === 3\r\n const isElement =\r\n typeof fiber.type === 'string' &&\r\n domNode.nodeType === 1 &&\r\n domNode.tagName.toLowerCase() === fiber.type.toLowerCase()\r\n\r\n if (isText || isElement) {\r\n fiber.dom = domNode\r\n fiber.effectTag = EFFECT_TAGS.HYDRATE\r\n // Move cursor to first child for children to consume\r\n state.hydrateCursor = nextValidSibling(domNode.firstChild)\r\n } else {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n `[Hydration] Mismatch at ${getTypeLabel(fiber.type)}. Expected ${domNode.nodeType === 1 ? domNode.tagName : 'text'\r\n } but got ${fiber.type}. Falling back to CSR.`,\r\n )\r\n }\r\n state.isHydrating = false\r\n state.hydrationFailed = true\r\n state.hydrateCursor = null\r\n fiber.dom = createDom(fiber)\r\n fiber.effectTag = EFFECT_TAGS.PLACEMENT\r\n }\r\n } else {\r\n fiber.dom = createDom(fiber)\r\n }\r\n }\r\n\r\n const children = fiber.props?.children || []\r\n reconcileChildren(fiber, children)\r\n}\r\n\r\nconst getTypeLabel = (type) => {\r\n if (typeof type === 'symbol') return type.description || type.toString()\r\n if (typeof type === 'function') return type.name || 'anonymous'\r\n return String(type)\r\n}\r\n\r\n\r\n/**\r\n * The Component `Image` takes in a `src` and other props, and returns an `img` element with the\r\n * specified `src` and props.\r\n * @returns The `Image` component is being returned. It is a functional component that renders an `img`\r\n * element with the specified `src` and other props passed to it.\r\n */\r\nconst Image = ({ src, ...props }) => {\r\n return createElement('img', { ...props, src })\r\n}\r\n\r\nconst { Provider: MDXProvider, useContext: useMDXComponents } = createContext(\r\n 'ryunix.mdx',\r\n {},\r\n)\r\n\r\n/**\r\n * Get merged MDX components from context and provided components\r\n * @param {Object} components - Additional components to merge\r\n * @returns {Object} Merged components object\r\n */\r\nconst getMDXComponents = (components) => {\r\n const contextComponents = useMDXComponents()\r\n return {\r\n ...contextComponents,\r\n ...components,\r\n }\r\n}\r\n\r\n/**\r\n * Default MDX components with Ryunix-optimized rendering\r\n */\r\nconst defaultComponents = {\r\n // Headings\r\n h1: (props) => createElement('h1', { ...props }),\r\n h2: (props) => createElement('h2', { ...props }),\r\n h3: (props) => createElement('h3', { ...props }),\r\n h4: (props) => createElement('h4', { ...props }),\r\n h5: (props) => createElement('h5', { ...props }),\r\n h6: (props) => createElement('h6', { ...props }),\r\n\r\n // Text\r\n p: (props) => createElement('p', { ...props }),\r\n a: (props) => createElement('a', { ...props }),\r\n strong: (props) => createElement('strong', { ...props }),\r\n em: (props) => createElement('em', { ...props }),\r\n code: (props) => createElement('code', { ...props }),\r\n\r\n // Lists\r\n ul: (props) => createElement('ul', { ...props }),\r\n ol: (props) => createElement('ol', { ...props }),\r\n li: (props) => createElement('li', { ...props }),\r\n\r\n // Blocks\r\n blockquote: (props) => createElement('blockquote', { ...props }),\r\n pre: (props) => createElement('pre', { ...props }),\r\n hr: (props) => createElement('hr', { ...props }),\r\n\r\n // Tables\r\n table: (props) => createElement('table', { ...props }),\r\n thead: (props) => createElement('thead', { ...props }),\r\n tbody: (props) => createElement('tbody', { ...props }),\r\n tr: (props) => createElement('tr', { ...props }),\r\n th: (props) => createElement('th', { ...props }),\r\n td: (props) => createElement('td', { ...props }),\r\n\r\n // Media\r\n img: (props) => createElement('img', { ...props }),\r\n}\r\n\r\n/**\r\n * MDX Wrapper component\r\n * Provides default styling and components for MDX content\r\n */\r\nconst MDXContent = ({ children, components = {} }) => {\r\n const mergedComponents = getMDXComponents(components)\r\n\r\n return createElement(\r\n MDXProvider,\r\n { value: mergedComponents },\r\n createElement('div', null, children),\r\n )\r\n}\r\n\r\nexport {\r\n // Internal use\r\n updateFunctionComponent,\r\n updateHostComponent,\r\n\r\n // Built-in components\r\n\r\n // MDX Support\r\n MDXContent,\r\n MDXProvider,\r\n useMDXComponents,\r\n getMDXComponents,\r\n defaultComponents,\r\n\r\n // Custom components\r\n Image,\r\n}\r\n","// Safe performance.now() wrapper for SSR/Node environments\r\nconst perfNow = () =>\r\n typeof performance !== 'undefined' ? performance.now() : Date.now()\r\n\r\n/**\r\n * Performance profiler for Ryunix\r\n */\r\nclass Profiler {\r\n constructor() {\r\n this.enabled = process.env.NODE_ENV !== 'production'\r\n this.measures = new Map()\r\n this.renderTimes = []\r\n this.maxSamples = 100\r\n }\r\n\r\n startMeasure(name) {\r\n if (!this.enabled) return\r\n this.measures.set(name, perfNow())\r\n }\r\n\r\n endMeasure(name) {\r\n if (!this.enabled) return\r\n const start = this.measures.get(name)\r\n if (!start) return\r\n\r\n const duration = perfNow() - start\r\n this.measures.delete(name)\r\n\r\n return duration\r\n }\r\n\r\n recordRender(componentName, duration) {\r\n if (!this.enabled) return\r\n\r\n this.renderTimes.push({\r\n component: componentName,\r\n duration,\r\n timestamp: Date.now(),\r\n })\r\n\r\n if (this.renderTimes.length > this.maxSamples) {\r\n this.renderTimes.shift()\r\n }\r\n }\r\n\r\n getStats() {\r\n if (!this.enabled) return null\r\n\r\n const total = this.renderTimes.reduce((sum, r) => sum + r.duration, 0)\r\n const avg = total / this.renderTimes.length\r\n const max = Math.max(...this.renderTimes.map((r) => r.duration))\r\n const min = Math.min(...this.renderTimes.map((r) => r.duration))\r\n\r\n return { total, avg, max, min, count: this.renderTimes.length }\r\n }\r\n\r\n getSlowestComponents(limit = 10) {\r\n if (!this.enabled) return []\r\n\r\n const byComponent = new Map()\r\n\r\n this.renderTimes.forEach(({ component, duration }) => {\r\n if (!byComponent.has(component)) {\r\n byComponent.set(component, { total: 0, count: 0, max: 0 })\r\n }\r\n const stats = byComponent.get(component)\r\n stats.total += duration\r\n stats.count++\r\n stats.max = Math.max(stats.max, duration)\r\n })\r\n\r\n return Array.from(byComponent.entries())\r\n .map(([name, stats]) => ({\r\n name,\r\n avg: stats.total / stats.count,\r\n max: stats.max,\r\n count: stats.count,\r\n }))\r\n .sort((a, b) => b.avg - a.avg)\r\n .slice(0, limit)\r\n }\r\n\r\n logStats() {\r\n if (!this.enabled) return\r\n\r\n const stats = this.getStats()\r\n if (!stats) return\r\n\r\n console.group('🔍 Ryunix Performance Stats')\r\n console.log(`Total renders: ${stats.count}`)\r\n console.log(`Avg render time: ${stats.avg.toFixed(2)}ms`)\r\n console.log(\r\n `Min: ${stats.min.toFixed(2)}ms | Max: ${stats.max.toFixed(2)}ms`,\r\n )\r\n\r\n const slowest = this.getSlowestComponents(5)\r\n if (slowest.length > 0) {\r\n console.log('\\n⚠️ Slowest components:')\r\n slowest.forEach((comp, i) => {\r\n console.log(\r\n `${i + 1}. ${comp.name}: ${comp.avg.toFixed(2)}ms avg (${comp.count} renders)`,\r\n )\r\n })\r\n }\r\n console.groupEnd()\r\n }\r\n\r\n clear() {\r\n this.renderTimes = []\r\n this.measures.clear()\r\n }\r\n\r\n enable() {\r\n this.enabled = true\r\n }\r\n\r\n disable() {\r\n this.enabled = false\r\n }\r\n}\r\n\r\n// Global profiler instance\r\nconst profiler = new Profiler()\r\n\r\n/**\r\n * Hook to profile component render\r\n */\r\nconst useProfiler = (componentName) => {\r\n const startTime = perfNow()\r\n\r\n return () => {\r\n const duration = perfNow() - startTime\r\n profiler.recordRender(componentName, duration)\r\n }\r\n}\r\n\r\n/**\r\n * HOC to profile component\r\n */\r\nconst withProfiler = (Component, name) => {\r\n return (props) => {\r\n profiler.startMeasure(name)\r\n const result = Component(props)\r\n const duration = profiler.endMeasure(name)\r\n if (duration) profiler.recordRender(name, duration)\r\n return result\r\n }\r\n}\r\n\r\nexport { profiler, useProfiler, withProfiler }\r\n","import { commitRoot } from './commits.js'\r\nimport { updateFunctionComponent, updateHostComponent } from './components.js'\r\nimport { getState, rIC, nextValidSibling, getTypeLabel } from '../utils/index.js'\r\nimport { getCurrentPriority, Priority } from './priority.js'\r\nimport { profiler } from './profiler.js'\r\nimport { setScheduleWork } from './bridge.js'\r\n\r\nlet workQueue = []\r\nlet isWorkLoopScheduled = false\r\n\r\n\r\nfunction performUnitOfWork(fiber) {\r\n const state = getState()\r\n const isFunctionComponent =\r\n fiber.type instanceof Function || typeof fiber.type === 'function'\r\n\r\n try {\r\n if (isFunctionComponent) {\r\n updateFunctionComponent(fiber)\r\n } else {\r\n updateHostComponent(fiber)\r\n }\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('[Ryunix ErrorBoundary] Caught error during render:', error)\r\n }\r\n\r\n // Traverse upwards to find nearest ErrorBoundary\r\n let boundaryFiber = fiber.parent\r\n let foundBoundary = false\r\n\r\n while (boundaryFiber) {\r\n if (\r\n boundaryFiber.type &&\r\n boundaryFiber.type.ryunix_type === 'RYUNIX_ERROR_BOUNDARY'\r\n ) {\r\n foundBoundary = true\r\n break\r\n }\r\n boundaryFiber = boundaryFiber.parent\r\n }\r\n\r\n if (foundBoundary) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.warn(\r\n '[Ryunix ErrorBoundary] Recovering tree at nearest boundary.',\r\n )\r\n }\r\n // Assign the error state to the boundary so it can render the fallback\r\n boundaryFiber.stateError = error\r\n // Discard the corrupted children of the crashing fiber to prevent undefined behavior\r\n fiber.child = null\r\n\r\n // Rewind the rendering context to the ErrorBoundary fiber\r\n // so the work loop immediately starts re-evaluating the boundary branch\r\n return boundaryFiber\r\n } else {\r\n // Uncaught fatal error: stop the work loop entirely\r\n console.error(\r\n '[Ryunix] Fatal Uncaught Error. No ErrorBoundary was found in the tree to handle this exception:\\n',\r\n error,\r\n )\r\n state.nextUnitOfWork = null\r\n return null\r\n }\r\n }\r\n\r\n if (fiber.child) {\r\n return fiber.child\r\n }\r\n\r\n let nextFiber = fiber\r\n while (nextFiber) {\r\n // If we just finished a Host node during hydration, \r\n // the next fiber (sibling) should start at the next DOM sibling.\r\n if (state.isHydrating && nextFiber.dom) {\r\n state.hydrateCursor = nextValidSibling(nextFiber.dom.nextSibling)\r\n }\r\n\r\n if (nextFiber.sibling) {\r\n return nextFiber.sibling\r\n }\r\n\r\n nextFiber = nextFiber.parent\r\n // When ascending, we don't need to do anything else,\r\n // the loop will handle the parent's sibling or end.\r\n }\r\n}\r\n\r\n\r\nconst workLoop = (deadline) => {\r\n const state = getState()\r\n let shouldYield = false\r\n\r\n while ((state.nextUnitOfWork || workQueue.length > 0) && !shouldYield) {\r\n if (!state.nextUnitOfWork && workQueue.length > 0) {\r\n const nextRoot = workQueue.shift()\r\n state.wipRoot = nextRoot\r\n state.nextUnitOfWork = nextRoot\r\n state.deletions = []\r\n\r\n // Restore specific hydration state for this root\r\n if (nextRoot.isHydrating !== undefined) {\r\n state.isHydrating = nextRoot.isHydrating\r\n state.hydrateCursor = nextRoot.hydrateCursor\r\n }\r\n }\r\n\r\n if (state.nextUnitOfWork) {\r\n state.nextUnitOfWork = performUnitOfWork(state.nextUnitOfWork)\r\n }\r\n\r\n shouldYield = deadline.timeRemaining() < 1\r\n }\r\n\r\n if (!state.nextUnitOfWork && state.wipRoot) {\r\n commitRoot()\r\n }\r\n\r\n if (state.nextUnitOfWork || workQueue.length > 0) {\r\n rIC(workLoop)\r\n } else {\r\n isWorkLoopScheduled = false\r\n }\r\n}\r\n\r\n// ... performUnitOfWork stays same ...\r\n\r\nconst scheduleWork = (root, priority = getCurrentPriority()) => {\r\n const state = getState()\r\n\r\n if (state.wipRoot) {\r\n workQueue.push(root)\r\n } else {\r\n state.nextUnitOfWork = root\r\n state.wipRoot = root\r\n state.deletions = []\r\n\r\n // Set immediate hydration state\r\n if (root.isHydrating !== undefined) {\r\n state.isHydrating = root.isHydrating\r\n state.hydrateCursor = root.hydrateCursor\r\n }\r\n }\r\n\r\n state.hookIndex = 0\r\n state.effects = []\r\n\r\n if (!isWorkLoopScheduled) {\r\n isWorkLoopScheduled = true\r\n if (priority <= Priority.USER_BLOCKING) {\r\n // High priority: run as soon as possible in a micro-task\r\n // We provide a synthetic deadline that allows some work before yielding\r\n Promise.resolve().then(() => {\r\n workLoop({ timeRemaining: () => 10, didTimeout: true })\r\n })\r\n } else {\r\n // Low priority: wait for browser idleness\r\n rIC(workLoop)\r\n }\r\n }\r\n}\r\n\r\n\r\nsetScheduleWork(scheduleWork)\r\n\r\nexport { performUnitOfWork, workLoop, scheduleWork }\r\n","import { clearContainer } from './dom.js'\r\nimport { getState } from '../utils/index.js'\r\nimport { scheduleWork } from './workers.js'\r\nimport { createElement } from './createElement.js'\r\n\r\n/**\r\n * The `render` function in JavaScript updates the DOM with a new element and schedules work to be done\r\n * on the element.\r\n * @param element - The `element` parameter in the `render` function is the element that you want to\r\n * render in the specified container. It could be a DOM element, a component, or any other valid\r\n * element that you want to display on the screen.\r\n * @param container - The `container` parameter in the `render` function is the DOM element where the\r\n * `element` will be rendered. It is the target container where the element will be appended as a\r\n * child.\r\n * @returns The `render` function is returning the `state.wipRoot` object.\r\n */\r\nconst render = (element, container) => {\r\n const state = getState()\r\n\r\n // Clear container before CSR render to avoid duplication\r\n clearContainer(container)\r\n\r\n const root = {\r\n dom: container,\r\n props: {\r\n children: [element],\r\n },\r\n alternate: state.currentRoot,\r\n isHydrating: false,\r\n hydrateCursor: null,\r\n }\r\n\r\n scheduleWork(root)\r\n return root\r\n}\r\n\r\nconst nextValidSibling = (node) => {\r\n let next = node\r\n while (next && (next.nodeType === 3 && !next.nodeValue.trim() || next.nodeType === 8)) {\r\n next = next.nextSibling\r\n }\r\n return next\r\n}\r\n\r\n/**\r\n * The `hydrate` function attaches Ryunix to an existing server-rendered DOM tree.\r\n * Instead of clearing and re-rendering, it walks the existing DOM nodes and\r\n * attaches event listeners and reconciles state, preserving SSR HTML.\r\n */\r\nconst hydrate = (element, container) => {\r\n const state = getState()\r\n\r\n state.containerRoot = container\r\n\r\n const root = {\r\n dom: container,\r\n props: {\r\n children: [element],\r\n },\r\n alternate: state.currentRoot,\r\n isHydrating: true,\r\n hydrateCursor: nextValidSibling(container.firstChild),\r\n }\r\n\r\n scheduleWork(root)\r\n return root\r\n}\r\n\r\nconst sanitizeProps = (props) => {\r\n if (!props || typeof props !== 'object' || Array.isArray(props)) return props\r\n const sanitized = {}\r\n for (const key in props) {\r\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue\r\n sanitized[key] = props[key]\r\n }\r\n return sanitized\r\n}\r\n\r\nconst init = (MainElement, root = '__ryunix', components = {}) => {\r\n const state = getState()\r\n state.containerRoot = document.getElementById(root)\r\n\r\n // Reset any stale hydration flags\r\n state.isHydrating = false\r\n state.hydrationFailed = false\r\n\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] init: RYUNIX_SSR=${process.env.RYUNIX_SSR}, hasChildNodes=${state.containerRoot.hasChildNodes()}`);\r\n }\r\n\r\n if (process.env.RYUNIX_SSR && state.containerRoot.hasChildNodes()) {\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] init: SSR content detected. Starting hydration on #${root}`);\r\n }\r\n const res = hydrate(MainElement, state.containerRoot)\r\n return res\r\n }\r\n\r\n if (process.env.NODE_ENV !== 'production' && process.env.RYUNIX_DEBUG) {\r\n console.log(`[Ryunix Debug] init: No SSR content or SSR disabled. Starting normal render on #${root}`);\r\n }\r\n const res = render(MainElement, state.containerRoot)\r\n return res\r\n}\r\n\r\nconst safeRender = (component, props, onError) => {\r\n try {\r\n return component(props)\r\n } catch (error) {\r\n if (process.env.NODE_ENV !== 'production') {\r\n console.error('Component error:', error)\r\n }\r\n if (onError) onError(error)\r\n return null\r\n }\r\n}\r\n\r\nexport { init, render, safeRender, hydrate, clearContainer }\r\n","import { RYUNIX_TYPES, STRINGS, OLD_STRINGS, is, getState } from '../utils/index.js'\r\nimport { camelToKebab, validateUri } from './dom.js'\r\nimport { toSvgAttrName } from '../utils/svgAttributes.js'\r\n\r\nexport const escapeHtml = (unsafe) => {\r\n if (typeof unsafe !== 'string') return String(unsafe)\r\n return unsafe\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''')\r\n}\r\n\r\nconst renderStyle = (styleObj) => {\r\n if (!is.object(styleObj) || is.null(styleObj)) return ''\r\n return Object.entries(styleObj)\r\n .filter(([_, value]) => value != null)\r\n .map(([key, value]) => `${camelToKebab(key)}:${value}`)\r\n .join(';')\r\n}\r\n\r\nconst VOID_ELEMENTS = new Set([\r\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\r\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\r\n])\r\n\r\nconst renderToStringImpl = (element) => {\r\n if (element == null || typeof element === 'boolean') {\r\n return ''\r\n }\r\n\r\n if (typeof element === 'string' || typeof element === 'number') {\r\n return escapeHtml(element)\r\n }\r\n\r\n if (Array.isArray(element)) {\r\n return element.map(child => renderToStringImpl(child)).join('')\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.TEXT_ELEMENT) {\r\n return escapeHtml(element.props.nodeValue)\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_FRAGMENT) {\r\n const children = element.props?.children || []\r\n return children.map(child => renderToStringImpl(child)).join('')\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_CONTEXT) {\r\n // Context Providers just render their children transparently on the server\r\n const state = getState()\r\n state.ssrContexts = state.ssrContexts || {}\r\n const ctxId = element.props?._contextId\r\n const prevCtx = state.ssrContexts[ctxId]\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = element.props?.value\r\n }\r\n\r\n const children = element.props?.children || []\r\n let result = ''\r\n if (Array.isArray(children)) {\r\n result = children.map(child => renderToStringImpl(child)).join('')\r\n } else {\r\n result = renderToStringImpl(children)\r\n }\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = prevCtx\r\n }\r\n\r\n return result\r\n }\r\n\r\n if (typeof element.type === 'function') {\r\n const type = element.type\r\n const props = element.props || {}\r\n const renderedElement = type(props)\r\n return renderToStringImpl(renderedElement)\r\n }\r\n\r\n // It's a standard host element\r\n const type = element.type\r\n const props = element.props || {}\r\n\r\n let attributes = ''\r\n let htmlChildren = ''\r\n let innerHTML = null\r\n\r\n Object.entries(props).forEach(([key, value]) => {\r\n if (key === 'children') {\r\n if (Array.isArray(value)) {\r\n htmlChildren = value.map(child => renderToStringImpl(child)).join('')\r\n } else {\r\n htmlChildren = renderToStringImpl(value)\r\n }\r\n } else if (key === 'dangerouslySetInnerHTML' && value?.__html) {\r\n innerHTML = value.__html\r\n } else if (key === STRINGS.STYLE || key === OLD_STRINGS.STYLE) {\r\n const styleString = renderStyle(value)\r\n if (styleString) {\r\n attributes += ` style=\"${escapeHtml(styleString)}\"`\r\n }\r\n } else if (key === STRINGS.CLASS_NAME || key === OLD_STRINGS.CLASS_NAME) {\r\n if (value) {\r\n attributes += ` class=\"${escapeHtml(value)}\"`\r\n }\r\n } else if (!key.startsWith('on')) { // Ignore event listeners\r\n if (typeof value === 'boolean') {\r\n if (value) attributes += ` ${key}=\"\"`\r\n } else if (value != null) {\r\n let attrName = toSvgAttrName(key)\r\n let validatedValue = validateUri(attrName, value)\r\n attributes += ` ${attrName}=\"${escapeHtml(validatedValue)}\"`\r\n }\r\n }\r\n })\r\n\r\n if (VOID_ELEMENTS.has(type)) {\r\n return `<${type}${attributes} />`\r\n }\r\n\r\n const finalContent = innerHTML !== null ? innerHTML : htmlChildren\r\n\r\n return `<${type}${attributes}>${finalContent}</${type}>`\r\n}\r\n\r\nconst RC_SCRIPT = `\r\nfunction $RC(id, templateId) {\r\n var b = document.getElementById(id);\r\n var t = document.getElementById(templateId);\r\n if (b && t) {\r\n b.innerHTML = t.innerHTML;\r\n t.remove();\r\n }\r\n}\r\n`.replace(/\\s+/g, ' ').trim()\r\n\r\nconst renderToStreamImpl = async (element, push, suspenseTasks = []) => {\r\n if (element == null || typeof element === 'boolean') {\r\n return\r\n }\r\n\r\n // Await the element if it's a promise (e.g. from an async Server Component directly rendered)\r\n if (element instanceof Promise) {\r\n element = await element;\r\n if (element == null || typeof element === 'boolean') return;\r\n }\r\n\r\n if (typeof element === 'string' || typeof element === 'number') {\r\n push(escapeHtml(element))\r\n return\r\n }\r\n\r\n if (Array.isArray(element)) {\r\n for (const child of element) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n return\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.TEXT_ELEMENT) {\r\n push(escapeHtml(element.props.nodeValue))\r\n return\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_FRAGMENT) {\r\n const children = element.props?.children || []\r\n for (const child of children) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n return\r\n }\r\n\r\n if (element.type === RYUNIX_TYPES.RYUNIX_CONTEXT) {\r\n const state = getState()\r\n state.ssrContexts = state.ssrContexts || {}\r\n const ctxId = element.props?._contextId\r\n const prevCtx = state.ssrContexts[ctxId]\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = element.props?.value\r\n }\r\n\r\n const children = element.props?.children || []\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n } else {\r\n await renderToStreamImpl(children, push, suspenseTasks)\r\n }\r\n\r\n if (ctxId) {\r\n state.ssrContexts[ctxId] = prevCtx\r\n }\r\n\r\n return\r\n }\r\n\r\n // Handle Suspense specifically\r\n if (element.type === RYUNIX_TYPES.RYUNIX_SUSPENSE || element.type?.type === RYUNIX_TYPES.RYUNIX_SUSPENSE) {\r\n const { fallback, children } = element.props\r\n const id = `s-${Math.random().toString(36).slice(2, 9)}`\r\n\r\n // In universal mode, Suspense renders children if ready, or fallback if pending.\r\n // BUT we want to force a background task for the REAL children if we hit a lazy component.\r\n\r\n push(`<!--$?--><template id=\"B:${id}\"></template><div id=\"S:${id}\">`)\r\n\r\n // 1. Start rendering the actual content in the background\r\n const task = (async () => {\r\n const state = getState()\r\n const wasBackground = state.isSuspenseBackground\r\n state.isSuspenseBackground = true\r\n\r\n let content = ''\r\n const subPush = (chunk) => content += chunk\r\n try {\r\n await renderToStreamImpl(children, subPush, suspenseTasks)\r\n return { id, content, success: true }\r\n } catch (e) {\r\n return { id, content: '', success: false, error: e }\r\n } finally {\r\n state.isSuspenseBackground = wasBackground\r\n }\r\n })()\r\n\r\n suspenseTasks.push(task)\r\n\r\n // 2. Render fallback immediately for the main stream\r\n await renderToStreamImpl(fallback, push, suspenseTasks)\r\n push(`</div><!--$/-->`)\r\n return\r\n }\r\n\r\n let type = element.type\r\n let props = element.props || {}\r\n\r\n if (typeof type === 'function') {\r\n if (process.env.RYUNIX_DEBUG) {\r\n console.log('[SSR Debug] Rendering function:', type.name || 'anonymous');\r\n }\r\n const renderedElement = await type(props)\r\n await renderToStreamImpl(renderedElement, push, suspenseTasks)\r\n return\r\n }\r\n\r\n // It's a standard host element\r\n let attributes = ''\r\n let innerHTML = null\r\n let children = props.children || []\r\n\r\n Object.entries(props).forEach(([key, value]) => {\r\n if (key === 'children') {\r\n // Ignored here, handled below\r\n } else if (key === 'dangerouslySetInnerHTML' && value?.__html) {\r\n innerHTML = value.__html\r\n } else if (key === STRINGS.STYLE || key === OLD_STRINGS.STYLE) {\r\n const styleString = renderStyle(value)\r\n if (styleString) {\r\n attributes += ` style=\"${escapeHtml(styleString)}\"`\r\n }\r\n } else if (key === STRINGS.CLASS_NAME || key === OLD_STRINGS.CLASS_NAME) {\r\n if (value) {\r\n attributes += ` class=\"${escapeHtml(value)}\"`\r\n }\r\n } else if (!key.startsWith('on')) {\r\n if (typeof value === 'boolean') {\r\n if (value) attributes += ` ${key}=\"\"`\r\n } else if (value != null) {\r\n const attrName = toSvgAttrName(key)\r\n const validatedValue = validateUri(attrName, value)\r\n attributes += ` ${attrName}=\"${escapeHtml(validatedValue)}\"`\r\n }\r\n }\r\n })\r\n\r\n push(`<${type}${attributes}>`)\r\n\r\n if (innerHTML !== null) {\r\n push(innerHTML)\r\n } else {\r\n if (Array.isArray(children)) {\r\n for (const child of children) {\r\n await renderToStreamImpl(child, push, suspenseTasks)\r\n }\r\n } else {\r\n await renderToStreamImpl(children, push, suspenseTasks)\r\n }\r\n }\r\n\r\n if (!VOID_ELEMENTS.has(type)) {\r\n push(`</${type}>`)\r\n }\r\n}\r\n\r\nexport const renderToReadableStream = (element, options = {}) => {\r\n const state = getState()\r\n const encoder = new TextEncoder()\r\n\r\n return new ReadableStream({\r\n async start(controller) {\r\n const wasServerRendering = state.isServerRendering\r\n state.isServerRendering = true\r\n state.ssrMetadata = {}\r\n\r\n const push = (text) => controller.enqueue(encoder.encode(text))\r\n const suspenseTasks = []\r\n\r\n try {\r\n // 0. Inject RC helper script first\r\n const nonceAttr = options.nonce ? ` nonce=\"${options.nonce}\"` : ''\r\n push(`<script${nonceAttr}>${RC_SCRIPT}</script>`)\r\n\r\n // 1. Render initial tree (with fallbacks)\r\n await renderToStreamImpl(element, push, suspenseTasks)\r\n\r\n // 2. Process suspense tasks as they complete\r\n // For now, we wait for all, but in a real streaming scenario,\r\n // we could push them as they resolve.\r\n while (suspenseTasks.length > 0) {\r\n const task = suspenseTasks.shift()\r\n const res = await task\r\n if (res.success) {\r\n push(`<template id=\"P:${res.id}\">${res.content}</template>`)\r\n push(`<script${nonceAttr}>$RC(\"S:${res.id}\", \"P:${res.id}\")</script>`)\r\n }\r\n }\r\n\r\n controller.close()\r\n } catch (e) {\r\n controller.error(e)\r\n } finally {\r\n state.isServerRendering = wasServerRendering\r\n }\r\n }\r\n })\r\n}\r\n\r\nexport const renderToString = (element, options = {}) => {\r\n const state = getState()\r\n const wasServerRendering = state.isServerRendering\r\n state.isServerRendering = true\r\n state.ssrMetadata = {}\r\n try {\r\n return renderToStringImpl(element)\r\n } finally {\r\n state.isServerRendering = wasServerRendering\r\n }\r\n}\r\n\r\nexport const renderToStringAsync = async (element, options = {}) => {\r\n const stream = renderToReadableStream(element, options);\r\n const reader = stream.getReader();\r\n const decoder = new TextDecoder();\r\n let result = '';\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n if (done) break;\r\n result += decoder.decode(value, { stream: true });\r\n }\r\n\r\n result += decoder.decode();\r\n return result;\r\n}\n","/**\r\n * memo - Memoize component to prevent unnecessary re-renders\r\n * @param {Function} Component - Component to memoize\r\n * @param {Function} [arePropsEqual] - Custom comparison function (defaults to shallowEqual)\r\n * @returns {Function} Memoized component\r\n */\r\nconst memo = (Component, arePropsEqual = shallowEqual) => {\r\n let prevProps = null\r\n let prevResult = null\r\n\r\n const MemoizedComponent = (props) => {\r\n if (prevProps && arePropsEqual(prevProps, props)) {\r\n return prevResult\r\n }\r\n prevProps = props\r\n prevResult = Component(props)\r\n return prevResult\r\n }\r\n\r\n MemoizedComponent.displayName = `Memo(${Component.displayName || Component.name || 'Component'})`\r\n return MemoizedComponent\r\n}\r\n\r\n/**\r\n * Custom comparison function for memo\r\n */\r\nconst shallowEqual = (prevProps, nextProps) => {\r\n const prevKeys = Object.keys(prevProps)\r\n const nextKeys = Object.keys(nextProps)\r\n\r\n if (prevKeys.length !== nextKeys.length) return false\r\n\r\n return prevKeys.every((key) => Object.is(prevProps[key], nextProps[key]))\r\n}\r\n\r\n/**\r\n * Deep comparison for complex objects\r\n */\r\nconst deepEqual = (a, b) => {\r\n if (a === b) return true\r\n if (a == null || b == null) return false\r\n if (typeof a !== 'object' || typeof b !== 'object') return false\r\n\r\n const keysA = Object.keys(a)\r\n const keysB = Object.keys(b)\r\n\r\n if (keysA.length !== keysB.length) return false\r\n\r\n return keysA.every((key) => deepEqual(a[key], b[key]))\r\n}\r\n\r\nexport { memo, shallowEqual, deepEqual }\r\n","import { RYUNIX_TYPES, getState } from '../utils/index.js'\r\nimport { createElement, Fragment } from './createElement.js'\r\nimport { useStore, useEffect } from './hooks.js'\r\n\r\n/**\r\n * Suspense status tracking\r\n */\r\nconst SUSPENSE_STATUS = {\r\n PENDING: 'pending',\r\n RESOLVED: 'resolved',\r\n REJECTED: 'rejected',\r\n}\r\n\r\n/**\r\n * Lazy load component with real Suspense integration.\r\n * The loaded module is cached so subsequent renders are synchronous.\r\n *\r\n * @param {Function} importFn - Function returning a dynamic import() promise\r\n * @returns {Function} A Ryunix component\r\n */\r\nconst lazy = (importFn) => {\r\n let status = SUSPENSE_STATUS.PENDING\r\n let Component = null\r\n let error = null\r\n let promise = null\r\n\r\n const LazyComponent = (props) => {\r\n // If already resolved, render synchronously\r\n if (status === SUSPENSE_STATUS.RESOLVED && Component) {\r\n return createElement(Component, props)\r\n }\r\n\r\n // If already errored, throw to nearest error boundary\r\n if (status === SUSPENSE_STATUS.REJECTED && error) {\r\n throw error\r\n }\r\n\r\n // Start loading if not already\r\n if (!promise) {\r\n promise = importFn()\r\n .then((module) => {\r\n Component = module.default || module\r\n status = SUSPENSE_STATUS.RESOLVED\r\n })\r\n .catch((err) => {\r\n error = err\r\n status = SUSPENSE_STATUS.REJECTED\r\n })\r\n }\r\n\r\n // Use useStore + useEffect to re-render when loading completes\r\n const [, forceUpdate] = useStore(0)\r\n\r\n useEffect(() => {\r\n if (status === SUSPENSE_STATUS.PENDING && promise) {\r\n let active = true\r\n promise.then(() => {\r\n if (active) forceUpdate((x) => x + 1)\r\n }).catch(() => {\r\n if (active) forceUpdate((x) => x + 1)\r\n })\r\n return () => { active = false }\r\n }\r\n }, [])\r\n\r\n // While pending, return null — Suspense will show fallback\r\n return null\r\n }\r\n\r\n // Mark as lazy for Suspense detection\r\n LazyComponent._isLazy = true\r\n LazyComponent._getStatus = () => status\r\n\r\n return LazyComponent\r\n}\r\n\r\n/**\r\n * Suspense component — shows a fallback while lazy children are loading.\r\n *\r\n * @param {Object} props\r\n * @param {*} props.fallback - Element to show while loading\r\n * @param {*} props.children - Lazy component(s)\r\n * @returns {*} Rendered element\r\n */\r\nconst Suspense = ({ fallback, children }) => {\r\n const [isLoaded, setIsLoaded] = useStore(false)\r\n\r\n // Check if any child is a lazy component still pending\r\n const childArray = Array.isArray(children) ? children : [children]\r\n let anyPending = false\r\n\r\n for (const child of childArray) {\r\n if (child && child.type && child.type._isLazy) {\r\n const status = child.type._getStatus()\r\n if (status === SUSPENSE_STATUS.PENDING) {\r\n anyPending = true\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (!anyPending && !isLoaded) {\r\n setIsLoaded(true)\r\n }\r\n }, [anyPending])\r\n\r\n // Show fallback while any child is pending\r\n // On server background task, we want to render ACTUAL children to capture them\r\n if (anyPending && !getState().isSuspenseBackground) {\r\n return fallback || null\r\n }\r\n\r\n return createElement(Fragment, { children })\r\n}\r\n\r\nSuspense.type = RYUNIX_TYPES.RYUNIX_SUSPENSE\r\n\r\n/**\r\n * Preload component for prefetching — starts the import immediately\r\n * so it's cached when later rendered.\r\n *\r\n * @param {Function} importFn - Dynamic import function\r\n * @returns {Promise} The import promise\r\n */\r\nconst preload = (importFn) => {\r\n return importFn()\r\n}\r\n\r\nexport { lazy, Suspense, preload, SUSPENSE_STATUS }\r\n","/**\r\n * forwardRef - Allows parent components to pass a ref to a child component.\r\n *\r\n * Usage:\r\n * const MyInput = forwardRef((props, ref) => {\r\n * return createElement('input', { ...props, ref })\r\n * })\r\n *\r\n * @param {Function} render - A function component that receives (props, ref)\r\n * @returns {Function} A component that forwards refs\r\n */\r\nconst forwardRef = (render) => {\r\n if (typeof render !== 'function') {\r\n throw new Error('forwardRef requires a render function')\r\n }\r\n\r\n const ForwardRefComponent = (props) => {\r\n const { ref, ...restProps } = props || {}\r\n return render(restProps, ref || null)\r\n }\r\n\r\n ForwardRefComponent.displayName = `ForwardRef(${render.displayName || render.name || 'Component'})`\r\n ForwardRefComponent._isForwardRef = true\r\n ForwardRefComponent._render = render\r\n\r\n return ForwardRefComponent\r\n}\r\n\r\nexport { forwardRef }\r\n","import { createElement } from './createElement.js';\r\n\r\n/**\r\n * ServerBoundary is a special component used to wrap content that is rendered\r\n * exclusively on the server. During hydration, Ryunix will skip this node's\r\n * children, preserving the server-rendered HTML.\r\n */\r\nexport function ServerBoundary({ children, id }) {\r\n // On the client, this component just renders a container.\r\n // The children are already in the DOM from the server.\r\n return createElement('div', { 'data-ryunix-server': id, style: { display: 'contents' } }, children);\r\n}\r\n\r\nServerBoundary.ryunix_type = 'RYUNIX_SERVER_BOUNDARY';\r\n","import { createElement } from './createElement.js'\r\nimport { getState } from '../utils/index.js'\r\n\r\n/**\r\n * ErrorBoundary is a native Ryunix component that catches JavaScript errors anywhere in its child component tree,\r\n * logs those errors, and displays a fallback UI instead of the component tree that crashed.\r\n * \r\n * It hooks directly into the `performUnitOfWork` reconciler loop.\r\n */\r\nexport function ErrorBoundary({ children, fallback }) {\r\n const state = getState()\r\n \r\n // If the engine caught an error for this boundary, render the fallback\r\n if (state.wipFiber && state.wipFiber.stateError) {\r\n if (typeof fallback === 'function') {\r\n return fallback(state.wipFiber.stateError)\r\n }\r\n return fallback\r\n }\r\n\r\n // Otherwise render children normally\r\n return createElement('ryunix-error-boundary-wrapper', { style: { display: 'contents' } }, children)\r\n}\r\n\r\nErrorBoundary.ryunix_type = 'RYUNIX_ERROR_BOUNDARY'\r\n","export function createActionProxy(actionId) {\r\n return async function (...args) {\r\n const response = await fetch('/_ryunix/action', {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n 'X-Ryunix-Action': 'true',\r\n },\r\n body: JSON.stringify({ actionId, args }),\r\n });\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n throw new Error(errorData.error || 'Server Action failed');\r\n }\r\n\r\n return response.json();\r\n };\r\n}\r\n","import * as Ryunix from './lib/index.js'\r\n\r\nexport * from './lib/index.js'\r\nexport {\r\n Image,\r\n MDXContent,\r\n MDXProvider,\r\n useMDXComponents,\r\n getMDXComponents,\r\n defaultComponents,\r\n} from './lib/components.js'\r\nexport { ServerBoundary } from './lib/serverBoundary.js'\r\nif (typeof window !== 'undefined') window.Ryunix = Ryunix;\r\nexport default Ryunix\r\n"],"names":["nextValidSibling","pendingUpdates","scheduleWork","validateHookCall"],"mappings":"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"}
|