baraqex 2.0.5 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/core/batch.ts", "../src/core/context.ts", "../src/core/hooks.ts", "../src/core/jsx-runtime.ts", "../src/core/renderer.ts", "../src/core/server-renderer.ts", "../src/core/vdom.ts", "../src/core/component.ts", "../src/core/event-bus.ts", "../src/core/router.ts", "../src/core/forms.ts", "../src/core/store.ts", "../src/core/lifecycle-events.ts", "../src/core/utils.ts", "../src/core/errors.ts", "../src/wasm.ts", "../src/browser.ts"],
4
- "sourcesContent": ["/**\n * Batch updates utility for efficient rendering\n *\n * Supports both sync and async batched functions. When an async function is\n * passed, it is awaited and any queued micro-tasks are drained afterwards.\n */\n\nexport let isBatching = false;\nconst syncQueue: Function[] = [];\nconst asyncQueue: (() => Promise<void>)[] = [];\n\nexport async function batchUpdates(fn: (() => void) | (() => Promise<void>)): Promise<void> {\n if (isBatching) {\n // Nested batching \u2014 queue and return\n if (fn.constructor.name === 'AsyncFunction') {\n asyncQueue.push(fn as () => Promise<void>);\n } else {\n syncQueue.push(fn);\n }\n return;\n }\n\n isBatching = true;\n try {\n const result = fn();\n if (result instanceof Promise) {\n await result;\n }\n\n // Drain sync queue\n while (syncQueue.length > 0) {\n const nextFn = syncQueue.shift()!;\n nextFn();\n }\n\n // Drain async queue\n while (asyncQueue.length > 0) {\n const nextFn = asyncQueue.shift()!;\n await nextFn();\n }\n } finally {\n isBatching = false;\n }\n}\n\nexport function getIsBatching(): boolean {\n return isBatching;\n}\n", "/**\n * Context API for passing data through the component tree\n *\n * Uses a context stack to support nested providers of the same context.\n * Each Provider pushes its value onto the stack; useContext reads from the top.\n */\n\nexport interface Context<T> {\n Provider: (props: { value: T; children?: any }) => any;\n Consumer: (props: { children: (value: T) => any }) => any;\n _id: symbol;\n _defaultValue: T;\n useSelector: <S>(selector: (state: T) => S) => S;\n}\n\n// Per-context value stack: the last pushed value wins (most-recent Provider)\nconst contextStacks = new Map<symbol, any[]>();\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n const id = Symbol('context');\n contextStacks.set(id, []);\n\n const context: Context<T> = {\n Provider: ({ value, children }: { value: T; children?: any }) => {\n const stack = contextStacks.get(id)!;\n stack.push(value);\n // We rely on the fact that the render tree processes children synchronously\n // before unwinding. If it doesn't we need a different approach.\n const result = children;\n stack.pop();\n return result;\n },\n Consumer: ({ children }: { children: (value: T) => any }) => {\n const stack = contextStacks.get(id);\n const value = stack && stack.length > 0 ? stack[stack.length - 1] : defaultValue;\n return children(value);\n },\n _id: id,\n _defaultValue: defaultValue,\n useSelector: <S>(selector: (state: T) => S) => {\n const stack = contextStacks.get(id);\n const value = stack && stack.length > 0 ? stack[stack.length - 1] : defaultValue;\n return selector(value);\n }\n };\n\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n const stack = contextStacks.get(context._id);\n if (stack && stack.length > 0) {\n return stack[stack.length - 1];\n }\n return context._defaultValue;\n}\n\nexport function getContextValue<T>(context: Context<T>): T {\n return useContext(context);\n}\n", "/**\n * Hooks Implementation\n *\n * Each render root maintains its own isolated state via a RootState object.\n * The module-level currentRoot/currentComponentId/hookIndex are set before\n * each render call so hooks can find their data.\n */\n\nimport { createContext, useContext } from './context.js';\n\n// ---------------------------------------------------------------------------\n// Root-scoped state store\n// ---------------------------------------------------------------------------\n\nexport interface ComponentState {\n states: any[];\n effects: { callback: () => void | (() => void); deps?: any[]; cleanup?: () => void }[];\n memos: { value: any; deps?: any[] }[];\n refs: { current: any }[];\n}\n\nexport interface RootState {\n id: number;\n components: Map<number, ComponentState>;\n nextComponentId: number;\n renderCallback: ((element: any, container: HTMLElement) => Promise<void>) | null;\n container: HTMLElement | null;\n currentElement: any;\n}\n\nlet rootIdCounter = 0;\n\nexport function createRootState(): RootState {\n return {\n id: ++rootIdCounter,\n components: new Map(),\n nextComponentId: 0,\n renderCallback: null,\n container: null,\n currentElement: null\n };\n}\n\n// ---------------------------------------------------------------------------\n// Current render context (set per render call)\n// ---------------------------------------------------------------------------\n\nlet currentRoot: RootState | null = null;\nlet currentComponentId: number | null = null;\nlet hookIndex = 0;\n\nconst isServer = typeof window === 'undefined';\n\n// ---------------------------------------------------------------------------\n// Render lifecycle helpers\n// ---------------------------------------------------------------------------\n\nexport function prepareRender(root?: RootState, componentId?: number): number {\n if (root) {\n currentRoot = root;\n }\n if (componentId !== undefined) {\n currentComponentId = componentId;\n } else if (currentRoot) {\n currentComponentId = ++currentRoot.nextComponentId;\n }\n hookIndex = 0;\n return currentComponentId || 0;\n}\n\nexport function finishRender(): void {\n currentComponentId = null;\n}\n\nexport function getCurrentRoot(): RootState | null {\n return currentRoot;\n}\n\nexport function setCurrentRoot(root: RootState | null): void {\n currentRoot = root;\n}\n\nexport function getComponentState(root: RootState, compId: number): ComponentState {\n let state = root.components.get(compId);\n if (!state) {\n state = { states: [], effects: [], memos: [], refs: [] };\n root.components.set(compId, state);\n }\n return state;\n}\n\n// ---------------------------------------------------------------------------\n// setRenderCallback \u2014 bind a root to a re-render function\n// ---------------------------------------------------------------------------\n\nexport function setRenderCallback(\n callback: (element: any, container: HTMLElement) => Promise<void>,\n element: any,\n container: HTMLElement\n): void {\n if (!currentRoot) return;\n currentRoot.renderCallback = callback;\n currentRoot.currentElement = element;\n currentRoot.container = container;\n}\n\nexport function getCurrentRender(): number {\n return currentComponentId || 0;\n}\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * useState \u2014 manages component state\n */\nexport function useState<T>(initial: T): [T, (newValue: T | ((prev: T) => T)) => void] {\n const root = currentRoot;\n const compId = currentComponentId;\n\n if (!root || compId === null) {\n if (isServer) {\n // During SSR, return the initial value with a no-op setter\n return [initial, () => {}];\n }\n console.warn('useState called outside of render context');\n return [initial, () => {}];\n }\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n if (currentIndex >= compState.states.length) {\n compState.states.push(initial);\n }\n\n const state = compState.states[currentIndex];\n\n const setState = (newValue: T | ((prev: T) => T)) => {\n const currentState = compState.states[currentIndex];\n const value = typeof newValue === 'function'\n ? (newValue as (prev: T) => T)(currentState)\n : newValue;\n\n if (Object.is(currentState, value)) return;\n\n compState.states[currentIndex] = value;\n\n // Trigger re-render via root's callback\n if (root.renderCallback && root.container && root.currentElement) {\n root.renderCallback(root.currentElement, root.container);\n }\n };\n\n return [state, setState];\n}\n\n/**\n * useEffect \u2014 handles side effects, runs after render\n */\nexport function useEffect(callback: () => void | (() => void), deps?: any[]): void {\n const root = currentRoot;\n const compId = currentComponentId;\n if (!root || compId === null || isServer) return;\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n const prevEffect = compState.effects[currentIndex];\n\n const shouldRun = !prevEffect || !deps || !prevEffect.deps ||\n deps.some((dep, i) => !Object.is(dep, prevEffect.deps?.[i]));\n\n if (shouldRun) {\n if (prevEffect?.cleanup) {\n prevEffect.cleanup();\n }\n\n queueMicrotask(() => {\n const cleanup = callback();\n compState.effects[currentIndex] = {\n callback,\n deps,\n cleanup: typeof cleanup === 'function' ? cleanup : undefined\n };\n });\n }\n\n if (!prevEffect) {\n compState.effects.push({ callback, deps });\n }\n}\n\n/**\n * useLayoutEffect \u2014 runs synchronously after DOM mutations (client only)\n */\nexport function useLayoutEffect(callback: () => void | (() => void), deps?: any[]): void {\n if (isServer) return;\n\n const root = currentRoot;\n const compId = currentComponentId;\n if (!root || compId === null) return;\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n const prevEffect = compState.effects[currentIndex];\n\n const shouldRun = !prevEffect || !deps || !prevEffect.deps ||\n deps.some((dep, i) => !Object.is(dep, prevEffect.deps?.[i]));\n\n if (shouldRun) {\n if (prevEffect?.cleanup) {\n prevEffect.cleanup();\n }\n\n // Run synchronously (unlike useEffect which uses queueMicrotask)\n const cleanup = callback();\n compState.effects[currentIndex] = {\n callback,\n deps,\n cleanup: typeof cleanup === 'function' ? cleanup : undefined\n };\n }\n\n if (!prevEffect) {\n compState.effects.push({ callback, deps });\n }\n}\n\n/**\n * useMemo \u2014 memoizes expensive computations\n */\nexport function useMemo<T>(factory: () => T, deps?: any[]): T {\n const root = currentRoot;\n const compId = currentComponentId;\n\n if (!root || compId === null) {\n return factory();\n }\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n const prevMemo = compState.memos[currentIndex];\n\n const shouldRecalculate = !prevMemo || !deps || !prevMemo.deps ||\n deps.some((dep, i) => !Object.is(dep, prevMemo.deps?.[i]));\n\n if (shouldRecalculate) {\n const value = factory();\n compState.memos[currentIndex] = { value, deps };\n return value;\n }\n\n return prevMemo.value;\n}\n\n/**\n * useCallback \u2014 memoizes callbacks\n */\nexport function useCallback<T extends (...args: any[]) => any>(\n callback: T,\n deps: any[]\n): T {\n return useMemo(() => callback, deps);\n}\n\n/**\n * useRef \u2014 creates a mutable ref object\n */\nexport function useRef<T>(initial: T): { current: T } {\n const root = currentRoot;\n const compId = currentComponentId;\n\n if (!root || compId === null) {\n return { current: initial };\n }\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n if (compState.refs[currentIndex] === undefined) {\n compState.refs[currentIndex] = { current: initial };\n }\n\n return compState.refs[currentIndex];\n}\n\n/**\n * useReducer \u2014 manages complex state with a reducer\n */\nexport function useReducer<S, A>(\n reducer: (state: S, action: A) => S,\n initialState: S\n): [S, (action: A) => void] {\n const [state, setState] = useState(initialState);\n\n const dispatch = (action: A) => {\n setState((prevState) => reducer(prevState, action));\n };\n\n return [state, dispatch];\n}\n\n/**\n * useErrorBoundary \u2014 catches errors in child components\n */\nexport function useErrorBoundary(): [Error | null, () => void] {\n const [error, setError] = useState<Error | null>(null);\n const resetError = () => setError(null);\n return [error, resetError];\n}\n\n/**\n * useId \u2014 generates stable unique IDs\n */\nlet idCounter = 0;\nexport function useId(): string {\n const ref = useRef<string | null>(null);\n if (ref.current === null) {\n ref.current = `baraqex-id-${++idCounter}`;\n }\n return ref.current;\n}\n\n/**\n * Cleanup all hook state for a component within a root\n */\nexport function cleanupHooks(root: RootState, compId: number): void {\n const compState = root.components.get(compId);\n if (compState) {\n compState.effects.forEach(effect => {\n if (effect.cleanup) effect.cleanup();\n });\n root.components.delete(compId);\n }\n}\n\n/**\n * Cleanup all state for an entire root\n */\nexport function cleanupRoot(root: RootState): void {\n root.components.forEach((compState) => {\n compState.effects.forEach(effect => {\n if (effect.cleanup) effect.cleanup();\n });\n });\n root.components.clear();\n}\n\n// Re-export context hooks\nexport { createContext, useContext };\n", "/**\n * JSX Runtime \u2014 transforms JSX syntax into virtual DOM nodes\n *\n * jsx() and jsxs() produce VNode objects (universal).\n * createElement() produces real DOM nodes (browser-only).\n */\n\nimport { VNode } from './types.js';\nimport { prepareRender, finishRender, setRenderCallback, getCurrentRoot } from './hooks.js';\n\nconst isBrowser = typeof document !== 'undefined';\n\n// ---------------------------------------------------------------------------\n// VNode creation (universal \u2014 works in any environment)\n// ---------------------------------------------------------------------------\n\n/**\n * Create a virtual DOM node from JSX\n */\nexport function jsx(type: string | Function, props: any, ...children: any[]): VNode {\n const { key, ...restProps } = props || {};\n const processedProps = { ...restProps };\n\n // Children from trailing arguments (classic esbuild/babel/swc transform)\n if (children.length > 0) {\n processedProps.children = children.length === 1 ? children[0] : children;\n }\n\n const vnodeKey = key ?? processedProps.key;\n return { type, props: processedProps, key: vnodeKey };\n}\n\n/**\n * JSX with static children (optimization for multiple children)\n */\nexport const jsxs = jsx;\n\n/**\n * JSX development version with additional debugging info\n */\nexport function jsxDEV(\n type: string | Function,\n props: any,\n key?: string | number,\n _isStaticChildren?: boolean,\n _source?: any,\n _self?: any\n): VNode {\n if (key !== undefined) {\n return jsx(type, { ...props, key });\n }\n return jsx(type, props);\n}\n\n/**\n * Fragment \u2014 renders children without a wrapper element\n */\nexport const Fragment = ({ children }: { children: any }) => children;\n\n// ---------------------------------------------------------------------------\n// DOM element creation (browser-only)\n// ---------------------------------------------------------------------------\n\nfunction assertBrowser(method: string): void {\n if (!isBrowser) {\n throw new Error(\n `[baraqex] ${method}() can only be called in a browser environment. ` +\n `Use renderToString() for server-side rendering.`\n );\n }\n}\n\nfunction createTextNode(text: string): Text {\n return document.createTextNode(text);\n}\n\n/**\n * Apply props to a real DOM element\n */\nfunction applyProps(element: HTMLElement, props: Record<string, any>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children') continue;\n\n if (key === 'className') {\n element.setAttribute('class', String(value));\n } else if (key === 'htmlFor') {\n element.setAttribute('for', String(value));\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase();\n element.addEventListener(eventName, value as EventListener);\n } else if (key === 'style' && typeof value === 'object') {\n Object.assign(element.style, value);\n } else if (key === 'dangerouslySetInnerHTML' && value && (value as any).__html) {\n element.innerHTML = (value as any).__html;\n } else if (key === 'ref') {\n if (typeof value === 'function') {\n value(element);\n } else if (value && typeof value === 'object' && 'current' in value) {\n (value as { current: any }).current = element;\n }\n } else if (value !== false && value != null) {\n if (value === true) {\n element.setAttribute(key, '');\n } else {\n element.setAttribute(key, String(value));\n }\n }\n }\n}\n\n/**\n * Create a DOM element from a virtual node (async for component support)\n */\nexport async function createElement(vnode: VNode | any): Promise<Node> {\n assertBrowser('createElement');\n\n // Handle primitives and null\n if (vnode == null || typeof vnode === 'boolean') {\n return createTextNode('');\n }\n\n if (typeof vnode === 'number' || typeof vnode === 'string') {\n return createTextNode(String(vnode));\n }\n\n // Handle arrays\n if (Array.isArray(vnode)) {\n const fragment = document.createDocumentFragment();\n for (const child of vnode) {\n const node = await createElement(child);\n fragment.appendChild(node);\n }\n return fragment;\n }\n\n // Handle VNode\n if (typeof vnode === 'object' && 'type' in vnode && vnode.props !== undefined) {\n const { type, props } = vnode;\n\n // Handle function components\n if (typeof type === 'function') {\n if (type === Fragment) {\n const children = props?.children;\n if (children == null) return createTextNode('');\n return createElement(children);\n }\n\n const root = getCurrentRoot() ?? undefined;\n const renderId = prepareRender(root);\n try {\n const result = type(props || {});\n return await createElement(result);\n } finally {\n finishRender();\n }\n }\n\n // Create DOM element for intrinsic elements\n const element = document.createElement(type as string);\n applyProps(element, props || {});\n\n // Handle children\n const children = props?.children;\n if (children != null) {\n const childArray = Array.isArray(children) ? children : [children];\n for (const child of childArray) {\n const childNode = await createElement(child);\n element.appendChild(childNode);\n }\n }\n\n return element;\n }\n\n // Handle other objects by converting to string\n return createTextNode(String(vnode));\n}\n\n/**\n * Synchronous createElement (browser-only, no async component support)\n */\nexport function createElementSync(vnode: VNode | any): Node {\n assertBrowser('createElementSync');\n\n if (vnode == null || typeof vnode === 'boolean') {\n return createTextNode('');\n }\n\n if (typeof vnode === 'number' || typeof vnode === 'string') {\n return createTextNode(String(vnode));\n }\n\n if (Array.isArray(vnode)) {\n const fragment = document.createDocumentFragment();\n for (const child of vnode) {\n fragment.appendChild(createElementSync(child));\n }\n return fragment;\n }\n\n if (typeof vnode === 'object' && 'type' in vnode) {\n const { type, props } = vnode;\n\n if (typeof type === 'function') {\n if (type === Fragment) {\n return createElementSync(props?.children);\n }\n const result = type(props || {});\n return createElementSync(result);\n }\n\n const element = document.createElement(type as string);\n applyProps(element, props || {});\n\n const children = props?.children;\n if (children != null) {\n const childArray = Array.isArray(children) ? children : [children];\n for (const child of childArray) {\n element.appendChild(createElementSync(child));\n }\n }\n\n return element;\n }\n\n return createTextNode(String(vnode));\n}\n\n// Named exports\nexport default {\n jsx,\n jsxs,\n jsxDEV,\n Fragment,\n createElement,\n createElementSync\n};\n", "/**\n * Client-side renderer\n *\n * Each render call creates a RootState that holds all hook state for that\n * render tree. The renderer tracks the previous VNode so we can diff on\n * re-renders instead of tearing down the entire DOM.\n */\n\nimport { createElement } from './jsx-runtime.js';\nimport {\n prepareRender,\n finishRender,\n setRenderCallback,\n createRootState,\n cleanupRoot,\n type RootState\n} from './hooks.js';\nimport { batchUpdates } from './batch.js';\nimport { calculatePatches, applyPatches, type Patch } from './vdom.js';\nimport { VNode } from './types.js';\n\nconst isBrowser = typeof document !== 'undefined';\n\n// ---------------------------------------------------------------------------\n// Root tracking \u2014 maps containers to their roots\n// ---------------------------------------------------------------------------\n\nconst rootMap = new WeakMap<HTMLElement, RootState>();\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Render a virtual DOM tree into a container element.\n */\nexport async function render(element: VNode, container: HTMLElement): Promise<void> {\n if (!isBrowser) {\n throw new Error(\n '[baraqex] render() can only be called in a browser. ' +\n 'Use renderToString() for server-side rendering.'\n );\n }\n if (!container) {\n throw new Error('[baraqex] render() requires a container element');\n }\n\n let root = rootMap.get(container);\n if (!root) {\n root = createRootState();\n rootMap.set(container, root);\n }\n\n await batchUpdates(async () => {\n prepareRender(root);\n try {\n setRenderCallback(render as any, element, container);\n\n const domNode = await createElement(element);\n\n // Replace container contents\n container.textContent = '';\n container.appendChild(domNode);\n } finally {\n finishRender();\n }\n });\n}\n\n/**\n * Hydrate server-rendered HTML.\n *\n * In this initial implementation, hydration re-renders the component tree\n * and replaces the server HTML. A production implementation would walk the\n * existing DOM, attach event listeners, and reconcile without full replace.\n */\nexport async function hydrate(element: VNode, container: HTMLElement): Promise<void> {\n // For now, hydration = render. A real implementation would:\n // 1. Walk existing child nodes\n // 2. Match them against the VNode tree\n // 3. Attach event listeners without replacing DOM\n await render(element, container);\n}\n\n/**\n * Create a root for React 18+ compatible API.\n */\nexport function createRoot(container: HTMLElement) {\n const root = createRootState();\n rootMap.set(container, root);\n\n return {\n render: (element: VNode) => render(element, container),\n unmount: () => {\n cleanupRoot(root);\n rootMap.delete(container);\n container.textContent = '';\n }\n };\n}\n\n/**\n * Check if a container has an active root.\n */\nexport function hasRoot(container: HTMLElement): boolean {\n return rootMap.has(container);\n}\n\nexport default {\n render,\n hydrate,\n createRoot,\n hasRoot\n};\n", "/**\r\n * Server-side rendering - converts virtual DOM to HTML strings\r\n */\r\n\r\nimport { VNode } from './types.js';\r\nimport { prepareRender, finishRender } from './hooks.js';\r\n\r\ntype Component = (props: any) => any;\r\n\r\n// Self-closing HTML tags\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\n/**\r\n * Renders a virtual DOM tree to an HTML string\r\n */\r\nexport function renderToString(vnode: VNode | any): string {\r\n // Reset hook state for this render\r\n prepareRender();\r\n \r\n try {\r\n // Render the tree to HTML\r\n return renderNodeToString(vnode);\r\n } finally {\r\n // Clean up after rendering\r\n finishRender();\r\n }\r\n}\r\n\r\n/**\r\n * Renders to string with data for hydration\r\n */\r\nexport function renderToStringWithData(vnode: VNode | any): { html: string; data: any } {\r\n const html = renderToString(vnode);\r\n return { html, data: {} };\r\n}\r\n\r\n/**\r\n * Stream rendering for large pages\r\n */\r\nexport async function* renderToStream(vnode: VNode | any): AsyncGenerator<string> {\r\n yield renderToString(vnode);\r\n}\r\n\r\n/**\r\n * Internal function to convert a virtual node to an HTML string\r\n */\r\nfunction renderNodeToString(vnode: VNode | string | number | boolean | null | undefined | any[]): string {\r\n // Handle primitive values\r\n if (vnode === null || vnode === undefined) return '';\r\n if (typeof vnode === 'boolean') return '';\r\n if (typeof vnode === 'number' || typeof vnode === 'string') return escapeHtml(String(vnode));\r\n \r\n // Handle arrays\r\n if (Array.isArray(vnode)) {\r\n return vnode.map(child => renderNodeToString(child)).join('');\r\n }\r\n \r\n // Handle objects without type (not VNode)\r\n if (typeof vnode !== 'object' || vnode.type === undefined) {\r\n return escapeHtml(String(vnode));\r\n }\r\n \r\n const { type, props } = vnode;\r\n \r\n // Handle function components\r\n if (typeof type === 'function') {\r\n // Handle Fragment\r\n if (type.name === 'Fragment' || (type as unknown) === Symbol.for('react.fragment')) {\r\n const children = props?.children;\r\n if (children == null) return '';\r\n return Array.isArray(children)\r\n ? children.map(child => renderNodeToString(child)).join('')\r\n : renderNodeToString(children);\r\n }\r\n \r\n const Component = type as Component;\r\n try {\r\n const renderedNode = Component(props || {});\r\n return renderNodeToString(renderedNode);\r\n } catch (error) {\r\n console.error('Error rendering component:', error);\r\n return `<!-- Error rendering component: ${escapeHtml(String(error))} -->`;\r\n }\r\n }\r\n \r\n // Handle intrinsic elements (regular HTML tags)\r\n if (typeof type === 'string') {\r\n const tag = type;\r\n let attrs = '';\r\n \r\n // Convert props to HTML attributes\r\n if (props) {\r\n for (const [key, value] of Object.entries(props)) {\r\n if (key === 'children') continue;\r\n if (key === 'dangerouslySetInnerHTML') continue;\r\n if (key === 'ref') continue;\r\n if (value === undefined || value === null || value === false) continue;\r\n \r\n let attrName = key;\r\n let attrValue = value;\r\n \r\n // Handle special attribute names\r\n if (key === 'className') attrName = 'class';\r\n else if (key === 'htmlFor') attrName = 'for';\r\n else if (key === 'tabIndex') attrName = 'tabindex';\r\n \r\n // Skip event handlers\r\n if (attrName.startsWith('on') && typeof value === 'function') continue;\r\n \r\n // Handle style object\r\n if (attrName === 'style' && typeof value === 'object') {\r\n attrValue = Object.entries(value)\r\n .map(([prop, val]) => {\r\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n return `${cssProperty}: ${val}`;\r\n })\r\n .join('; ');\r\n }\r\n \r\n // Handle boolean attributes\r\n if (value === true) {\r\n attrs += ` ${attrName}`;\r\n } else {\r\n attrs += ` ${attrName}=\"${escapeHtml(String(attrValue))}\"`;\r\n }\r\n }\r\n }\r\n \r\n // Self-closing tags\r\n if (VOID_ELEMENTS.has(tag)) {\r\n return `<${tag}${attrs} />`;\r\n }\r\n \r\n // Handle dangerouslySetInnerHTML\r\n if (props?.dangerouslySetInnerHTML?.__html) {\r\n return `<${tag}${attrs}>${props.dangerouslySetInnerHTML.__html}</${tag}>`;\r\n }\r\n \r\n // Process children\r\n let children = '';\r\n const childrenArray = props?.children \r\n ? Array.isArray(props.children) ? props.children : [props.children]\r\n : [];\r\n \r\n for (const child of childrenArray) {\r\n children += renderNodeToString(child);\r\n }\r\n \r\n return `<${tag}${attrs}>${children}</${tag}>`;\r\n }\r\n \r\n // Handle Fragment symbol\r\n if (type === Symbol.for('react.fragment')) {\r\n const children = props?.children;\r\n if (children == null) return '';\r\n return Array.isArray(children)\r\n ? children.map(child => renderNodeToString(child)).join('')\r\n : renderNodeToString(children);\r\n }\r\n \r\n // Fallback for unknown node types\r\n console.warn('Unknown vnode type:', type);\r\n return '';\r\n}\r\n\r\n/**\r\n * Escape HTML special characters to prevent XSS\r\n */\r\nfunction escapeHtml(text: string): string {\r\n return text\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#039;');\r\n}\r\n\r\nexport default {\r\n renderToString,\r\n renderToStringWithData,\r\n renderToStream\r\n};\r\n", "/**\n * Virtual DOM diffing and patching utilities\n *\n * Provides diff detection, patch calculation, and DOM patch application.\n * Supports keyed children for efficient list reconciliation.\n */\n\nimport { VNode } from './types.js';\n\nconst isBrowser = typeof document !== 'undefined';\n\n// ---------------------------------------------------------------------------\n// Props comparison\n// ---------------------------------------------------------------------------\n\nfunction arePropsEqual(oldProps: any, newProps: any): boolean {\n const oldKeys = Object.keys(oldProps || {}).filter(k => k !== 'children');\n const newKeys = Object.keys(newProps || {}).filter(k => k !== 'children');\n\n if (oldKeys.length !== newKeys.length) return false;\n return oldKeys.every(key => Object.is(oldProps[key], newProps[key]));\n}\n\n// ---------------------------------------------------------------------------\n// Diff detection (returns boolean \u2014 needs re-render?)\n// ---------------------------------------------------------------------------\n\nexport function diff(oldNode: VNode | any, newNode: VNode | any): boolean {\n if (oldNode == null || newNode == null) {\n return oldNode !== newNode;\n }\n\n if (typeof oldNode !== typeof newNode) return true;\n\n if (typeof newNode === 'string' || typeof newNode === 'number') {\n return oldNode !== newNode;\n }\n\n if (Array.isArray(oldNode) && Array.isArray(newNode)) {\n if (oldNode.length !== newNode.length) return true;\n return oldNode.some((child, i) => diff(child, newNode[i]));\n }\n\n if (typeof oldNode === 'object' && typeof newNode === 'object') {\n if (newNode.type !== oldNode.type) return true;\n if (newNode.key !== oldNode.key) return true;\n return !arePropsEqual(oldNode.props, newNode.props);\n }\n\n return oldNode !== newNode;\n}\n\nexport function shouldComponentUpdate(oldProps: any, newProps: any): boolean {\n return !arePropsEqual(oldProps, newProps);\n}\n\n// ---------------------------------------------------------------------------\n// Patch types\n// ---------------------------------------------------------------------------\n\nexport interface Patch {\n type: 'CREATE' | 'REMOVE' | 'REPLACE' | 'UPDATE' | 'SET_PROP' | 'REMOVE_PROP';\n node?: VNode | any;\n props?: Record<string, any>;\n children?: Patch[];\n}\n\n// ---------------------------------------------------------------------------\n// Patch calculation\n// ---------------------------------------------------------------------------\n\nexport function calculatePatches(oldNode: VNode | any, newNode: VNode | any): Patch | null {\n if (oldNode == null && newNode != null) {\n return { type: 'CREATE', node: newNode };\n }\n\n if (oldNode != null && newNode == null) {\n return { type: 'REMOVE' };\n }\n\n if (oldNode == null && newNode == null) {\n return null;\n }\n\n if (typeof oldNode !== typeof newNode) {\n return { type: 'REPLACE', node: newNode };\n }\n\n if (typeof newNode === 'string' || typeof newNode === 'number') {\n if (oldNode !== newNode) {\n return { type: 'REPLACE', node: newNode };\n }\n return null;\n }\n\n if (typeof oldNode === 'object' && typeof newNode === 'object' && 'type' in newNode) {\n if (oldNode.type !== newNode.type) {\n return { type: 'REPLACE', node: newNode };\n }\n\n const propPatches: Record<string, any> = {};\n let hasChanges = false;\n\n const newProps = newNode.props || {};\n const oldProps = oldNode.props || {};\n\n for (const key of Object.keys(newProps)) {\n if (key === 'children') continue;\n if (!Object.is(newProps[key], oldProps[key])) {\n propPatches[key] = newProps[key];\n hasChanges = true;\n }\n }\n\n for (const key of Object.keys(oldProps)) {\n if (key === 'children') continue;\n if (!(key in newProps)) {\n propPatches[key] = undefined;\n hasChanges = true;\n }\n }\n\n // Children diffing with key support\n const oldChildren = normalizeChildren(oldProps.children);\n const newChildren = normalizeChildren(newProps.children);\n const childPatches = diffChildren(oldChildren, newChildren);\n\n if (childPatches.length > 0) {\n hasChanges = true;\n }\n\n if (hasChanges) {\n return {\n type: 'UPDATE',\n props: propPatches,\n children: childPatches.length > 0 ? childPatches : undefined\n };\n }\n\n return null;\n }\n\n return null;\n}\n\nfunction normalizeChildren(children: any): any[] {\n if (children == null) return [];\n return Array.isArray(children) ? children : [children];\n}\n\n/**\n * Diff two lists of children using keys for reconciliation.\n * Returns an ordered list of patches.\n */\nfunction diffChildren(oldChildren: any[], newChildren: any[]): Patch[] {\n const patches: Patch[] = [];\n\n // Build key \u2192 index maps\n const oldKeyMap = new Map<string | number, number>();\n oldChildren.forEach((child, i) => {\n if (child && typeof child === 'object' && child.key != null) {\n oldKeyMap.set(child.key, i);\n }\n });\n\n const newKeyMap = new Map<string | number, number>();\n newChildren.forEach((child, i) => {\n if (child && typeof child === 'object' && child.key != null) {\n newKeyMap.set(child.key, i);\n }\n });\n\n const maxLen = Math.max(oldChildren.length, newChildren.length);\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = i < oldChildren.length ? oldChildren[i] : null;\n const newChild = i < newChildren.length ? newChildren[i] : null;\n\n const patch = calculatePatches(oldChild, newChild);\n if (patch) {\n patches.push(patch);\n }\n }\n\n return patches;\n}\n\n// ---------------------------------------------------------------------------\n// DOM patch application\n// ---------------------------------------------------------------------------\n\n/**\n * Apply a patch to a DOM element. Returns the replacement element (or null\n * if the element was removed).\n */\nexport function applyPatches(element: Element, patch: Patch): Element | null {\n if (!isBrowser) return element;\n\n switch (patch.type) {\n case 'REMOVE':\n element.parentNode?.removeChild(element);\n return null;\n\n case 'REPLACE': {\n if (!patch.node) return element;\n // We need createElement here \u2014 import lazily to avoid circular deps\n // In practice, replace is handled at a higher level by the renderer\n const newNode = patch.node;\n if (typeof newNode === 'string' || typeof newNode === 'number') {\n const textNode = document.createTextNode(String(newNode));\n element.parentNode?.replaceChild(textNode, element);\n return null;\n }\n // For VNode replacements, the caller should use createElement + replaceChild\n // This is a fallback that just clears the element\n element.textContent = '';\n return element;\n }\n\n case 'UPDATE': {\n if (patch.props) {\n for (const [key, value] of Object.entries(patch.props)) {\n if (value === undefined) {\n const attrName = key === 'className' ? 'class' : key;\n element.removeAttribute(attrName);\n } else if (key === 'className') {\n element.setAttribute('class', String(value));\n } else if (key === 'style' && typeof value === 'object') {\n const htmlEl = element as HTMLElement;\n for (const [prop, val] of Object.entries(value)) {\n (htmlEl.style as any)[prop] = val;\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase();\n // Remove old listener if any, add new one\n const attrName = `data-baraqex-listener-${eventName}`;\n const oldHandler = (element as any).__baraqexHandlers?.[eventName];\n if (oldHandler) {\n element.removeEventListener(eventName, oldHandler);\n }\n element.addEventListener(eventName, value as EventListener);\n if (!(element as any).__baraqexHandlers) {\n (element as any).__baraqexHandlers = {};\n }\n (element as any).__baraqexHandlers[eventName] = value;\n } else if (key === 'ref') {\n if (typeof value === 'function') {\n value(element);\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = element;\n }\n } else {\n if (value === true) {\n element.setAttribute(key, '');\n } else {\n element.setAttribute(key, String(value));\n }\n }\n }\n }\n return element;\n }\n\n default:\n return element;\n }\n}\n\nexport default {\n diff,\n shouldComponentUpdate,\n calculatePatches,\n applyPatches\n};\n", "/**\r\n * Class-based Component support (for legacy compatibility)\r\n */\r\n\r\nimport { createElement } from './jsx-runtime.js';\r\nimport { VNode } from './types.js';\r\n\r\nexport abstract class Component<P = {}, S = {}> {\r\n props: P;\r\n state: S;\r\n element: HTMLElement | null = null;\r\n private _mounted: boolean = false;\r\n private _pendingState: Partial<S> | null = null;\r\n\r\n constructor(props: P) {\r\n this.props = props;\r\n this.state = {} as S;\r\n }\r\n\r\n /**\r\n * Called after the component is mounted to the DOM\r\n */\r\n componentDidMount(): void {}\r\n\r\n /**\r\n * Called before the component is unmounted from the DOM\r\n */\r\n componentWillUnmount(): void {}\r\n\r\n /**\r\n * Called when the component receives new props\r\n */\r\n componentDidUpdate(_prevProps: P, _prevState: S): void {}\r\n\r\n /**\r\n * Determine if the component should re-render\r\n */\r\n shouldComponentUpdate(_nextProps: P, _nextState: S): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Update component state and trigger re-render\r\n */\r\n setState(newState: Partial<S> | ((prevState: S, props: P) => Partial<S>)): void {\r\n const prevState = { ...this.state };\r\n \r\n const stateUpdate = typeof newState === 'function'\r\n ? newState(this.state, this.props)\r\n : newState;\r\n \r\n this.state = { ...this.state, ...stateUpdate };\r\n \r\n if (this._mounted) {\r\n if (this.shouldComponentUpdate(this.props, this.state)) {\r\n this._update();\r\n this.componentDidUpdate(this.props, prevState);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Force a re-render without checking shouldComponentUpdate\r\n */\r\n forceUpdate(): void {\r\n this._update();\r\n }\r\n\r\n /**\r\n * Internal update method\r\n */\r\n private async _update(): Promise<void> {\r\n const vdom = this.render();\r\n if (!vdom || !this.element?.parentNode) return;\r\n \r\n const newElement = await createElement(vdom);\r\n if (newElement instanceof HTMLElement) {\r\n this.element.parentNode.replaceChild(newElement, this.element);\r\n this.element = newElement;\r\n }\r\n }\r\n\r\n /**\r\n * Mount the component to a container\r\n */\r\n async mount(container: HTMLElement): Promise<void> {\r\n const vdom = this.render();\r\n if (!vdom) return;\r\n \r\n const element = await createElement(vdom);\r\n if (element instanceof HTMLElement) {\r\n this.element = element;\r\n container.appendChild(element);\r\n this._mounted = true;\r\n this.componentDidMount();\r\n }\r\n }\r\n\r\n /**\r\n * Unmount the component\r\n */\r\n unmount(): void {\r\n if (this.element?.parentNode) {\r\n this.componentWillUnmount();\r\n this.element.parentNode.removeChild(this.element);\r\n this._mounted = false;\r\n this.element = null;\r\n }\r\n }\r\n\r\n /**\r\n * Render method - must be implemented by subclasses\r\n */\r\n abstract render(): VNode | null;\r\n}\r\n\r\n/**\r\n * Create a class component wrapper for functional use\r\n */\r\nexport function createClassComponent<P>(\r\n ComponentClass: new (props: P) => Component<P>\r\n): (props: P) => VNode | null {\r\n return (props: P) => {\r\n const instance = new ComponentClass(props);\r\n return instance.render();\r\n };\r\n}\r\n\r\n/**\r\n * Pure Component - only re-renders when props change (shallow comparison)\r\n */\r\nexport abstract class PureComponent<P = {}, S = {}> extends Component<P, S> {\r\n shouldComponentUpdate(nextProps: P, nextState: S): boolean {\r\n // Shallow comparison of props\r\n const propsKeys = Object.keys(this.props as object) as (keyof P)[];\r\n const nextPropsKeys = Object.keys(nextProps as object) as (keyof P)[];\r\n \r\n if (propsKeys.length !== nextPropsKeys.length) return true;\r\n \r\n for (const key of propsKeys) {\r\n if (!Object.is(this.props[key], nextProps[key])) return true;\r\n }\r\n \r\n // Shallow comparison of state\r\n const stateKeys = Object.keys(this.state as object) as (keyof S)[];\r\n const nextStateKeys = Object.keys(nextState as object) as (keyof S)[];\r\n \r\n if (stateKeys.length !== nextStateKeys.length) return true;\r\n \r\n for (const key of stateKeys) {\r\n if (!Object.is(this.state[key], nextState[key])) return true;\r\n }\r\n \r\n return false;\r\n }\r\n}\r\n\r\nexport default {\r\n Component,\r\n PureComponent,\r\n createClassComponent\r\n};\r\n", "/**\r\n * Event Bus for cross-component communication\r\n */\r\n\r\nexport type EventHandler = (...args: any[]) => void;\r\n\r\nexport interface EventBus {\r\n on(event: string, handler: EventHandler): () => void;\r\n once(event: string, handler: EventHandler): () => void;\r\n off(event: string, handler?: EventHandler): void;\r\n emit(event: string, ...args: any[]): void;\r\n clear(event?: string): void;\r\n}\r\n\r\n/**\r\n * Create a new event bus instance\r\n */\r\nexport function createEventBus(): EventBus {\r\n const events = new Map<string, Set<EventHandler>>();\r\n const onceHandlers = new WeakMap<EventHandler, EventHandler>();\r\n \r\n const on = (event: string, handler: EventHandler): (() => void) => {\r\n if (!events.has(event)) {\r\n events.set(event, new Set());\r\n }\r\n \r\n events.get(event)!.add(handler);\r\n \r\n // Return unsubscribe function\r\n return () => off(event, handler);\r\n };\r\n \r\n const once = (event: string, handler: EventHandler): (() => void) => {\r\n const onceWrapper: EventHandler = (...args: any[]) => {\r\n handler(...args);\r\n off(event, onceWrapper);\r\n };\r\n \r\n onceHandlers.set(handler, onceWrapper);\r\n return on(event, onceWrapper);\r\n };\r\n \r\n const off = (event: string, handler?: EventHandler): void => {\r\n if (!handler) {\r\n events.delete(event);\r\n return;\r\n }\r\n \r\n const handlers = events.get(event);\r\n if (!handlers) return;\r\n \r\n handlers.delete(handler);\r\n \r\n // Also try to remove the once wrapper\r\n const onceWrapper = onceHandlers.get(handler);\r\n if (onceWrapper) {\r\n handlers.delete(onceWrapper);\r\n onceHandlers.delete(handler);\r\n }\r\n \r\n if (handlers.size === 0) {\r\n events.delete(event);\r\n }\r\n };\r\n \r\n const emit = (event: string, ...args: any[]): void => {\r\n const handlers = events.get(event);\r\n if (!handlers) return;\r\n \r\n // Create a copy to avoid issues if handlers modify the set\r\n const handlersCopy = Array.from(handlers);\r\n for (const handler of handlersCopy) {\r\n try {\r\n handler(...args);\r\n } catch (error) {\r\n console.error(`Error in event handler for \"${event}\":`, error);\r\n }\r\n }\r\n };\r\n \r\n const clear = (event?: string): void => {\r\n if (event) {\r\n events.delete(event);\r\n } else {\r\n events.clear();\r\n }\r\n };\r\n \r\n return { on, once, off, emit, clear };\r\n}\r\n\r\n// Global event bus instance\r\nexport const eventBus = createEventBus();\r\n\r\n/**\r\n * Hook to subscribe to events in components\r\n */\r\nexport function useEvent(\r\n event: string,\r\n handler: EventHandler,\r\n options: { once?: boolean } = {}\r\n): () => void {\r\n return options.once\r\n ? eventBus.once(event, handler)\r\n : eventBus.on(event, handler);\r\n}\r\n\r\nexport default {\r\n createEventBus,\r\n eventBus,\r\n useEvent\r\n};\r\n", "/**\r\n * Client-side Router for Single Page Applications\r\n */\r\n\r\nimport { createContext, useContext } from './context.js';\r\nimport { useState, useEffect, useRef } from './hooks.js';\r\nimport { jsx } from './jsx-runtime.js';\r\nimport { VNode } from './types.js';\r\n\r\nexport interface Route {\r\n path: string;\r\n component: (props: any) => VNode | null;\r\n exact?: boolean;\r\n children?: Route[];\r\n}\r\n\r\nexport interface RouterState {\r\n pathname: string;\r\n search: string;\r\n hash: string;\r\n params: Record<string, string>;\r\n query: Record<string, string>;\r\n}\r\n\r\nexport interface RouterContextValue extends RouterState {\r\n navigate: (to: string, options?: NavigateOptions) => void;\r\n back: () => void;\r\n forward: () => void;\r\n match: (pattern: string) => boolean;\r\n}\r\n\r\nexport interface NavigateOptions {\r\n replace?: boolean;\r\n state?: any;\r\n}\r\n\r\n// Router context\r\nexport const RouterContext = createContext<RouterContextValue>({\r\n pathname: '/',\r\n search: '',\r\n hash: '',\r\n params: {},\r\n query: {},\r\n navigate: () => {},\r\n back: () => {},\r\n forward: () => {},\r\n match: () => false\r\n});\r\n\r\n/**\r\n * Parse URL search params into an object\r\n */\r\nfunction parseQuery(search: string): Record<string, string> {\r\n const query: Record<string, string> = {};\r\n const params = new URLSearchParams(search);\r\n params.forEach((value, key) => {\r\n query[key] = value;\r\n });\r\n return query;\r\n}\r\n\r\n/**\r\n * Match a pathname against a route pattern\r\n */\r\nfunction matchPath(pathname: string, pattern: string, exact: boolean = false): { \r\n match: boolean; \r\n params: Record<string, string> \r\n} {\r\n const params: Record<string, string> = {};\r\n \r\n // Convert pattern to regex\r\n const patternParts = pattern.split('/').filter(Boolean);\r\n const pathParts = pathname.split('/').filter(Boolean);\r\n \r\n if (exact && patternParts.length !== pathParts.length) {\r\n return { match: false, params };\r\n }\r\n \r\n if (patternParts.length > pathParts.length) {\r\n return { match: false, params };\r\n }\r\n \r\n for (let i = 0; i < patternParts.length; i++) {\r\n const patternPart = patternParts[i];\r\n const pathPart = pathParts[i];\r\n \r\n if (patternPart.startsWith(':')) {\r\n // Dynamic segment\r\n const paramName = patternPart.slice(1);\r\n params[paramName] = decodeURIComponent(pathPart);\r\n } else if (patternPart === '*') {\r\n // Wildcard - matches rest of path\r\n params['*'] = pathParts.slice(i).join('/');\r\n return { match: true, params };\r\n } else if (patternPart !== pathPart) {\r\n return { match: false, params };\r\n }\r\n }\r\n \r\n return { match: true, params };\r\n}\r\n\r\n/**\r\n * Router Provider component\r\n */\r\nexport function RouterProvider({ \r\n children \r\n}: { \r\n children: any \r\n}): VNode {\r\n const [location, setLocation] = useState<RouterState>((() => {\r\n if (typeof window === 'undefined') {\r\n return { pathname: '/', search: '', hash: '', params: {}, query: {} };\r\n }\r\n return {\r\n pathname: window.location.pathname,\r\n search: window.location.search,\r\n hash: window.location.hash,\r\n params: {},\r\n query: parseQuery(window.location.search)\r\n };\r\n })());\r\n \r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n \r\n const handlePopState = () => {\r\n setLocation({\r\n pathname: window.location.pathname,\r\n search: window.location.search,\r\n hash: window.location.hash,\r\n params: {},\r\n query: parseQuery(window.location.search)\r\n });\r\n };\r\n \r\n window.addEventListener('popstate', handlePopState);\r\n return () => window.removeEventListener('popstate', handlePopState);\r\n }, []);\r\n \r\n const navigate = (to: string, options: NavigateOptions = {}) => {\r\n if (typeof window === 'undefined') return;\r\n \r\n const url = new URL(to, window.location.origin);\r\n \r\n if (options.replace) {\r\n window.history.replaceState(options.state || null, '', url.href);\r\n } else {\r\n window.history.pushState(options.state || null, '', url.href);\r\n }\r\n \r\n setLocation({\r\n pathname: url.pathname,\r\n search: url.search,\r\n hash: url.hash,\r\n params: {},\r\n query: parseQuery(url.search)\r\n });\r\n };\r\n \r\n const back = () => {\r\n if (typeof window !== 'undefined') {\r\n window.history.back();\r\n }\r\n };\r\n \r\n const forward = () => {\r\n if (typeof window !== 'undefined') {\r\n window.history.forward();\r\n }\r\n };\r\n \r\n const match = (pattern: string) => {\r\n return matchPath(location.pathname, pattern).match;\r\n };\r\n \r\n const contextValue: RouterContextValue = {\r\n ...location,\r\n navigate,\r\n back,\r\n forward,\r\n match\r\n };\r\n \r\n return jsx(RouterContext.Provider, { value: contextValue, children });\r\n}\r\n\r\n/**\r\n * Router component - renders matching routes\r\n */\r\nexport function Router({ routes }: { routes: Route[] }): VNode | null {\r\n const { pathname, params: existingParams } = useContext(RouterContext);\r\n \r\n for (const route of routes) {\r\n const { match, params } = matchPath(pathname, route.path, route.exact);\r\n if (match) {\r\n const Component = route.component;\r\n return jsx(Component, { ...params, ...existingParams });\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Route component - conditionally renders based on path match\r\n */\r\nexport function Route({ \r\n path, \r\n component: Component, \r\n exact = false \r\n}: { \r\n path: string; \r\n component: (props: any) => VNode | null; \r\n exact?: boolean \r\n}): VNode | null {\r\n const { pathname } = useContext(RouterContext);\r\n const { match, params } = matchPath(pathname, path, exact);\r\n \r\n if (match) {\r\n return jsx(Component, params);\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Switch component - renders first matching child route\r\n */\r\nexport function Switch({ children }: { children: any }): VNode | null {\r\n const { pathname } = useContext(RouterContext);\r\n const routes = Array.isArray(children) ? children : [children];\r\n \r\n for (const child of routes) {\r\n if (child?.props?.path) {\r\n const exact = child.props.exact ?? false;\r\n const { match } = matchPath(pathname, child.props.path, exact);\r\n if (match) {\r\n return child;\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Link component - navigation without page reload\r\n */\r\nexport function Link({ \r\n to, \r\n children, \r\n replace = false,\r\n className = '',\r\n activeClassName = '',\r\n ...rest \r\n}: { \r\n to: string; \r\n children: any;\r\n replace?: boolean;\r\n className?: string;\r\n activeClassName?: string;\r\n [key: string]: any;\r\n}): VNode {\r\n const { pathname, navigate } = useContext(RouterContext);\r\n const isActive = pathname === to || pathname.startsWith(to + '/');\r\n \r\n const handleClick = (e: MouseEvent) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n };\r\n \r\n const combinedClassName = isActive && activeClassName \r\n ? `${className} ${activeClassName}`.trim()\r\n : className;\r\n \r\n return jsx('a', {\r\n href: to,\r\n onClick: handleClick,\r\n className: combinedClassName || undefined,\r\n ...rest,\r\n children\r\n });\r\n}\r\n\r\n/**\r\n * Redirect component\r\n */\r\nexport function Redirect({ \r\n to, \r\n replace = true \r\n}: { \r\n to: string; \r\n replace?: boolean \r\n}): null {\r\n const { navigate } = useContext(RouterContext);\r\n \r\n useEffect(() => {\r\n navigate(to, { replace });\r\n }, [to, replace]);\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * NavLink component \u2014 Link with automatic active class.\r\n * Defaults to \"active\" class when the link matches the current path.\r\n */\r\nexport function NavLink({\r\n to,\r\n children,\r\n activeClassName = 'active',\r\n className = '',\r\n exact = false,\r\n ...rest\r\n}: {\r\n to: string;\r\n children: any;\r\n activeClassName?: string;\r\n className?: string;\r\n exact?: boolean;\r\n [key: string]: any;\r\n}): VNode {\r\n const { pathname, navigate } = useContext(RouterContext);\r\n const { match } = matchPath(pathname, to, exact);\r\n const isActive = match;\r\n\r\n const combinedClassName = isActive\r\n ? `${className} ${activeClassName}`.trim()\r\n : className;\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n e.preventDefault();\r\n navigate(to);\r\n };\r\n\r\n return jsx('a', {\r\n href: to,\r\n onClick: handleClick,\r\n className: combinedClassName || undefined,\r\n 'aria-current': isActive ? 'page' : undefined,\r\n ...rest,\r\n children\r\n });\r\n}\r\n\r\n// Hooks\r\nexport function useRouter(): RouterContextValue {\r\n return useContext(RouterContext);\r\n}\r\n\r\nexport function useLocation(): RouterState {\r\n const { pathname, search, hash, params, query } = useContext(RouterContext);\r\n return { pathname, search, hash, params, query };\r\n}\r\n\r\nexport function useParams<T extends Record<string, string> = Record<string, string>>(): T {\r\n const { params } = useContext(RouterContext);\r\n return params as T;\r\n}\r\n\r\nexport function useNavigate(): (to: string, options?: NavigateOptions) => void {\r\n const { navigate } = useContext(RouterContext);\r\n return navigate;\r\n}\r\n\r\nexport function useSearchParams(): [URLSearchParams, (params: URLSearchParams) => void] {\r\n const { search, navigate, pathname } = useContext(RouterContext);\r\n const searchParams = new URLSearchParams(search);\r\n \r\n const setSearchParams = (newParams: URLSearchParams) => {\r\n navigate(`${pathname}?${newParams.toString()}`);\r\n };\r\n \r\n return [searchParams, setSearchParams];\r\n}\r\n\r\nexport function useMatch(pattern: string): Record<string, string> | null {\r\n const { pathname } = useContext(RouterContext);\r\n const { match, params } = matchPath(pathname, pattern);\r\n return match ? params : null;\r\n}\r\n\r\nexport default {\r\n RouterProvider,\r\n Router,\r\n Route,\r\n Switch,\r\n Link,\r\n NavLink,\r\n Redirect,\r\n useRouter,\r\n useLocation,\r\n useParams,\r\n useNavigate,\r\n useSearchParams,\r\n useMatch,\r\n RouterContext\r\n};\r\n", "/**\r\n * Form handling utilities\r\n */\r\n\r\nimport { useState, useEffect, useRef, useCallback, useMemo } from './hooks.js';\r\n\r\nexport interface FormField {\r\n value: any;\r\n error?: string;\r\n touched: boolean;\r\n dirty: boolean;\r\n}\r\n\r\nexport interface FormState {\r\n fields: Record<string, FormField>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n submitCount: number;\r\n}\r\n\r\nexport interface ValidationRule {\r\n required?: boolean | string;\r\n minLength?: number | { value: number; message: string };\r\n maxLength?: number | { value: number; message: string };\r\n min?: number | { value: number; message: string };\r\n max?: number | { value: number; message: string };\r\n pattern?: RegExp | { value: RegExp; message: string };\r\n validate?: (value: any, values: any) => string | undefined | boolean;\r\n}\r\n\r\nexport interface FormOptions<T extends Record<string, any>> {\r\n initialValues: T;\r\n validate?: (values: T) => Record<string, string>;\r\n validationRules?: Record<keyof T, ValidationRule>;\r\n onSubmit?: (values: T, form: FormConfig<T>) => void | Promise<void>;\r\n validateOnChange?: boolean;\r\n validateOnBlur?: boolean;\r\n}\r\n\r\nexport interface FormConfig<T extends Record<string, any>> {\r\n values: T;\r\n errors: Record<string, string>;\r\n touched: Record<string, boolean>;\r\n dirty: Record<string, boolean>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n submitCount: number;\r\n handleChange: (e: any) => void;\r\n handleBlur: (e: any) => void;\r\n handleSubmit: (e?: any) => Promise<void>;\r\n setFieldValue: (field: keyof T, value: any) => void;\r\n setFieldError: (field: keyof T, error: string) => void;\r\n setFieldTouched: (field: keyof T, touched?: boolean) => void;\r\n setValues: (values: Partial<T>) => void;\r\n setErrors: (errors: Record<string, string>) => void;\r\n resetForm: (nextValues?: Partial<T>) => void;\r\n validateField: (field: keyof T) => string | undefined;\r\n validateForm: () => Record<string, string>;\r\n getFieldProps: (field: keyof T) => {\r\n name: string;\r\n value: any;\r\n onChange: (e: any) => void;\r\n onBlur: (e: any) => void;\r\n };\r\n register: (field: keyof T) => {\r\n name: string;\r\n value: any;\r\n onChange: (e: any) => void;\r\n onBlur: (e: any) => void;\r\n };\r\n}\r\n\r\n/**\r\n * Validate a single field against rules\r\n */\r\nfunction validateFieldValue(value: any, rules: ValidationRule, allValues: any): string | undefined {\r\n // Required\r\n if (rules.required) {\r\n const isEmpty = value === undefined || value === null || value === '' || \r\n (Array.isArray(value) && value.length === 0);\r\n if (isEmpty) {\r\n return typeof rules.required === 'string' ? rules.required : 'This field is required';\r\n }\r\n }\r\n \r\n // Skip other validations if empty and not required\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n \r\n // MinLength\r\n if (rules.minLength !== undefined) {\r\n const minLength = typeof rules.minLength === 'object' ? rules.minLength.value : rules.minLength;\r\n const message = typeof rules.minLength === 'object' \r\n ? rules.minLength.message \r\n : `Minimum length is ${minLength}`;\r\n if (String(value).length < minLength) {\r\n return message;\r\n }\r\n }\r\n \r\n // MaxLength\r\n if (rules.maxLength !== undefined) {\r\n const maxLength = typeof rules.maxLength === 'object' ? rules.maxLength.value : rules.maxLength;\r\n const message = typeof rules.maxLength === 'object'\r\n ? rules.maxLength.message\r\n : `Maximum length is ${maxLength}`;\r\n if (String(value).length > maxLength) {\r\n return message;\r\n }\r\n }\r\n \r\n // Min (number)\r\n if (rules.min !== undefined) {\r\n const min = typeof rules.min === 'object' ? rules.min.value : rules.min;\r\n const message = typeof rules.min === 'object'\r\n ? rules.min.message\r\n : `Minimum value is ${min}`;\r\n if (Number(value) < min) {\r\n return message;\r\n }\r\n }\r\n \r\n // Max (number)\r\n if (rules.max !== undefined) {\r\n const max = typeof rules.max === 'object' ? rules.max.value : rules.max;\r\n const message = typeof rules.max === 'object'\r\n ? rules.max.message\r\n : `Maximum value is ${max}`;\r\n if (Number(value) > max) {\r\n return message;\r\n }\r\n }\r\n \r\n // Pattern\r\n if (rules.pattern !== undefined) {\r\n const pattern = rules.pattern instanceof RegExp ? rules.pattern : rules.pattern.value;\r\n const message = rules.pattern instanceof RegExp\r\n ? 'Invalid format'\r\n : rules.pattern.message;\r\n if (!pattern.test(String(value))) {\r\n return message;\r\n }\r\n }\r\n \r\n // Custom validate\r\n if (rules.validate) {\r\n const result = rules.validate(value, allValues);\r\n if (result === false) {\r\n return 'Invalid value';\r\n }\r\n if (typeof result === 'string') {\r\n return result;\r\n }\r\n }\r\n \r\n return undefined;\r\n}\r\n\r\n/**\r\n * useForm hook - comprehensive form state management\r\n */\r\nexport function useForm<T extends Record<string, any>>(options: FormOptions<T>): FormConfig<T> {\r\n const { \r\n initialValues, \r\n validate, \r\n validationRules,\r\n onSubmit,\r\n validateOnChange = true,\r\n validateOnBlur = true\r\n } = options;\r\n \r\n const [values, setValuesState] = useState<T>(initialValues);\r\n const [errors, setErrorsState] = useState<Record<string, string>>({});\r\n const [touched, setTouched] = useState<Record<string, boolean>>({});\r\n const [dirty, setDirty] = useState<Record<string, boolean>>({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [submitCount, setSubmitCount] = useState(0);\r\n \r\n const initialValuesRef = useRef(initialValues);\r\n \r\n // Compute validity and dirty state\r\n const isValid = Object.keys(errors).length === 0;\r\n const isDirty = Object.values(dirty).some(Boolean);\r\n \r\n // Validate a single field\r\n const validateField = useCallback((field: keyof T): string | undefined => {\r\n const value = values[field];\r\n \r\n // Use validation rules if provided\r\n if (validationRules && validationRules[field]) {\r\n return validateFieldValue(value, validationRules[field], values);\r\n }\r\n \r\n // Use custom validate function\r\n if (validate) {\r\n const allErrors = validate(values);\r\n return allErrors[field as string];\r\n }\r\n \r\n return undefined;\r\n }, [values, validate, validationRules]);\r\n \r\n // Validate entire form\r\n const validateForm = useCallback((): Record<string, string> => {\r\n const newErrors: Record<string, string> = {};\r\n \r\n // Validate using rules\r\n if (validationRules) {\r\n for (const field in validationRules) {\r\n const error = validateFieldValue(values[field], validationRules[field], values);\r\n if (error) {\r\n newErrors[field] = error;\r\n }\r\n }\r\n }\r\n \r\n // Validate using custom function\r\n if (validate) {\r\n const customErrors = validate(values);\r\n Object.assign(newErrors, customErrors);\r\n }\r\n \r\n return newErrors;\r\n }, [values, validate, validationRules]);\r\n \r\n // Run validation when values change\r\n useEffect(() => {\r\n if (validateOnChange) {\r\n const newErrors = validateForm();\r\n setErrorsState(newErrors);\r\n }\r\n }, [values, validateOnChange, validateForm]);\r\n \r\n // Handle input changes\r\n const handleChange = useCallback((e: any) => {\r\n const { name, value, type, checked } = e.target;\r\n const fieldValue = type === 'checkbox' ? checked : value;\r\n \r\n setValuesState(prev => ({ ...prev, [name]: fieldValue }));\r\n setDirty(prev => ({ ...prev, [name]: true }));\r\n }, []);\r\n \r\n // Handle field blur\r\n const handleBlur = useCallback((e: any) => {\r\n const { name } = e.target;\r\n setTouched(prev => ({ ...prev, [name]: true }));\r\n \r\n if (validateOnBlur) {\r\n const error = validateField(name as keyof T);\r\n setErrorsState(prev => {\r\n if (error) {\r\n return { ...prev, [name]: error };\r\n }\r\n const { [name]: _, ...rest } = prev;\r\n return rest;\r\n });\r\n }\r\n }, [validateOnBlur, validateField]);\r\n \r\n // Handle form submission\r\n const handleSubmit = useCallback(async (e?: any) => {\r\n if (e?.preventDefault) {\r\n e.preventDefault();\r\n }\r\n \r\n setSubmitCount(prev => prev + 1);\r\n \r\n // Mark all fields as touched\r\n const allTouched: Record<string, boolean> = {};\r\n for (const key in values) {\r\n allTouched[key] = true;\r\n }\r\n setTouched(allTouched);\r\n \r\n // Validate\r\n const formErrors = validateForm();\r\n setErrorsState(formErrors);\r\n \r\n if (Object.keys(formErrors).length > 0) {\r\n return;\r\n }\r\n \r\n if (onSubmit) {\r\n setIsSubmitting(true);\r\n try {\r\n await onSubmit(values, formConfig);\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n }\r\n }, [values, validateForm, onSubmit]);\r\n \r\n // Set field value programmatically\r\n const setFieldValue = useCallback((field: keyof T, value: any) => {\r\n setValuesState(prev => ({ ...prev, [field]: value }));\r\n setDirty(prev => ({ ...prev, [field as string]: true }));\r\n }, []);\r\n \r\n // Set field error programmatically\r\n const setFieldError = useCallback((field: keyof T, error: string) => {\r\n setErrorsState(prev => ({ ...prev, [field as string]: error }));\r\n }, []);\r\n \r\n // Set field touched\r\n const setFieldTouched = useCallback((field: keyof T, isTouched: boolean = true) => {\r\n setTouched(prev => ({ ...prev, [field as string]: isTouched }));\r\n }, []);\r\n \r\n // Set multiple values\r\n const setValues = useCallback((newValues: Partial<T>) => {\r\n setValuesState(prev => ({ ...prev, ...newValues }));\r\n }, []);\r\n \r\n // Set multiple errors\r\n const setErrors = useCallback((newErrors: Record<string, string>) => {\r\n setErrorsState(newErrors);\r\n }, []);\r\n \r\n // Reset form\r\n const resetForm = useCallback((nextValues?: Partial<T>) => {\r\n setValuesState(nextValues ? { ...initialValuesRef.current, ...nextValues } : initialValuesRef.current);\r\n setErrorsState({});\r\n setTouched({});\r\n setDirty({});\r\n setSubmitCount(0);\r\n }, []);\r\n \r\n // Get props for a field (shorthand)\r\n const getFieldProps = useCallback((field: keyof T) => ({\r\n name: field as string,\r\n value: values[field] ?? '',\r\n onChange: handleChange,\r\n onBlur: handleBlur\r\n }), [values, handleChange, handleBlur]);\r\n \r\n const formConfig: FormConfig<T> = {\r\n values,\r\n errors,\r\n touched,\r\n dirty,\r\n isValid,\r\n isDirty,\r\n isSubmitting,\r\n submitCount,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n setFieldValue,\r\n setFieldError,\r\n setFieldTouched,\r\n setValues,\r\n setErrors,\r\n resetForm,\r\n validateField,\r\n validateForm,\r\n getFieldProps,\r\n register: getFieldProps\r\n };\r\n \r\n return formConfig;\r\n}\r\n\r\n/**\r\n * useField hook - for individual field management\r\n */\r\nexport function useField<T = any>(\r\n name: string,\r\n form: FormConfig<any>\r\n): {\r\n field: { name: string; value: T; onChange: (e: any) => void; onBlur: (e: any) => void };\r\n meta: { touched: boolean; error?: string; dirty: boolean };\r\n helpers: { setValue: (value: T) => void; setError: (error: string) => void; setTouched: (touched: boolean) => void };\r\n} {\r\n return {\r\n field: form.getFieldProps(name) as any,\r\n meta: {\r\n touched: form.touched[name] || false,\r\n error: form.errors[name],\r\n dirty: form.dirty[name] || false\r\n },\r\n helpers: {\r\n setValue: (value: T) => form.setFieldValue(name, value),\r\n setError: (error: string) => form.setFieldError(name, error),\r\n setTouched: (touched: boolean) => form.setFieldTouched(name, touched)\r\n }\r\n };\r\n}\r\n\r\n// Common validation patterns\r\nexport const patterns = {\r\n email: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\r\n phone: /^\\+?[1-9]\\d{1,14}$/,\r\n url: /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$/,\r\n alphanumeric: /^[a-zA-Z0-9]+$/,\r\n numeric: /^\\d+$/,\r\n password: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$/\r\n};\r\n\r\nexport default {\r\n useForm,\r\n useField,\r\n patterns\r\n};\r\n", "/**\r\n * Global State Management (Redux-like store)\r\n */\r\n\r\nimport { createContext, useContext } from './context.js';\r\nimport { useState, useEffect, useRef } from './hooks.js';\r\nimport { jsx } from './jsx-runtime.js';\r\nimport { VNode } from './types.js';\r\n\r\nexport interface Action<T = any> {\r\n type: string;\r\n payload?: T;\r\n}\r\n\r\nexport type Reducer<S, A extends Action = Action> = (state: S, action: A) => S;\r\n\r\nexport type Dispatch<A extends Action = Action> = (action: A) => void;\r\n\r\nexport type Selector<S, R> = (state: S) => R;\r\n\r\nexport type Middleware<S> = (store: Store<S>) => (next: Dispatch) => (action: Action) => void;\r\n\r\nexport interface Store<S> {\r\n getState: () => S;\r\n dispatch: Dispatch;\r\n subscribe: (listener: () => void) => () => void;\r\n replaceReducer: (nextReducer: Reducer<S>) => void;\r\n}\r\n\r\nexport type AsyncAction<S> = (dispatch: Dispatch, getState: () => S) => Promise<void> | void;\r\n\r\n/**\r\n * Create a Redux-like store\r\n */\r\nexport function createStore<S>(\r\n reducer: Reducer<S>,\r\n initialState: S,\r\n middlewares: Middleware<S>[] = []\r\n): Store<S> {\r\n let state = initialState;\r\n let listeners: Set<() => void> = new Set();\r\n let currentReducer = reducer;\r\n \r\n const getState = () => state;\r\n \r\n const subscribe = (listener: () => void): (() => void) => {\r\n listeners.add(listener);\r\n return () => {\r\n listeners.delete(listener);\r\n };\r\n };\r\n \r\n // Base dispatch\r\n let dispatch: Dispatch = (action: Action) => {\r\n state = currentReducer(state, action);\r\n listeners.forEach(listener => listener());\r\n };\r\n \r\n // Apply middlewares\r\n if (middlewares.length > 0) {\r\n const store = { getState, dispatch, subscribe, replaceReducer: () => {} };\r\n const chain = middlewares.map(middleware => middleware(store as Store<S>));\r\n dispatch = chain.reduceRight(\r\n (next, middleware) => middleware(next),\r\n dispatch\r\n );\r\n }\r\n \r\n const replaceReducer = (nextReducer: Reducer<S>) => {\r\n currentReducer = nextReducer;\r\n };\r\n \r\n // Dispatch init action\r\n dispatch({ type: '@@INIT' });\r\n \r\n return {\r\n getState,\r\n dispatch,\r\n subscribe,\r\n replaceReducer\r\n };\r\n}\r\n\r\n/**\r\n * Combine multiple reducers into one\r\n */\r\nexport function combineReducers<S extends Record<string, any>>(\r\n reducers: { [K in keyof S]: Reducer<S[K]> }\r\n): Reducer<S> {\r\n return (state: S, action: Action): S => {\r\n const nextState: Partial<S> = {};\r\n let hasChanged = false;\r\n \r\n for (const key in reducers) {\r\n const reducer = reducers[key];\r\n const previousStateForKey = state[key];\r\n const nextStateForKey = reducer(previousStateForKey, action);\r\n nextState[key] = nextStateForKey;\r\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\r\n }\r\n \r\n return hasChanged ? (nextState as S) : state;\r\n };\r\n}\r\n\r\n// Store context\r\ninterface StoreContextValue<S = any> {\r\n store: Store<S>;\r\n state: S;\r\n}\r\n\r\nexport const StoreContext = createContext<StoreContextValue>({\r\n store: {\r\n getState: () => ({}),\r\n dispatch: () => {},\r\n subscribe: () => () => {},\r\n replaceReducer: () => {}\r\n },\r\n state: {}\r\n});\r\n\r\n/**\r\n * Store Provider component\r\n */\r\nexport function StoreProvider<S>({ \r\n store, \r\n children \r\n}: { \r\n store: Store<S>; \r\n children: any \r\n}): VNode {\r\n const [state, setState] = useState(store.getState());\r\n \r\n useEffect(() => {\r\n const unsubscribe = store.subscribe(() => {\r\n setState(store.getState());\r\n });\r\n return unsubscribe;\r\n }, [store]);\r\n \r\n return jsx(StoreContext.Provider, {\r\n value: { store, state },\r\n children\r\n });\r\n}\r\n\r\n/**\r\n * Hook to select state from the store\r\n */\r\nexport function useSelector<S, R>(selector: Selector<S, R>): R {\r\n const { state } = useContext(StoreContext) as StoreContextValue<S>;\r\n return selector(state);\r\n}\r\n\r\n/**\r\n * Hook to get the dispatch function\r\n */\r\nexport function useDispatch<A extends Action = Action>(): Dispatch<A> {\r\n const { store } = useContext(StoreContext);\r\n return store.dispatch as Dispatch<A>;\r\n}\r\n\r\n/**\r\n * Hook to get the entire store\r\n */\r\nexport function useStore<S>(): Store<S> {\r\n const { store } = useContext(StoreContext);\r\n return store as Store<S>;\r\n}\r\n\r\n// Common Middlewares\r\n\r\n/**\r\n * Logger middleware - logs actions and state changes\r\n */\r\nexport const logger: Middleware<any> = (store) => (next) => (action) => {\r\n console.group(`Action: ${action.type}`);\r\n console.log('Payload:', action.payload);\r\n console.log('Previous State:', store.getState());\r\n const result = next(action);\r\n console.log('Next State:', store.getState());\r\n console.groupEnd();\r\n return result;\r\n};\r\n\r\n/**\r\n * Thunk middleware - enables async actions\r\n */\r\nexport const thunk: Middleware<any> = (store) => (next) => (action: any) => {\r\n if (typeof action === 'function') {\r\n return action(store.dispatch, store.getState);\r\n }\r\n return next(action);\r\n};\r\n\r\n/**\r\n * DevTools middleware - integrates with Redux DevTools\r\n */\r\nexport const devTools: Middleware<any> = (store) => (next) => (action) => {\r\n if (typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__) {\r\n const devToolsExtension = (window as any).__REDUX_DEVTOOLS_EXTENSION__;\r\n devToolsExtension.send(action, store.getState());\r\n }\r\n return next(action);\r\n};\r\n\r\n/**\r\n * Create an action creator\r\n */\r\nexport function createAction<P = void>(type: string) {\r\n const actionCreator = (payload: P): Action<P> => ({ type, payload });\r\n actionCreator.type = type;\r\n actionCreator.match = (action: Action): action is Action<P> => action.type === type;\r\n return actionCreator;\r\n}\r\n\r\n/**\r\n * Create a slice (reducer + actions)\r\n */\r\nexport interface SliceConfig<S, R extends Record<string, (state: S, action: Action<any>) => S>> {\r\n name: string;\r\n initialState: S;\r\n reducers: R;\r\n}\r\n\r\nexport function createSlice<\r\n S,\r\n R extends Record<string, (state: S, action: Action<any>) => S>\r\n>(config: SliceConfig<S, R>) {\r\n const { name, initialState, reducers } = config;\r\n \r\n const actions: Record<string, (payload?: any) => Action> = {};\r\n \r\n for (const key in reducers) {\r\n const type = `${name}/${key}`;\r\n actions[key] = (payload?: any) => ({ type, payload });\r\n }\r\n \r\n const reducer: Reducer<S> = (state = initialState, action) => {\r\n for (const key in reducers) {\r\n const type = `${name}/${key}`;\r\n if (action.type === type) {\r\n return reducers[key](state, action);\r\n }\r\n }\r\n return state;\r\n };\r\n \r\n return {\r\n name,\r\n reducer,\r\n actions\r\n };\r\n}\r\n\r\nexport default {\r\n createStore,\r\n combineReducers,\r\n StoreProvider,\r\n useSelector,\r\n useDispatch,\r\n useStore,\r\n logger,\r\n thunk,\r\n devTools,\r\n createAction,\r\n createSlice,\r\n StoreContext\r\n};\r\n", "/**\n * Lifecycle events for components and application\n */\nimport { eventBus } from './event-bus.js';\n\nexport enum LifecycleEvents {\n APP_INIT = 'app:init',\n APP_MOUNTED = 'app:mounted',\n APP_UPDATED = 'app:updated',\n APP_ERROR = 'app:error',\n APP_DESTROYED = 'app:destroyed',\n\n COMPONENT_CREATED = 'component:created',\n COMPONENT_MOUNTED = 'component:mounted',\n COMPONENT_UPDATED = 'component:updated',\n COMPONENT_ERROR = 'component:error',\n COMPONENT_UNMOUNTED = 'component:unmounted',\n\n ROUTER_BEFORE_CHANGE = 'router:before-change',\n ROUTER_AFTER_CHANGE = 'router:after-change',\n ROUTER_ERROR = 'router:error',\n\n STORE_INITIALIZED = 'store:initialized',\n STORE_BEFORE_ACTION = 'store:before-action',\n STORE_AFTER_ACTION = 'store:after-action',\n STORE_ERROR = 'store:error'\n}\n\nexport interface ComponentInfo {\n id: string;\n name: string;\n props: Record<string, any>;\n path?: string;\n}\n\nexport interface RouteChangeInfo {\n from: string;\n to: string;\n params: Record<string, string>;\n}\n\nexport interface StoreActionInfo {\n type: string;\n payload: any;\n prevState: any;\n nextState: any;\n}\n\nexport function emitAppInit(data: any) {\n eventBus.emit(LifecycleEvents.APP_INIT, data);\n}\n\nexport function emitAppMounted(rootElement: HTMLElement) {\n eventBus.emit(LifecycleEvents.APP_MOUNTED, rootElement);\n}\n\nexport function emitAppUpdated() {\n eventBus.emit(LifecycleEvents.APP_UPDATED);\n}\n\nexport function emitAppError(error: Error) {\n eventBus.emit(LifecycleEvents.APP_ERROR, error);\n}\n\nexport function emitAppDestroyed() {\n eventBus.emit(LifecycleEvents.APP_DESTROYED);\n}\n\nexport function emitComponentCreated(info: ComponentInfo) {\n eventBus.emit(LifecycleEvents.COMPONENT_CREATED, info);\n}\n\nexport function emitComponentMounted(info: ComponentInfo, element: HTMLElement) {\n eventBus.emit(LifecycleEvents.COMPONENT_MOUNTED, info, element);\n}\n\nexport function emitComponentUpdated(\n info: ComponentInfo,\n prevProps: Record<string, any>,\n newProps: Record<string, any>\n) {\n eventBus.emit(LifecycleEvents.COMPONENT_UPDATED, info, prevProps, newProps);\n}\n\nexport function emitComponentError(info: ComponentInfo, error: Error) {\n eventBus.emit(LifecycleEvents.COMPONENT_ERROR, info, error);\n}\n\nexport function emitComponentUnmounted(info: ComponentInfo) {\n eventBus.emit(LifecycleEvents.COMPONENT_UNMOUNTED, info);\n}\n\nexport function emitRouterBeforeChange(info: RouteChangeInfo): Promise<boolean> {\n return new Promise(resolve => {\n let prevented = false;\n const prevent = () => { prevented = true; };\n eventBus.emit(LifecycleEvents.ROUTER_BEFORE_CHANGE, info, prevent);\n resolve(!prevented);\n });\n}\n\nexport function emitRouterAfterChange(info: RouteChangeInfo) {\n eventBus.emit(LifecycleEvents.ROUTER_AFTER_CHANGE, info);\n}\n\nexport function emitRouterError(error: Error, info?: Partial<RouteChangeInfo>) {\n eventBus.emit(LifecycleEvents.ROUTER_ERROR, error, info);\n}\n\nexport function emitStoreInitialized(state: any) {\n eventBus.emit(LifecycleEvents.STORE_INITIALIZED, state);\n}\n\nexport function emitStoreBeforeAction(actionType: string, payload: any, state: any) {\n eventBus.emit(LifecycleEvents.STORE_BEFORE_ACTION, actionType, payload, state);\n}\n\nexport function emitStoreAfterAction(info: StoreActionInfo) {\n eventBus.emit(LifecycleEvents.STORE_AFTER_ACTION, info);\n}\n\nexport function emitStoreError(error: Error, actionType: string, payload: any) {\n eventBus.emit(LifecycleEvents.STORE_ERROR, error, actionType, payload);\n}\n\nexport function onAppInit(handler: (data: any) => void) {\n return eventBus.on(LifecycleEvents.APP_INIT, handler);\n}\n\nexport function onAppMounted(handler: (rootElement: HTMLElement) => void) {\n return eventBus.on(LifecycleEvents.APP_MOUNTED, handler);\n}\n\nexport function onAppUpdated(handler: () => void) {\n return eventBus.on(LifecycleEvents.APP_UPDATED, handler);\n}\n\nexport function onAppError(handler: (error: Error) => void) {\n return eventBus.on(LifecycleEvents.APP_ERROR, handler);\n}\n\nexport function onAppDestroyed(handler: () => void) {\n return eventBus.on(LifecycleEvents.APP_DESTROYED, handler);\n}\n\nexport function onComponentCreated(handler: (info: ComponentInfo) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_CREATED, handler);\n}\n\nexport function onComponentMounted(handler: (info: ComponentInfo, element: HTMLElement) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_MOUNTED, handler);\n}\n\nexport function onComponentUpdated(\n handler: (info: ComponentInfo, prevProps: Record<string, any>, newProps: Record<string, any>) => void\n) {\n return eventBus.on(LifecycleEvents.COMPONENT_UPDATED, handler);\n}\n\nexport function onComponentError(handler: (info: ComponentInfo, error: Error) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_ERROR, handler);\n}\n\nexport function onComponentUnmounted(handler: (info: ComponentInfo) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_UNMOUNTED, handler);\n}\n\nexport function onRouterBeforeChange(handler: (info: RouteChangeInfo, prevent: () => void) => void) {\n return eventBus.on(LifecycleEvents.ROUTER_BEFORE_CHANGE, handler);\n}\n\nexport function onRouterAfterChange(handler: (info: RouteChangeInfo) => void) {\n return eventBus.on(LifecycleEvents.ROUTER_AFTER_CHANGE, handler);\n}\n\nexport function onRouterError(handler: (error: Error, info?: Partial<RouteChangeInfo>) => void) {\n return eventBus.on(LifecycleEvents.ROUTER_ERROR, handler);\n}\n\nexport function onStoreInitialized(handler: (state: any) => void) {\n return eventBus.on(LifecycleEvents.STORE_INITIALIZED, handler);\n}\n\nexport function onStoreBeforeAction(handler: (actionType: string, payload: any, state: any) => void) {\n return eventBus.on(LifecycleEvents.STORE_BEFORE_ACTION, handler);\n}\n\nexport function onStoreAfterAction(handler: (info: StoreActionInfo) => void) {\n return eventBus.on(LifecycleEvents.STORE_AFTER_ACTION, handler);\n}\n\nexport function onStoreError(handler: (error: Error, actionType: string, payload: any) => void) {\n return eventBus.on(LifecycleEvents.STORE_ERROR, handler);\n}\n", "/**\r\n * Utility functions for the framework\r\n */\r\n\r\n/**\r\n * Creates a debounced function that delays invoking func until after wait milliseconds\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number,\r\n options: { leading?: boolean; trailing?: boolean } = {}\r\n): T & { cancel: () => void; flush: () => void } {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let lastArgs: Parameters<T> | null = null;\r\n let lastThis: any = null;\r\n let result: ReturnType<T>;\r\n let lastCallTime: number | undefined;\r\n let lastInvokeTime = 0;\r\n \r\n const { leading = false, trailing = true } = options;\r\n \r\n const invokeFunc = (time: number): ReturnType<T> => {\r\n const args = lastArgs!;\r\n const thisArg = lastThis;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastInvokeTime = time;\r\n result = func.apply(thisArg, args);\r\n return result;\r\n };\r\n \r\n const shouldInvoke = (time: number): boolean => {\r\n const timeSinceLastCall = lastCallTime === undefined ? 0 : time - lastCallTime;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n \r\n return (\r\n lastCallTime === undefined ||\r\n timeSinceLastCall >= wait ||\r\n timeSinceLastCall < 0 ||\r\n timeSinceLastInvoke >= wait\r\n );\r\n };\r\n \r\n const trailingEdge = (time: number): ReturnType<T> => {\r\n timeoutId = null;\r\n \r\n if (trailing && lastArgs) {\r\n return invokeFunc(time);\r\n }\r\n lastArgs = null;\r\n lastThis = null;\r\n return result;\r\n };\r\n \r\n const remainingWait = (time: number): number => {\r\n const timeSinceLastCall = lastCallTime === undefined ? 0 : time - lastCallTime;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n const timeWaiting = wait - timeSinceLastCall;\r\n \r\n return timeWaiting;\r\n };\r\n \r\n const timerExpired = (): ReturnType<T> => {\r\n const time = Date.now();\r\n \r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time);\r\n }\r\n \r\n timeoutId = setTimeout(timerExpired, remainingWait(time));\r\n return result;\r\n };\r\n \r\n const debounced = function(this: any, ...args: Parameters<T>): ReturnType<T> {\r\n const time = Date.now();\r\n const isInvoking = shouldInvoke(time);\r\n \r\n lastArgs = args;\r\n lastThis = this;\r\n lastCallTime = time;\r\n \r\n if (isInvoking) {\r\n if (timeoutId === null) {\r\n lastInvokeTime = time;\r\n timeoutId = setTimeout(timerExpired, wait);\r\n if (leading) {\r\n return invokeFunc(time);\r\n }\r\n }\r\n }\r\n \r\n if (timeoutId === null) {\r\n timeoutId = setTimeout(timerExpired, wait);\r\n }\r\n \r\n return result;\r\n } as T & { cancel: () => void; flush: () => void };\r\n \r\n debounced.cancel = (): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n lastInvokeTime = 0;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastCallTime = undefined;\r\n timeoutId = null;\r\n };\r\n \r\n debounced.flush = (): ReturnType<T> => {\r\n if (timeoutId !== null) {\r\n return trailingEdge(Date.now());\r\n }\r\n return result;\r\n };\r\n \r\n return debounced;\r\n}\r\n\r\n/**\r\n * Creates a throttled function that only invokes func at most once per every wait milliseconds\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number,\r\n options: { leading?: boolean; trailing?: boolean } = {}\r\n): T & { cancel: () => void } {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let lastArgs: Parameters<T> | null = null;\r\n let lastThis: any = null;\r\n let result: ReturnType<T>;\r\n let lastCallTime = 0;\r\n \r\n const { leading = true, trailing = true } = options;\r\n \r\n const invokeFunc = (): ReturnType<T> => {\r\n const args = lastArgs!;\r\n const thisArg = lastThis;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastCallTime = Date.now();\r\n result = func.apply(thisArg, args);\r\n return result;\r\n };\r\n \r\n const throttled = function(this: any, ...args: Parameters<T>): ReturnType<T> {\r\n const now = Date.now();\r\n const remaining = wait - (now - lastCallTime);\r\n \r\n lastArgs = args;\r\n lastThis = this;\r\n \r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n timeoutId = null;\r\n }\r\n \r\n if (leading || lastCallTime !== 0) {\r\n return invokeFunc();\r\n }\r\n }\r\n \r\n if (!timeoutId && trailing) {\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n if (trailing && lastArgs) {\r\n invokeFunc();\r\n }\r\n }, remaining);\r\n }\r\n \r\n return result;\r\n } as T & { cancel: () => void };\r\n \r\n throttled.cancel = (): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n timeoutId = null;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastCallTime = 0;\r\n };\r\n \r\n return throttled;\r\n}\r\n\r\n/**\r\n * Deep clone an object\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n \r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as unknown as T;\r\n }\r\n \r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj.source, obj.flags) as unknown as T;\r\n }\r\n \r\n if (Array.isArray(obj)) {\r\n return obj.map(item => deepClone(item)) as unknown as T;\r\n }\r\n \r\n if (obj instanceof Map) {\r\n const clonedMap = new Map();\r\n obj.forEach((value, key) => {\r\n clonedMap.set(deepClone(key), deepClone(value));\r\n });\r\n return clonedMap as unknown as T;\r\n }\r\n \r\n if (obj instanceof Set) {\r\n const clonedSet = new Set();\r\n obj.forEach(value => {\r\n clonedSet.add(deepClone(value));\r\n });\r\n return clonedSet as unknown as T;\r\n }\r\n \r\n const clonedObj: Record<string, any> = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n clonedObj[key] = deepClone((obj as Record<string, any>)[key]);\r\n }\r\n }\r\n \r\n return clonedObj as T;\r\n}\r\n\r\n/**\r\n * Deep merge objects\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(target: T, ...sources: Partial<T>[]): T {\r\n if (!sources.length) return target;\r\n \r\n const source = sources.shift();\r\n \r\n if (source === undefined) return target;\r\n \r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = (target as Record<string, any>)[key];\r\n \r\n if (\r\n sourceValue !== null &&\r\n typeof sourceValue === 'object' &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue !== null &&\r\n typeof targetValue === 'object' &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (target as Record<string, any>)[key] = deepMerge(targetValue, sourceValue);\r\n } else {\r\n (target as Record<string, any>)[key] = deepClone(sourceValue);\r\n }\r\n }\r\n }\r\n \r\n return deepMerge(target, ...sources);\r\n}\r\n\r\n/**\r\n * Memoize a function\r\n */\r\nexport function memoize<T extends (...args: any[]) => any>(\r\n fn: T,\r\n options: {\r\n maxSize?: number;\r\n keyGenerator?: (...args: Parameters<T>) => string;\r\n } = {}\r\n): T & { cache: Map<string, ReturnType<T>>; clear: () => void } {\r\n const { maxSize = 100, keyGenerator = (...args) => JSON.stringify(args) } = options;\r\n const cache = new Map<string, ReturnType<T>>();\r\n \r\n const memoized = function(...args: Parameters<T>): ReturnType<T> {\r\n const key = keyGenerator(...args);\r\n \r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = fn(...args);\r\n \r\n if (cache.size >= maxSize) {\r\n const firstKey = cache.keys().next().value;\r\n if (firstKey !== undefined) {\r\n cache.delete(firstKey);\r\n }\r\n }\r\n \r\n cache.set(key, result);\r\n return result;\r\n } as T & { cache: Map<string, ReturnType<T>>; clear: () => void };\r\n \r\n memoized.cache = cache;\r\n memoized.clear = () => cache.clear();\r\n \r\n return memoized;\r\n}\r\n\r\n/**\r\n * Generate a UUID v4\r\n */\r\nexport function uuid(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n \r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n\r\n/**\r\n * Format a date\r\n */\r\nexport function formatDate(\r\n date: Date | string | number,\r\n format: string = 'YYYY-MM-DD HH:mm:ss'\r\n): string {\r\n const d = date instanceof Date ? date : new Date(date);\r\n \r\n if (isNaN(d.getTime())) {\r\n return 'Invalid Date';\r\n }\r\n \r\n const pad = (n: number, len: number = 2) => String(n).padStart(len, '0');\r\n \r\n const tokens: Record<string, string> = {\r\n 'YYYY': String(d.getFullYear()),\r\n 'YY': String(d.getFullYear()).slice(-2),\r\n 'MM': pad(d.getMonth() + 1),\r\n 'M': String(d.getMonth() + 1),\r\n 'DD': pad(d.getDate()),\r\n 'D': String(d.getDate()),\r\n 'HH': pad(d.getHours()),\r\n 'H': String(d.getHours()),\r\n 'hh': pad(d.getHours() % 12 || 12),\r\n 'h': String(d.getHours() % 12 || 12),\r\n 'mm': pad(d.getMinutes()),\r\n 'm': String(d.getMinutes()),\r\n 'ss': pad(d.getSeconds()),\r\n 's': String(d.getSeconds()),\r\n 'SSS': pad(d.getMilliseconds(), 3),\r\n 'A': d.getHours() < 12 ? 'AM' : 'PM',\r\n 'a': d.getHours() < 12 ? 'am' : 'pm'\r\n };\r\n \r\n let result = format;\r\n for (const token in tokens) {\r\n result = result.replace(new RegExp(token, 'g'), tokens[token]);\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Shallow equality check\r\n */\r\nexport function shallowEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (!a || !b) 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 for (const key of keysA) {\r\n if (a[key] !== b[key]) return false;\r\n }\r\n \r\n return true;\r\n}\r\n\r\n/**\r\n * Deep equality check\r\n */\r\nexport function deepEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (a === null || b === null) return false;\r\n if (typeof a !== typeof b) return false;\r\n \r\n if (typeof a !== 'object') return false;\r\n \r\n if (Array.isArray(a) !== Array.isArray(b)) return false;\r\n \r\n if (Array.isArray(a)) {\r\n if (a.length !== b.length) return false;\r\n return a.every((item, index) => deepEqual(item, b[index]));\r\n }\r\n \r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n \r\n if (a instanceof RegExp && b instanceof RegExp) {\r\n return a.source === b.source && a.flags === b.flags;\r\n }\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\n/**\r\n * Escape HTML entities\r\n */\r\nexport function escapeHtml(str: string): string {\r\n const htmlEscapes: Record<string, string> = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;'\r\n };\r\n \r\n return str.replace(/[&<>\"']/g, char => htmlEscapes[char]);\r\n}\r\n\r\n/**\r\n * Unescape HTML entities\r\n */\r\nexport function unescapeHtml(str: string): string {\r\n const htmlUnescapes: Record<string, string> = {\r\n '&amp;': '&',\r\n '&lt;': '<',\r\n '&gt;': '>',\r\n '&quot;': '\"',\r\n '&#39;': \"'\"\r\n };\r\n \r\n return str.replace(/&(?:amp|lt|gt|quot|#39);/g, entity => htmlUnescapes[entity] || entity);\r\n}\r\n\r\n/**\r\n * Capitalize first letter\r\n */\r\nexport function capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\n/**\r\n * Convert string to camelCase\r\n */\r\nexport function camelCase(str: string): string {\r\n return str\r\n .replace(/[-_\\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '')\r\n .replace(/^(.)/, (char) => char.toLowerCase());\r\n}\r\n\r\n/**\r\n * Convert string to kebab-case\r\n */\r\nexport function kebabCase(str: string): string {\r\n return str\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/[\\s_]+/g, '-')\r\n .toLowerCase();\r\n}\r\n\r\n/**\r\n * Sleep/delay utility\r\n */\r\nexport function sleep(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\n/**\r\n * Retry a function with exponential backoff\r\n */\r\nexport async function retry<T>(\r\n fn: () => Promise<T>,\r\n options: {\r\n retries?: number;\r\n delay?: number;\r\n backoff?: number;\r\n onRetry?: (error: Error, attempt: number) => void;\r\n } = {}\r\n): Promise<T> {\r\n const { retries = 3, delay = 1000, backoff = 2, onRetry } = options;\r\n let lastError: Error;\r\n \r\n for (let attempt = 0; attempt <= retries; attempt++) {\r\n try {\r\n return await fn();\r\n } catch (error) {\r\n lastError = error as Error;\r\n \r\n if (attempt < retries) {\r\n if (onRetry) {\r\n onRetry(lastError, attempt + 1);\r\n }\r\n await sleep(delay * Math.pow(backoff, attempt));\r\n }\r\n }\r\n }\r\n \r\n throw lastError!;\r\n}\r\n\r\n/**\r\n * Create a promise that can be resolved/rejected externally\r\n */\r\nexport function deferred<T>(): {\r\n promise: Promise<T>;\r\n resolve: (value: T | PromiseLike<T>) => void;\r\n reject: (reason?: any) => void;\r\n} {\r\n let resolve!: (value: T | PromiseLike<T>) => void;\r\n let reject!: (reason?: any) => void;\r\n \r\n const promise = new Promise<T>((res, rej) => {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n \r\n return { promise, resolve, reject };\r\n}\r\n\r\n/**\r\n * Pick specific keys from an object\r\n */\r\nexport function pick<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Pick<T, K> {\r\n const result = {} as Pick<T, K>;\r\n for (const key of keys) {\r\n if (key in obj) {\r\n result[key] = obj[key];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Omit specific keys from an object\r\n */\r\nexport function omit<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Omit<T, K> {\r\n const result = { ...obj };\r\n for (const key of keys) {\r\n delete result[key];\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Group array items by a key\r\n */\r\nexport function groupBy<T>(\r\n array: T[],\r\n key: keyof T | ((item: T) => string)\r\n): Record<string, T[]> {\r\n return array.reduce((result, item) => {\r\n const groupKey = typeof key === 'function' ? key(item) : String(item[key]);\r\n if (!result[groupKey]) {\r\n result[groupKey] = [];\r\n }\r\n result[groupKey].push(item);\r\n return result;\r\n }, {} as Record<string, T[]>);\r\n}\r\n\r\n/**\r\n * Check if value is empty\r\n */\r\nexport function isEmpty(value: any): boolean {\r\n if (value === null || value === undefined) return true;\r\n if (typeof value === 'string') return value.trim() === '';\r\n if (Array.isArray(value)) return value.length === 0;\r\n if (value instanceof Map || value instanceof Set) return value.size === 0;\r\n if (typeof value === 'object') return Object.keys(value).length === 0;\r\n return false;\r\n}\r\n\r\n/**\r\n * Clamp a number between min and max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * Get a nested property from an object using a path\r\n */\r\nexport function get(obj: any, path: string | string[], defaultValue?: any): any {\r\n const keys = Array.isArray(path) ? path : path.split('.');\r\n let result = obj;\r\n \r\n for (const key of keys) {\r\n if (result === null || result === undefined) {\r\n return defaultValue;\r\n }\r\n result = result[key];\r\n }\r\n \r\n return result === undefined ? defaultValue : result;\r\n}\r\n\r\n/**\r\n * Set a nested property on an object using a path\r\n */\r\nexport function set(obj: any, path: string | string[], value: any): any {\r\n const keys = Array.isArray(path) ? path : path.split('.');\r\n let current = obj;\r\n \r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!(key in current) || typeof current[key] !== 'object') {\r\n current[key] = {};\r\n }\r\n current = current[key];\r\n }\r\n \r\n current[keys[keys.length - 1]] = value;\r\n return obj;\r\n}\r\n\r\nexport default {\r\n debounce,\r\n throttle,\r\n deepClone,\r\n deepMerge,\r\n memoize,\r\n uuid,\r\n formatDate,\r\n shallowEqual,\r\n deepEqual,\r\n escapeHtml,\r\n unescapeHtml,\r\n capitalize,\r\n camelCase,\r\n kebabCase,\r\n sleep,\r\n retry,\r\n deferred,\r\n pick,\r\n omit,\r\n groupBy,\r\n isEmpty,\r\n clamp,\r\n get,\r\n set\r\n};\r\n", "/**\r\n * Baraqex Error Classes\r\n * \r\n * Custom error types for better debugging and error handling.\r\n * Each error type provides specific context and helpful messages.\r\n */\r\n\r\n/**\r\n * Base error class for all Baraqex errors\r\n */\r\nexport class BaraqexError extends Error {\r\n public readonly code: string;\r\n public readonly hint?: string;\r\n public readonly docs?: string;\r\n public readonly originalCause?: Error;\r\n\r\n constructor(message: string, options: {\r\n code: string;\r\n hint?: string;\r\n docs?: string;\r\n cause?: Error;\r\n }) {\r\n super(message);\r\n this.name = 'BaraqexError';\r\n this.code = options.code;\r\n this.hint = options.hint;\r\n this.docs = options.docs;\r\n this.originalCause = options.cause;\r\n Error.captureStackTrace?.(this, this.constructor);\r\n }\r\n\r\n /**\r\n * Format error for console output with helpful hints\r\n */\r\n format(): string {\r\n let output = `\\n\u274C ${this.name}: ${this.message}\\n`;\r\n output += ` Code: ${this.code}\\n`;\r\n if (this.hint) {\r\n output += ` \uD83D\uDCA1 Hint: ${this.hint}\\n`;\r\n }\r\n if (this.docs) {\r\n output += ` \uD83D\uDCDA Docs: ${this.docs}\\n`;\r\n }\r\n return output;\r\n }\r\n}\r\n\r\n/**\r\n * Configuration-related errors\r\n */\r\nexport class ConfigError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'CONFIG_ERROR',\r\n hint: options?.hint || 'Check your baraqex.config.js or server configuration',\r\n docs: 'https://baraqex.tech/docs/configuration',\r\n cause: options?.cause\r\n });\r\n this.name = 'ConfigError';\r\n }\r\n}\r\n\r\n/**\r\n * Database connection and query errors\r\n */\r\nexport class DatabaseError extends BaraqexError {\r\n public readonly dbType?: string;\r\n \r\n constructor(message: string, options?: { \r\n dbType?: string;\r\n hint?: string; \r\n cause?: Error \r\n }) {\r\n super(message, {\r\n code: 'DATABASE_ERROR',\r\n hint: options?.hint || 'Verify your database connection string and credentials',\r\n docs: 'https://baraqex.tech/docs/database',\r\n cause: options?.cause\r\n });\r\n this.name = 'DatabaseError';\r\n this.dbType = options?.dbType;\r\n }\r\n}\r\n\r\n/**\r\n * Authentication and authorization errors\r\n */\r\nexport class AuthError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'AUTH_ERROR',\r\n hint: options?.hint || 'Check your JWT secret and token configuration',\r\n docs: 'https://baraqex.tech/docs/authentication',\r\n cause: options?.cause\r\n });\r\n this.name = 'AuthError';\r\n }\r\n}\r\n\r\n/**\r\n * WASM loading and execution errors\r\n */\r\nexport class WasmError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'WASM_ERROR',\r\n hint: options?.hint || 'Ensure your .wasm file is accessible and properly compiled',\r\n docs: 'https://baraqex.tech/docs/webassembly',\r\n cause: options?.cause\r\n });\r\n this.name = 'WasmError';\r\n }\r\n}\r\n\r\n/**\r\n * Router and routing errors\r\n */\r\nexport class RouterError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'ROUTER_ERROR',\r\n hint: options?.hint || 'Check your API route file structure and exports',\r\n docs: 'https://baraqex.tech/docs/routing',\r\n cause: options?.cause\r\n });\r\n this.name = 'RouterError';\r\n }\r\n}\r\n\r\n/**\r\n * Server lifecycle errors\r\n */\r\nexport class ServerError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'SERVER_ERROR',\r\n hint: options?.hint || 'Check that the port is available and dependencies are installed',\r\n docs: 'https://baraqex.tech/docs/server',\r\n cause: options?.cause\r\n });\r\n this.name = 'ServerError';\r\n }\r\n}\r\n\r\n/**\r\n * Validation errors for user input\r\n */\r\nexport class ValidationError extends BaraqexError {\r\n public readonly field?: string;\r\n public readonly value?: unknown;\r\n\r\n constructor(message: string, options?: { \r\n field?: string;\r\n value?: unknown;\r\n hint?: string; \r\n cause?: Error \r\n }) {\r\n super(message, {\r\n code: 'VALIDATION_ERROR',\r\n hint: options?.hint,\r\n cause: options?.cause\r\n });\r\n this.name = 'ValidationError';\r\n this.field = options?.field;\r\n this.value = options?.value;\r\n }\r\n}\r\n\r\n/**\r\n * HTTP-related errors with status codes\r\n */\r\nexport class HttpError extends BaraqexError {\r\n public readonly statusCode: number;\r\n\r\n constructor(statusCode: number, message: string, options?: { hint?: string }) {\r\n super(message, {\r\n code: `HTTP_${statusCode}`,\r\n hint: options?.hint\r\n });\r\n this.name = 'HttpError';\r\n this.statusCode = statusCode;\r\n }\r\n\r\n static badRequest(message = 'Bad Request', hint?: string) {\r\n return new HttpError(400, message, { hint });\r\n }\r\n\r\n static unauthorized(message = 'Unauthorized', hint?: string) {\r\n return new HttpError(401, message, { hint: hint || 'Include a valid Authorization header' });\r\n }\r\n\r\n static forbidden(message = 'Forbidden', hint?: string) {\r\n return new HttpError(403, message, { hint });\r\n }\r\n\r\n static notFound(message = 'Not Found', hint?: string) {\r\n return new HttpError(404, message, { hint });\r\n }\r\n\r\n static tooManyRequests(message = 'Too Many Requests', hint?: string) {\r\n return new HttpError(429, message, { hint: hint || 'Slow down your request rate' });\r\n }\r\n\r\n static internal(message = 'Internal Server Error', hint?: string) {\r\n return new HttpError(500, message, { hint });\r\n }\r\n}\r\n\r\n/**\r\n * Dependency missing errors\r\n */\r\nexport class DependencyError extends BaraqexError {\r\n public readonly packageName: string;\r\n\r\n constructor(packageName: string, feature: string) {\r\n super(`Missing dependency: ${packageName} is required for ${feature}`, {\r\n code: 'DEPENDENCY_ERROR',\r\n hint: `Install it with: npm install ${packageName}`,\r\n docs: 'https://baraqex.tech/docs/installation'\r\n });\r\n this.name = 'DependencyError';\r\n this.packageName = packageName;\r\n }\r\n}\r\n\r\n/**\r\n * Error handler for consistent error logging\r\n */\r\nexport function formatError(error: unknown): string {\r\n if (error instanceof BaraqexError) {\r\n return error.format();\r\n }\r\n \r\n if (error instanceof Error) {\r\n return `\\n\u274C Error: ${error.message}\\n`;\r\n }\r\n \r\n return `\\n\u274C Unknown error: ${String(error)}\\n`;\r\n}\r\n\r\n/**\r\n * Wrap async functions with error handling\r\n */\r\nexport function withErrorHandling<T extends (...args: any[]) => Promise<any>>(\r\n fn: T,\r\n errorHandler?: (error: Error) => void\r\n): T {\r\n return (async (...args: Parameters<T>) => {\r\n try {\r\n return await fn(...args);\r\n } catch (error) {\r\n if (errorHandler) {\r\n errorHandler(error as Error);\r\n } else {\r\n console.error(formatError(error));\r\n }\r\n throw error;\r\n }\r\n }) as T;\r\n}\r\n", "/**\r\n * WebAssembly integration for Frontend Hamroun\r\n * Works in both browser and Node.js environments\r\n */\r\n\r\nexport interface GoWasmOptions {\r\n debug?: boolean;\r\n goWasmPath?: string;\r\n importObject?: any;\r\n onLoad?: (instance: GoWasmInstance) => void;\r\n}\r\n\r\nexport interface GoWasmInstance {\r\n instance: WebAssembly.Instance;\r\n module: WebAssembly.Module;\r\n exports: WebAssembly.Exports;\r\n functions: Record<string, Function>;\r\n}\r\n\r\n/**\r\n * Load Go WASM module in the browser (like your working frontend code)\r\n */\r\nexport async function loadGoWasm(\r\n wasmUrl: string,\r\n options: GoWasmOptions = {}\r\n): Promise<GoWasmInstance> {\r\n if (typeof window === 'undefined') {\r\n throw new Error('loadGoWasm() is for browser use only. Use loadGoWasmFromFile() in Node.js.');\r\n }\r\n\r\n try {\r\n // Check if Go WASM runtime is available (like your frontend code)\r\n if (!window.Go) {\r\n throw new Error('Go WASM runtime not available. Make sure wasm_exec.js is loaded.');\r\n }\r\n\r\n if (options.debug) {\r\n console.log('[WASM] Loading WASM from:', wasmUrl);\r\n }\r\n\r\n // Fetch the WASM file (exactly like your frontend code)\r\n const response = await fetch(wasmUrl);\r\n \r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch WASM file: ${response.status}`);\r\n }\r\n\r\n const wasmBytes = await response.arrayBuffer();\r\n \r\n // Initialize Go runtime (exactly like your frontend code)\r\n const go = new window.Go();\r\n const wasmModule = await WebAssembly.instantiate(wasmBytes, go.importObject);\r\n \r\n // Run the Go program (exactly like your frontend code)\r\n go.run(wasmModule.instance);\r\n \r\n // Wait a bit for Go functions to be registered (like your frontend code)\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n \r\n if (options.debug) {\r\n console.log('[WASM] Go program started, checking for registered functions...');\r\n }\r\n\r\n // Extract exported functions from global scope (like your frontend code)\r\n const functions: Record<string, Function> = {};\r\n \r\n // Look for Go functions in global scope\r\n for (const key in window) {\r\n if (typeof window[key] === 'function' && key.startsWith('go')) {\r\n functions[key] = window[key] as Function;\r\n if (options.debug) {\r\n console.log(`[WASM] Found function: ${key}`);\r\n }\r\n }\r\n }\r\n\r\n const wasmInstance: GoWasmInstance = {\r\n instance: wasmModule.instance,\r\n module: wasmModule,\r\n exports: wasmModule.instance.exports,\r\n functions\r\n };\r\n\r\n if (options.onLoad) {\r\n options.onLoad(wasmInstance);\r\n }\r\n\r\n if (options.debug) {\r\n console.log(`[WASM] Module loaded successfully with ${Object.keys(functions).length} functions`);\r\n }\r\n\r\n return wasmInstance;\r\n\r\n } catch (error) {\r\n console.error('[WASM] Error loading Go WASM module:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Call a Go WASM function (like your frontend code's callWasmFunction)\r\n */\r\nexport function callWasmFunction(funcName: string, ...args: any[]): any {\r\n if (typeof window === 'undefined') {\r\n throw new Error('callWasmFunction() is for browser use only.');\r\n }\r\n\r\n const func = (window as any)[funcName];\r\n if (typeof func !== 'function') {\r\n throw new Error(`Function ${funcName} not found. Make sure the WASM module is loaded.`);\r\n }\r\n \r\n return func(...args);\r\n}\r\n\r\n/**\r\n * Check if Go WASM is ready (like your frontend code's wasmReady state)\r\n */\r\nexport function isWasmReady(): boolean {\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n\r\n // Check if Go runtime is available and at least one Go function exists\r\n return !!(window.Go && Object.keys(window).some(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n ));\r\n}\r\n\r\n/**\r\n * Get all available Go WASM functions\r\n */\r\nexport function getWasmFunctions(): string[] {\r\n if (typeof window === 'undefined') {\r\n return [];\r\n }\r\n\r\n return Object.keys(window).filter(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Hook for React components (like your frontend code's useEffect pattern)\r\n */\r\nexport function useGoWasm(wasmUrl: string, options: GoWasmOptions = {}) {\r\n if (typeof window === 'undefined') {\r\n throw new Error('useGoWasm() is for browser use only.');\r\n }\r\n\r\n // This would need to be implemented as a React hook in frontend-hamroun\r\n // For now, return the basic functionality\r\n return {\r\n loadWasm: () => loadGoWasm(wasmUrl, options),\r\n callFunction: callWasmFunction,\r\n isReady: isWasmReady,\r\n getFunctions: getWasmFunctions\r\n };\r\n}\r\n\r\n// Browser-specific type declarations\r\ndeclare global {\r\n interface Window {\r\n Go: new () => {\r\n importObject: any;\r\n run: (instance: WebAssembly.Instance) => void;\r\n };\r\n [key: string]: any;\r\n }\r\n}\r\n", "/**\r\n * Browser-specific exports for Baraqex\r\n * This file is used when building for the browser\r\n */\r\n\r\n// Re-export everything from core for browser usage (standalone, no external dependencies)\r\nexport * from './core/index.js';\r\n\r\n// Export WASM functionality (browser-only functions)\r\nexport { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';\r\nexport type { GoWasmOptions, GoWasmInstance } from './wasm.js';\r\n\r\n// Export safe utilities that work in browser\r\nexport const safeJsonParse = (json: string, fallback: any) => {\r\n try {\r\n return JSON.parse(json);\r\n } catch {\r\n return fallback;\r\n }\r\n};\r\n\r\nexport const generateToken = (length: number = 32) => {\r\n const array = new Uint8Array(length);\r\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\r\n crypto.getRandomValues(array);\r\n } else {\r\n for (let i = 0; i < array.length; i++) {\r\n array[i] = Math.floor(Math.random() * 256);\r\n }\r\n }\r\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\r\n};\r\n\r\n// Browser-safe template utilities\r\nexport const generateDocument = (content: string, options: any = {}) => \r\n `<!DOCTYPE html><html><head><title>${options.title || 'App'}</title></head><body>${content}</body></html>`;\r\n\r\nexport const generateErrorPage = (code: number, message: string) => \r\n `<div>Error ${code}: ${message}</div>`;\r\n\r\nexport const generateLoadingPage = (message: string = 'Loading...') => \r\n `<div>${message}</div>`;\r\n\r\n// Simple renderToString for browser compatibility\r\nexport const renderToString = (component: any): string => {\r\n try {\r\n if (typeof component === 'function') {\r\n const result = component();\r\n return typeof result === 'string' ? result : String(result || '');\r\n }\r\n return String(component || '');\r\n } catch (error) {\r\n return '<div>Error rendering component</div>';\r\n }\r\n};\r\n\r\n// Stub server functions for browser (they will throw if called)\r\nexport const createServer = () => {\r\n throw new Error('createServer is not available in browser environment');\r\n};\r\n\r\nexport const createDevServer = () => {\r\n throw new Error('createDevServer is not available in browser environment');\r\n};\r\n\r\nexport const createProductionServer = () => {\r\n throw new Error('createProductionServer is not available in browser environment');\r\n};\r\n\r\n// Export null stubs for server-only functionality\r\nexport const BaraqexServer = null;\r\nexport const Database = null;\r\nexport const AuthService = null;\r\nexport const ApiRouter = null;\r\nexport const requestLogger = null;\r\nexport const errorHandler = null;\r\nexport const notFoundHandler = null;\r\nexport const rateLimit = null;\r\nexport const initNodeWasm = null;\r\nexport const loadGoWasmFromFile = null;\r\nexport const hashString = null;\r\nexport const getPagination = null;\r\nexport const sendSuccess = null;\r\nexport const sendError = null;\r\nexport const validateFields = null;\r\nexport const validateFileUpload = null;\r\nexport const getEnvironmentInfo = null;\r\nexport const isDirectoryEmpty = null;\r\nexport const ensureDirectory = null;\r\nexport const writeJsonFile = null;\r\nexport const readJsonFile = null;\r\nexport const baraqexRenderToString = null;\r\nexport const renderComponent = null;\r\n\r\n// Debug log removed \u2014 use build.mjs or the CLI to verify the build.\r\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Batch updates utility for efficient rendering\n *\n * Supports both sync and async batched functions. When an async function is\n * passed, it is awaited and any queued micro-tasks are drained afterwards.\n */\n\nexport let isBatching = false;\nconst syncQueue: Function[] = [];\nconst asyncQueue: (() => Promise<void>)[] = [];\n\nexport async function batchUpdates(fn: (() => void) | (() => Promise<void>)): Promise<void> {\n if (isBatching) {\n // Nested batching \u2014 queue and return\n if (fn.constructor.name === 'AsyncFunction') {\n asyncQueue.push(fn as () => Promise<void>);\n } else {\n syncQueue.push(fn);\n }\n return;\n }\n\n isBatching = true;\n try {\n const result = fn();\n if (result instanceof Promise) {\n await result;\n }\n\n // Drain sync queue\n while (syncQueue.length > 0) {\n const nextFn = syncQueue.shift()!;\n nextFn();\n }\n\n // Drain async queue\n while (asyncQueue.length > 0) {\n const nextFn = asyncQueue.shift()!;\n await nextFn();\n }\n } finally {\n isBatching = false;\n }\n}\n\nexport function getIsBatching(): boolean {\n return isBatching;\n}\n", "/**\n * Context API for passing data through the component tree\n *\n * Uses a context stack to support nested providers of the same context.\n * Each Provider pushes its value onto the stack; useContext reads from the top.\n */\n\nexport interface Context<T> {\n Provider: (props: { value: T; children?: any }) => any;\n Consumer: (props: { children: (value: T) => any }) => any;\n _id: symbol;\n _defaultValue: T;\n useSelector: <S>(selector: (state: T) => S) => S;\n}\n\n// Per-context value stack: the last pushed value wins (most-recent Provider)\nconst contextStacks = new Map<symbol, any[]>();\n\nexport function createContext<T>(defaultValue: T): Context<T> {\n const id = Symbol('context');\n contextStacks.set(id, []);\n\n const context: Context<T> = {\n Provider: ({ value, children }: { value: T; children?: any }) => {\n const stack = contextStacks.get(id)!;\n stack.push(value);\n // We rely on the fact that the render tree processes children synchronously\n // before unwinding. If it doesn't we need a different approach.\n const result = children;\n stack.pop();\n return result;\n },\n Consumer: ({ children }: { children: (value: T) => any }) => {\n const stack = contextStacks.get(id);\n const value = stack && stack.length > 0 ? stack[stack.length - 1] : defaultValue;\n return children(value);\n },\n _id: id,\n _defaultValue: defaultValue,\n useSelector: <S>(selector: (state: T) => S) => {\n const stack = contextStacks.get(id);\n const value = stack && stack.length > 0 ? stack[stack.length - 1] : defaultValue;\n return selector(value);\n }\n };\n\n return context;\n}\n\nexport function useContext<T>(context: Context<T>): T {\n const stack = contextStacks.get(context._id);\n if (stack && stack.length > 0) {\n return stack[stack.length - 1];\n }\n return context._defaultValue;\n}\n\nexport function getContextValue<T>(context: Context<T>): T {\n return useContext(context);\n}\n", "/**\n * Hooks Implementation\n *\n * Each render root maintains its own isolated state via a RootState object.\n * The module-level currentRoot/currentComponentId/hookIndex are set before\n * each render call so hooks can find their data.\n */\n\nimport { createContext, useContext } from './context.js';\n\n// ---------------------------------------------------------------------------\n// Root-scoped state store\n// ---------------------------------------------------------------------------\n\nexport interface ComponentState {\n states: any[];\n effects: { callback: () => void | (() => void); deps?: any[]; cleanup?: () => void }[];\n memos: { value: any; deps?: any[] }[];\n refs: { current: any }[];\n}\n\nexport interface RootState {\n id: number;\n components: Map<number, ComponentState>;\n nextComponentId: number;\n renderCallback: ((element: any, container: HTMLElement) => Promise<void>) | null;\n container: HTMLElement | null;\n currentElement: any;\n}\n\nlet rootIdCounter = 0;\n\nexport function createRootState(): RootState {\n return {\n id: ++rootIdCounter,\n components: new Map(),\n nextComponentId: 0,\n renderCallback: null,\n container: null,\n currentElement: null\n };\n}\n\n// ---------------------------------------------------------------------------\n// Current render context (set per render call)\n// ---------------------------------------------------------------------------\n\nlet currentRoot: RootState | null = null;\nlet currentComponentId: number | null = null;\nlet hookIndex = 0;\n\nconst isServer = typeof window === 'undefined';\n\n// ---------------------------------------------------------------------------\n// Render lifecycle helpers\n// ---------------------------------------------------------------------------\n\nexport function prepareRender(root?: RootState, componentId?: number): number {\n if (root) {\n currentRoot = root;\n }\n if (componentId !== undefined) {\n currentComponentId = componentId;\n } else if (currentRoot) {\n currentComponentId = ++currentRoot.nextComponentId;\n }\n hookIndex = 0;\n return currentComponentId || 0;\n}\n\nexport function finishRender(): void {\n currentComponentId = null;\n}\n\nexport function getCurrentRoot(): RootState | null {\n return currentRoot;\n}\n\nexport function setCurrentRoot(root: RootState | null): void {\n currentRoot = root;\n}\n\nexport function getComponentState(root: RootState, compId: number): ComponentState {\n let state = root.components.get(compId);\n if (!state) {\n state = { states: [], effects: [], memos: [], refs: [] };\n root.components.set(compId, state);\n }\n return state;\n}\n\n// ---------------------------------------------------------------------------\n// setRenderCallback \u2014 bind a root to a re-render function\n// ---------------------------------------------------------------------------\n\nexport function setRenderCallback(\n callback: (element: any, container: HTMLElement) => Promise<void>,\n element: any,\n container: HTMLElement\n): void {\n if (!currentRoot) return;\n currentRoot.renderCallback = callback;\n currentRoot.currentElement = element;\n currentRoot.container = container;\n}\n\nexport function getCurrentRender(): number {\n return currentComponentId || 0;\n}\n\n// ---------------------------------------------------------------------------\n// Hooks\n// ---------------------------------------------------------------------------\n\n/**\n * useState \u2014 manages component state\n */\nexport function useState<T>(initial: T): [T, (newValue: T | ((prev: T) => T)) => void] {\n const root = currentRoot;\n const compId = currentComponentId;\n\n if (!root || compId === null) {\n if (isServer) {\n // During SSR, return the initial value with a no-op setter\n return [initial, () => {}];\n }\n console.warn('useState called outside of render context');\n return [initial, () => {}];\n }\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n if (currentIndex >= compState.states.length) {\n compState.states.push(initial);\n }\n\n const state = compState.states[currentIndex];\n\n const setState = (newValue: T | ((prev: T) => T)) => {\n const currentState = compState.states[currentIndex];\n const value = typeof newValue === 'function'\n ? (newValue as (prev: T) => T)(currentState)\n : newValue;\n\n if (Object.is(currentState, value)) return;\n\n compState.states[currentIndex] = value;\n\n // Trigger re-render via root's callback\n if (root.renderCallback && root.container && root.currentElement) {\n root.renderCallback(root.currentElement, root.container);\n }\n };\n\n return [state, setState];\n}\n\n/**\n * useEffect \u2014 handles side effects, runs after render\n */\nexport function useEffect(callback: () => void | (() => void), deps?: any[]): void {\n const root = currentRoot;\n const compId = currentComponentId;\n if (!root || compId === null || isServer) return;\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n const prevEffect = compState.effects[currentIndex];\n\n const shouldRun = !prevEffect || !deps || !prevEffect.deps ||\n deps.some((dep, i) => !Object.is(dep, prevEffect.deps?.[i]));\n\n if (shouldRun) {\n if (prevEffect?.cleanup) {\n prevEffect.cleanup();\n }\n\n queueMicrotask(() => {\n const cleanup = callback();\n compState.effects[currentIndex] = {\n callback,\n deps,\n cleanup: typeof cleanup === 'function' ? cleanup : undefined\n };\n });\n }\n\n if (!prevEffect) {\n compState.effects.push({ callback, deps });\n }\n}\n\n/**\n * useLayoutEffect \u2014 runs synchronously after DOM mutations (client only)\n */\nexport function useLayoutEffect(callback: () => void | (() => void), deps?: any[]): void {\n if (isServer) return;\n\n const root = currentRoot;\n const compId = currentComponentId;\n if (!root || compId === null) return;\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n const prevEffect = compState.effects[currentIndex];\n\n const shouldRun = !prevEffect || !deps || !prevEffect.deps ||\n deps.some((dep, i) => !Object.is(dep, prevEffect.deps?.[i]));\n\n if (shouldRun) {\n if (prevEffect?.cleanup) {\n prevEffect.cleanup();\n }\n\n // Run synchronously (unlike useEffect which uses queueMicrotask)\n const cleanup = callback();\n compState.effects[currentIndex] = {\n callback,\n deps,\n cleanup: typeof cleanup === 'function' ? cleanup : undefined\n };\n }\n\n if (!prevEffect) {\n compState.effects.push({ callback, deps });\n }\n}\n\n/**\n * useMemo \u2014 memoizes expensive computations\n */\nexport function useMemo<T>(factory: () => T, deps?: any[]): T {\n const root = currentRoot;\n const compId = currentComponentId;\n\n if (!root || compId === null) {\n return factory();\n }\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n const prevMemo = compState.memos[currentIndex];\n\n const shouldRecalculate = !prevMemo || !deps || !prevMemo.deps ||\n deps.some((dep, i) => !Object.is(dep, prevMemo.deps?.[i]));\n\n if (shouldRecalculate) {\n const value = factory();\n compState.memos[currentIndex] = { value, deps };\n return value;\n }\n\n return prevMemo.value;\n}\n\n/**\n * useCallback \u2014 memoizes callbacks\n */\nexport function useCallback<T extends (...args: any[]) => any>(\n callback: T,\n deps: any[]\n): T {\n return useMemo(() => callback, deps);\n}\n\n/**\n * useRef \u2014 creates a mutable ref object\n */\nexport function useRef<T>(initial: T): { current: T } {\n const root = currentRoot;\n const compId = currentComponentId;\n\n if (!root || compId === null) {\n return { current: initial };\n }\n\n const compState = getComponentState(root, compId);\n const currentIndex = hookIndex;\n hookIndex++;\n\n if (compState.refs[currentIndex] === undefined) {\n compState.refs[currentIndex] = { current: initial };\n }\n\n return compState.refs[currentIndex];\n}\n\n/**\n * useReducer \u2014 manages complex state with a reducer\n */\nexport function useReducer<S, A>(\n reducer: (state: S, action: A) => S,\n initialState: S\n): [S, (action: A) => void] {\n const [state, setState] = useState(initialState);\n\n const dispatch = (action: A) => {\n setState((prevState) => reducer(prevState, action));\n };\n\n return [state, dispatch];\n}\n\n/**\n * useErrorBoundary \u2014 catches errors in child components\n */\nexport function useErrorBoundary(): [Error | null, () => void] {\n const [error, setError] = useState<Error | null>(null);\n const resetError = () => setError(null);\n return [error, resetError];\n}\n\n/**\n * useId \u2014 generates stable unique IDs\n */\nlet idCounter = 0;\nexport function useId(): string {\n const ref = useRef<string | null>(null);\n if (ref.current === null) {\n ref.current = `baraqex-id-${++idCounter}`;\n }\n return ref.current;\n}\n\n/**\n * Cleanup all hook state for a component within a root\n */\nexport function cleanupHooks(root: RootState, compId: number): void {\n const compState = root.components.get(compId);\n if (compState) {\n compState.effects.forEach(effect => {\n if (effect.cleanup) effect.cleanup();\n });\n root.components.delete(compId);\n }\n}\n\n/**\n * Cleanup all state for an entire root\n */\nexport function cleanupRoot(root: RootState): void {\n root.components.forEach((compState) => {\n compState.effects.forEach(effect => {\n if (effect.cleanup) effect.cleanup();\n });\n });\n root.components.clear();\n}\n\n// Re-export context hooks\nexport { createContext, useContext };\n", "/**\n * JSX Runtime \u2014 transforms JSX syntax into virtual DOM nodes\n *\n * jsx() and jsxs() produce VNode objects (universal).\n * createElement() produces real DOM nodes (browser-only).\n */\n\nimport { VNode } from './types.js';\nimport { prepareRender, finishRender, setRenderCallback, getCurrentRoot } from './hooks.js';\n\nconst isBrowser = typeof document !== 'undefined';\n\n// ---------------------------------------------------------------------------\n// VNode creation (universal \u2014 works in any environment)\n// ---------------------------------------------------------------------------\n\n/**\n * Create a virtual DOM node from JSX\n */\nexport function jsx(type: string | Function, props: any, ...children: any[]): VNode {\n const { key, ...restProps } = props || {};\n const processedProps = { ...restProps };\n\n // Children from trailing arguments (classic esbuild/babel/swc transform)\n if (children.length > 0) {\n processedProps.children = children.length === 1 ? children[0] : children;\n }\n\n const vnodeKey = key ?? processedProps.key;\n return { type, props: processedProps, key: vnodeKey };\n}\n\n/**\n * JSX with static children (optimization for multiple children)\n */\nexport const jsxs = jsx;\n\n/**\n * JSX development version with additional debugging info\n */\nexport function jsxDEV(\n type: string | Function,\n props: any,\n key?: string | number,\n _isStaticChildren?: boolean,\n _source?: any,\n _self?: any\n): VNode {\n if (key !== undefined) {\n return jsx(type, { ...props, key });\n }\n return jsx(type, props);\n}\n\n/**\n * Fragment \u2014 renders children without a wrapper element\n */\nexport const Fragment = ({ children }: { children: any }) => children;\n\n// ---------------------------------------------------------------------------\n// DOM element creation (browser-only)\n// ---------------------------------------------------------------------------\n\nfunction assertBrowser(method: string): void {\n if (!isBrowser) {\n throw new Error(\n `[baraqex] ${method}() can only be called in a browser environment. ` +\n `Use renderToString() for server-side rendering.`\n );\n }\n}\n\nfunction createTextNode(text: string): Text {\n return document.createTextNode(text);\n}\n\n/**\n * Apply props to a real DOM element\n */\nexport function applyProps(element: HTMLElement, props: Record<string, any>): void {\n for (const [key, value] of Object.entries(props)) {\n if (key === 'children') continue;\n\n if (key === 'className') {\n element.setAttribute('class', String(value));\n } else if (key === 'htmlFor') {\n element.setAttribute('for', String(value));\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase();\n element.addEventListener(eventName, value as EventListener);\n } else if (key === 'style' && typeof value === 'object') {\n Object.assign(element.style, value);\n } else if (key === 'dangerouslySetInnerHTML' && value && (value as any).__html) {\n element.innerHTML = (value as any).__html;\n } else if (key === 'ref') {\n if (typeof value === 'function') {\n value(element);\n } else if (value && typeof value === 'object' && 'current' in value) {\n (value as { current: any }).current = element;\n }\n } else if (value !== false && value != null) {\n if (value === true) {\n element.setAttribute(key, '');\n } else {\n element.setAttribute(key, String(value));\n }\n }\n }\n}\n\n/**\n * Create a DOM element from a virtual node (async for component support)\n */\nexport async function createElement(vnode: VNode | any): Promise<Node> {\n assertBrowser('createElement');\n\n // Handle primitives and null\n if (vnode == null || typeof vnode === 'boolean') {\n return createTextNode('');\n }\n\n if (typeof vnode === 'number' || typeof vnode === 'string') {\n return createTextNode(String(vnode));\n }\n\n // Handle arrays\n if (Array.isArray(vnode)) {\n const fragment = document.createDocumentFragment();\n for (const child of vnode) {\n const node = await createElement(child);\n fragment.appendChild(node);\n }\n return fragment;\n }\n\n // Handle VNode\n if (typeof vnode === 'object' && 'type' in vnode && vnode.props !== undefined) {\n const { type, props } = vnode;\n\n // Handle function components\n if (typeof type === 'function') {\n if (type === Fragment) {\n const children = props?.children;\n if (children == null) return createTextNode('');\n return createElement(children);\n }\n\n const root = getCurrentRoot() ?? undefined;\n const renderId = prepareRender(root);\n try {\n const result = type(props || {});\n return await createElement(result);\n } finally {\n finishRender();\n }\n }\n\n // Create DOM element for intrinsic elements\n const element = document.createElement(type as string);\n applyProps(element, props || {});\n\n // Handle children\n const children = props?.children;\n if (children != null) {\n const childArray = Array.isArray(children) ? children : [children];\n for (const child of childArray) {\n const childNode = await createElement(child);\n element.appendChild(childNode);\n }\n }\n\n return element;\n }\n\n // Handle other objects by converting to string\n return createTextNode(String(vnode));\n}\n\n/**\n * Synchronous createElement (browser-only, no async component support)\n */\nexport function createElementSync(vnode: VNode | any): Node {\n assertBrowser('createElementSync');\n\n if (vnode == null || typeof vnode === 'boolean') {\n return createTextNode('');\n }\n\n if (typeof vnode === 'number' || typeof vnode === 'string') {\n return createTextNode(String(vnode));\n }\n\n if (Array.isArray(vnode)) {\n const fragment = document.createDocumentFragment();\n for (const child of vnode) {\n fragment.appendChild(createElementSync(child));\n }\n return fragment;\n }\n\n if (typeof vnode === 'object' && 'type' in vnode) {\n const { type, props } = vnode;\n\n if (typeof type === 'function') {\n if (type === Fragment) {\n return createElementSync(props?.children);\n }\n const result = type(props || {});\n return createElementSync(result);\n }\n\n const element = document.createElement(type as string);\n applyProps(element, props || {});\n\n const children = props?.children;\n if (children != null) {\n const childArray = Array.isArray(children) ? children : [children];\n for (const child of childArray) {\n element.appendChild(createElementSync(child));\n }\n }\n\n return element;\n }\n\n return createTextNode(String(vnode));\n}\n\n// Named exports\nexport default {\n jsx,\n jsxs,\n jsxDEV,\n Fragment,\n createElement,\n createElementSync\n};\n", "/**\n * Client-side renderer\n *\n * Each render call creates a RootState that holds all hook state for that\n * render tree. The renderer tracks the previous VNode so we can diff on\n * re-renders instead of tearing down the entire DOM.\n */\n\nimport { createElement, applyProps, Fragment } from './jsx-runtime.js';\nimport {\n prepareRender,\n finishRender,\n setRenderCallback,\n createRootState,\n cleanupRoot,\n getCurrentRoot,\n type RootState\n} from './hooks.js';\nimport { batchUpdates } from './batch.js';\nimport { calculatePatches, applyPatches, type Patch } from './vdom.js';\nimport { VNode } from './types.js';\n\nconst isBrowser = typeof document !== 'undefined';\n\n// ---------------------------------------------------------------------------\n// Root tracking \u2014 maps containers to their roots\n// ---------------------------------------------------------------------------\n\nconst rootMap = new WeakMap<HTMLElement, RootState>();\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Render a virtual DOM tree into a container element.\n */\nexport async function render(element: VNode, container: HTMLElement): Promise<void> {\n if (!isBrowser) {\n throw new Error(\n '[baraqex] render() can only be called in a browser. ' +\n 'Use renderToString() for server-side rendering.'\n );\n }\n if (!container) {\n throw new Error('[baraqex] render() requires a container element');\n }\n\n let root = rootMap.get(container);\n if (!root) {\n root = createRootState();\n rootMap.set(container, root);\n }\n\n await batchUpdates(async () => {\n prepareRender(root);\n try {\n setRenderCallback(render as any, element, container);\n\n const domNode = await createElement(element);\n\n // Replace container contents\n container.textContent = '';\n container.appendChild(domNode);\n } finally {\n finishRender();\n }\n });\n}\n\n/**\n * Yield every element under `root` in document order (parents before children).\n * Used by hydration to align server-rendered DOM with the VNode tree.\n */\nfunction* walkElements(node: Node): Generator<HTMLElement> {\n for (const child of node.childNodes) {\n if (child.nodeType === 1) {\n yield child as HTMLElement;\n yield* walkElements(child);\n }\n }\n}\n\n/**\n * Hydrate a VNode tree onto existing server-rendered DOM.\n *\n * Walks the VNode tree and the existing DOM in lockstep. For each intrinsic\n * element it re-applies props to the matching existing node \u2014 which attaches\n * event listeners and normalizes attributes without destroying the DOM \u2014 so\n * the flash caused by clearing + re-rendering never happens.\n *\n * Returns false (and leaves the DOM untouched) if the existing DOM can't be\n * matched, so callers can fall back to a full render.\n */\nasync function hydrateElement(vnode: any, nextElement: () => HTMLElement | null): Promise<boolean> {\n if (vnode == null || typeof vnode === 'boolean') {\n return true;\n }\n\n if (typeof vnode === 'number' || typeof vnode === 'string') {\n return true;\n }\n\n if (Array.isArray(vnode)) {\n for (const child of vnode) {\n if (!(await hydrateElement(child, nextElement))) return false;\n }\n return true;\n }\n\n if (typeof vnode === 'object' && 'type' in vnode && vnode.props !== undefined) {\n const { type, props } = vnode;\n\n if (typeof type === 'function') {\n if (type === Fragment) {\n const children = props?.children;\n if (children == null) return true;\n return hydrateElement(children, nextElement);\n }\n\n const root = getCurrentRoot() ?? undefined;\n prepareRender(root);\n try {\n const result = type(props || {});\n return await hydrateElement(result, nextElement);\n } finally {\n finishRender();\n }\n }\n\n if (typeof type === 'string') {\n const el = nextElement();\n if (!el) return false;\n if (el.tagName.toLowerCase() !== type.toLowerCase()) return false;\n\n applyProps(el, props || {});\n\n const children = props?.children;\n if (children != null) {\n const childArray = Array.isArray(children) ? children : [children];\n for (const child of childArray) {\n if (!(await hydrateElement(child, nextElement))) return false;\n }\n }\n return true;\n }\n\n return false;\n }\n\n return true;\n}\n\n/**\n * Hydrate server-rendered HTML in place.\n *\n * Attaches event listeners and applies props to the DOM produced by\n * server-side rendering without replacing it, so there is no visual flash\n * between the SSR HTML and an interactive page. Fallback: if the existing DOM\n * can't be matched, performs a fresh render into an empty container.\n */\nexport async function hydrate(element: VNode, container: HTMLElement): Promise<void> {\n if (!isBrowser) {\n throw new Error('[baraqex] hydrate() can only be called in a browser.');\n }\n if (!container) {\n throw new Error('[baraqex] hydrate() requires a container element');\n }\n\n // No server-rendered content to hydrate \u2014 just render normally.\n if (!container.hasChildNodes()) {\n return render(element, container);\n }\n\n let root = rootMap.get(container);\n if (!root) {\n root = createRootState();\n rootMap.set(container, root);\n }\n\n await batchUpdates(async () => {\n prepareRender(root);\n try {\n setRenderCallback(render as any, element, container);\n\n const generator = walkElements(container);\n const nextElement = () => {\n const { value, done } = generator.next();\n return done ? null : value;\n };\n\n const matched = await hydrateElement(element, nextElement);\n if (!matched) {\n // Structural mismatch \u2014 fall back to a fresh render on a clean root.\n const freshRoot = createRootState();\n rootMap.set(container, freshRoot);\n prepareRender(freshRoot);\n setRenderCallback(render as any, element, container);\n const domNode = await createElement(element);\n container.textContent = '';\n container.appendChild(domNode);\n finishRender();\n return;\n }\n } finally {\n finishRender();\n }\n });\n}\n\n/**\n * Create a root for React 18+ compatible API.\n */\nexport function createRoot(container: HTMLElement) {\n const root = createRootState();\n rootMap.set(container, root);\n\n return {\n render: (element: VNode) => render(element, container),\n unmount: () => {\n cleanupRoot(root);\n rootMap.delete(container);\n container.textContent = '';\n }\n };\n}\n\n/**\n * Check if a container has an active root.\n */\nexport function hasRoot(container: HTMLElement): boolean {\n return rootMap.has(container);\n}\n\nexport default {\n render,\n hydrate,\n createRoot,\n hasRoot\n};\n", "/**\r\n * Server-side rendering - converts virtual DOM to HTML strings\r\n */\r\n\r\nimport { VNode } from './types.js';\r\nimport { prepareRender, finishRender } from './hooks.js';\r\n\r\ntype Component = (props: any) => any;\r\n\r\n// Self-closing HTML tags\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\n/**\r\n * Renders a virtual DOM tree to an HTML string\r\n */\r\nexport function renderToString(vnode: VNode | any): string {\r\n // Reset hook state for this render\r\n prepareRender();\r\n \r\n try {\r\n // Render the tree to HTML\r\n return renderNodeToString(vnode);\r\n } finally {\r\n // Clean up after rendering\r\n finishRender();\r\n }\r\n}\r\n\r\n/**\r\n * Renders to string with data for hydration\r\n */\r\nexport function renderToStringWithData(vnode: VNode | any): { html: string; data: any } {\r\n const html = renderToString(vnode);\r\n return { html, data: {} };\r\n}\r\n\r\n/**\r\n * Stream rendering for large pages\r\n */\r\nexport async function* renderToStream(vnode: VNode | any): AsyncGenerator<string> {\r\n yield renderToString(vnode);\r\n}\r\n\r\n/**\r\n * Internal function to convert a virtual node to an HTML string\r\n */\r\nfunction renderNodeToString(vnode: VNode | string | number | boolean | null | undefined | any[]): string {\r\n // Handle primitive values\r\n if (vnode === null || vnode === undefined) return '';\r\n if (typeof vnode === 'boolean') return '';\r\n if (typeof vnode === 'number' || typeof vnode === 'string') return escapeHtml(String(vnode));\r\n \r\n // Handle arrays\r\n if (Array.isArray(vnode)) {\r\n return vnode.map(child => renderNodeToString(child)).join('');\r\n }\r\n \r\n // Handle objects without type (not VNode)\r\n if (typeof vnode !== 'object' || vnode.type === undefined) {\r\n return escapeHtml(String(vnode));\r\n }\r\n \r\n const { type, props } = vnode;\r\n \r\n // Handle function components\r\n if (typeof type === 'function') {\r\n // Handle Fragment\r\n if (type.name === 'Fragment' || (type as unknown) === Symbol.for('react.fragment')) {\r\n const children = props?.children;\r\n if (children == null) return '';\r\n return Array.isArray(children)\r\n ? children.map(child => renderNodeToString(child)).join('')\r\n : renderNodeToString(children);\r\n }\r\n \r\n const Component = type as Component;\r\n try {\r\n const renderedNode = Component(props || {});\r\n return renderNodeToString(renderedNode);\r\n } catch (error) {\r\n console.error('Error rendering component:', error);\r\n return `<!-- Error rendering component: ${escapeHtml(String(error))} -->`;\r\n }\r\n }\r\n \r\n // Handle intrinsic elements (regular HTML tags)\r\n if (typeof type === 'string') {\r\n const tag = type;\r\n let attrs = '';\r\n \r\n // Convert props to HTML attributes\r\n if (props) {\r\n for (const [key, value] of Object.entries(props)) {\r\n if (key === 'children') continue;\r\n if (key === 'dangerouslySetInnerHTML') continue;\r\n if (key === 'ref') continue;\r\n if (value === undefined || value === null || value === false) continue;\r\n \r\n let attrName = key;\r\n let attrValue = value;\r\n \r\n // Handle special attribute names\r\n if (key === 'className') attrName = 'class';\r\n else if (key === 'htmlFor') attrName = 'for';\r\n else if (key === 'tabIndex') attrName = 'tabindex';\r\n \r\n // Skip event handlers\r\n if (attrName.startsWith('on') && typeof value === 'function') continue;\r\n \r\n // Handle style object\r\n if (attrName === 'style' && typeof value === 'object') {\r\n attrValue = Object.entries(value)\r\n .map(([prop, val]) => {\r\n const cssProperty = prop.replace(/([A-Z])/g, '-$1').toLowerCase();\r\n return `${cssProperty}: ${val}`;\r\n })\r\n .join('; ');\r\n }\r\n \r\n // Handle boolean attributes\r\n if (value === true) {\r\n attrs += ` ${attrName}`;\r\n } else {\r\n attrs += ` ${attrName}=\"${escapeHtml(String(attrValue))}\"`;\r\n }\r\n }\r\n }\r\n \r\n // Self-closing tags\r\n if (VOID_ELEMENTS.has(tag)) {\r\n return `<${tag}${attrs} />`;\r\n }\r\n \r\n // Handle dangerouslySetInnerHTML\r\n if (props?.dangerouslySetInnerHTML?.__html) {\r\n return `<${tag}${attrs}>${props.dangerouslySetInnerHTML.__html}</${tag}>`;\r\n }\r\n \r\n // Process children\r\n let children = '';\r\n const childrenArray = props?.children \r\n ? Array.isArray(props.children) ? props.children : [props.children]\r\n : [];\r\n \r\n for (const child of childrenArray) {\r\n children += renderNodeToString(child);\r\n }\r\n \r\n return `<${tag}${attrs}>${children}</${tag}>`;\r\n }\r\n \r\n // Handle Fragment symbol\r\n if (type === Symbol.for('react.fragment')) {\r\n const children = props?.children;\r\n if (children == null) return '';\r\n return Array.isArray(children)\r\n ? children.map(child => renderNodeToString(child)).join('')\r\n : renderNodeToString(children);\r\n }\r\n \r\n // Fallback for unknown node types\r\n console.warn('Unknown vnode type:', type);\r\n return '';\r\n}\r\n\r\n/**\r\n * Escape HTML special characters to prevent XSS\r\n */\r\nfunction escapeHtml(text: string): string {\r\n return text\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#039;');\r\n}\r\n\r\nexport default {\r\n renderToString,\r\n renderToStringWithData,\r\n renderToStream\r\n};\r\n", "/**\n * Virtual DOM diffing and patching utilities\n *\n * Provides diff detection, patch calculation, and DOM patch application.\n * Supports keyed children for efficient list reconciliation.\n */\n\nimport { VNode } from './types.js';\n\nconst isBrowser = typeof document !== 'undefined';\n\n// ---------------------------------------------------------------------------\n// Props comparison\n// ---------------------------------------------------------------------------\n\nfunction arePropsEqual(oldProps: any, newProps: any): boolean {\n const oldKeys = Object.keys(oldProps || {}).filter(k => k !== 'children');\n const newKeys = Object.keys(newProps || {}).filter(k => k !== 'children');\n\n if (oldKeys.length !== newKeys.length) return false;\n return oldKeys.every(key => Object.is(oldProps[key], newProps[key]));\n}\n\n// ---------------------------------------------------------------------------\n// Diff detection (returns boolean \u2014 needs re-render?)\n// ---------------------------------------------------------------------------\n\nexport function diff(oldNode: VNode | any, newNode: VNode | any): boolean {\n if (oldNode == null || newNode == null) {\n return oldNode !== newNode;\n }\n\n if (typeof oldNode !== typeof newNode) return true;\n\n if (typeof newNode === 'string' || typeof newNode === 'number') {\n return oldNode !== newNode;\n }\n\n if (Array.isArray(oldNode) && Array.isArray(newNode)) {\n if (oldNode.length !== newNode.length) return true;\n return oldNode.some((child, i) => diff(child, newNode[i]));\n }\n\n if (typeof oldNode === 'object' && typeof newNode === 'object') {\n if (newNode.type !== oldNode.type) return true;\n if (newNode.key !== oldNode.key) return true;\n return !arePropsEqual(oldNode.props, newNode.props);\n }\n\n return oldNode !== newNode;\n}\n\nexport function shouldComponentUpdate(oldProps: any, newProps: any): boolean {\n return !arePropsEqual(oldProps, newProps);\n}\n\n// ---------------------------------------------------------------------------\n// Patch types\n// ---------------------------------------------------------------------------\n\nexport interface Patch {\n type: 'CREATE' | 'REMOVE' | 'REPLACE' | 'UPDATE' | 'SET_PROP' | 'REMOVE_PROP';\n node?: VNode | any;\n props?: Record<string, any>;\n children?: Patch[];\n}\n\n// ---------------------------------------------------------------------------\n// Patch calculation\n// ---------------------------------------------------------------------------\n\nexport function calculatePatches(oldNode: VNode | any, newNode: VNode | any): Patch | null {\n if (oldNode == null && newNode != null) {\n return { type: 'CREATE', node: newNode };\n }\n\n if (oldNode != null && newNode == null) {\n return { type: 'REMOVE' };\n }\n\n if (oldNode == null && newNode == null) {\n return null;\n }\n\n if (typeof oldNode !== typeof newNode) {\n return { type: 'REPLACE', node: newNode };\n }\n\n if (typeof newNode === 'string' || typeof newNode === 'number') {\n if (oldNode !== newNode) {\n return { type: 'REPLACE', node: newNode };\n }\n return null;\n }\n\n if (typeof oldNode === 'object' && typeof newNode === 'object' && 'type' in newNode) {\n if (oldNode.type !== newNode.type) {\n return { type: 'REPLACE', node: newNode };\n }\n\n const propPatches: Record<string, any> = {};\n let hasChanges = false;\n\n const newProps = newNode.props || {};\n const oldProps = oldNode.props || {};\n\n for (const key of Object.keys(newProps)) {\n if (key === 'children') continue;\n if (!Object.is(newProps[key], oldProps[key])) {\n propPatches[key] = newProps[key];\n hasChanges = true;\n }\n }\n\n for (const key of Object.keys(oldProps)) {\n if (key === 'children') continue;\n if (!(key in newProps)) {\n propPatches[key] = undefined;\n hasChanges = true;\n }\n }\n\n // Children diffing with key support\n const oldChildren = normalizeChildren(oldProps.children);\n const newChildren = normalizeChildren(newProps.children);\n const childPatches = diffChildren(oldChildren, newChildren);\n\n if (childPatches.length > 0) {\n hasChanges = true;\n }\n\n if (hasChanges) {\n return {\n type: 'UPDATE',\n props: propPatches,\n children: childPatches.length > 0 ? childPatches : undefined\n };\n }\n\n return null;\n }\n\n return null;\n}\n\nfunction normalizeChildren(children: any): any[] {\n if (children == null) return [];\n return Array.isArray(children) ? children : [children];\n}\n\n/**\n * Diff two lists of children using keys for reconciliation.\n * Returns an ordered list of patches.\n */\nfunction diffChildren(oldChildren: any[], newChildren: any[]): Patch[] {\n const patches: Patch[] = [];\n\n // Build key \u2192 index maps\n const oldKeyMap = new Map<string | number, number>();\n oldChildren.forEach((child, i) => {\n if (child && typeof child === 'object' && child.key != null) {\n oldKeyMap.set(child.key, i);\n }\n });\n\n const newKeyMap = new Map<string | number, number>();\n newChildren.forEach((child, i) => {\n if (child && typeof child === 'object' && child.key != null) {\n newKeyMap.set(child.key, i);\n }\n });\n\n const maxLen = Math.max(oldChildren.length, newChildren.length);\n\n for (let i = 0; i < maxLen; i++) {\n const oldChild = i < oldChildren.length ? oldChildren[i] : null;\n const newChild = i < newChildren.length ? newChildren[i] : null;\n\n const patch = calculatePatches(oldChild, newChild);\n if (patch) {\n patches.push(patch);\n }\n }\n\n return patches;\n}\n\n// ---------------------------------------------------------------------------\n// DOM patch application\n// ---------------------------------------------------------------------------\n\n/**\n * Apply a patch to a DOM element. Returns the replacement element (or null\n * if the element was removed).\n */\nexport function applyPatches(element: Element, patch: Patch): Element | null {\n if (!isBrowser) return element;\n\n switch (patch.type) {\n case 'REMOVE':\n element.parentNode?.removeChild(element);\n return null;\n\n case 'REPLACE': {\n if (!patch.node) return element;\n // We need createElement here \u2014 import lazily to avoid circular deps\n // In practice, replace is handled at a higher level by the renderer\n const newNode = patch.node;\n if (typeof newNode === 'string' || typeof newNode === 'number') {\n const textNode = document.createTextNode(String(newNode));\n element.parentNode?.replaceChild(textNode, element);\n return null;\n }\n // For VNode replacements, the caller should use createElement + replaceChild\n // This is a fallback that just clears the element\n element.textContent = '';\n return element;\n }\n\n case 'UPDATE': {\n if (patch.props) {\n for (const [key, value] of Object.entries(patch.props)) {\n if (value === undefined) {\n const attrName = key === 'className' ? 'class' : key;\n element.removeAttribute(attrName);\n } else if (key === 'className') {\n element.setAttribute('class', String(value));\n } else if (key === 'style' && typeof value === 'object') {\n const htmlEl = element as HTMLElement;\n for (const [prop, val] of Object.entries(value)) {\n (htmlEl.style as any)[prop] = val;\n }\n } else if (key.startsWith('on') && typeof value === 'function') {\n const eventName = key.slice(2).toLowerCase();\n // Remove old listener if any, add new one\n const attrName = `data-baraqex-listener-${eventName}`;\n const oldHandler = (element as any).__baraqexHandlers?.[eventName];\n if (oldHandler) {\n element.removeEventListener(eventName, oldHandler);\n }\n element.addEventListener(eventName, value as EventListener);\n if (!(element as any).__baraqexHandlers) {\n (element as any).__baraqexHandlers = {};\n }\n (element as any).__baraqexHandlers[eventName] = value;\n } else if (key === 'ref') {\n if (typeof value === 'function') {\n value(element);\n } else if (value && typeof value === 'object' && 'current' in value) {\n value.current = element;\n }\n } else {\n if (value === true) {\n element.setAttribute(key, '');\n } else {\n element.setAttribute(key, String(value));\n }\n }\n }\n }\n return element;\n }\n\n default:\n return element;\n }\n}\n\nexport default {\n diff,\n shouldComponentUpdate,\n calculatePatches,\n applyPatches\n};\n", "/**\r\n * Class-based Component support (for legacy compatibility)\r\n */\r\n\r\nimport { createElement } from './jsx-runtime.js';\r\nimport { VNode } from './types.js';\r\n\r\nexport abstract class Component<P = {}, S = {}> {\r\n props: P;\r\n state: S;\r\n element: HTMLElement | null = null;\r\n private _mounted: boolean = false;\r\n private _pendingState: Partial<S> | null = null;\r\n\r\n constructor(props: P) {\r\n this.props = props;\r\n this.state = {} as S;\r\n }\r\n\r\n /**\r\n * Called after the component is mounted to the DOM\r\n */\r\n componentDidMount(): void {}\r\n\r\n /**\r\n * Called before the component is unmounted from the DOM\r\n */\r\n componentWillUnmount(): void {}\r\n\r\n /**\r\n * Called when the component receives new props\r\n */\r\n componentDidUpdate(_prevProps: P, _prevState: S): void {}\r\n\r\n /**\r\n * Determine if the component should re-render\r\n */\r\n shouldComponentUpdate(_nextProps: P, _nextState: S): boolean {\r\n return true;\r\n }\r\n\r\n /**\r\n * Update component state and trigger re-render\r\n */\r\n setState(newState: Partial<S> | ((prevState: S, props: P) => Partial<S>)): void {\r\n const prevState = { ...this.state };\r\n \r\n const stateUpdate = typeof newState === 'function'\r\n ? newState(this.state, this.props)\r\n : newState;\r\n \r\n this.state = { ...this.state, ...stateUpdate };\r\n \r\n if (this._mounted) {\r\n if (this.shouldComponentUpdate(this.props, this.state)) {\r\n this._update();\r\n this.componentDidUpdate(this.props, prevState);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Force a re-render without checking shouldComponentUpdate\r\n */\r\n forceUpdate(): void {\r\n this._update();\r\n }\r\n\r\n /**\r\n * Internal update method\r\n */\r\n private async _update(): Promise<void> {\r\n const vdom = this.render();\r\n if (!vdom || !this.element?.parentNode) return;\r\n \r\n const newElement = await createElement(vdom);\r\n if (newElement instanceof HTMLElement) {\r\n this.element.parentNode.replaceChild(newElement, this.element);\r\n this.element = newElement;\r\n }\r\n }\r\n\r\n /**\r\n * Mount the component to a container\r\n */\r\n async mount(container: HTMLElement): Promise<void> {\r\n const vdom = this.render();\r\n if (!vdom) return;\r\n \r\n const element = await createElement(vdom);\r\n if (element instanceof HTMLElement) {\r\n this.element = element;\r\n container.appendChild(element);\r\n this._mounted = true;\r\n this.componentDidMount();\r\n }\r\n }\r\n\r\n /**\r\n * Unmount the component\r\n */\r\n unmount(): void {\r\n if (this.element?.parentNode) {\r\n this.componentWillUnmount();\r\n this.element.parentNode.removeChild(this.element);\r\n this._mounted = false;\r\n this.element = null;\r\n }\r\n }\r\n\r\n /**\r\n * Render method - must be implemented by subclasses\r\n */\r\n abstract render(): VNode | null;\r\n}\r\n\r\n/**\r\n * Create a class component wrapper for functional use\r\n */\r\nexport function createClassComponent<P>(\r\n ComponentClass: new (props: P) => Component<P>\r\n): (props: P) => VNode | null {\r\n return (props: P) => {\r\n const instance = new ComponentClass(props);\r\n return instance.render();\r\n };\r\n}\r\n\r\n/**\r\n * Pure Component - only re-renders when props change (shallow comparison)\r\n */\r\nexport abstract class PureComponent<P = {}, S = {}> extends Component<P, S> {\r\n shouldComponentUpdate(nextProps: P, nextState: S): boolean {\r\n // Shallow comparison of props\r\n const propsKeys = Object.keys(this.props as object) as (keyof P)[];\r\n const nextPropsKeys = Object.keys(nextProps as object) as (keyof P)[];\r\n \r\n if (propsKeys.length !== nextPropsKeys.length) return true;\r\n \r\n for (const key of propsKeys) {\r\n if (!Object.is(this.props[key], nextProps[key])) return true;\r\n }\r\n \r\n // Shallow comparison of state\r\n const stateKeys = Object.keys(this.state as object) as (keyof S)[];\r\n const nextStateKeys = Object.keys(nextState as object) as (keyof S)[];\r\n \r\n if (stateKeys.length !== nextStateKeys.length) return true;\r\n \r\n for (const key of stateKeys) {\r\n if (!Object.is(this.state[key], nextState[key])) return true;\r\n }\r\n \r\n return false;\r\n }\r\n}\r\n\r\nexport default {\r\n Component,\r\n PureComponent,\r\n createClassComponent\r\n};\r\n", "/**\r\n * Event Bus for cross-component communication\r\n */\r\n\r\nexport type EventHandler = (...args: any[]) => void;\r\n\r\nexport interface EventBus {\r\n on(event: string, handler: EventHandler): () => void;\r\n once(event: string, handler: EventHandler): () => void;\r\n off(event: string, handler?: EventHandler): void;\r\n emit(event: string, ...args: any[]): void;\r\n clear(event?: string): void;\r\n}\r\n\r\n/**\r\n * Create a new event bus instance\r\n */\r\nexport function createEventBus(): EventBus {\r\n const events = new Map<string, Set<EventHandler>>();\r\n const onceHandlers = new WeakMap<EventHandler, EventHandler>();\r\n \r\n const on = (event: string, handler: EventHandler): (() => void) => {\r\n if (!events.has(event)) {\r\n events.set(event, new Set());\r\n }\r\n \r\n events.get(event)!.add(handler);\r\n \r\n // Return unsubscribe function\r\n return () => off(event, handler);\r\n };\r\n \r\n const once = (event: string, handler: EventHandler): (() => void) => {\r\n const onceWrapper: EventHandler = (...args: any[]) => {\r\n handler(...args);\r\n off(event, onceWrapper);\r\n };\r\n \r\n onceHandlers.set(handler, onceWrapper);\r\n return on(event, onceWrapper);\r\n };\r\n \r\n const off = (event: string, handler?: EventHandler): void => {\r\n if (!handler) {\r\n events.delete(event);\r\n return;\r\n }\r\n \r\n const handlers = events.get(event);\r\n if (!handlers) return;\r\n \r\n handlers.delete(handler);\r\n \r\n // Also try to remove the once wrapper\r\n const onceWrapper = onceHandlers.get(handler);\r\n if (onceWrapper) {\r\n handlers.delete(onceWrapper);\r\n onceHandlers.delete(handler);\r\n }\r\n \r\n if (handlers.size === 0) {\r\n events.delete(event);\r\n }\r\n };\r\n \r\n const emit = (event: string, ...args: any[]): void => {\r\n const handlers = events.get(event);\r\n if (!handlers) return;\r\n \r\n // Create a copy to avoid issues if handlers modify the set\r\n const handlersCopy = Array.from(handlers);\r\n for (const handler of handlersCopy) {\r\n try {\r\n handler(...args);\r\n } catch (error) {\r\n console.error(`Error in event handler for \"${event}\":`, error);\r\n }\r\n }\r\n };\r\n \r\n const clear = (event?: string): void => {\r\n if (event) {\r\n events.delete(event);\r\n } else {\r\n events.clear();\r\n }\r\n };\r\n \r\n return { on, once, off, emit, clear };\r\n}\r\n\r\n// Global event bus instance\r\nexport const eventBus = createEventBus();\r\n\r\n/**\r\n * Hook to subscribe to events in components\r\n */\r\nexport function useEvent(\r\n event: string,\r\n handler: EventHandler,\r\n options: { once?: boolean } = {}\r\n): () => void {\r\n return options.once\r\n ? eventBus.once(event, handler)\r\n : eventBus.on(event, handler);\r\n}\r\n\r\nexport default {\r\n createEventBus,\r\n eventBus,\r\n useEvent\r\n};\r\n", "/**\r\n * Client-side Router for Single Page Applications\r\n */\r\n\r\nimport { createContext, useContext } from './context.js';\r\nimport { useState, useEffect, useRef } from './hooks.js';\r\nimport { jsx } from './jsx-runtime.js';\r\nimport { VNode } from './types.js';\r\n\r\nexport interface Route {\r\n path: string;\r\n component: (props: any) => VNode | null;\r\n exact?: boolean;\r\n children?: Route[];\r\n}\r\n\r\nexport interface RouterState {\r\n pathname: string;\r\n search: string;\r\n hash: string;\r\n params: Record<string, string>;\r\n query: Record<string, string>;\r\n}\r\n\r\nexport interface RouterContextValue extends RouterState {\r\n navigate: (to: string, options?: NavigateOptions) => void;\r\n back: () => void;\r\n forward: () => void;\r\n match: (pattern: string) => boolean;\r\n}\r\n\r\nexport interface NavigateOptions {\r\n replace?: boolean;\r\n state?: any;\r\n}\r\n\r\n// Router context\r\nexport const RouterContext = createContext<RouterContextValue>({\r\n pathname: '/',\r\n search: '',\r\n hash: '',\r\n params: {},\r\n query: {},\r\n navigate: () => {},\r\n back: () => {},\r\n forward: () => {},\r\n match: () => false\r\n});\r\n\r\n/**\r\n * Parse URL search params into an object\r\n */\r\nfunction parseQuery(search: string): Record<string, string> {\r\n const query: Record<string, string> = {};\r\n const params = new URLSearchParams(search);\r\n params.forEach((value, key) => {\r\n query[key] = value;\r\n });\r\n return query;\r\n}\r\n\r\n/**\r\n * Match a pathname against a route pattern\r\n */\r\nfunction matchPath(pathname: string, pattern: string, exact: boolean = false): { \r\n match: boolean; \r\n params: Record<string, string> \r\n} {\r\n const params: Record<string, string> = {};\r\n \r\n // Convert pattern to regex\r\n const patternParts = pattern.split('/').filter(Boolean);\r\n const pathParts = pathname.split('/').filter(Boolean);\r\n \r\n if (exact && patternParts.length !== pathParts.length) {\r\n return { match: false, params };\r\n }\r\n \r\n if (patternParts.length > pathParts.length) {\r\n return { match: false, params };\r\n }\r\n \r\n for (let i = 0; i < patternParts.length; i++) {\r\n const patternPart = patternParts[i];\r\n const pathPart = pathParts[i];\r\n \r\n if (patternPart.startsWith(':')) {\r\n // Dynamic segment\r\n const paramName = patternPart.slice(1);\r\n params[paramName] = decodeURIComponent(pathPart);\r\n } else if (patternPart === '*') {\r\n // Wildcard - matches rest of path\r\n params['*'] = pathParts.slice(i).join('/');\r\n return { match: true, params };\r\n } else if (patternPart !== pathPart) {\r\n return { match: false, params };\r\n }\r\n }\r\n \r\n return { match: true, params };\r\n}\r\n\r\n/**\r\n * Router Provider component\r\n */\r\nexport function RouterProvider({ \r\n children \r\n}: { \r\n children: any \r\n}): VNode {\r\n const [location, setLocation] = useState<RouterState>((() => {\r\n if (typeof window === 'undefined') {\r\n return { pathname: '/', search: '', hash: '', params: {}, query: {} };\r\n }\r\n return {\r\n pathname: window.location.pathname,\r\n search: window.location.search,\r\n hash: window.location.hash,\r\n params: {},\r\n query: parseQuery(window.location.search)\r\n };\r\n })());\r\n \r\n useEffect(() => {\r\n if (typeof window === 'undefined') return;\r\n \r\n const handlePopState = () => {\r\n setLocation({\r\n pathname: window.location.pathname,\r\n search: window.location.search,\r\n hash: window.location.hash,\r\n params: {},\r\n query: parseQuery(window.location.search)\r\n });\r\n };\r\n \r\n window.addEventListener('popstate', handlePopState);\r\n return () => window.removeEventListener('popstate', handlePopState);\r\n }, []);\r\n \r\n const navigate = (to: string, options: NavigateOptions = {}) => {\r\n if (typeof window === 'undefined') return;\r\n \r\n const url = new URL(to, window.location.origin);\r\n \r\n if (options.replace) {\r\n window.history.replaceState(options.state || null, '', url.href);\r\n } else {\r\n window.history.pushState(options.state || null, '', url.href);\r\n }\r\n \r\n setLocation({\r\n pathname: url.pathname,\r\n search: url.search,\r\n hash: url.hash,\r\n params: {},\r\n query: parseQuery(url.search)\r\n });\r\n };\r\n \r\n const back = () => {\r\n if (typeof window !== 'undefined') {\r\n window.history.back();\r\n }\r\n };\r\n \r\n const forward = () => {\r\n if (typeof window !== 'undefined') {\r\n window.history.forward();\r\n }\r\n };\r\n \r\n const match = (pattern: string) => {\r\n return matchPath(location.pathname, pattern).match;\r\n };\r\n \r\n const contextValue: RouterContextValue = {\r\n ...location,\r\n navigate,\r\n back,\r\n forward,\r\n match\r\n };\r\n \r\n return jsx(RouterContext.Provider, { value: contextValue, children });\r\n}\r\n\r\n/**\r\n * Router component - renders matching routes\r\n */\r\nexport function Router({ routes }: { routes: Route[] }): VNode | null {\r\n const { pathname, params: existingParams } = useContext(RouterContext);\r\n \r\n for (const route of routes) {\r\n const { match, params } = matchPath(pathname, route.path, route.exact);\r\n if (match) {\r\n const Component = route.component;\r\n return jsx(Component, { ...params, ...existingParams });\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Route component - conditionally renders based on path match\r\n */\r\nexport function Route({ \r\n path, \r\n component: Component, \r\n exact = false \r\n}: { \r\n path: string; \r\n component: (props: any) => VNode | null; \r\n exact?: boolean \r\n}): VNode | null {\r\n const { pathname } = useContext(RouterContext);\r\n const { match, params } = matchPath(pathname, path, exact);\r\n \r\n if (match) {\r\n return jsx(Component, params);\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Switch component - renders first matching child route\r\n */\r\nexport function Switch({ children }: { children: any }): VNode | null {\r\n const { pathname } = useContext(RouterContext);\r\n const routes = Array.isArray(children) ? children : [children];\r\n \r\n for (const child of routes) {\r\n if (child?.props?.path) {\r\n const exact = child.props.exact ?? false;\r\n const { match } = matchPath(pathname, child.props.path, exact);\r\n if (match) {\r\n return child;\r\n }\r\n }\r\n }\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * Link component - navigation without page reload\r\n */\r\nexport function Link({ \r\n to, \r\n children, \r\n replace = false,\r\n className = '',\r\n activeClassName = '',\r\n ...rest \r\n}: { \r\n to: string; \r\n children: any;\r\n replace?: boolean;\r\n className?: string;\r\n activeClassName?: string;\r\n [key: string]: any;\r\n}): VNode {\r\n const { pathname, navigate } = useContext(RouterContext);\r\n const isActive = pathname === to || pathname.startsWith(to + '/');\r\n \r\n const handleClick = (e: MouseEvent) => {\r\n e.preventDefault();\r\n navigate(to, { replace });\r\n };\r\n \r\n const combinedClassName = isActive && activeClassName \r\n ? `${className} ${activeClassName}`.trim()\r\n : className;\r\n \r\n return jsx('a', {\r\n href: to,\r\n onClick: handleClick,\r\n className: combinedClassName || undefined,\r\n ...rest,\r\n children\r\n });\r\n}\r\n\r\n/**\r\n * Redirect component\r\n */\r\nexport function Redirect({ \r\n to, \r\n replace = true \r\n}: { \r\n to: string; \r\n replace?: boolean \r\n}): null {\r\n const { navigate } = useContext(RouterContext);\r\n \r\n useEffect(() => {\r\n navigate(to, { replace });\r\n }, [to, replace]);\r\n \r\n return null;\r\n}\r\n\r\n/**\r\n * NavLink component \u2014 Link with automatic active class.\r\n * Defaults to \"active\" class when the link matches the current path.\r\n */\r\nexport function NavLink({\r\n to,\r\n children,\r\n activeClassName = 'active',\r\n className = '',\r\n exact = false,\r\n ...rest\r\n}: {\r\n to: string;\r\n children: any;\r\n activeClassName?: string;\r\n className?: string;\r\n exact?: boolean;\r\n [key: string]: any;\r\n}): VNode {\r\n const { pathname, navigate } = useContext(RouterContext);\r\n const { match } = matchPath(pathname, to, exact);\r\n const isActive = match;\r\n\r\n const combinedClassName = isActive\r\n ? `${className} ${activeClassName}`.trim()\r\n : className;\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n e.preventDefault();\r\n navigate(to);\r\n };\r\n\r\n return jsx('a', {\r\n href: to,\r\n onClick: handleClick,\r\n className: combinedClassName || undefined,\r\n 'aria-current': isActive ? 'page' : undefined,\r\n ...rest,\r\n children\r\n });\r\n}\r\n\r\n// Hooks\r\nexport function useRouter(): RouterContextValue {\r\n return useContext(RouterContext);\r\n}\r\n\r\nexport function useLocation(): RouterState {\r\n const { pathname, search, hash, params, query } = useContext(RouterContext);\r\n return { pathname, search, hash, params, query };\r\n}\r\n\r\nexport function useParams<T extends Record<string, string> = Record<string, string>>(): T {\r\n const { params } = useContext(RouterContext);\r\n return params as T;\r\n}\r\n\r\nexport function useNavigate(): (to: string, options?: NavigateOptions) => void {\r\n const { navigate } = useContext(RouterContext);\r\n return navigate;\r\n}\r\n\r\nexport function useSearchParams(): [URLSearchParams, (params: URLSearchParams) => void] {\r\n const { search, navigate, pathname } = useContext(RouterContext);\r\n const searchParams = new URLSearchParams(search);\r\n \r\n const setSearchParams = (newParams: URLSearchParams) => {\r\n navigate(`${pathname}?${newParams.toString()}`);\r\n };\r\n \r\n return [searchParams, setSearchParams];\r\n}\r\n\r\nexport function useMatch(pattern: string): Record<string, string> | null {\r\n const { pathname } = useContext(RouterContext);\r\n const { match, params } = matchPath(pathname, pattern);\r\n return match ? params : null;\r\n}\r\n\r\nexport default {\r\n RouterProvider,\r\n Router,\r\n Route,\r\n Switch,\r\n Link,\r\n NavLink,\r\n Redirect,\r\n useRouter,\r\n useLocation,\r\n useParams,\r\n useNavigate,\r\n useSearchParams,\r\n useMatch,\r\n RouterContext\r\n};\r\n", "/**\r\n * Form handling utilities\r\n */\r\n\r\nimport { useState, useEffect, useRef, useCallback, useMemo } from './hooks.js';\r\n\r\nexport interface FormField {\r\n value: any;\r\n error?: string;\r\n touched: boolean;\r\n dirty: boolean;\r\n}\r\n\r\nexport interface FormState {\r\n fields: Record<string, FormField>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n submitCount: number;\r\n}\r\n\r\nexport interface ValidationRule {\r\n required?: boolean | string;\r\n minLength?: number | { value: number; message: string };\r\n maxLength?: number | { value: number; message: string };\r\n min?: number | { value: number; message: string };\r\n max?: number | { value: number; message: string };\r\n pattern?: RegExp | { value: RegExp; message: string };\r\n validate?: (value: any, values: any) => string | undefined | boolean;\r\n}\r\n\r\nexport interface FormOptions<T extends Record<string, any>> {\r\n initialValues: T;\r\n validate?: (values: T) => Record<string, string>;\r\n validationRules?: Record<keyof T, ValidationRule>;\r\n onSubmit?: (values: T, form: FormConfig<T>) => void | Promise<void>;\r\n validateOnChange?: boolean;\r\n validateOnBlur?: boolean;\r\n}\r\n\r\nexport interface FormConfig<T extends Record<string, any>> {\r\n values: T;\r\n errors: Record<string, string>;\r\n touched: Record<string, boolean>;\r\n dirty: Record<string, boolean>;\r\n isValid: boolean;\r\n isDirty: boolean;\r\n isSubmitting: boolean;\r\n submitCount: number;\r\n handleChange: (e: any) => void;\r\n handleBlur: (e: any) => void;\r\n handleSubmit: (e?: any) => Promise<void>;\r\n setFieldValue: (field: keyof T, value: any) => void;\r\n setFieldError: (field: keyof T, error: string) => void;\r\n setFieldTouched: (field: keyof T, touched?: boolean) => void;\r\n setValues: (values: Partial<T>) => void;\r\n setErrors: (errors: Record<string, string>) => void;\r\n resetForm: (nextValues?: Partial<T>) => void;\r\n validateField: (field: keyof T) => string | undefined;\r\n validateForm: () => Record<string, string>;\r\n getFieldProps: (field: keyof T) => {\r\n name: string;\r\n value: any;\r\n onChange: (e: any) => void;\r\n onBlur: (e: any) => void;\r\n };\r\n register: (field: keyof T) => {\r\n name: string;\r\n value: any;\r\n onChange: (e: any) => void;\r\n onBlur: (e: any) => void;\r\n };\r\n}\r\n\r\n/**\r\n * Validate a single field against rules\r\n */\r\nfunction validateFieldValue(value: any, rules: ValidationRule, allValues: any): string | undefined {\r\n // Required\r\n if (rules.required) {\r\n const isEmpty = value === undefined || value === null || value === '' || \r\n (Array.isArray(value) && value.length === 0);\r\n if (isEmpty) {\r\n return typeof rules.required === 'string' ? rules.required : 'This field is required';\r\n }\r\n }\r\n \r\n // Skip other validations if empty and not required\r\n if (value === undefined || value === null || value === '') {\r\n return undefined;\r\n }\r\n \r\n // MinLength\r\n if (rules.minLength !== undefined) {\r\n const minLength = typeof rules.minLength === 'object' ? rules.minLength.value : rules.minLength;\r\n const message = typeof rules.minLength === 'object' \r\n ? rules.minLength.message \r\n : `Minimum length is ${minLength}`;\r\n if (String(value).length < minLength) {\r\n return message;\r\n }\r\n }\r\n \r\n // MaxLength\r\n if (rules.maxLength !== undefined) {\r\n const maxLength = typeof rules.maxLength === 'object' ? rules.maxLength.value : rules.maxLength;\r\n const message = typeof rules.maxLength === 'object'\r\n ? rules.maxLength.message\r\n : `Maximum length is ${maxLength}`;\r\n if (String(value).length > maxLength) {\r\n return message;\r\n }\r\n }\r\n \r\n // Min (number)\r\n if (rules.min !== undefined) {\r\n const min = typeof rules.min === 'object' ? rules.min.value : rules.min;\r\n const message = typeof rules.min === 'object'\r\n ? rules.min.message\r\n : `Minimum value is ${min}`;\r\n if (Number(value) < min) {\r\n return message;\r\n }\r\n }\r\n \r\n // Max (number)\r\n if (rules.max !== undefined) {\r\n const max = typeof rules.max === 'object' ? rules.max.value : rules.max;\r\n const message = typeof rules.max === 'object'\r\n ? rules.max.message\r\n : `Maximum value is ${max}`;\r\n if (Number(value) > max) {\r\n return message;\r\n }\r\n }\r\n \r\n // Pattern\r\n if (rules.pattern !== undefined) {\r\n const pattern = rules.pattern instanceof RegExp ? rules.pattern : rules.pattern.value;\r\n const message = rules.pattern instanceof RegExp\r\n ? 'Invalid format'\r\n : rules.pattern.message;\r\n if (!pattern.test(String(value))) {\r\n return message;\r\n }\r\n }\r\n \r\n // Custom validate\r\n if (rules.validate) {\r\n const result = rules.validate(value, allValues);\r\n if (result === false) {\r\n return 'Invalid value';\r\n }\r\n if (typeof result === 'string') {\r\n return result;\r\n }\r\n }\r\n \r\n return undefined;\r\n}\r\n\r\n/**\r\n * useForm hook - comprehensive form state management\r\n */\r\nexport function useForm<T extends Record<string, any>>(options: FormOptions<T>): FormConfig<T> {\r\n const { \r\n initialValues, \r\n validate, \r\n validationRules,\r\n onSubmit,\r\n validateOnChange = true,\r\n validateOnBlur = true\r\n } = options;\r\n \r\n const [values, setValuesState] = useState<T>(initialValues);\r\n const [errors, setErrorsState] = useState<Record<string, string>>({});\r\n const [touched, setTouched] = useState<Record<string, boolean>>({});\r\n const [dirty, setDirty] = useState<Record<string, boolean>>({});\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [submitCount, setSubmitCount] = useState(0);\r\n \r\n const initialValuesRef = useRef(initialValues);\r\n \r\n // Compute validity and dirty state\r\n const isValid = Object.keys(errors).length === 0;\r\n const isDirty = Object.values(dirty).some(Boolean);\r\n \r\n // Validate a single field\r\n const validateField = useCallback((field: keyof T): string | undefined => {\r\n const value = values[field];\r\n \r\n // Use validation rules if provided\r\n if (validationRules && validationRules[field]) {\r\n return validateFieldValue(value, validationRules[field], values);\r\n }\r\n \r\n // Use custom validate function\r\n if (validate) {\r\n const allErrors = validate(values);\r\n return allErrors[field as string];\r\n }\r\n \r\n return undefined;\r\n }, [values, validate, validationRules]);\r\n \r\n // Validate entire form\r\n const validateForm = useCallback((): Record<string, string> => {\r\n const newErrors: Record<string, string> = {};\r\n \r\n // Validate using rules\r\n if (validationRules) {\r\n for (const field in validationRules) {\r\n const error = validateFieldValue(values[field], validationRules[field], values);\r\n if (error) {\r\n newErrors[field] = error;\r\n }\r\n }\r\n }\r\n \r\n // Validate using custom function\r\n if (validate) {\r\n const customErrors = validate(values);\r\n Object.assign(newErrors, customErrors);\r\n }\r\n \r\n return newErrors;\r\n }, [values, validate, validationRules]);\r\n \r\n // Run validation when values change\r\n useEffect(() => {\r\n if (validateOnChange) {\r\n const newErrors = validateForm();\r\n setErrorsState(newErrors);\r\n }\r\n }, [values, validateOnChange, validateForm]);\r\n \r\n // Handle input changes\r\n const handleChange = useCallback((e: any) => {\r\n const { name, value, type, checked } = e.target;\r\n const fieldValue = type === 'checkbox' ? checked : value;\r\n \r\n setValuesState(prev => ({ ...prev, [name]: fieldValue }));\r\n setDirty(prev => ({ ...prev, [name]: true }));\r\n }, []);\r\n \r\n // Handle field blur\r\n const handleBlur = useCallback((e: any) => {\r\n const { name } = e.target;\r\n setTouched(prev => ({ ...prev, [name]: true }));\r\n \r\n if (validateOnBlur) {\r\n const error = validateField(name as keyof T);\r\n setErrorsState(prev => {\r\n if (error) {\r\n return { ...prev, [name]: error };\r\n }\r\n const { [name]: _, ...rest } = prev;\r\n return rest;\r\n });\r\n }\r\n }, [validateOnBlur, validateField]);\r\n \r\n // Handle form submission\r\n const handleSubmit = useCallback(async (e?: any) => {\r\n if (e?.preventDefault) {\r\n e.preventDefault();\r\n }\r\n \r\n setSubmitCount(prev => prev + 1);\r\n \r\n // Mark all fields as touched\r\n const allTouched: Record<string, boolean> = {};\r\n for (const key in values) {\r\n allTouched[key] = true;\r\n }\r\n setTouched(allTouched);\r\n \r\n // Validate\r\n const formErrors = validateForm();\r\n setErrorsState(formErrors);\r\n \r\n if (Object.keys(formErrors).length > 0) {\r\n return;\r\n }\r\n \r\n if (onSubmit) {\r\n setIsSubmitting(true);\r\n try {\r\n await onSubmit(values, formConfig);\r\n } finally {\r\n setIsSubmitting(false);\r\n }\r\n }\r\n }, [values, validateForm, onSubmit]);\r\n \r\n // Set field value programmatically\r\n const setFieldValue = useCallback((field: keyof T, value: any) => {\r\n setValuesState(prev => ({ ...prev, [field]: value }));\r\n setDirty(prev => ({ ...prev, [field as string]: true }));\r\n }, []);\r\n \r\n // Set field error programmatically\r\n const setFieldError = useCallback((field: keyof T, error: string) => {\r\n setErrorsState(prev => ({ ...prev, [field as string]: error }));\r\n }, []);\r\n \r\n // Set field touched\r\n const setFieldTouched = useCallback((field: keyof T, isTouched: boolean = true) => {\r\n setTouched(prev => ({ ...prev, [field as string]: isTouched }));\r\n }, []);\r\n \r\n // Set multiple values\r\n const setValues = useCallback((newValues: Partial<T>) => {\r\n setValuesState(prev => ({ ...prev, ...newValues }));\r\n }, []);\r\n \r\n // Set multiple errors\r\n const setErrors = useCallback((newErrors: Record<string, string>) => {\r\n setErrorsState(newErrors);\r\n }, []);\r\n \r\n // Reset form\r\n const resetForm = useCallback((nextValues?: Partial<T>) => {\r\n setValuesState(nextValues ? { ...initialValuesRef.current, ...nextValues } : initialValuesRef.current);\r\n setErrorsState({});\r\n setTouched({});\r\n setDirty({});\r\n setSubmitCount(0);\r\n }, []);\r\n \r\n // Get props for a field (shorthand)\r\n const getFieldProps = useCallback((field: keyof T) => ({\r\n name: field as string,\r\n value: values[field] ?? '',\r\n onChange: handleChange,\r\n onBlur: handleBlur\r\n }), [values, handleChange, handleBlur]);\r\n \r\n const formConfig: FormConfig<T> = {\r\n values,\r\n errors,\r\n touched,\r\n dirty,\r\n isValid,\r\n isDirty,\r\n isSubmitting,\r\n submitCount,\r\n handleChange,\r\n handleBlur,\r\n handleSubmit,\r\n setFieldValue,\r\n setFieldError,\r\n setFieldTouched,\r\n setValues,\r\n setErrors,\r\n resetForm,\r\n validateField,\r\n validateForm,\r\n getFieldProps,\r\n register: getFieldProps\r\n };\r\n \r\n return formConfig;\r\n}\r\n\r\n/**\r\n * useField hook - for individual field management\r\n */\r\nexport function useField<T = any>(\r\n name: string,\r\n form: FormConfig<any>\r\n): {\r\n field: { name: string; value: T; onChange: (e: any) => void; onBlur: (e: any) => void };\r\n meta: { touched: boolean; error?: string; dirty: boolean };\r\n helpers: { setValue: (value: T) => void; setError: (error: string) => void; setTouched: (touched: boolean) => void };\r\n} {\r\n return {\r\n field: form.getFieldProps(name) as any,\r\n meta: {\r\n touched: form.touched[name] || false,\r\n error: form.errors[name],\r\n dirty: form.dirty[name] || false\r\n },\r\n helpers: {\r\n setValue: (value: T) => form.setFieldValue(name, value),\r\n setError: (error: string) => form.setFieldError(name, error),\r\n setTouched: (touched: boolean) => form.setFieldTouched(name, touched)\r\n }\r\n };\r\n}\r\n\r\n// Common validation patterns\r\nexport const patterns = {\r\n email: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\r\n phone: /^\\+?[1-9]\\d{1,14}$/,\r\n url: /^(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?$/,\r\n alphanumeric: /^[a-zA-Z0-9]+$/,\r\n numeric: /^\\d+$/,\r\n password: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{8,}$/\r\n};\r\n\r\nexport default {\r\n useForm,\r\n useField,\r\n patterns\r\n};\r\n", "/**\r\n * Global State Management (Redux-like store)\r\n */\r\n\r\nimport { createContext, useContext } from './context.js';\r\nimport { useState, useEffect, useRef } from './hooks.js';\r\nimport { jsx } from './jsx-runtime.js';\r\nimport { VNode } from './types.js';\r\n\r\nexport interface Action<T = any> {\r\n type: string;\r\n payload?: T;\r\n}\r\n\r\nexport type Reducer<S, A extends Action = Action> = (state: S, action: A) => S;\r\n\r\nexport type Dispatch<A extends Action = Action> = (action: A) => void;\r\n\r\nexport type Selector<S, R> = (state: S) => R;\r\n\r\nexport type Middleware<S> = (store: Store<S>) => (next: Dispatch) => (action: Action) => void;\r\n\r\nexport interface Store<S> {\r\n getState: () => S;\r\n dispatch: Dispatch;\r\n subscribe: (listener: () => void) => () => void;\r\n replaceReducer: (nextReducer: Reducer<S>) => void;\r\n}\r\n\r\nexport type AsyncAction<S> = (dispatch: Dispatch, getState: () => S) => Promise<void> | void;\r\n\r\n/**\r\n * Create a Redux-like store\r\n */\r\nexport function createStore<S>(\r\n reducer: Reducer<S>,\r\n initialState: S,\r\n middlewares: Middleware<S>[] = []\r\n): Store<S> {\r\n let state = initialState;\r\n let listeners: Set<() => void> = new Set();\r\n let currentReducer = reducer;\r\n \r\n const getState = () => state;\r\n \r\n const subscribe = (listener: () => void): (() => void) => {\r\n listeners.add(listener);\r\n return () => {\r\n listeners.delete(listener);\r\n };\r\n };\r\n \r\n // Base dispatch\r\n let dispatch: Dispatch = (action: Action) => {\r\n state = currentReducer(state, action);\r\n listeners.forEach(listener => listener());\r\n };\r\n \r\n // Apply middlewares\r\n if (middlewares.length > 0) {\r\n const store = { getState, dispatch, subscribe, replaceReducer: () => {} };\r\n const chain = middlewares.map(middleware => middleware(store as Store<S>));\r\n dispatch = chain.reduceRight(\r\n (next, middleware) => middleware(next),\r\n dispatch\r\n );\r\n }\r\n \r\n const replaceReducer = (nextReducer: Reducer<S>) => {\r\n currentReducer = nextReducer;\r\n };\r\n \r\n // Dispatch init action\r\n dispatch({ type: '@@INIT' });\r\n \r\n return {\r\n getState,\r\n dispatch,\r\n subscribe,\r\n replaceReducer\r\n };\r\n}\r\n\r\n/**\r\n * Combine multiple reducers into one\r\n */\r\nexport function combineReducers<S extends Record<string, any>>(\r\n reducers: { [K in keyof S]: Reducer<S[K]> }\r\n): Reducer<S> {\r\n return (state: S, action: Action): S => {\r\n const nextState: Partial<S> = {};\r\n let hasChanged = false;\r\n \r\n for (const key in reducers) {\r\n const reducer = reducers[key];\r\n const previousStateForKey = state[key];\r\n const nextStateForKey = reducer(previousStateForKey, action);\r\n nextState[key] = nextStateForKey;\r\n hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\r\n }\r\n \r\n return hasChanged ? (nextState as S) : state;\r\n };\r\n}\r\n\r\n// Store context\r\ninterface StoreContextValue<S = any> {\r\n store: Store<S>;\r\n state: S;\r\n}\r\n\r\nexport const StoreContext = createContext<StoreContextValue>({\r\n store: {\r\n getState: () => ({}),\r\n dispatch: () => {},\r\n subscribe: () => () => {},\r\n replaceReducer: () => {}\r\n },\r\n state: {}\r\n});\r\n\r\n/**\r\n * Store Provider component\r\n */\r\nexport function StoreProvider<S>({ \r\n store, \r\n children \r\n}: { \r\n store: Store<S>; \r\n children: any \r\n}): VNode {\r\n const [state, setState] = useState(store.getState());\r\n \r\n useEffect(() => {\r\n const unsubscribe = store.subscribe(() => {\r\n setState(store.getState());\r\n });\r\n return unsubscribe;\r\n }, [store]);\r\n \r\n return jsx(StoreContext.Provider, {\r\n value: { store, state },\r\n children\r\n });\r\n}\r\n\r\n/**\r\n * Hook to select state from the store\r\n */\r\nexport function useSelector<S, R>(selector: Selector<S, R>): R {\r\n const { state } = useContext(StoreContext) as StoreContextValue<S>;\r\n return selector(state);\r\n}\r\n\r\n/**\r\n * Hook to get the dispatch function\r\n */\r\nexport function useDispatch<A extends Action = Action>(): Dispatch<A> {\r\n const { store } = useContext(StoreContext);\r\n return store.dispatch as Dispatch<A>;\r\n}\r\n\r\n/**\r\n * Hook to get the entire store\r\n */\r\nexport function useStore<S>(): Store<S> {\r\n const { store } = useContext(StoreContext);\r\n return store as Store<S>;\r\n}\r\n\r\n// Common Middlewares\r\n\r\n/**\r\n * Logger middleware - logs actions and state changes\r\n */\r\nexport const logger: Middleware<any> = (store) => (next) => (action) => {\r\n console.group(`Action: ${action.type}`);\r\n console.log('Payload:', action.payload);\r\n console.log('Previous State:', store.getState());\r\n const result = next(action);\r\n console.log('Next State:', store.getState());\r\n console.groupEnd();\r\n return result;\r\n};\r\n\r\n/**\r\n * Thunk middleware - enables async actions\r\n */\r\nexport const thunk: Middleware<any> = (store) => (next) => (action: any) => {\r\n if (typeof action === 'function') {\r\n return action(store.dispatch, store.getState);\r\n }\r\n return next(action);\r\n};\r\n\r\n/**\r\n * DevTools middleware - integrates with Redux DevTools\r\n */\r\nexport const devTools: Middleware<any> = (store) => (next) => (action) => {\r\n if (typeof window !== 'undefined' && (window as any).__REDUX_DEVTOOLS_EXTENSION__) {\r\n const devToolsExtension = (window as any).__REDUX_DEVTOOLS_EXTENSION__;\r\n devToolsExtension.send(action, store.getState());\r\n }\r\n return next(action);\r\n};\r\n\r\n/**\r\n * Create an action creator\r\n */\r\nexport function createAction<P = void>(type: string) {\r\n const actionCreator = (payload: P): Action<P> => ({ type, payload });\r\n actionCreator.type = type;\r\n actionCreator.match = (action: Action): action is Action<P> => action.type === type;\r\n return actionCreator;\r\n}\r\n\r\n/**\r\n * Create a slice (reducer + actions)\r\n */\r\nexport interface SliceConfig<S, R extends Record<string, (state: S, action: Action<any>) => S>> {\r\n name: string;\r\n initialState: S;\r\n reducers: R;\r\n}\r\n\r\nexport function createSlice<\r\n S,\r\n R extends Record<string, (state: S, action: Action<any>) => S>\r\n>(config: SliceConfig<S, R>) {\r\n const { name, initialState, reducers } = config;\r\n \r\n const actions: Record<string, (payload?: any) => Action> = {};\r\n \r\n for (const key in reducers) {\r\n const type = `${name}/${key}`;\r\n actions[key] = (payload?: any) => ({ type, payload });\r\n }\r\n \r\n const reducer: Reducer<S> = (state = initialState, action) => {\r\n for (const key in reducers) {\r\n const type = `${name}/${key}`;\r\n if (action.type === type) {\r\n return reducers[key](state, action);\r\n }\r\n }\r\n return state;\r\n };\r\n \r\n return {\r\n name,\r\n reducer,\r\n actions\r\n };\r\n}\r\n\r\nexport default {\r\n createStore,\r\n combineReducers,\r\n StoreProvider,\r\n useSelector,\r\n useDispatch,\r\n useStore,\r\n logger,\r\n thunk,\r\n devTools,\r\n createAction,\r\n createSlice,\r\n StoreContext\r\n};\r\n", "/**\n * Lifecycle events for components and application\n */\nimport { eventBus } from './event-bus.js';\n\nexport enum LifecycleEvents {\n APP_INIT = 'app:init',\n APP_MOUNTED = 'app:mounted',\n APP_UPDATED = 'app:updated',\n APP_ERROR = 'app:error',\n APP_DESTROYED = 'app:destroyed',\n\n COMPONENT_CREATED = 'component:created',\n COMPONENT_MOUNTED = 'component:mounted',\n COMPONENT_UPDATED = 'component:updated',\n COMPONENT_ERROR = 'component:error',\n COMPONENT_UNMOUNTED = 'component:unmounted',\n\n ROUTER_BEFORE_CHANGE = 'router:before-change',\n ROUTER_AFTER_CHANGE = 'router:after-change',\n ROUTER_ERROR = 'router:error',\n\n STORE_INITIALIZED = 'store:initialized',\n STORE_BEFORE_ACTION = 'store:before-action',\n STORE_AFTER_ACTION = 'store:after-action',\n STORE_ERROR = 'store:error'\n}\n\nexport interface ComponentInfo {\n id: string;\n name: string;\n props: Record<string, any>;\n path?: string;\n}\n\nexport interface RouteChangeInfo {\n from: string;\n to: string;\n params: Record<string, string>;\n}\n\nexport interface StoreActionInfo {\n type: string;\n payload: any;\n prevState: any;\n nextState: any;\n}\n\nexport function emitAppInit(data: any) {\n eventBus.emit(LifecycleEvents.APP_INIT, data);\n}\n\nexport function emitAppMounted(rootElement: HTMLElement) {\n eventBus.emit(LifecycleEvents.APP_MOUNTED, rootElement);\n}\n\nexport function emitAppUpdated() {\n eventBus.emit(LifecycleEvents.APP_UPDATED);\n}\n\nexport function emitAppError(error: Error) {\n eventBus.emit(LifecycleEvents.APP_ERROR, error);\n}\n\nexport function emitAppDestroyed() {\n eventBus.emit(LifecycleEvents.APP_DESTROYED);\n}\n\nexport function emitComponentCreated(info: ComponentInfo) {\n eventBus.emit(LifecycleEvents.COMPONENT_CREATED, info);\n}\n\nexport function emitComponentMounted(info: ComponentInfo, element: HTMLElement) {\n eventBus.emit(LifecycleEvents.COMPONENT_MOUNTED, info, element);\n}\n\nexport function emitComponentUpdated(\n info: ComponentInfo,\n prevProps: Record<string, any>,\n newProps: Record<string, any>\n) {\n eventBus.emit(LifecycleEvents.COMPONENT_UPDATED, info, prevProps, newProps);\n}\n\nexport function emitComponentError(info: ComponentInfo, error: Error) {\n eventBus.emit(LifecycleEvents.COMPONENT_ERROR, info, error);\n}\n\nexport function emitComponentUnmounted(info: ComponentInfo) {\n eventBus.emit(LifecycleEvents.COMPONENT_UNMOUNTED, info);\n}\n\nexport function emitRouterBeforeChange(info: RouteChangeInfo): Promise<boolean> {\n return new Promise(resolve => {\n let prevented = false;\n const prevent = () => { prevented = true; };\n eventBus.emit(LifecycleEvents.ROUTER_BEFORE_CHANGE, info, prevent);\n resolve(!prevented);\n });\n}\n\nexport function emitRouterAfterChange(info: RouteChangeInfo) {\n eventBus.emit(LifecycleEvents.ROUTER_AFTER_CHANGE, info);\n}\n\nexport function emitRouterError(error: Error, info?: Partial<RouteChangeInfo>) {\n eventBus.emit(LifecycleEvents.ROUTER_ERROR, error, info);\n}\n\nexport function emitStoreInitialized(state: any) {\n eventBus.emit(LifecycleEvents.STORE_INITIALIZED, state);\n}\n\nexport function emitStoreBeforeAction(actionType: string, payload: any, state: any) {\n eventBus.emit(LifecycleEvents.STORE_BEFORE_ACTION, actionType, payload, state);\n}\n\nexport function emitStoreAfterAction(info: StoreActionInfo) {\n eventBus.emit(LifecycleEvents.STORE_AFTER_ACTION, info);\n}\n\nexport function emitStoreError(error: Error, actionType: string, payload: any) {\n eventBus.emit(LifecycleEvents.STORE_ERROR, error, actionType, payload);\n}\n\nexport function onAppInit(handler: (data: any) => void) {\n return eventBus.on(LifecycleEvents.APP_INIT, handler);\n}\n\nexport function onAppMounted(handler: (rootElement: HTMLElement) => void) {\n return eventBus.on(LifecycleEvents.APP_MOUNTED, handler);\n}\n\nexport function onAppUpdated(handler: () => void) {\n return eventBus.on(LifecycleEvents.APP_UPDATED, handler);\n}\n\nexport function onAppError(handler: (error: Error) => void) {\n return eventBus.on(LifecycleEvents.APP_ERROR, handler);\n}\n\nexport function onAppDestroyed(handler: () => void) {\n return eventBus.on(LifecycleEvents.APP_DESTROYED, handler);\n}\n\nexport function onComponentCreated(handler: (info: ComponentInfo) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_CREATED, handler);\n}\n\nexport function onComponentMounted(handler: (info: ComponentInfo, element: HTMLElement) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_MOUNTED, handler);\n}\n\nexport function onComponentUpdated(\n handler: (info: ComponentInfo, prevProps: Record<string, any>, newProps: Record<string, any>) => void\n) {\n return eventBus.on(LifecycleEvents.COMPONENT_UPDATED, handler);\n}\n\nexport function onComponentError(handler: (info: ComponentInfo, error: Error) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_ERROR, handler);\n}\n\nexport function onComponentUnmounted(handler: (info: ComponentInfo) => void) {\n return eventBus.on(LifecycleEvents.COMPONENT_UNMOUNTED, handler);\n}\n\nexport function onRouterBeforeChange(handler: (info: RouteChangeInfo, prevent: () => void) => void) {\n return eventBus.on(LifecycleEvents.ROUTER_BEFORE_CHANGE, handler);\n}\n\nexport function onRouterAfterChange(handler: (info: RouteChangeInfo) => void) {\n return eventBus.on(LifecycleEvents.ROUTER_AFTER_CHANGE, handler);\n}\n\nexport function onRouterError(handler: (error: Error, info?: Partial<RouteChangeInfo>) => void) {\n return eventBus.on(LifecycleEvents.ROUTER_ERROR, handler);\n}\n\nexport function onStoreInitialized(handler: (state: any) => void) {\n return eventBus.on(LifecycleEvents.STORE_INITIALIZED, handler);\n}\n\nexport function onStoreBeforeAction(handler: (actionType: string, payload: any, state: any) => void) {\n return eventBus.on(LifecycleEvents.STORE_BEFORE_ACTION, handler);\n}\n\nexport function onStoreAfterAction(handler: (info: StoreActionInfo) => void) {\n return eventBus.on(LifecycleEvents.STORE_AFTER_ACTION, handler);\n}\n\nexport function onStoreError(handler: (error: Error, actionType: string, payload: any) => void) {\n return eventBus.on(LifecycleEvents.STORE_ERROR, handler);\n}\n", "/**\r\n * Utility functions for the framework\r\n */\r\n\r\n/**\r\n * Creates a debounced function that delays invoking func until after wait milliseconds\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number,\r\n options: { leading?: boolean; trailing?: boolean } = {}\r\n): T & { cancel: () => void; flush: () => void } {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let lastArgs: Parameters<T> | null = null;\r\n let lastThis: any = null;\r\n let result: ReturnType<T>;\r\n let lastCallTime: number | undefined;\r\n let lastInvokeTime = 0;\r\n \r\n const { leading = false, trailing = true } = options;\r\n \r\n const invokeFunc = (time: number): ReturnType<T> => {\r\n const args = lastArgs!;\r\n const thisArg = lastThis;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastInvokeTime = time;\r\n result = func.apply(thisArg, args);\r\n return result;\r\n };\r\n \r\n const shouldInvoke = (time: number): boolean => {\r\n const timeSinceLastCall = lastCallTime === undefined ? 0 : time - lastCallTime;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n \r\n return (\r\n lastCallTime === undefined ||\r\n timeSinceLastCall >= wait ||\r\n timeSinceLastCall < 0 ||\r\n timeSinceLastInvoke >= wait\r\n );\r\n };\r\n \r\n const trailingEdge = (time: number): ReturnType<T> => {\r\n timeoutId = null;\r\n \r\n if (trailing && lastArgs) {\r\n return invokeFunc(time);\r\n }\r\n lastArgs = null;\r\n lastThis = null;\r\n return result;\r\n };\r\n \r\n const remainingWait = (time: number): number => {\r\n const timeSinceLastCall = lastCallTime === undefined ? 0 : time - lastCallTime;\r\n const timeSinceLastInvoke = time - lastInvokeTime;\r\n const timeWaiting = wait - timeSinceLastCall;\r\n \r\n return timeWaiting;\r\n };\r\n \r\n const timerExpired = (): ReturnType<T> => {\r\n const time = Date.now();\r\n \r\n if (shouldInvoke(time)) {\r\n return trailingEdge(time);\r\n }\r\n \r\n timeoutId = setTimeout(timerExpired, remainingWait(time));\r\n return result;\r\n };\r\n \r\n const debounced = function(this: any, ...args: Parameters<T>): ReturnType<T> {\r\n const time = Date.now();\r\n const isInvoking = shouldInvoke(time);\r\n \r\n lastArgs = args;\r\n lastThis = this;\r\n lastCallTime = time;\r\n \r\n if (isInvoking) {\r\n if (timeoutId === null) {\r\n lastInvokeTime = time;\r\n timeoutId = setTimeout(timerExpired, wait);\r\n if (leading) {\r\n return invokeFunc(time);\r\n }\r\n }\r\n }\r\n \r\n if (timeoutId === null) {\r\n timeoutId = setTimeout(timerExpired, wait);\r\n }\r\n \r\n return result;\r\n } as T & { cancel: () => void; flush: () => void };\r\n \r\n debounced.cancel = (): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n lastInvokeTime = 0;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastCallTime = undefined;\r\n timeoutId = null;\r\n };\r\n \r\n debounced.flush = (): ReturnType<T> => {\r\n if (timeoutId !== null) {\r\n return trailingEdge(Date.now());\r\n }\r\n return result;\r\n };\r\n \r\n return debounced;\r\n}\r\n\r\n/**\r\n * Creates a throttled function that only invokes func at most once per every wait milliseconds\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n wait: number,\r\n options: { leading?: boolean; trailing?: boolean } = {}\r\n): T & { cancel: () => void } {\r\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\r\n let lastArgs: Parameters<T> | null = null;\r\n let lastThis: any = null;\r\n let result: ReturnType<T>;\r\n let lastCallTime = 0;\r\n \r\n const { leading = true, trailing = true } = options;\r\n \r\n const invokeFunc = (): ReturnType<T> => {\r\n const args = lastArgs!;\r\n const thisArg = lastThis;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastCallTime = Date.now();\r\n result = func.apply(thisArg, args);\r\n return result;\r\n };\r\n \r\n const throttled = function(this: any, ...args: Parameters<T>): ReturnType<T> {\r\n const now = Date.now();\r\n const remaining = wait - (now - lastCallTime);\r\n \r\n lastArgs = args;\r\n lastThis = this;\r\n \r\n if (remaining <= 0 || remaining > wait) {\r\n if (timeoutId) {\r\n clearTimeout(timeoutId);\r\n timeoutId = null;\r\n }\r\n \r\n if (leading || lastCallTime !== 0) {\r\n return invokeFunc();\r\n }\r\n }\r\n \r\n if (!timeoutId && trailing) {\r\n timeoutId = setTimeout(() => {\r\n timeoutId = null;\r\n if (trailing && lastArgs) {\r\n invokeFunc();\r\n }\r\n }, remaining);\r\n }\r\n \r\n return result;\r\n } as T & { cancel: () => void };\r\n \r\n throttled.cancel = (): void => {\r\n if (timeoutId !== null) {\r\n clearTimeout(timeoutId);\r\n }\r\n timeoutId = null;\r\n lastArgs = null;\r\n lastThis = null;\r\n lastCallTime = 0;\r\n };\r\n \r\n return throttled;\r\n}\r\n\r\n/**\r\n * Deep clone an object\r\n */\r\nexport function deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== 'object') {\r\n return obj;\r\n }\r\n \r\n if (obj instanceof Date) {\r\n return new Date(obj.getTime()) as unknown as T;\r\n }\r\n \r\n if (obj instanceof RegExp) {\r\n return new RegExp(obj.source, obj.flags) as unknown as T;\r\n }\r\n \r\n if (Array.isArray(obj)) {\r\n return obj.map(item => deepClone(item)) as unknown as T;\r\n }\r\n \r\n if (obj instanceof Map) {\r\n const clonedMap = new Map();\r\n obj.forEach((value, key) => {\r\n clonedMap.set(deepClone(key), deepClone(value));\r\n });\r\n return clonedMap as unknown as T;\r\n }\r\n \r\n if (obj instanceof Set) {\r\n const clonedSet = new Set();\r\n obj.forEach(value => {\r\n clonedSet.add(deepClone(value));\r\n });\r\n return clonedSet as unknown as T;\r\n }\r\n \r\n const clonedObj: Record<string, any> = {};\r\n for (const key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n clonedObj[key] = deepClone((obj as Record<string, any>)[key]);\r\n }\r\n }\r\n \r\n return clonedObj as T;\r\n}\r\n\r\n/**\r\n * Deep merge objects\r\n */\r\nexport function deepMerge<T extends Record<string, any>>(target: T, ...sources: Partial<T>[]): T {\r\n if (!sources.length) return target;\r\n \r\n const source = sources.shift();\r\n \r\n if (source === undefined) return target;\r\n \r\n for (const key in source) {\r\n if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n const sourceValue = source[key];\r\n const targetValue = (target as Record<string, any>)[key];\r\n \r\n if (\r\n sourceValue !== null &&\r\n typeof sourceValue === 'object' &&\r\n !Array.isArray(sourceValue) &&\r\n targetValue !== null &&\r\n typeof targetValue === 'object' &&\r\n !Array.isArray(targetValue)\r\n ) {\r\n (target as Record<string, any>)[key] = deepMerge(targetValue, sourceValue);\r\n } else {\r\n (target as Record<string, any>)[key] = deepClone(sourceValue);\r\n }\r\n }\r\n }\r\n \r\n return deepMerge(target, ...sources);\r\n}\r\n\r\n/**\r\n * Memoize a function\r\n */\r\nexport function memoize<T extends (...args: any[]) => any>(\r\n fn: T,\r\n options: {\r\n maxSize?: number;\r\n keyGenerator?: (...args: Parameters<T>) => string;\r\n } = {}\r\n): T & { cache: Map<string, ReturnType<T>>; clear: () => void } {\r\n const { maxSize = 100, keyGenerator = (...args) => JSON.stringify(args) } = options;\r\n const cache = new Map<string, ReturnType<T>>();\r\n \r\n const memoized = function(...args: Parameters<T>): ReturnType<T> {\r\n const key = keyGenerator(...args);\r\n \r\n if (cache.has(key)) {\r\n return cache.get(key)!;\r\n }\r\n \r\n const result = fn(...args);\r\n \r\n if (cache.size >= maxSize) {\r\n const firstKey = cache.keys().next().value;\r\n if (firstKey !== undefined) {\r\n cache.delete(firstKey);\r\n }\r\n }\r\n \r\n cache.set(key, result);\r\n return result;\r\n } as T & { cache: Map<string, ReturnType<T>>; clear: () => void };\r\n \r\n memoized.cache = cache;\r\n memoized.clear = () => cache.clear();\r\n \r\n return memoized;\r\n}\r\n\r\n/**\r\n * Generate a UUID v4\r\n */\r\nexport function uuid(): string {\r\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\r\n return crypto.randomUUID();\r\n }\r\n \r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n}\r\n\r\n/**\r\n * Format a date\r\n */\r\nexport function formatDate(\r\n date: Date | string | number,\r\n format: string = 'YYYY-MM-DD HH:mm:ss'\r\n): string {\r\n const d = date instanceof Date ? date : new Date(date);\r\n \r\n if (isNaN(d.getTime())) {\r\n return 'Invalid Date';\r\n }\r\n \r\n const pad = (n: number, len: number = 2) => String(n).padStart(len, '0');\r\n \r\n const tokens: Record<string, string> = {\r\n 'YYYY': String(d.getFullYear()),\r\n 'YY': String(d.getFullYear()).slice(-2),\r\n 'MM': pad(d.getMonth() + 1),\r\n 'M': String(d.getMonth() + 1),\r\n 'DD': pad(d.getDate()),\r\n 'D': String(d.getDate()),\r\n 'HH': pad(d.getHours()),\r\n 'H': String(d.getHours()),\r\n 'hh': pad(d.getHours() % 12 || 12),\r\n 'h': String(d.getHours() % 12 || 12),\r\n 'mm': pad(d.getMinutes()),\r\n 'm': String(d.getMinutes()),\r\n 'ss': pad(d.getSeconds()),\r\n 's': String(d.getSeconds()),\r\n 'SSS': pad(d.getMilliseconds(), 3),\r\n 'A': d.getHours() < 12 ? 'AM' : 'PM',\r\n 'a': d.getHours() < 12 ? 'am' : 'pm'\r\n };\r\n \r\n let result = format;\r\n for (const token in tokens) {\r\n result = result.replace(new RegExp(token, 'g'), tokens[token]);\r\n }\r\n \r\n return result;\r\n}\r\n\r\n/**\r\n * Shallow equality check\r\n */\r\nexport function shallowEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (!a || !b) 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 for (const key of keysA) {\r\n if (a[key] !== b[key]) return false;\r\n }\r\n \r\n return true;\r\n}\r\n\r\n/**\r\n * Deep equality check\r\n */\r\nexport function deepEqual(a: any, b: any): boolean {\r\n if (a === b) return true;\r\n if (a === null || b === null) return false;\r\n if (typeof a !== typeof b) return false;\r\n \r\n if (typeof a !== 'object') return false;\r\n \r\n if (Array.isArray(a) !== Array.isArray(b)) return false;\r\n \r\n if (Array.isArray(a)) {\r\n if (a.length !== b.length) return false;\r\n return a.every((item, index) => deepEqual(item, b[index]));\r\n }\r\n \r\n if (a instanceof Date && b instanceof Date) {\r\n return a.getTime() === b.getTime();\r\n }\r\n \r\n if (a instanceof RegExp && b instanceof RegExp) {\r\n return a.source === b.source && a.flags === b.flags;\r\n }\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\n/**\r\n * Escape HTML entities\r\n */\r\nexport function escapeHtml(str: string): string {\r\n const htmlEscapes: Record<string, string> = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;'\r\n };\r\n \r\n return str.replace(/[&<>\"']/g, char => htmlEscapes[char]);\r\n}\r\n\r\n/**\r\n * Unescape HTML entities\r\n */\r\nexport function unescapeHtml(str: string): string {\r\n const htmlUnescapes: Record<string, string> = {\r\n '&amp;': '&',\r\n '&lt;': '<',\r\n '&gt;': '>',\r\n '&quot;': '\"',\r\n '&#39;': \"'\"\r\n };\r\n \r\n return str.replace(/&(?:amp|lt|gt|quot|#39);/g, entity => htmlUnescapes[entity] || entity);\r\n}\r\n\r\n/**\r\n * Capitalize first letter\r\n */\r\nexport function capitalize(str: string): string {\r\n return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\n\r\n/**\r\n * Convert string to camelCase\r\n */\r\nexport function camelCase(str: string): string {\r\n return str\r\n .replace(/[-_\\s]+(.)?/g, (_, char) => char ? char.toUpperCase() : '')\r\n .replace(/^(.)/, (char) => char.toLowerCase());\r\n}\r\n\r\n/**\r\n * Convert string to kebab-case\r\n */\r\nexport function kebabCase(str: string): string {\r\n return str\r\n .replace(/([a-z])([A-Z])/g, '$1-$2')\r\n .replace(/[\\s_]+/g, '-')\r\n .toLowerCase();\r\n}\r\n\r\n/**\r\n * Sleep/delay utility\r\n */\r\nexport function sleep(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n}\r\n\r\n/**\r\n * Retry a function with exponential backoff\r\n */\r\nexport async function retry<T>(\r\n fn: () => Promise<T>,\r\n options: {\r\n retries?: number;\r\n delay?: number;\r\n backoff?: number;\r\n onRetry?: (error: Error, attempt: number) => void;\r\n } = {}\r\n): Promise<T> {\r\n const { retries = 3, delay = 1000, backoff = 2, onRetry } = options;\r\n let lastError: Error;\r\n \r\n for (let attempt = 0; attempt <= retries; attempt++) {\r\n try {\r\n return await fn();\r\n } catch (error) {\r\n lastError = error as Error;\r\n \r\n if (attempt < retries) {\r\n if (onRetry) {\r\n onRetry(lastError, attempt + 1);\r\n }\r\n await sleep(delay * Math.pow(backoff, attempt));\r\n }\r\n }\r\n }\r\n \r\n throw lastError!;\r\n}\r\n\r\n/**\r\n * Create a promise that can be resolved/rejected externally\r\n */\r\nexport function deferred<T>(): {\r\n promise: Promise<T>;\r\n resolve: (value: T | PromiseLike<T>) => void;\r\n reject: (reason?: any) => void;\r\n} {\r\n let resolve!: (value: T | PromiseLike<T>) => void;\r\n let reject!: (reason?: any) => void;\r\n \r\n const promise = new Promise<T>((res, rej) => {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n \r\n return { promise, resolve, reject };\r\n}\r\n\r\n/**\r\n * Pick specific keys from an object\r\n */\r\nexport function pick<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Pick<T, K> {\r\n const result = {} as Pick<T, K>;\r\n for (const key of keys) {\r\n if (key in obj) {\r\n result[key] = obj[key];\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Omit specific keys from an object\r\n */\r\nexport function omit<T extends Record<string, any>, K extends keyof T>(\r\n obj: T,\r\n keys: K[]\r\n): Omit<T, K> {\r\n const result = { ...obj };\r\n for (const key of keys) {\r\n delete result[key];\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * Group array items by a key\r\n */\r\nexport function groupBy<T>(\r\n array: T[],\r\n key: keyof T | ((item: T) => string)\r\n): Record<string, T[]> {\r\n return array.reduce((result, item) => {\r\n const groupKey = typeof key === 'function' ? key(item) : String(item[key]);\r\n if (!result[groupKey]) {\r\n result[groupKey] = [];\r\n }\r\n result[groupKey].push(item);\r\n return result;\r\n }, {} as Record<string, T[]>);\r\n}\r\n\r\n/**\r\n * Check if value is empty\r\n */\r\nexport function isEmpty(value: any): boolean {\r\n if (value === null || value === undefined) return true;\r\n if (typeof value === 'string') return value.trim() === '';\r\n if (Array.isArray(value)) return value.length === 0;\r\n if (value instanceof Map || value instanceof Set) return value.size === 0;\r\n if (typeof value === 'object') return Object.keys(value).length === 0;\r\n return false;\r\n}\r\n\r\n/**\r\n * Clamp a number between min and max\r\n */\r\nexport function clamp(value: number, min: number, max: number): number {\r\n return Math.min(Math.max(value, min), max);\r\n}\r\n\r\n/**\r\n * Get a nested property from an object using a path\r\n */\r\nexport function get(obj: any, path: string | string[], defaultValue?: any): any {\r\n const keys = Array.isArray(path) ? path : path.split('.');\r\n let result = obj;\r\n \r\n for (const key of keys) {\r\n if (result === null || result === undefined) {\r\n return defaultValue;\r\n }\r\n result = result[key];\r\n }\r\n \r\n return result === undefined ? defaultValue : result;\r\n}\r\n\r\n/**\r\n * Set a nested property on an object using a path\r\n */\r\nexport function set(obj: any, path: string | string[], value: any): any {\r\n const keys = Array.isArray(path) ? path : path.split('.');\r\n let current = obj;\r\n \r\n for (let i = 0; i < keys.length - 1; i++) {\r\n const key = keys[i];\r\n if (!(key in current) || typeof current[key] !== 'object') {\r\n current[key] = {};\r\n }\r\n current = current[key];\r\n }\r\n \r\n current[keys[keys.length - 1]] = value;\r\n return obj;\r\n}\r\n\r\nexport default {\r\n debounce,\r\n throttle,\r\n deepClone,\r\n deepMerge,\r\n memoize,\r\n uuid,\r\n formatDate,\r\n shallowEqual,\r\n deepEqual,\r\n escapeHtml,\r\n unescapeHtml,\r\n capitalize,\r\n camelCase,\r\n kebabCase,\r\n sleep,\r\n retry,\r\n deferred,\r\n pick,\r\n omit,\r\n groupBy,\r\n isEmpty,\r\n clamp,\r\n get,\r\n set\r\n};\r\n", "/**\r\n * Baraqex Error Classes\r\n * \r\n * Custom error types for better debugging and error handling.\r\n * Each error type provides specific context and helpful messages.\r\n */\r\n\r\n/**\r\n * Base error class for all Baraqex errors\r\n */\r\nexport class BaraqexError extends Error {\r\n public readonly code: string;\r\n public readonly hint?: string;\r\n public readonly docs?: string;\r\n public readonly originalCause?: Error;\r\n\r\n constructor(message: string, options: {\r\n code: string;\r\n hint?: string;\r\n docs?: string;\r\n cause?: Error;\r\n }) {\r\n super(message);\r\n this.name = 'BaraqexError';\r\n this.code = options.code;\r\n this.hint = options.hint;\r\n this.docs = options.docs;\r\n this.originalCause = options.cause;\r\n Error.captureStackTrace?.(this, this.constructor);\r\n }\r\n\r\n /**\r\n * Format error for console output with helpful hints\r\n */\r\n format(): string {\r\n let output = `\\n\u274C ${this.name}: ${this.message}\\n`;\r\n output += ` Code: ${this.code}\\n`;\r\n if (this.hint) {\r\n output += ` \uD83D\uDCA1 Hint: ${this.hint}\\n`;\r\n }\r\n if (this.docs) {\r\n output += ` \uD83D\uDCDA Docs: ${this.docs}\\n`;\r\n }\r\n return output;\r\n }\r\n}\r\n\r\n/**\r\n * Configuration-related errors\r\n */\r\nexport class ConfigError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'CONFIG_ERROR',\r\n hint: options?.hint || 'Check your baraqex.config.js or server configuration',\r\n docs: 'https://baraqex.tech/docs/configuration',\r\n cause: options?.cause\r\n });\r\n this.name = 'ConfigError';\r\n }\r\n}\r\n\r\n/**\r\n * Database connection and query errors\r\n */\r\nexport class DatabaseError extends BaraqexError {\r\n public readonly dbType?: string;\r\n \r\n constructor(message: string, options?: { \r\n dbType?: string;\r\n hint?: string; \r\n cause?: Error \r\n }) {\r\n super(message, {\r\n code: 'DATABASE_ERROR',\r\n hint: options?.hint || 'Verify your database connection string and credentials',\r\n docs: 'https://baraqex.tech/docs/database',\r\n cause: options?.cause\r\n });\r\n this.name = 'DatabaseError';\r\n this.dbType = options?.dbType;\r\n }\r\n}\r\n\r\n/**\r\n * Authentication and authorization errors\r\n */\r\nexport class AuthError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'AUTH_ERROR',\r\n hint: options?.hint || 'Check your JWT secret and token configuration',\r\n docs: 'https://baraqex.tech/docs/authentication',\r\n cause: options?.cause\r\n });\r\n this.name = 'AuthError';\r\n }\r\n}\r\n\r\n/**\r\n * WASM loading and execution errors\r\n */\r\nexport class WasmError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'WASM_ERROR',\r\n hint: options?.hint || 'Ensure your .wasm file is accessible and properly compiled',\r\n docs: 'https://baraqex.tech/docs/webassembly',\r\n cause: options?.cause\r\n });\r\n this.name = 'WasmError';\r\n }\r\n}\r\n\r\n/**\r\n * Router and routing errors\r\n */\r\nexport class RouterError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'ROUTER_ERROR',\r\n hint: options?.hint || 'Check your API route file structure and exports',\r\n docs: 'https://baraqex.tech/docs/routing',\r\n cause: options?.cause\r\n });\r\n this.name = 'RouterError';\r\n }\r\n}\r\n\r\n/**\r\n * Server lifecycle errors\r\n */\r\nexport class ServerError extends BaraqexError {\r\n constructor(message: string, options?: { hint?: string; cause?: Error }) {\r\n super(message, {\r\n code: 'SERVER_ERROR',\r\n hint: options?.hint || 'Check that the port is available and dependencies are installed',\r\n docs: 'https://baraqex.tech/docs/server',\r\n cause: options?.cause\r\n });\r\n this.name = 'ServerError';\r\n }\r\n}\r\n\r\n/**\r\n * Validation errors for user input\r\n */\r\nexport class ValidationError extends BaraqexError {\r\n public readonly field?: string;\r\n public readonly value?: unknown;\r\n\r\n constructor(message: string, options?: { \r\n field?: string;\r\n value?: unknown;\r\n hint?: string; \r\n cause?: Error \r\n }) {\r\n super(message, {\r\n code: 'VALIDATION_ERROR',\r\n hint: options?.hint,\r\n cause: options?.cause\r\n });\r\n this.name = 'ValidationError';\r\n this.field = options?.field;\r\n this.value = options?.value;\r\n }\r\n}\r\n\r\n/**\r\n * HTTP-related errors with status codes\r\n */\r\nexport class HttpError extends BaraqexError {\r\n public readonly statusCode: number;\r\n\r\n constructor(statusCode: number, message: string, options?: { hint?: string }) {\r\n super(message, {\r\n code: `HTTP_${statusCode}`,\r\n hint: options?.hint\r\n });\r\n this.name = 'HttpError';\r\n this.statusCode = statusCode;\r\n }\r\n\r\n static badRequest(message = 'Bad Request', hint?: string) {\r\n return new HttpError(400, message, { hint });\r\n }\r\n\r\n static unauthorized(message = 'Unauthorized', hint?: string) {\r\n return new HttpError(401, message, { hint: hint || 'Include a valid Authorization header' });\r\n }\r\n\r\n static forbidden(message = 'Forbidden', hint?: string) {\r\n return new HttpError(403, message, { hint });\r\n }\r\n\r\n static notFound(message = 'Not Found', hint?: string) {\r\n return new HttpError(404, message, { hint });\r\n }\r\n\r\n static tooManyRequests(message = 'Too Many Requests', hint?: string) {\r\n return new HttpError(429, message, { hint: hint || 'Slow down your request rate' });\r\n }\r\n\r\n static internal(message = 'Internal Server Error', hint?: string) {\r\n return new HttpError(500, message, { hint });\r\n }\r\n}\r\n\r\n/**\r\n * Dependency missing errors\r\n */\r\nexport class DependencyError extends BaraqexError {\r\n public readonly packageName: string;\r\n\r\n constructor(packageName: string, feature: string) {\r\n super(`Missing dependency: ${packageName} is required for ${feature}`, {\r\n code: 'DEPENDENCY_ERROR',\r\n hint: `Install it with: npm install ${packageName}`,\r\n docs: 'https://baraqex.tech/docs/installation'\r\n });\r\n this.name = 'DependencyError';\r\n this.packageName = packageName;\r\n }\r\n}\r\n\r\n/**\r\n * Error handler for consistent error logging\r\n */\r\nexport function formatError(error: unknown): string {\r\n if (error instanceof BaraqexError) {\r\n return error.format();\r\n }\r\n \r\n if (error instanceof Error) {\r\n return `\\n\u274C Error: ${error.message}\\n`;\r\n }\r\n \r\n return `\\n\u274C Unknown error: ${String(error)}\\n`;\r\n}\r\n\r\n/**\r\n * Wrap async functions with error handling\r\n */\r\nexport function withErrorHandling<T extends (...args: any[]) => Promise<any>>(\r\n fn: T,\r\n errorHandler?: (error: Error) => void\r\n): T {\r\n return (async (...args: Parameters<T>) => {\r\n try {\r\n return await fn(...args);\r\n } catch (error) {\r\n if (errorHandler) {\r\n errorHandler(error as Error);\r\n } else {\r\n console.error(formatError(error));\r\n }\r\n throw error;\r\n }\r\n }) as T;\r\n}\r\n", "/**\r\n * WebAssembly integration for Frontend Hamroun\r\n * Works in both browser and Node.js environments\r\n */\r\n\r\nexport interface GoWasmOptions {\r\n debug?: boolean;\r\n goWasmPath?: string;\r\n importObject?: any;\r\n onLoad?: (instance: GoWasmInstance) => void;\r\n}\r\n\r\nexport interface GoWasmInstance {\r\n instance: WebAssembly.Instance;\r\n module: WebAssembly.Module;\r\n exports: WebAssembly.Exports;\r\n functions: Record<string, Function>;\r\n}\r\n\r\n/**\r\n * Cache loaded WASM instances per URL so visiting a route (or re-mounting a\r\n * component) doesn't re-fetch, re-compile, or re-run the module every time.\r\n */\r\nconst wasmCache = new Map<string, Promise<GoWasmInstance>>();\r\n\r\n/**\r\n * Load Go WASM module in the browser (cached per URL).\r\n */\r\nexport function loadGoWasm(\r\n wasmUrl: string,\r\n options: GoWasmOptions = {}\r\n): Promise<GoWasmInstance> {\r\n if (typeof window === 'undefined') {\r\n throw new Error('loadGoWasm() is for browser use only. Use loadGoWasmFromFile() in Node.js.');\r\n }\r\n\r\n const cached = wasmCache.get(wasmUrl);\r\n if (cached) return cached;\r\n\r\n const request = loadGoWasmInternal(wasmUrl, options)\r\n .catch((error) => {\r\n // Don't cache failures \u2014 allow a retry next time the module is requested.\r\n wasmCache.delete(wasmUrl);\r\n throw error;\r\n });\r\n\r\n wasmCache.set(wasmUrl, request);\r\n return request;\r\n}\r\n\r\nasync function loadGoWasmInternal(\r\n wasmUrl: string,\r\n options: GoWasmOptions = {}\r\n): Promise<GoWasmInstance> {\r\n try {\r\n // Check if Go WASM runtime is available (like your frontend code)\r\n if (!window.Go) {\r\n throw new Error('Go WASM runtime not available. Make sure wasm_exec.js is loaded.');\r\n }\r\n\r\n if (options.debug) {\r\n console.log('[WASM] Loading WASM from:', wasmUrl);\r\n }\r\n\r\n // Fetch the WASM file (exactly like your frontend code)\r\n const response = await fetch(wasmUrl);\r\n \r\n if (!response.ok) {\r\n throw new Error(`Failed to fetch WASM file: ${response.status}`);\r\n }\r\n\r\n const wasmBytes = await response.arrayBuffer();\r\n \r\n // Initialize Go runtime (exactly like your frontend code)\r\n const go = new window.Go();\r\n const wasmModule = await WebAssembly.instantiate(wasmBytes, go.importObject);\r\n \r\n // Run the Go program (exactly like your frontend code)\r\n go.run(wasmModule.instance);\r\n \r\n // Wait a bit for Go functions to be registered (like your frontend code)\r\n await new Promise(resolve => setTimeout(resolve, 100));\r\n \r\n if (options.debug) {\r\n console.log('[WASM] Go program started, checking for registered functions...');\r\n }\r\n\r\n // Extract exported functions from global scope (like your frontend code)\r\n const functions: Record<string, Function> = {};\r\n \r\n // Look for Go functions in global scope\r\n for (const key in window) {\r\n if (typeof window[key] === 'function' && key.startsWith('go')) {\r\n functions[key] = window[key] as Function;\r\n if (options.debug) {\r\n console.log(`[WASM] Found function: ${key}`);\r\n }\r\n }\r\n }\r\n\r\n const wasmInstance: GoWasmInstance = {\r\n instance: wasmModule.instance,\r\n module: wasmModule,\r\n exports: wasmModule.instance.exports,\r\n functions\r\n };\r\n\r\n if (options.onLoad) {\r\n options.onLoad(wasmInstance);\r\n }\r\n\r\n if (options.debug) {\r\n console.log(`[WASM] Module loaded successfully with ${Object.keys(functions).length} functions`);\r\n }\r\n\r\n return wasmInstance;\r\n\r\n } catch (error) {\r\n console.error('[WASM] Error loading Go WASM module:', error);\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Call a Go WASM function (like your frontend code's callWasmFunction)\r\n */\r\nexport function callWasmFunction(funcName: string, ...args: any[]): any {\r\n if (typeof window === 'undefined') {\r\n throw new Error('callWasmFunction() is for browser use only.');\r\n }\r\n\r\n const func = (window as any)[funcName];\r\n if (typeof func !== 'function') {\r\n throw new Error(`Function ${funcName} not found. Make sure the WASM module is loaded.`);\r\n }\r\n \r\n return func(...args);\r\n}\r\n\r\n/**\r\n * Check if Go WASM is ready (like your frontend code's wasmReady state)\r\n */\r\nexport function isWasmReady(): boolean {\r\n if (typeof window === 'undefined') {\r\n return false;\r\n }\r\n\r\n // Check if Go runtime is available and at least one Go function exists\r\n return !!(window.Go && Object.keys(window).some(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n ));\r\n}\r\n\r\n/**\r\n * Get all available Go WASM functions\r\n */\r\nexport function getWasmFunctions(): string[] {\r\n if (typeof window === 'undefined') {\r\n return [];\r\n }\r\n\r\n return Object.keys(window).filter(key => \r\n key.startsWith('go') && typeof window[key] === 'function'\r\n );\r\n}\r\n\r\n/**\r\n * Hook for React components (like your frontend code's useEffect pattern)\r\n */\r\nexport function useGoWasm(wasmUrl: string, options: GoWasmOptions = {}) {\r\n if (typeof window === 'undefined') {\r\n throw new Error('useGoWasm() is for browser use only.');\r\n }\r\n\r\n // This would need to be implemented as a React hook in frontend-hamroun\r\n // For now, return the basic functionality\r\n return {\r\n loadWasm: () => loadGoWasm(wasmUrl, options),\r\n callFunction: callWasmFunction,\r\n isReady: isWasmReady,\r\n getFunctions: getWasmFunctions\r\n };\r\n}\r\n\r\n// Browser-specific type declarations\r\ndeclare global {\r\n interface Window {\r\n Go: new () => {\r\n importObject: any;\r\n run: (instance: WebAssembly.Instance) => void;\r\n };\r\n [key: string]: any;\r\n }\r\n}\r\n", "/**\r\n * Browser-specific exports for Baraqex\r\n * This file is used when building for the browser\r\n */\r\n\r\n// Re-export everything from core for browser usage (standalone, no external dependencies)\r\nexport * from './core/index.js';\r\n\r\n// Export WASM functionality (browser-only functions)\r\nexport { loadGoWasm, callWasmFunction, isWasmReady, getWasmFunctions, useGoWasm } from './wasm.js';\r\nexport type { GoWasmOptions, GoWasmInstance } from './wasm.js';\r\n\r\n// Export safe utilities that work in browser\r\nexport const safeJsonParse = (json: string, fallback: any) => {\r\n try {\r\n return JSON.parse(json);\r\n } catch {\r\n return fallback;\r\n }\r\n};\r\n\r\nexport const generateToken = (length: number = 32) => {\r\n const array = new Uint8Array(length);\r\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\r\n crypto.getRandomValues(array);\r\n } else {\r\n for (let i = 0; i < array.length; i++) {\r\n array[i] = Math.floor(Math.random() * 256);\r\n }\r\n }\r\n return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\r\n};\r\n\r\n// Browser-safe template utilities\r\nexport const generateDocument = (content: string, options: any = {}) => \r\n `<!DOCTYPE html><html><head><title>${options.title || 'App'}</title></head><body>${content}</body></html>`;\r\n\r\nexport const generateErrorPage = (code: number, message: string) => \r\n `<div>Error ${code}: ${message}</div>`;\r\n\r\nexport const generateLoadingPage = (message: string = 'Loading...') => \r\n `<div>${message}</div>`;\r\n\r\n// Simple renderToString for browser compatibility\r\nexport const renderToString = (component: any): string => {\r\n try {\r\n if (typeof component === 'function') {\r\n const result = component();\r\n return typeof result === 'string' ? result : String(result || '');\r\n }\r\n return String(component || '');\r\n } catch (error) {\r\n return '<div>Error rendering component</div>';\r\n }\r\n};\r\n\r\n// Stub server functions for browser (they will throw if called)\r\nexport const createServer = () => {\r\n throw new Error('createServer is not available in browser environment');\r\n};\r\n\r\nexport const createDevServer = () => {\r\n throw new Error('createDevServer is not available in browser environment');\r\n};\r\n\r\nexport const createProductionServer = () => {\r\n throw new Error('createProductionServer is not available in browser environment');\r\n};\r\n\r\n// Export null stubs for server-only functionality\r\nexport const BaraqexServer = null;\r\nexport const Database = null;\r\nexport const AuthService = null;\r\nexport const ApiRouter = null;\r\nexport const requestLogger = null;\r\nexport const errorHandler = null;\r\nexport const notFoundHandler = null;\r\nexport const rateLimit = null;\r\nexport const initNodeWasm = null;\r\nexport const loadGoWasmFromFile = null;\r\nexport const hashString = null;\r\nexport const getPagination = null;\r\nexport const sendSuccess = null;\r\nexport const sendError = null;\r\nexport const validateFields = null;\r\nexport const validateFileUpload = null;\r\nexport const getEnvironmentInfo = null;\r\nexport const isDirectoryEmpty = null;\r\nexport const ensureDirectory = null;\r\nexport const writeJsonFile = null;\r\nexport const readJsonFile = null;\r\nexport const baraqexRenderToString = null;\r\nexport const renderComponent = null;\r\n\r\n// Debug log removed \u2014 use build.mjs or the CLI to verify the build.\r\n"],
5
+ "mappings": "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",
6
6
  "names": ["children", "isBrowser", "Component", "isBrowser", "Component", "isEmpty", "LifecycleEvents", "escapeHtml", "errorHandler", "renderToString"]
7
7
  }