elit 3.4.0 → 3.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +53864 -315
- package/dist/hmr.d.ts.map +1 -1
- package/dist/hmr.js +3 -0
- package/dist/hmr.js.map +1 -1
- package/dist/hmr.mjs +3 -0
- package/dist/hmr.mjs.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +53697 -142
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +53716 -151
- package/dist/server.mjs.map +1 -1
- package/package.json +2 -1
- package/src/hmr.ts +5 -0
- package/src/server.ts +145 -103
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/dom.ts","../src/state.ts","../src/style.ts","../src/el.ts","../src/router.ts","../src/hmr.ts"],"sourcesContent":["/**\n * Elit - DomNode Core Class\n */\n\nimport type { VNode, Child, Children, Props, State, StateOptions, VirtualListController, JsonNode, VNodeJson } from './types';\n\n/**\n * Helper: Resolve element from string ID or HTMLElement (eliminates duplication in render methods)\n */\nfunction resolveElement(rootElement: string | HTMLElement): HTMLElement | null {\n return typeof rootElement === 'string'\n ? document.getElementById(rootElement.replace('#', ''))\n : rootElement;\n}\n\n/**\n * Helper: Ensure element exists or throw error (eliminates duplication in validation)\n */\nfunction ensureElement(el: HTMLElement | null, rootElement: string | HTMLElement): HTMLElement {\n if (!el) {\n throw new Error(`Element not found: ${rootElement}`);\n }\n return el;\n}\n\n/**\n * Helper: Check if child should be skipped (eliminates duplication in child rendering)\n */\nfunction shouldSkipChild(child: any): boolean {\n return child == null || child === false;\n}\n\n/**\n * Helper: Check if value is primitive JSON type (eliminates duplication in JSON conversion)\n */\nfunction isPrimitiveJson(json: any): json is string | number | boolean | null | undefined {\n return json == null || typeof json === 'boolean' || typeof json === 'string' || typeof json === 'number';\n}\n\nexport class DomNode {\n private elementCache = new WeakMap<Element, boolean>();\n\n createElement(tagName: string, props: Props = {}, children: Children = []): VNode {\n return { tagName, props, children };\n }\n\n renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {\n if (vNode == null || vNode === false) return;\n\n // Handle primitive values (strings, numbers)\n if (typeof vNode !== 'object') {\n parent.appendChild(document.createTextNode(String(vNode)));\n return;\n }\n\n // Handle arrays (Child[])\n if (Array.isArray(vNode)) {\n for (const child of vNode) {\n this.renderToDOM(child, parent);\n }\n return;\n }\n\n // Handle VNode\n const { tagName, props, children } = vNode;\n\n // Handle fragment (empty tagName) - render children directly to parent\n if (!tagName) {\n // Fragments don't have their own element, so skip ref handling\n // The ref will be handled by the wrapper element created by reactive()\n // Render children directly to parent\n for (const child of children) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n !shouldSkipChild(c) && this.renderToDOM(c, parent);\n }\n } else {\n this.renderToDOM(child, parent);\n }\n }\n return;\n }\n\n const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||\n (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';\n\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', tagName.replace('svg', '').toLowerCase() || tagName)\n : document.createElement(tagName);\n\n for (const key in props) {\n const value = props[key];\n if (value == null || value === false) continue;\n\n const c = key.charCodeAt(0);\n // class or className (c=99)\n if (c === 99 && (key.length < 6 || key[5] === 'N')) {\n const classValue = Array.isArray(value) ? value.join(' ') : value;\n isSVG ? (el as SVGElement).setAttribute('class', classValue) : (el as HTMLElement).className = classValue;\n }\n // style (s=115)\n else if (c === 115 && key.length === 5) {\n if (typeof value === 'string') {\n (el as HTMLElement).style.cssText = value;\n } else {\n const s = (el as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n }\n }\n // on* events (o=111, n=110)\n else if (c === 111 && key.charCodeAt(1) === 110) {\n (el as any)[key.toLowerCase()] = value;\n }\n // dangerouslySetInnerHTML (d=100)\n else if (c === 100 && key.length > 20) {\n (el as HTMLElement).innerHTML = value.__html;\n }\n // ref (r=114)\n else if (c === 114 && key.length === 3) {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const len = children.length;\n if (!len) {\n parent.appendChild(el);\n return;\n }\n\n const renderChildren = (target: HTMLElement | SVGElement | DocumentFragment) => {\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n !shouldSkipChild(c) && this.renderToDOM(c, target);\n }\n } else {\n this.renderToDOM(child, target);\n }\n }\n };\n\n if (len > 30) {\n const fragment = document.createDocumentFragment();\n renderChildren(fragment);\n el.appendChild(fragment);\n } else {\n renderChildren(el);\n }\n\n parent.appendChild(el);\n }\n\n render(rootElement: string | HTMLElement, vNode: VNode): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n // Clear existing content before rendering\n el.innerHTML = '';\n\n if (vNode.children && vNode.children.length > 500) {\n const fragment = document.createDocumentFragment();\n this.renderToDOM(vNode, fragment);\n el.appendChild(fragment);\n } else {\n this.renderToDOM(vNode, el);\n }\n return el;\n }\n\n batchRender(rootElement: string | HTMLElement, vNodes: VNode[]): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n\n if (len > 3000) {\n const fragment = document.createDocumentFragment();\n let processed = 0;\n const chunkSize = 1500;\n\n const processChunk = (): void => {\n const end = Math.min(processed + chunkSize, len);\n for (let i = processed; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n processed = end;\n\n if (processed >= len) {\n el.appendChild(fragment);\n } else {\n requestAnimationFrame(processChunk);\n }\n };\n\n processChunk();\n } else {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < len; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n el.appendChild(fragment);\n }\n return el;\n }\n\n renderChunked(\n rootElement: string | HTMLElement,\n vNodes: VNode[],\n chunkSize = 5000,\n onProgress?: (current: number, total: number) => void\n ): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n let index = 0;\n\n const renderChunk = (): void => {\n const end = Math.min(index + chunkSize, len);\n const fragment = document.createDocumentFragment();\n\n for (let i = index; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n\n el.appendChild(fragment);\n index = end;\n\n if (onProgress) onProgress(index, len);\n\n if (index < len) {\n requestAnimationFrame(renderChunk);\n }\n };\n\n requestAnimationFrame(renderChunk);\n return el;\n }\n\n renderToHead(...vNodes: Array<VNode | VNode[]>): HTMLHeadElement | null {\n const head = document.head;\n if (head) {\n for (const vNode of vNodes.flat()) {\n vNode && this.renderToDOM(vNode, head);\n }\n }\n return head;\n }\n\n addStyle(cssText: string): HTMLStyleElement {\n const el = document.createElement('style');\n el.textContent = cssText;\n return document.head.appendChild(el);\n }\n\n addMeta(attrs: Record<string, string>): HTMLMetaElement {\n const el = document.createElement('meta');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n addLink(attrs: Record<string, string>): HTMLLinkElement {\n const el = document.createElement('link');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n setTitle(text: string): string {\n return document.title = text;\n }\n\n // Reactive State Management\n createState<T>(initialValue: T, options: StateOptions = {}): State<T> {\n let value = initialValue;\n const listeners = new Set<(value: T) => void>();\n let updateTimer: NodeJS.Timeout | null = null;\n const { throttle = 0, deep = false } = options;\n\n const notify = () => listeners.forEach(fn => fn(value));\n\n const scheduleUpdate = () => {\n if (throttle > 0) {\n if (!updateTimer) {\n updateTimer = setTimeout(() => {\n updateTimer = null;\n notify();\n }, throttle);\n }\n } else {\n notify();\n }\n };\n\n return {\n get value() { return value; },\n set value(newValue: T) {\n const changed = deep ? JSON.stringify(value) !== JSON.stringify(newValue) : value !== newValue;\n if (changed) {\n value = newValue;\n scheduleUpdate();\n }\n },\n subscribe(fn: (value: T) => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n destroy() {\n listeners.clear();\n updateTimer && clearTimeout(updateTimer);\n }\n };\n }\n\n computed<T extends any[], R>(states: { [K in keyof T]: State<T[K]> }, computeFn: (...values: T) => R): State<R> {\n const values = states.map(s => s.value) as unknown as T;\n const result = this.createState(computeFn(...values));\n\n states.forEach((state, index) => {\n state.subscribe((newValue: any) => {\n values[index] = newValue;\n result.value = computeFn(...values);\n });\n });\n\n return result;\n }\n\n effect(stateFn: () => void): void {\n stateFn();\n }\n\n // Virtual scrolling helper for large lists\n createVirtualList<T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight = 50,\n bufferSize = 5\n ): VirtualListController {\n const viewportHeight = container.clientHeight;\n const totalHeight = items.length * itemHeight;\n let scrollTop = 0;\n\n const getVisibleRange = (): { start: number; end: number } => {\n const start = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);\n const end = Math.min(items.length, Math.ceil((scrollTop + viewportHeight) / itemHeight) + bufferSize);\n return { start, end };\n };\n\n const render = (): void => {\n const { start, end } = getVisibleRange();\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `height:${totalHeight}px;position:relative`;\n\n for (let i = start; i < end; i++) {\n const itemEl = document.createElement('div');\n itemEl.style.cssText = `position:absolute;top:${i * itemHeight}px;height:${itemHeight}px;width:100%`;\n this.renderToDOM(renderItem(items[i], i), itemEl);\n wrapper.appendChild(itemEl);\n }\n\n container.innerHTML = '';\n container.appendChild(wrapper);\n };\n\n const scrollHandler = (): void => {\n scrollTop = container.scrollTop;\n requestAnimationFrame(render);\n };\n\n container.addEventListener('scroll', scrollHandler);\n\n render();\n return {\n render,\n destroy: () => {\n container.removeEventListener('scroll', scrollHandler);\n container.innerHTML = '';\n }\n };\n }\n\n // Lazy load components\n lazy<T extends any[], R>(loadFn: () => Promise<(...args: T) => R>): (...args: T) => Promise<R | VNode> {\n let component: ((...args: T) => R) | null = null;\n let loading = false;\n\n return async (...args: T): Promise<R | VNode> => {\n if (!component && !loading) {\n loading = true;\n component = await loadFn();\n loading = false;\n }\n return component ? component(...args) : { tagName: 'div', props: { class: 'loading' }, children: ['Loading...'] };\n };\n }\n\n // Memory management - cleanup unused elements\n cleanupUnusedElements(root: HTMLElement): number {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n const toRemove: Element[] = [];\n\n while (walker.nextNode()) {\n const node = walker.currentNode as Element;\n if (node.id && node.id.startsWith('r') && !this.elementCache.has(node)) {\n toRemove.push(node);\n }\n }\n\n toRemove.forEach(el => el.remove());\n return toRemove.length;\n }\n\n // Server-Side Rendering - convert VNode to HTML string\n renderToString(vNode: Child, options: { pretty?: boolean; indent?: number } = {}): string {\n const { pretty = false, indent = 0 } = options;\n const indentStr = pretty ? ' '.repeat(indent) : '';\n const newLine = pretty ? '\\n' : '';\n\n let resolvedVNode = this.resolveStateValue(vNode);\n resolvedVNode = this.unwrapReactive(resolvedVNode);\n\n if (Array.isArray(resolvedVNode)) {\n return resolvedVNode.map(child => this.renderToString(child, options)).join('');\n }\n\n if (typeof resolvedVNode !== 'object' || resolvedVNode === null) {\n if (resolvedVNode === null || resolvedVNode === undefined || resolvedVNode === false) {\n return '';\n }\n return this.escapeHtml(String(resolvedVNode));\n }\n\n const { tagName, props, children } = resolvedVNode;\n const isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\n\n if (props.dangerouslySetInnerHTML) {\n html += props.dangerouslySetInnerHTML.__html;\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (children && children.length > 0) {\n const resolvedChildren = children.map((c: Child) => {\n const resolved = this.resolveStateValue(c);\n return this.unwrapReactive(resolved);\n });\n\n const hasComplexChildren = resolvedChildren.some(\n (c: any) => typeof c === 'object' && c !== null && !Array.isArray(c) && 'tagName' in c\n );\n\n if (pretty && hasComplexChildren) {\n html += newLine;\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty, indent: indent + 1 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty, indent: indent + 1 });\n }\n }\n html += indentStr;\n } else {\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty: false, indent: 0 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty: false, indent: 0 });\n }\n }\n }\n }\n\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n private resolveStateValue(value: any): any {\n if (value && typeof value === 'object' && 'value' in value && 'subscribe' in value) {\n return value.value;\n }\n return value;\n }\n\n private isReactiveWrapper(vNode: any): boolean {\n if (!vNode || typeof vNode !== 'object' || !vNode.tagName) {\n return false;\n }\n return vNode.tagName === 'span' &&\n vNode.props?.id &&\n typeof vNode.props.id === 'string' &&\n vNode.props.id.match(/^r[a-z0-9]{9}$/);\n }\n\n private unwrapReactive(vNode: any): Child {\n if (!this.isReactiveWrapper(vNode)) {\n return vNode;\n }\n\n const children = vNode.children;\n if (!children || children.length === 0) {\n return '';\n }\n\n if (children.length === 1) {\n const child = children[0];\n\n if (child && typeof child === 'object' && child.tagName === 'span') {\n const props = child.props;\n const hasNoProps = !props || Object.keys(props).length === 0;\n const hasSingleStringChild = child.children &&\n child.children.length === 1 &&\n typeof child.children[0] === 'string';\n\n if (hasNoProps && hasSingleStringChild) {\n return child.children[0];\n }\n }\n\n return this.unwrapReactive(child);\n }\n\n return children.map((c: Child) => this.unwrapReactive(c));\n }\n\n private escapeHtml(text: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]);\n return selfClosingTags.has(tagName.toLowerCase());\n }\n\n private propsToAttributes(props: Props): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref') {\n continue;\n }\n\n let value = props[key];\n value = this.resolveStateValue(value);\n\n if (value == null || value === false) continue;\n\n if (key.startsWith('on') && typeof value === 'function') {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n const className = Array.isArray(value) ? value.join(' ') : value;\n if (className) {\n attrs.push(`class=\"${this.escapeHtml(String(className))}\"`);\n }\n continue;\n }\n\n if (key === 'style') {\n const styleStr = this.styleToString(value);\n if (styleStr) {\n attrs.push(`style=\"${this.escapeHtml(styleStr)}\"`);\n }\n continue;\n }\n\n if (value === true) {\n attrs.push(key);\n continue;\n }\n\n attrs.push(`${key}=\"${this.escapeHtml(String(value))}\"`);\n }\n\n return attrs.join(' ');\n }\n\n private styleToString(style: any): string {\n if (typeof style === 'string') {\n return style;\n }\n\n if (typeof style === 'object' && style !== null) {\n const styles: string[] = [];\n for (const key in style) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n styles.push(`${cssKey}:${style[key]}`);\n }\n return styles.join(';');\n }\n\n return '';\n }\n\n private isState(value: any): value is State<any> {\n return value && typeof value === 'object' && 'value' in value && 'subscribe' in value && typeof value.subscribe === 'function';\n }\n\n private reactiveNodes = new Map<State<any>, { node: Text | null, renderFn: (v: any) => Child }>();\n\n private createReactiveChild(state: State<any>, renderFn: (value: any) => Child): Child {\n const currentValue = renderFn(state.value);\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const entry = { node: null as Text | null, renderFn };\n this.reactiveNodes.set(state, entry);\n\n state.subscribe(() => {\n if (entry.node && entry.node.parentNode) {\n const newValue = renderFn(state.value);\n entry.node.textContent = String(newValue ?? '');\n }\n });\n }\n\n return currentValue;\n }\n\n jsonToVNode(json: JsonNode | string | number | boolean | null | undefined | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tag, attributes = {}, children } = json;\n\n const props: Props = {};\n for (const key in attributes) {\n const value = attributes[key];\n if (key === 'class') {\n props.className = this.isState(value) ? value.value : value;\n } else {\n props[key] = this.isState(value) ? value.value : value;\n }\n }\n\n const childrenArray: Children = [];\n if (children != null) {\n if (Array.isArray(children)) {\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.jsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n } else if (this.isState(children)) {\n childrenArray.push(this.createReactiveChild(children, (v: any) => v));\n } else if (typeof children === 'object' && 'tag' in children) {\n const converted = this.jsonToVNode(children);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n } else {\n childrenArray.push(children as Child);\n }\n }\n\n return { tagName: tag, props, children: childrenArray };\n }\n\n vNodeJsonToVNode(json: VNodeJson | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tagName, props = {}, children = [] } = json;\n\n const resolvedProps: Props = {};\n for (const key in props) {\n const value = props[key];\n resolvedProps[key] = this.isState(value) ? value.value : value;\n }\n\n const childrenArray: Children = [];\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.vNodeJsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n\n return { tagName, props: resolvedProps, children: childrenArray };\n }\n\n renderJson(rootElement: string | HTMLElement, json: JsonNode): HTMLElement {\n const vNode = this.jsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderVNode(rootElement: string | HTMLElement, json: VNodeJson): HTMLElement {\n const vNode = this.vNodeJsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid VNode JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderJsonToString(json: JsonNode, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.jsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n renderVNodeToString(json: VNodeJson, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.vNodeJsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n\n // Generate complete HTML document as string (for SSR)\n renderToHTMLDocument(vNode: Child, options: {\n title?: string;\n meta?: Array<Record<string, string>>;\n links?: Array<Record<string, string>>;\n scripts?: Array<{ src?: string; content?: string; async?: boolean; defer?: boolean; type?: string }>;\n styles?: Array<{ href?: string; content?: string }>;\n lang?: string;\n head?: string;\n bodyAttrs?: Record<string, string>;\n pretty?: boolean;\n } = {}): string {\n const { title = '', meta = [], links = [], scripts = [], styles = [], lang = 'en', head = '', bodyAttrs = {}, pretty = false } = options;\n const nl = pretty ? '\\n' : '';\n const indent = pretty ? ' ' : '';\n const indent2 = pretty ? ' ' : '';\n\n let html = `<!DOCTYPE html>${nl}<html lang=\"${lang}\">${nl}${indent}<head>${nl}${indent2}<meta charset=\"UTF-8\">${nl}${indent2}<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">${nl}`;\n if (title) html += `${indent2}<title>${this.escapeHtml(title)}</title>${nl}`;\n\n for (const m of meta) {\n html += `${indent2}<meta`;\n for (const k in m) html += ` ${k}=\"${this.escapeHtml(m[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const l of links) {\n html += `${indent2}<link`;\n for (const k in l) html += ` ${k}=\"${this.escapeHtml(l[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const s of styles) {\n if (s.href) {\n html += `${indent2}<link rel=\"stylesheet\" href=\"${this.escapeHtml(s.href)}\">${nl}`;\n } else if (s.content) {\n html += `${indent2}<style>${s.content}</style>${nl}`;\n }\n }\n\n if (head) html += head + nl;\n html += `${indent}</head>${nl}${indent}<body`;\n for (const k in bodyAttrs) html += ` ${k}=\"${this.escapeHtml(bodyAttrs[k])}\"`;\n html += `>${nl}`;\n html += this.renderToString(vNode, { pretty, indent: 2 });\n\n for (const script of scripts) {\n html += `${indent2}<script`;\n if (script.type) html += ` type=\"${this.escapeHtml(script.type)}\"`;\n if (script.async) html += ` async`;\n if (script.defer) html += ` defer`;\n if (script.src) {\n html += ` src=\"${this.escapeHtml(script.src)}\"></script>${nl}`;\n } else if (script.content) {\n html += `>${script.content}</script>${nl}`;\n } else {\n html += `></script>${nl}`;\n }\n }\n\n html += `${indent}</body>${nl}</html>`;\n return html;\n }\n\n // Expose elementCache for reactive updates\n getElementCache(): WeakMap<Element, boolean> {\n return this.elementCache;\n }\n}\n\nexport const dom = new DomNode();\n\n// Export helper functions for convenience\nexport const render = dom.render.bind(dom);\nexport const renderToString = dom.renderToString.bind(dom);\nexport const mount = render; // alias for render\n","/**\n * Elit - State Management\n */\n\nimport type { State, StateOptions, VNode, VirtualListController, Child, Props } from './types';\nimport { dom } from './dom';\n\n// State management helpers\nexport const createState = <T>(initial: T, options?: StateOptions): State<T> =>\n dom.createState(initial, options);\n\nexport const computed = <T extends any[], R>(\n states: { [K in keyof T]: State<T[K]> },\n fn: (...values: T) => R\n): State<R> => dom.computed(states, fn);\n\nexport const effect = (fn: () => void): void => dom.effect(fn);\n\n// Performance helpers\nexport const batchRender = (container: string | HTMLElement, vNodes: VNode[]): HTMLElement =>\n dom.batchRender(container, vNodes);\n\nexport const renderChunked = (\n container: string | HTMLElement,\n vNodes: VNode[],\n chunkSize?: number,\n onProgress?: (current: number, total: number) => void\n): HTMLElement => dom.renderChunked(container, vNodes, chunkSize, onProgress);\n\nexport const createVirtualList = <T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight?: number,\n bufferSize?: number\n): VirtualListController => dom.createVirtualList(container, items, renderItem, itemHeight, bufferSize);\n\nexport const lazy = <T extends any[], R>(loadFn: () => Promise<(...args: T) => R>) =>\n dom.lazy(loadFn);\n\nexport const cleanupUnused = (root: HTMLElement): number =>\n dom.cleanupUnusedElements(root);\n\n// Throttle helper\nexport const throttle = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, delay);\n }\n };\n};\n\n// Debounce helper\nexport const debounce = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n timer && clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n};\n\n// ===== Shared State - syncs with elit-server =====\n\ntype StateChangeCallback<T = any> = (value: T, oldValue: T) => void;\n\ninterface StateMessage {\n type: 'state:init' | 'state:update' | 'state:subscribe' | 'state:unsubscribe' | 'state:change';\n key: string;\n value?: any;\n timestamp?: number;\n}\n\n/**\n * Shared State - syncs with elit-server\n */\nexport class SharedState<T = any> {\n private localState: State<T>;\n private ws: WebSocket | null = null;\n private pendingUpdates: T[] = [];\n private previousValue: T;\n\n constructor(\n public readonly key: string,\n defaultValue: T,\n private wsUrl?: string\n ) {\n this.localState = createState(defaultValue);\n this.previousValue = defaultValue;\n this.connect();\n }\n\n /**\n * Get current value\n */\n get value(): T {\n return this.localState.value;\n }\n\n /**\n * Set new value and sync to server\n */\n set value(newValue: T) {\n this.previousValue = this.localState.value;\n this.localState.value = newValue;\n this.sendToServer(newValue);\n }\n\n /**\n * Get the underlying Elit State (for reactive binding)\n */\n get state(): State<T> {\n return this.localState;\n }\n\n /**\n * Subscribe to changes (returns Elit State for reactive)\n */\n onChange(callback: StateChangeCallback<T>): () => void {\n return this.localState.subscribe((newValue) => {\n const oldValue = this.previousValue;\n this.previousValue = newValue;\n callback(newValue, oldValue);\n });\n }\n\n /**\n * Update value using a function\n */\n update(updater: (current: T) => T): void {\n this.value = updater(this.value);\n }\n\n /**\n * Connect to WebSocket\n */\n private connect(): void {\n if (typeof window === 'undefined') return;\n\n const url = this.wsUrl || `ws://${location.host}`;\n this.ws = new WebSocket(url);\n\n this.ws.addEventListener('open', () => {\n this.subscribe();\n\n // Send pending updates\n while (this.pendingUpdates.length > 0) {\n const value = this.pendingUpdates.shift();\n this.sendToServer(value!);\n }\n });\n\n this.ws.addEventListener('message', (event) => {\n this.handleMessage(event.data);\n });\n\n this.ws.addEventListener('close', () => {\n // Reconnect after delay\n setTimeout(() => this.connect(), 1000);\n });\n\n this.ws.addEventListener('error', (error) => {\n console.error('[SharedState] WebSocket error:', error);\n });\n }\n\n /**\n * Subscribe to server state\n */\n private subscribe(): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n\n this.ws.send(JSON.stringify({\n type: 'state:subscribe',\n key: this.key\n }));\n }\n\n /**\n * Handle message from server\n */\n private handleMessage(data: string): void {\n try {\n const msg = JSON.parse(data) as StateMessage;\n\n if (msg.key !== this.key) return;\n\n if (msg.type === 'state:init' || msg.type === 'state:update') {\n // Update local state without sending back to server\n this.localState.value = msg.value;\n }\n } catch (error) {\n // Ignore parse errors (could be HMR messages)\n }\n }\n\n /**\n * Send value to server\n */\n private sendToServer(value: T): void {\n if (!this.ws) return;\n\n if (this.ws.readyState !== WebSocket.OPEN) {\n // Queue update for when connection is ready\n this.pendingUpdates.push(value);\n return;\n }\n\n this.ws.send(JSON.stringify({\n type: 'state:change',\n key: this.key,\n value\n }));\n }\n\n /**\n * Disconnect\n */\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n /**\n * Destroy state and cleanup\n */\n destroy(): void {\n this.disconnect();\n this.localState.destroy();\n }\n}\n\n/**\n * Create a shared state that syncs with elit-server\n */\nexport function createSharedState<T>(\n key: string,\n defaultValue: T,\n wsUrl?: string\n): SharedState<T> {\n return new SharedState(key, defaultValue, wsUrl);\n}\n\n/**\n * Shared State Manager for managing multiple shared states\n */\nclass SharedStateManager {\n private states = new Map<string, SharedState<any>>();\n\n /**\n * Create or get a shared state\n */\n create<T>(key: string, defaultValue: T, wsUrl?: string): SharedState<T> {\n if (this.states.has(key)) {\n return this.states.get(key) as SharedState<T>;\n }\n\n const state = new SharedState<T>(key, defaultValue, wsUrl);\n this.states.set(key, state);\n return state;\n }\n\n /**\n * Get existing state\n */\n get<T>(key: string): SharedState<T> | undefined {\n return this.states.get(key) as SharedState<T>;\n }\n\n /**\n * Delete a state\n */\n delete(key: string): boolean {\n const state = this.states.get(key);\n if (state) {\n state.destroy();\n return this.states.delete(key);\n }\n return false;\n }\n\n /**\n * Clear all states\n */\n clear(): void {\n this.states.forEach(state => state.destroy());\n this.states.clear();\n }\n}\n\n// Export singleton instance\nexport const sharedStateManager = new SharedStateManager();\n\n// ===== Reactive Rendering Helpers =====\n\n// Helper function to schedule RAF updates (reused in reactive and reactiveAs)\nconst scheduleRAFUpdate = (rafId: number | null, updateFn: () => void): number => {\n rafId && cancelAnimationFrame(rafId);\n return requestAnimationFrame(() => {\n updateFn();\n });\n};\n\n// Helper function to render content to fragment (reused in reactive and reactiveAs)\nconst renderToFragment = (content: VNode | Child | Child[], isVNode?: boolean): DocumentFragment => {\n const fragment = document.createDocumentFragment();\n\n if (Array.isArray(content)) {\n // Handle array of children\n for (const child of content) {\n dom.renderToDOM(child, fragment);\n }\n } else if (isVNode && content && typeof content === 'object' && 'tagName' in content) {\n const { children } = content as VNode;\n for (const child of children) {\n dom.renderToDOM(child, fragment);\n }\n } else {\n dom.renderToDOM(content, fragment);\n }\n\n return fragment;\n};\n\n// Helper function to update element props (reused in reactive)\nconst updateElementProps = (element: HTMLElement | SVGElement, props: Props): void => {\n for (const key in props) {\n const value = props[key];\n if (key === 'ref') continue;\n\n if (key === 'class' || key === 'className') {\n (element as HTMLElement).className = Array.isArray(value) ? value.join(' ') : (value || '');\n } else if (key === 'style' && typeof value === 'object') {\n const s = (element as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n } else if (key.startsWith('on')) {\n (element as any)[key.toLowerCase()] = value;\n } else if (value != null && value !== false) {\n element.setAttribute(key, String(value === true ? '' : value));\n } else {\n element.removeAttribute(key);\n }\n }\n};\n\n// Reactive element helpers\nexport const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n let placeholder: Comment | null = null;\n let isInDOM = true;\n\n const initialResult = renderFn(state.value);\n const isVNodeResult = initialResult && typeof initialResult === 'object' && 'tagName' in initialResult;\n const initialIsNull = initialResult == null || initialResult === false;\n\n const updateElement = () => {\n if (!elementRef && !placeholder) return;\n\n const newResult = renderFn(state.value);\n const resultIsNull = newResult == null || newResult === false;\n\n if (resultIsNull) {\n if (isInDOM && elementRef) {\n placeholder = document.createComment('reactive');\n elementRef.parentNode?.replaceChild(placeholder, elementRef);\n isInDOM = false;\n }\n } else {\n if (!isInDOM && placeholder && elementRef) {\n placeholder.parentNode?.replaceChild(elementRef, placeholder);\n placeholder = null;\n isInDOM = true;\n }\n\n if (elementRef) {\n const isCurrentVNode = !!(isVNodeResult && newResult && typeof newResult === 'object' && 'tagName' in newResult);\n if (isCurrentVNode) {\n const { props } = newResult as VNode;\n updateElementProps(elementRef, props);\n }\n const fragment = renderToFragment(newResult as any, isCurrentVNode);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n dom.getElementCache().set(elementRef, true);\n }\n }\n };\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n updateElement();\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n if (initialIsNull && el.parentNode) {\n placeholder = document.createComment('reactive');\n el.parentNode.replaceChild(placeholder, el);\n isInDOM = false;\n }\n };\n\n if (isVNodeResult) {\n const vnode = initialResult as VNode;\n return {\n tagName: vnode.tagName,\n props: { ...vnode.props, ref: refCallback },\n children: vnode.children\n };\n }\n\n // Handle array result - wrap in fragment-like VNode\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n // Use span with display: contents as wrapper (doesn't affect layout)\n return { tagName: 'span', props: { ref: refCallback, style: { display: 'contents' } }, children: initialChildren };\n};\n\n// Reactive element with custom wrapper tag\nexport const reactiveAs = <T>(\n tagName: string,\n state: State<T>,\n renderFn: (value: T) => VNode | Child | Child[],\n props: Props = {}\n): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n if (elementRef) {\n const newResult = renderFn(state.value);\n\n if (newResult == null || newResult === false) {\n (elementRef as HTMLElement).style.display = 'none';\n elementRef.textContent = '';\n } else {\n (elementRef as HTMLElement).style.display = '';\n const fragment = renderToFragment(newResult as any, false);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n }\n dom.getElementCache().set(elementRef, true);\n }\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n };\n\n const initialResult = renderFn(state.value);\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };\n};\n\nexport const text = (state: State<any> | any): VNode | string =>\n (state && state.value !== undefined)\n ? reactive(state, v => ({ tagName: 'span', props: {}, children: [String(v)] }))\n : String(state);\n\nexport const bindValue = <T extends string | number>(state: State<T>): Props => ({\n value: state.value,\n oninput: (e: Event) => { state.value = (e.target as HTMLInputElement).value as T; }\n});\n\nexport const bindChecked = (state: State<boolean>): Props => ({\n checked: state.value,\n onchange: (e: Event) => { state.value = (e.target as HTMLInputElement).checked; }\n});\n","/**\n * Elit - CreateStyle CSS Generation System\n */\n\nexport interface CSSVariable {\n name: string;\n value: string;\n toString(): string;\n}\n\nexport interface CSSRule {\n selector: string;\n styles: Record<string, string | number>;\n nested?: CSSRule[];\n type: 'tag' | 'class' | 'id' | 'pseudo-class' | 'pseudo-element' | 'name' | 'custom' | 'media' | 'attribute';\n}\n\nexport interface MediaRule {\n type: string;\n condition: string;\n rules: CSSRule[];\n}\n\nexport interface KeyframeStep {\n step: string | number;\n styles: Record<string, string | number>;\n}\n\nexport interface Keyframes {\n name: string;\n steps: KeyframeStep[];\n}\n\nexport interface FontFace {\n fontFamily: string;\n src: string;\n fontWeight?: string | number;\n fontStyle?: string;\n fontDisplay?: string;\n unicodeRange?: string;\n}\n\nexport interface ContainerRule {\n name?: string;\n condition: string;\n rules: CSSRule[];\n}\n\nexport interface SupportsRule {\n condition: string;\n rules: CSSRule[];\n}\n\nexport interface LayerRule {\n name: string;\n rules: CSSRule[];\n}\n\nexport class CreateStyle {\n private variables: CSSVariable[] = [];\n private rules: CSSRule[] = [];\n private mediaRules: MediaRule[] = [];\n private keyframes: Keyframes[] = [];\n private fontFaces: FontFace[] = [];\n private imports: string[] = [];\n private containerRules: ContainerRule[] = [];\n private supportsRules: SupportsRule[] = [];\n private layerRules: LayerRule[] = [];\n private _layerOrder: string[] = [];\n\n // CSS Variables\n addVar(name: string, value: string): CSSVariable {\n const cssVar: CSSVariable = {\n name: name.startsWith('--') ? name : `--${name}`,\n value,\n toString() { return `var(${this.name})`; }\n };\n this.variables.push(cssVar);\n return cssVar;\n }\n\n var(variable: CSSVariable | string, fallback?: string): string {\n const varName = typeof variable === 'string'\n ? (variable.startsWith('--') ? variable : `--${variable}`)\n : variable.name;\n return fallback ? `var(${varName}, ${fallback})` : `var(${varName})`;\n }\n\n // Basic Selectors\n addTag(tag: string, styles: Record<string, string | number>): CSSRule {\n const rule: CSSRule = { selector: tag, styles, type: 'tag' };\n this.rules.push(rule);\n return rule;\n }\n\n addClass(name: string, styles: Record<string, string | number>): CSSRule {\n const selector = name.startsWith('.') ? name : `.${name}`;\n const rule: CSSRule = { selector, styles, type: 'class' };\n this.rules.push(rule);\n return rule;\n }\n\n addId(name: string, styles: Record<string, string | number>): CSSRule {\n const selector = name.startsWith('#') ? name : `#${name}`;\n const rule: CSSRule = { selector, styles, type: 'id' };\n this.rules.push(rule);\n return rule;\n }\n\n // Pseudo Selectors\n addPseudoClass(pseudo: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n const pseudoClass = pseudo.startsWith(':') ? pseudo : `:${pseudo}`;\n const selector = baseSelector ? `${baseSelector}${pseudoClass}` : pseudoClass;\n const rule: CSSRule = { selector, styles, type: 'pseudo-class' };\n this.rules.push(rule);\n return rule;\n }\n\n addPseudoElement(pseudo: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n const pseudoElement = pseudo.startsWith('::') ? pseudo : `::${pseudo}`;\n const selector = baseSelector ? `${baseSelector}${pseudoElement}` : pseudoElement;\n const rule: CSSRule = { selector, styles, type: 'pseudo-element' };\n this.rules.push(rule);\n return rule;\n }\n\n // Attribute Selectors\n addAttribute(attr: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n const attrSelector = attr.startsWith('[') ? attr : `[${attr}]`;\n const selector = baseSelector ? `${baseSelector}${attrSelector}` : attrSelector;\n const rule: CSSRule = { selector, styles, type: 'attribute' };\n this.rules.push(rule);\n return rule;\n }\n\n attrEquals(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}=\"${value}\"`, styles, baseSelector);\n }\n\n attrContainsWord(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}~=\"${value}\"`, styles, baseSelector);\n }\n\n attrStartsWith(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}^=\"${value}\"`, styles, baseSelector);\n }\n\n attrEndsWith(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}$=\"${value}\"`, styles, baseSelector);\n }\n\n attrContains(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}*=\"${value}\"`, styles, baseSelector);\n }\n\n // Combinator Selectors\n descendant(ancestor: string, descendant: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${ancestor} ${descendant}`, styles);\n }\n\n child(parent: string, childSel: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${parent} > ${childSel}`, styles);\n }\n\n adjacentSibling(element: string, sibling: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${element} + ${sibling}`, styles);\n }\n\n generalSibling(element: string, sibling: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${element} ~ ${sibling}`, styles);\n }\n\n multiple(selectors: string[], styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(selectors.join(', '), styles);\n }\n\n // Nesting (BEM-style)\n addName(name: string, styles: Record<string, string | number>): CSSRule {\n const selector = name.startsWith('--') ? `&${name}` : `&--${name}`;\n const rule: CSSRule = { selector, styles, type: 'name' };\n return rule;\n }\n\n nesting(parentRule: CSSRule, ...childRules: CSSRule[]): CSSRule {\n parentRule.nested = childRules;\n return parentRule;\n }\n\n // @keyframes - Animations\n keyframe(name: string, steps: Record<string | number, Record<string, string | number>>): Keyframes {\n const keyframeSteps: KeyframeStep[] = Object.entries(steps).map(([step, styles]) => ({\n step: step === 'from' ? 'from' : step === 'to' ? 'to' : `${step}%`,\n styles\n }));\n const kf: Keyframes = { name, steps: keyframeSteps };\n this.keyframes.push(kf);\n return kf;\n }\n\n keyframeFromTo(name: string, from: Record<string, string | number>, to: Record<string, string | number>): Keyframes {\n return this.keyframe(name, { from, to });\n }\n\n // @font-face - Custom Fonts\n fontFace(options: FontFace): FontFace {\n this.fontFaces.push(options);\n return options;\n }\n\n // @import - Import Stylesheets\n import(url: string, mediaQuery?: string): string {\n const importRule = mediaQuery ? `@import url(\"${url}\") ${mediaQuery};` : `@import url(\"${url}\");`;\n this.imports.push(importRule);\n return importRule;\n }\n\n // @media - Media Queries\n media(type: string, condition: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type, condition, rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n mediaScreen(condition: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('screen', condition, rules);\n }\n\n mediaPrint(rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('print', '', rules);\n }\n\n mediaMinWidth(minWidth: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('screen', `min-width: ${minWidth}`, rules);\n }\n\n mediaMaxWidth(maxWidth: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('screen', `max-width: ${maxWidth}`, rules);\n }\n\n mediaDark(rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type: '', condition: 'prefers-color-scheme: dark', rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n mediaLight(rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type: '', condition: 'prefers-color-scheme: light', rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n mediaReducedMotion(rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type: '', condition: 'prefers-reduced-motion: reduce', rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n // @container - Container Queries\n container(condition: string, rules: Record<string, Record<string, string | number>>, name?: string): ContainerRule {\n const containerRule: ContainerRule = { name, condition, rules: this.rulesToCSSRules(rules) };\n this.containerRules.push(containerRule);\n return containerRule;\n }\n\n addContainer(name: string, styles: Record<string, string | number>): CSSRule {\n const containerStyles = { ...styles, containerName: name };\n return this.addClass(name, containerStyles);\n }\n\n // @supports - Feature Queries\n supports(condition: string, rules: Record<string, Record<string, string | number>>): SupportsRule {\n const supportsRule: SupportsRule = { condition, rules: this.rulesToCSSRules(rules) };\n this.supportsRules.push(supportsRule);\n return supportsRule;\n }\n\n // @layer - Cascade Layers\n layerOrder(...layers: string[]): void {\n this._layerOrder = layers;\n }\n\n layer(name: string, rules: Record<string, Record<string, string | number>>): LayerRule {\n const layerRule: LayerRule = { name, rules: this.rulesToCSSRules(rules) };\n this.layerRules.push(layerRule);\n return layerRule;\n }\n\n // Custom Rules\n add(rules: Record<string, Record<string, string | number>>): CSSRule[] {\n const cssRules: CSSRule[] = Object.entries(rules).map(([selector, styles]) => {\n const rule: CSSRule = { selector, styles, type: 'custom' };\n this.rules.push(rule);\n return rule;\n });\n return cssRules;\n }\n\n important(value: string | number): string {\n return `${value} !important`;\n }\n\n // Utility Methods\n private toKebabCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n }\n\n // Helper: Create and add rule (eliminates duplication in combinator selectors)\n private createAndAddRule(selector: string, styles: Record<string, string | number>, type: CSSRule['type'] = 'custom'): CSSRule {\n const rule: CSSRule = { selector, styles, type };\n this.rules.push(rule);\n return rule;\n }\n\n // Helper: Convert rules object to CSSRule array (eliminates duplication in media/container/supports/layer)\n private rulesToCSSRules(rules: Record<string, Record<string, string | number>>): CSSRule[] {\n return Object.entries(rules).map(([selector, styles]) => ({\n selector,\n styles,\n type: 'custom' as const\n }));\n }\n\n // Helper: Render rules with indentation (eliminates duplication in render methods)\n private renderRulesWithIndent(rules: CSSRule[], indent: string = ' '): string {\n return rules.map(rule => this.renderRule(rule, indent)).join('\\n');\n }\n\n private stylesToString(styles: Record<string, string | number>, indent: string = ' '): string {\n return Object.entries(styles)\n .map(([prop, value]) => {\n const cssValue = typeof value === 'object' && value !== null && 'name' in value\n ? `var(${(value as CSSVariable).name})`\n : value;\n return `${indent}${this.toKebabCase(prop)}: ${cssValue};`;\n })\n .join('\\n');\n }\n\n private renderRule(rule: CSSRule, indent: string = ''): string {\n let css = `${indent}${rule.selector} {\\n${this.stylesToString(rule.styles, indent + ' ')}\\n`;\n\n if (rule.nested && rule.nested.length > 0) {\n for (const nestedRule of rule.nested) {\n const nestedSelector = nestedRule.selector.startsWith('&')\n ? nestedRule.selector.replace(/&/g, rule.selector)\n : `${rule.selector} ${nestedRule.selector}`;\n css += `\\n${indent}${nestedSelector} {\\n${this.stylesToString(nestedRule.styles, indent + ' ')}\\n${indent}}\\n`;\n }\n }\n\n css += `${indent}}`;\n return css;\n }\n\n private renderMediaRule(media: MediaRule): string {\n const condition = media.type && media.condition\n ? `${media.type} and (${media.condition})`\n : media.type\n ? media.type\n : `(${media.condition})`;\n return `@media ${condition} {\\n${this.renderRulesWithIndent(media.rules)}\\n}`;\n }\n\n private renderKeyframes(kf: Keyframes): string {\n let css = `@keyframes ${kf.name} {\\n`;\n for (const step of kf.steps) {\n css += ` ${step.step} {\\n${this.stylesToString(step.styles, ' ')}\\n }\\n`;\n }\n css += '}';\n return css;\n }\n\n private renderFontFace(ff: FontFace): string {\n let css = '@font-face {\\n';\n css += ` font-family: \"${ff.fontFamily}\";\\n`;\n css += ` src: ${ff.src};\\n`;\n if (ff.fontWeight) css += ` font-weight: ${ff.fontWeight};\\n`;\n if (ff.fontStyle) css += ` font-style: ${ff.fontStyle};\\n`;\n if (ff.fontDisplay) css += ` font-display: ${ff.fontDisplay};\\n`;\n if (ff.unicodeRange) css += ` unicode-range: ${ff.unicodeRange};\\n`;\n css += '}';\n return css;\n }\n\n private renderContainerRule(container: ContainerRule): string {\n const nameStr = container.name ? `${container.name} ` : '';\n return `@container ${nameStr}(${container.condition}) {\\n${this.renderRulesWithIndent(container.rules)}\\n}`;\n }\n\n private renderSupportsRule(supports: SupportsRule): string {\n return `@supports (${supports.condition}) {\\n${this.renderRulesWithIndent(supports.rules)}\\n}`;\n }\n\n private renderLayerRule(layer: LayerRule): string {\n return `@layer ${layer.name} {\\n${this.renderRulesWithIndent(layer.rules)}\\n}`;\n }\n\n // Render Output\n render(...additionalRules: (CSSRule | CSSRule[] | MediaRule | Keyframes | ContainerRule | SupportsRule | LayerRule | undefined | null)[]): string {\n const parts: string[] = [];\n\n if (this.imports.length > 0) {\n parts.push(this.imports.join('\\n'));\n }\n\n if (this._layerOrder.length > 0) {\n parts.push(`@layer ${this._layerOrder.join(', ')};`);\n }\n\n if (this.variables.length > 0) {\n const varDeclarations = this.variables\n .map(v => ` ${v.name}: ${v.value};`)\n .join('\\n');\n parts.push(`:root {\\n${varDeclarations}\\n}`);\n }\n\n for (const ff of this.fontFaces) {\n parts.push(this.renderFontFace(ff));\n }\n\n for (const kf of this.keyframes) {\n parts.push(this.renderKeyframes(kf));\n }\n\n const allRules: CSSRule[] = [...this.rules];\n const allMediaRules: MediaRule[] = [...this.mediaRules];\n const allKeyframes: Keyframes[] = [];\n const allContainerRules: ContainerRule[] = [...this.containerRules];\n const allSupportsRules: SupportsRule[] = [...this.supportsRules];\n const allLayerRules: LayerRule[] = [...this.layerRules];\n\n for (const item of additionalRules) {\n if (!item) continue;\n if (Array.isArray(item)) {\n allRules.push(...item);\n } else if ('condition' in item && 'rules' in item && !('name' in item && 'steps' in item)) {\n if ('type' in item) {\n allMediaRules.push(item as MediaRule);\n } else if ('name' in item && typeof (item as any).name === 'string') {\n allContainerRules.push(item as ContainerRule);\n } else {\n allSupportsRules.push(item as SupportsRule);\n }\n } else if ('name' in item && 'steps' in item) {\n allKeyframes.push(item as Keyframes);\n } else if ('name' in item && 'rules' in item) {\n allLayerRules.push(item as LayerRule);\n } else {\n allRules.push(item as CSSRule);\n }\n }\n\n for (const kf of allKeyframes) {\n parts.push(this.renderKeyframes(kf));\n }\n\n for (const layer of allLayerRules) {\n parts.push(this.renderLayerRule(layer));\n }\n\n for (const rule of allRules) {\n parts.push(this.renderRule(rule));\n }\n\n for (const supports of allSupportsRules) {\n parts.push(this.renderSupportsRule(supports));\n }\n\n for (const container of allContainerRules) {\n parts.push(this.renderContainerRule(container));\n }\n\n for (const media of allMediaRules) {\n parts.push(this.renderMediaRule(media));\n }\n\n return parts.join('\\n\\n');\n }\n\n inject(styleId?: string): HTMLStyleElement {\n const css = this.render();\n const style = document.createElement('style');\n if (styleId) style.id = styleId;\n style.textContent = css;\n document.head.appendChild(style);\n return style;\n }\n\n clear(): void {\n this.variables = [];\n this.rules = [];\n this.mediaRules = [];\n this.keyframes = [];\n this.fontFaces = [];\n this.imports = [];\n this.containerRules = [];\n this.supportsRules = [];\n this.layerRules = [];\n this._layerOrder = [];\n }\n}\n\nexport const styles = new CreateStyle();\n\n\nexport const {\n addVar, var: getVar,\n addTag, addClass, addId,\n addPseudoClass, addPseudoElement, addAttribute, attrEquals, attrContainsWord, attrStartsWith, attrEndsWith, attrContains,\n descendant, child: childStyle, adjacentSibling, generalSibling, multiple: multipleStyle,\n addName, nesting,\n keyframe, keyframeFromTo,\n fontFace,\n import: importStyle,\n media: mediaStyle,\n mediaScreen, mediaPrint, mediaMinWidth, mediaMaxWidth, mediaDark, mediaLight, mediaReducedMotion,\n container, addContainer,\n supports: supportsStyle,\n layerOrder, layer,\n add: addStyle, important,\n render: renderStyle, inject: injectStyle, clear: clearStyle\n} = styles;\n\nexport default styles;","/**\n * Elit - Element Factories\n */\n\nimport type { VNode, Child, Props, ElementFactory } from './types';\n\n/**\n * Helper: Check if document is available (eliminates duplication in document checks)\n */\nconst hasDocument = typeof document !== 'undefined';\n\n/**\n * Helper: Capitalize first letter (eliminates duplication in tag name processing)\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Helper: Bind document method safely (eliminates duplication in document method binding)\n */\nfunction bindDocMethod<T extends Function>(method: T | undefined): T | undefined {\n return hasDocument && method ? method.bind(doc) : undefined as any;\n}\n\n/**\n * Helper: Create prefixed element factories (eliminates duplication in factory creation)\n */\nfunction createPrefixedFactories(tags: readonly string[], prefix: string, elements: any): void {\n tags.forEach(tag => {\n const name = prefix + capitalize(tag);\n elements[name] = createElementFactory(tag);\n });\n}\n\nexport const createElementFactory = (tag: string): ElementFactory => {\n return function(props?: Props | Child | null, ...rest: Child[]): VNode {\n if (!arguments.length) return { tagName: tag, props: {}, children: [] };\n\n const isState = props && typeof props === 'object' && 'value' in props && 'subscribe' in props;\n const isVNode = props && typeof props === 'object' && 'tagName' in props;\n const isChild = typeof props !== 'object' || Array.isArray(props) || props === null || isState || isVNode;\n\n const actualProps: Props = isChild ? {} : props as Props;\n const args: Child[] = isChild ? [props as Child, ...rest] : rest;\n\n if (!args.length) return { tagName: tag, props: actualProps, children: [] };\n\n const flatChildren: Child[] = [];\n for (let i = 0, len = args.length; i < len; i++) {\n const child = args[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n\n return { tagName: tag, props: actualProps, children: flatChildren };\n } as ElementFactory;\n};\n\n// HTML Tags\nconst tags = [\n 'html', 'head', 'body', 'title', 'base', 'link', 'meta', 'style',\n 'address', 'article', 'aside', 'footer', 'header', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'main', 'nav', 'section',\n 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure', 'hr', 'li', 'ol', 'p', 'pre', 'ul',\n 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q',\n 'rp', 'rt', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'wbr',\n 'area', 'audio', 'img', 'map', 'track', 'video',\n 'embed', 'iframe', 'object', 'param', 'picture', 'portal', 'source',\n 'canvas', 'noscript', 'script',\n 'del', 'ins',\n 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr',\n 'button', 'datalist', 'fieldset', 'form', 'input', 'label', 'legend', 'meter',\n 'optgroup', 'option', 'output', 'progress', 'select', 'textarea',\n 'details', 'dialog', 'menu', 'summary',\n 'slot', 'template'\n] as const;\n\n// SVG Tags\nconst svgTags = [\n 'svg', 'circle', 'rect', 'path', 'line', 'polyline', 'polygon', 'ellipse', 'g', 'text', 'tspan',\n 'defs', 'linearGradient', 'radialGradient', 'stop', 'pattern', 'mask', 'clipPath', 'use', 'symbol',\n 'marker', 'image', 'foreignObject', 'animate', 'animateTransform', 'animateMotion', 'set', 'filter',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting',\n 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feMorphology', 'feOffset', 'feSpecularLighting',\n 'feTile', 'feTurbulence'\n] as const;\n\n// MathML Tags\nconst mathTags = [\n 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'mrow', 'mfrac', 'msqrt', 'mroot', 'msub', 'msup'\n] as const;\n\ntype Elements = {\n [K in typeof tags[number]]: ElementFactory;\n} & {\n [K in typeof svgTags[number] as `svg${Capitalize<K>}`]: ElementFactory;\n} & {\n [K in typeof mathTags[number] as `math${Capitalize<K>}`]: ElementFactory;\n} & {\n varElement: ElementFactory;\n};\n\nconst elements: Partial<Elements> = {};\n\ntags.forEach(tag => {\n (elements as any)[tag] = createElementFactory(tag);\n});\n\ncreatePrefixedFactories(svgTags, 'svg', elements);\ncreatePrefixedFactories(mathTags, 'math', elements);\n\n(elements as any).varElement = createElementFactory('var');\n\n// Export all element factories\nexport const {\n html, head, body, title, base, link, meta, style,\n address, article, aside, footer, header, h1, h2, h3, h4, h5, h6, main, nav, section,\n blockquote, dd, div, dl, dt, figcaption, figure, hr, li, ol, p, pre, ul,\n a, abbr, b, bdi, bdo, br, cite, code, data, dfn, em, i, kbd, mark, q,\n rp, rt, ruby, s, samp, small, span, strong, sub, sup, time, u, wbr,\n area, audio, img, map, track, video,\n embed, iframe, object, param, picture, portal, source,\n canvas, noscript, script,\n del, ins,\n caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr,\n button, datalist, fieldset, form, input, label, legend, meter,\n optgroup, option, output, progress, select, textarea,\n details, dialog, menu, summary,\n slot, template,\n svgSvg, svgCircle, svgRect, svgPath, svgLine, svgPolyline, svgPolygon, svgEllipse, svgG, svgText, svgTspan,\n svgDefs, svgLinearGradient, svgRadialGradient, svgStop, svgPattern, svgMask, svgClipPath, svgUse, svgSymbol,\n svgMarker, svgImage, svgForeignObject, svgAnimate, svgAnimateTransform, svgAnimateMotion, svgSet, svgFilter,\n svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting,\n svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting,\n svgFeTile, svgFeTurbulence,\n mathMath, mathMi, mathMn, mathMo, mathMs, mathMtext, mathMrow, mathMfrac, mathMsqrt, mathMroot, mathMsub, mathMsup,\n varElement\n} = elements as Elements;\nexport const el = elements;\n// Export elements object for dynamic access\nexport { elements };\n// Fragment element factory - groups children without a wrapper element\n// Similar to React's Fragment: <><div>1</div><div>2</div></>\nexport const frag: ElementFactory = function(...children: Child[]): VNode {\n const flatChildren: Child[] = [];\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n return { tagName: '', props: {}, children: flatChildren };\n} as ElementFactory;\n\n// DOM utility functions - Shorthand helpers for common document operations\nexport const doc = hasDocument ? document : undefined as any;\nexport const getEl = bindDocMethod(doc?.querySelector);\nexport const getEls = bindDocMethod(doc?.querySelectorAll);\nexport const createEl = bindDocMethod(doc?.createElement);\nexport const createSvgEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/2000/svg') : undefined as any;\nexport const createMathEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/1998/Math/MathML') : undefined as any;\nexport const fragment = bindDocMethod(doc?.createDocumentFragment);\nexport const textNode = bindDocMethod(doc?.createTextNode);\nexport const commentNode = bindDocMethod(doc?.createComment);\nexport const getElId = bindDocMethod(doc?.getElementById);\nexport const getElClass = bindDocMethod(doc?.getElementsByClassName);\nexport const getElTag = bindDocMethod(doc?.getElementsByTagName);\nexport const getElName = bindDocMethod(doc?.getElementsByName);","/**\n * Elit - Router - Client-side routing\n */\n\nimport type { VNode, Child, Props, State } from './types';\nimport { dom } from './dom';\n\nexport interface Route {\n path: string;\n component: (params: RouteParams) => VNode | Child;\n beforeEnter?: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void;\n}\n\nexport interface RouteParams {\n [key: string]: string;\n}\n\nexport interface RouteLocation {\n path: string;\n params: RouteParams;\n query: Record<string, string>;\n hash: string;\n}\n\nexport interface RouterOptions {\n mode?: 'history' | 'hash';\n base?: string;\n routes: Route[];\n notFound?: (params: RouteParams) => VNode | Child;\n}\n\nexport interface Router {\n currentRoute: State<RouteLocation>;\n mode: 'history' | 'hash';\n navigate: (path: string, replace?: boolean) => void;\n push: (path: string) => void;\n replace: (path: string) => void;\n back: () => void;\n forward: () => void;\n go: (delta: number) => void;\n beforeEach: (guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void) => void;\n destroy: () => void;\n}\n\n/**\n * Helper: Match route pattern against path\n */\nfunction matchRoute(pattern: string, path: string): RouteParams | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathParts = path.split('/').filter(Boolean);\n\n if (pattern.endsWith('*')) {\n const basePattern = pattern.slice(0, -1);\n if (path.startsWith(basePattern) || basePattern === '/' || pattern === '*') {\n return { '*': path.slice(basePattern.length) };\n }\n }\n\n if (patternParts.length !== pathParts.length) return null;\n\n const params: RouteParams = {};\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathPart = pathParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = decodeURIComponent(pathPart);\n } else if (patternPart !== pathPart) {\n return null;\n }\n }\n return params;\n}\n\n/**\n * Helper: Execute guard and handle result (eliminates duplication in navigate)\n */\nfunction executeGuard(\n guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void,\n to: RouteLocation,\n from: RouteLocation | null,\n navigate: (path: string, replace?: boolean) => void,\n replace = false\n): boolean {\n const result = guard(to, from);\n if (result === false) return false;\n if (typeof result === 'string') {\n navigate(result, replace);\n return false;\n }\n return true;\n}\n\n/**\n * Helper: Wrap component in VNode if needed (eliminates duplication in createRouterView)\n */\nfunction wrapComponent(component: VNode | Child): VNode {\n if (typeof component === 'object' && component !== null && 'tagName' in component) {\n return component as VNode;\n }\n return { tagName: 'span', props: {}, children: [component] };\n}\n\nexport function createRouter(options: RouterOptions): Router {\n const { mode = 'history', base = '', routes } = options;\n const globalGuards: Array<(to: RouteLocation, from: RouteLocation | null) => boolean | string | void> = [];\n\n const parseQuery = (search: string): Record<string, string> => {\n const query: Record<string, string> = {};\n const params = new URLSearchParams(search);\n params.forEach((value, key) => { query[key] = value; });\n return query;\n };\n\n const getCurrentPath = (): string => {\n if (mode === 'hash') {\n return window.location.hash.slice(1) || '/';\n }\n return window.location.pathname.replace(base, '') || '/';\n };\n\n const parseLocation = (path: string): RouteLocation => {\n const [pathPart, queryPart = ''] = path.split('?');\n const [cleanPath, hash = ''] = pathPart.split('#');\n return {\n path: cleanPath || '/',\n params: {},\n query: parseQuery(queryPart),\n hash: hash ? '#' + hash : ''\n };\n };\n\n const findRoute = (path: string): { route: Route; params: RouteParams } | null => {\n for (const route of routes) {\n const params = matchRoute(route.path, path);\n if (params !== null) {\n return { route, params };\n }\n }\n return null;\n };\n\n const currentRoute = dom.createState<RouteLocation>(parseLocation(getCurrentPath()));\n\n const navigate = (path: string, replace = false): void => {\n const location = parseLocation(path);\n const match = findRoute(location.path);\n\n if (match) {\n location.params = match.params;\n }\n\n for (const guard of globalGuards) {\n if (!executeGuard(guard, location, currentRoute.value, navigate, replace)) return;\n }\n\n if (match?.route.beforeEnter) {\n if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;\n }\n\n // Remove leading slash from path if base has trailing slash, or add slash if needed\n let urlPath = path;\n let url: string;\n if (mode === 'hash') {\n url = '#' + path;\n } else {\n // Ensure proper path joining\n const hasBaseSlash = base.endsWith('/');\n const hasPathSlash = path.startsWith('/');\n if (hasBaseSlash && hasPathSlash) {\n urlPath = path.slice(1); // Remove duplicate slash\n } else if (!hasBaseSlash && !hasPathSlash && path !== '/') {\n urlPath = '/' + path; // Add slash between\n }\n url = base + urlPath;\n }\n\n if (replace) {\n window.history.replaceState({ path }, '', url);\n } else {\n window.history.pushState({ path }, '', url);\n }\n\n currentRoute.value = location;\n };\n\n const handlePopState = (): void => {\n const path = getCurrentPath();\n const location = parseLocation(path);\n const match = findRoute(location.path);\n if (match) {\n location.params = match.params;\n }\n currentRoute.value = location;\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', handlePopState);\n }\n\n return {\n currentRoute,\n mode,\n navigate,\n push: (path: string) => navigate(path, false),\n replace: (path: string) => navigate(path, true),\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n go: (delta: number) => window.history.go(delta),\n beforeEach: (guard) => { globalGuards.push(guard); },\n destroy: () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', handlePopState);\n }\n currentRoute.destroy();\n }\n };\n}\n\n// RouterView component - renders current route\nexport function createRouterView(router: Router, options: RouterOptions): () => VNode {\n const { routes, notFound } = options;\n\n return (): VNode => {\n const location = router.currentRoute.value;\n const match = routes.find(r => matchRoute(r.path, location.path) !== null);\n\n if (match) {\n const params = matchRoute(match.path, location.path) || {};\n const component = match.component({ ...params, ...location.query });\n return wrapComponent(component);\n }\n\n if (notFound) {\n const component = notFound(location.params);\n return wrapComponent(component);\n }\n\n return { tagName: 'div', props: {}, children: ['404 - Not Found'] };\n };\n}\n\n// Link component - prevents default and uses router\nexport const routerLink = (router: Router, props: Props & { to: string }, ...children: Child[]): VNode => {\n // Use router.mode to determine href format\n const href = router.mode === 'hash' ? `#${props.to}` : props.to;\n\n return {\n tagName: 'a',\n props: {\n ...props,\n href,\n onclick: (e: MouseEvent) => {\n e.preventDefault();\n router.push(props.to);\n }\n },\n children\n };\n};\n","/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":"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","names":["el","s","i","fragment","head","text","throttle","container","render","html","style","styles","title","meta","script","container","data","fragment","s","el","styles","descendant","container","layer","style","tags","elements","i","i","i","base","location","data"]}
|
|
1
|
+
{"version":3,"sources":["../src/dom.ts","../src/state.ts","../src/style.ts","../src/el.ts","../src/router.ts","../src/hmr.ts"],"sourcesContent":["/**\n * Elit - DomNode Core Class\n */\n\nimport type { VNode, Child, Children, Props, State, StateOptions, VirtualListController, JsonNode, VNodeJson } from './types';\n\n/**\n * Helper: Resolve element from string ID or HTMLElement (eliminates duplication in render methods)\n */\nfunction resolveElement(rootElement: string | HTMLElement): HTMLElement | null {\n return typeof rootElement === 'string'\n ? document.getElementById(rootElement.replace('#', ''))\n : rootElement;\n}\n\n/**\n * Helper: Ensure element exists or throw error (eliminates duplication in validation)\n */\nfunction ensureElement(el: HTMLElement | null, rootElement: string | HTMLElement): HTMLElement {\n if (!el) {\n throw new Error(`Element not found: ${rootElement}`);\n }\n return el;\n}\n\n/**\n * Helper: Check if child should be skipped (eliminates duplication in child rendering)\n */\nfunction shouldSkipChild(child: any): boolean {\n return child == null || child === false;\n}\n\n/**\n * Helper: Check if value is primitive JSON type (eliminates duplication in JSON conversion)\n */\nfunction isPrimitiveJson(json: any): json is string | number | boolean | null | undefined {\n return json == null || typeof json === 'boolean' || typeof json === 'string' || typeof json === 'number';\n}\n\nexport class DomNode {\n private elementCache = new WeakMap<Element, boolean>();\n\n createElement(tagName: string, props: Props = {}, children: Children = []): VNode {\n return { tagName, props, children };\n }\n\n renderToDOM(vNode: Child, parent: HTMLElement | SVGElement | DocumentFragment): void {\n if (vNode == null || vNode === false) return;\n\n // Handle primitive values (strings, numbers)\n if (typeof vNode !== 'object') {\n parent.appendChild(document.createTextNode(String(vNode)));\n return;\n }\n\n // Handle arrays (Child[])\n if (Array.isArray(vNode)) {\n for (const child of vNode) {\n this.renderToDOM(child, parent);\n }\n return;\n }\n\n // Handle VNode\n const { tagName, props, children } = vNode;\n\n // Handle fragment (empty tagName) - render children directly to parent\n if (!tagName) {\n // Fragments don't have their own element, so skip ref handling\n // The ref will be handled by the wrapper element created by reactive()\n // Render children directly to parent\n for (const child of children) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n !shouldSkipChild(c) && this.renderToDOM(c, parent);\n }\n } else {\n this.renderToDOM(child, parent);\n }\n }\n return;\n }\n\n const isSVG = tagName === 'svg' || (tagName[0] === 's' && tagName[1] === 'v' && tagName[2] === 'g') ||\n (parent as any).namespaceURI === 'http://www.w3.org/2000/svg';\n\n const el = isSVG\n ? document.createElementNS('http://www.w3.org/2000/svg', tagName.replace('svg', '').toLowerCase() || tagName)\n : document.createElement(tagName);\n\n for (const key in props) {\n const value = props[key];\n if (value == null || value === false) continue;\n\n const c = key.charCodeAt(0);\n // class or className (c=99)\n if (c === 99 && (key.length < 6 || key[5] === 'N')) {\n const classValue = Array.isArray(value) ? value.join(' ') : value;\n isSVG ? (el as SVGElement).setAttribute('class', classValue) : (el as HTMLElement).className = classValue;\n }\n // style (s=115)\n else if (c === 115 && key.length === 5) {\n if (typeof value === 'string') {\n (el as HTMLElement).style.cssText = value;\n } else {\n const s = (el as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n }\n }\n // on* events (o=111, n=110)\n else if (c === 111 && key.charCodeAt(1) === 110) {\n (el as any)[key.toLowerCase()] = value;\n }\n // dangerouslySetInnerHTML (d=100)\n else if (c === 100 && key.length > 20) {\n (el as HTMLElement).innerHTML = value.__html;\n }\n // ref (r=114)\n else if (c === 114 && key.length === 3) {\n setTimeout(() => {\n typeof value === 'function' ? value(el as HTMLElement) : (value.current = el as HTMLElement);\n }, 0);\n }\n else {\n el.setAttribute(key, value === true ? '' : String(value));\n }\n }\n\n const len = children.length;\n if (!len) {\n parent.appendChild(el);\n return;\n }\n\n const renderChildren = (target: HTMLElement | SVGElement | DocumentFragment) => {\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n !shouldSkipChild(c) && this.renderToDOM(c, target);\n }\n } else {\n this.renderToDOM(child, target);\n }\n }\n };\n\n if (len > 30) {\n const fragment = document.createDocumentFragment();\n renderChildren(fragment);\n el.appendChild(fragment);\n } else {\n renderChildren(el);\n }\n\n parent.appendChild(el);\n }\n\n render(rootElement: string | HTMLElement, vNode: VNode): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n // Clear existing content before rendering\n el.innerHTML = '';\n\n if (vNode.children && vNode.children.length > 500) {\n const fragment = document.createDocumentFragment();\n this.renderToDOM(vNode, fragment);\n el.appendChild(fragment);\n } else {\n this.renderToDOM(vNode, el);\n }\n return el;\n }\n\n batchRender(rootElement: string | HTMLElement, vNodes: VNode[]): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n\n if (len > 3000) {\n const fragment = document.createDocumentFragment();\n let processed = 0;\n const chunkSize = 1500;\n\n const processChunk = (): void => {\n const end = Math.min(processed + chunkSize, len);\n for (let i = processed; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n processed = end;\n\n if (processed >= len) {\n el.appendChild(fragment);\n } else {\n requestAnimationFrame(processChunk);\n }\n };\n\n processChunk();\n } else {\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < len; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n el.appendChild(fragment);\n }\n return el;\n }\n\n renderChunked(\n rootElement: string | HTMLElement,\n vNodes: VNode[],\n chunkSize = 5000,\n onProgress?: (current: number, total: number) => void\n ): HTMLElement {\n const el = ensureElement(resolveElement(rootElement), rootElement);\n\n const len = vNodes.length;\n let index = 0;\n\n const renderChunk = (): void => {\n const end = Math.min(index + chunkSize, len);\n const fragment = document.createDocumentFragment();\n\n for (let i = index; i < end; i++) {\n this.renderToDOM(vNodes[i], fragment);\n }\n\n el.appendChild(fragment);\n index = end;\n\n if (onProgress) onProgress(index, len);\n\n if (index < len) {\n requestAnimationFrame(renderChunk);\n }\n };\n\n requestAnimationFrame(renderChunk);\n return el;\n }\n\n renderToHead(...vNodes: Array<VNode | VNode[]>): HTMLHeadElement | null {\n const head = document.head;\n if (head) {\n for (const vNode of vNodes.flat()) {\n vNode && this.renderToDOM(vNode, head);\n }\n }\n return head;\n }\n\n addStyle(cssText: string): HTMLStyleElement {\n const el = document.createElement('style');\n el.textContent = cssText;\n return document.head.appendChild(el);\n }\n\n addMeta(attrs: Record<string, string>): HTMLMetaElement {\n const el = document.createElement('meta');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n addLink(attrs: Record<string, string>): HTMLLinkElement {\n const el = document.createElement('link');\n for (const k in attrs) el.setAttribute(k, attrs[k]);\n return document.head.appendChild(el);\n }\n\n setTitle(text: string): string {\n return document.title = text;\n }\n\n // Reactive State Management\n createState<T>(initialValue: T, options: StateOptions = {}): State<T> {\n let value = initialValue;\n const listeners = new Set<(value: T) => void>();\n let updateTimer: NodeJS.Timeout | null = null;\n const { throttle = 0, deep = false } = options;\n\n const notify = () => listeners.forEach(fn => fn(value));\n\n const scheduleUpdate = () => {\n if (throttle > 0) {\n if (!updateTimer) {\n updateTimer = setTimeout(() => {\n updateTimer = null;\n notify();\n }, throttle);\n }\n } else {\n notify();\n }\n };\n\n return {\n get value() { return value; },\n set value(newValue: T) {\n const changed = deep ? JSON.stringify(value) !== JSON.stringify(newValue) : value !== newValue;\n if (changed) {\n value = newValue;\n scheduleUpdate();\n }\n },\n subscribe(fn: (value: T) => void) {\n listeners.add(fn);\n return () => listeners.delete(fn);\n },\n destroy() {\n listeners.clear();\n updateTimer && clearTimeout(updateTimer);\n }\n };\n }\n\n computed<T extends any[], R>(states: { [K in keyof T]: State<T[K]> }, computeFn: (...values: T) => R): State<R> {\n const values = states.map(s => s.value) as unknown as T;\n const result = this.createState(computeFn(...values));\n\n states.forEach((state, index) => {\n state.subscribe((newValue: any) => {\n values[index] = newValue;\n result.value = computeFn(...values);\n });\n });\n\n return result;\n }\n\n effect(stateFn: () => void): void {\n stateFn();\n }\n\n // Virtual scrolling helper for large lists\n createVirtualList<T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight = 50,\n bufferSize = 5\n ): VirtualListController {\n const viewportHeight = container.clientHeight;\n const totalHeight = items.length * itemHeight;\n let scrollTop = 0;\n\n const getVisibleRange = (): { start: number; end: number } => {\n const start = Math.max(0, Math.floor(scrollTop / itemHeight) - bufferSize);\n const end = Math.min(items.length, Math.ceil((scrollTop + viewportHeight) / itemHeight) + bufferSize);\n return { start, end };\n };\n\n const render = (): void => {\n const { start, end } = getVisibleRange();\n const wrapper = document.createElement('div');\n wrapper.style.cssText = `height:${totalHeight}px;position:relative`;\n\n for (let i = start; i < end; i++) {\n const itemEl = document.createElement('div');\n itemEl.style.cssText = `position:absolute;top:${i * itemHeight}px;height:${itemHeight}px;width:100%`;\n this.renderToDOM(renderItem(items[i], i), itemEl);\n wrapper.appendChild(itemEl);\n }\n\n container.innerHTML = '';\n container.appendChild(wrapper);\n };\n\n const scrollHandler = (): void => {\n scrollTop = container.scrollTop;\n requestAnimationFrame(render);\n };\n\n container.addEventListener('scroll', scrollHandler);\n\n render();\n return {\n render,\n destroy: () => {\n container.removeEventListener('scroll', scrollHandler);\n container.innerHTML = '';\n }\n };\n }\n\n // Lazy load components\n lazy<T extends any[], R>(loadFn: () => Promise<(...args: T) => R>): (...args: T) => Promise<R | VNode> {\n let component: ((...args: T) => R) | null = null;\n let loading = false;\n\n return async (...args: T): Promise<R | VNode> => {\n if (!component && !loading) {\n loading = true;\n component = await loadFn();\n loading = false;\n }\n return component ? component(...args) : { tagName: 'div', props: { class: 'loading' }, children: ['Loading...'] };\n };\n }\n\n // Memory management - cleanup unused elements\n cleanupUnusedElements(root: HTMLElement): number {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n const toRemove: Element[] = [];\n\n while (walker.nextNode()) {\n const node = walker.currentNode as Element;\n if (node.id && node.id.startsWith('r') && !this.elementCache.has(node)) {\n toRemove.push(node);\n }\n }\n\n toRemove.forEach(el => el.remove());\n return toRemove.length;\n }\n\n // Server-Side Rendering - convert VNode to HTML string\n renderToString(vNode: Child, options: { pretty?: boolean; indent?: number } = {}): string {\n const { pretty = false, indent = 0 } = options;\n const indentStr = pretty ? ' '.repeat(indent) : '';\n const newLine = pretty ? '\\n' : '';\n\n let resolvedVNode = this.resolveStateValue(vNode);\n resolvedVNode = this.unwrapReactive(resolvedVNode);\n\n if (Array.isArray(resolvedVNode)) {\n return resolvedVNode.map(child => this.renderToString(child, options)).join('');\n }\n\n if (typeof resolvedVNode !== 'object' || resolvedVNode === null) {\n if (resolvedVNode === null || resolvedVNode === undefined || resolvedVNode === false) {\n return '';\n }\n return this.escapeHtml(String(resolvedVNode));\n }\n\n const { tagName, props, children } = resolvedVNode;\n const isSelfClosing = this.isSelfClosingTag(tagName);\n\n let html = `${indentStr}<${tagName}`;\n\n const attrs = this.propsToAttributes(props);\n if (attrs) {\n html += ` ${attrs}`;\n }\n\n if (isSelfClosing) {\n html += ` />${newLine}`;\n return html;\n }\n\n html += '>';\n\n if (props.dangerouslySetInnerHTML) {\n html += props.dangerouslySetInnerHTML.__html;\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n if (children && children.length > 0) {\n const resolvedChildren = children.map((c: Child) => {\n const resolved = this.resolveStateValue(c);\n return this.unwrapReactive(resolved);\n });\n\n const hasComplexChildren = resolvedChildren.some(\n (c: any) => typeof c === 'object' && c !== null && !Array.isArray(c) && 'tagName' in c\n );\n\n if (pretty && hasComplexChildren) {\n html += newLine;\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty, indent: indent + 1 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty, indent: indent + 1 });\n }\n }\n html += indentStr;\n } else {\n for (const child of resolvedChildren) {\n if (shouldSkipChild(child)) continue;\n\n if (Array.isArray(child)) {\n for (const c of child) {\n if (!shouldSkipChild(c)) {\n html += this.renderToString(c, { pretty: false, indent: 0 });\n }\n }\n } else {\n html += this.renderToString(child, { pretty: false, indent: 0 });\n }\n }\n }\n }\n\n html += `</${tagName}>${newLine}`;\n return html;\n }\n\n private resolveStateValue(value: any): any {\n if (value && typeof value === 'object' && 'value' in value && 'subscribe' in value) {\n return value.value;\n }\n return value;\n }\n\n private isReactiveWrapper(vNode: any): boolean {\n if (!vNode || typeof vNode !== 'object' || !vNode.tagName) {\n return false;\n }\n return vNode.tagName === 'span' &&\n vNode.props?.id &&\n typeof vNode.props.id === 'string' &&\n vNode.props.id.match(/^r[a-z0-9]{9}$/);\n }\n\n private unwrapReactive(vNode: any): Child {\n if (!this.isReactiveWrapper(vNode)) {\n return vNode;\n }\n\n const children = vNode.children;\n if (!children || children.length === 0) {\n return '';\n }\n\n if (children.length === 1) {\n const child = children[0];\n\n if (child && typeof child === 'object' && child.tagName === 'span') {\n const props = child.props;\n const hasNoProps = !props || Object.keys(props).length === 0;\n const hasSingleStringChild = child.children &&\n child.children.length === 1 &&\n typeof child.children[0] === 'string';\n\n if (hasNoProps && hasSingleStringChild) {\n return child.children[0];\n }\n }\n\n return this.unwrapReactive(child);\n }\n\n return children.map((c: Child) => this.unwrapReactive(c));\n }\n\n private escapeHtml(text: string): string {\n const htmlEscapes: Record<string, string> = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n return text.replace(/[&<>\"']/g, char => htmlEscapes[char]);\n }\n\n private isSelfClosingTag(tagName: string): boolean {\n const selfClosingTags = new Set([\n 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input',\n 'link', 'meta', 'param', 'source', 'track', 'wbr'\n ]);\n return selfClosingTags.has(tagName.toLowerCase());\n }\n\n private propsToAttributes(props: Props): string {\n const attrs: string[] = [];\n\n for (const key in props) {\n if (key === 'children' || key === 'dangerouslySetInnerHTML' || key === 'ref') {\n continue;\n }\n\n let value = props[key];\n value = this.resolveStateValue(value);\n\n if (value == null || value === false) continue;\n\n if (key.startsWith('on') && typeof value === 'function') {\n continue;\n }\n\n if (key === 'className' || key === 'class') {\n const className = Array.isArray(value) ? value.join(' ') : value;\n if (className) {\n attrs.push(`class=\"${this.escapeHtml(String(className))}\"`);\n }\n continue;\n }\n\n if (key === 'style') {\n const styleStr = this.styleToString(value);\n if (styleStr) {\n attrs.push(`style=\"${this.escapeHtml(styleStr)}\"`);\n }\n continue;\n }\n\n if (value === true) {\n attrs.push(key);\n continue;\n }\n\n attrs.push(`${key}=\"${this.escapeHtml(String(value))}\"`);\n }\n\n return attrs.join(' ');\n }\n\n private styleToString(style: any): string {\n if (typeof style === 'string') {\n return style;\n }\n\n if (typeof style === 'object' && style !== null) {\n const styles: string[] = [];\n for (const key in style) {\n const cssKey = key.replace(/([A-Z])/g, '-$1').toLowerCase();\n styles.push(`${cssKey}:${style[key]}`);\n }\n return styles.join(';');\n }\n\n return '';\n }\n\n private isState(value: any): value is State<any> {\n return value && typeof value === 'object' && 'value' in value && 'subscribe' in value && typeof value.subscribe === 'function';\n }\n\n private reactiveNodes = new Map<State<any>, { node: Text | null, renderFn: (v: any) => Child }>();\n\n private createReactiveChild(state: State<any>, renderFn: (value: any) => Child): Child {\n const currentValue = renderFn(state.value);\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n const entry = { node: null as Text | null, renderFn };\n this.reactiveNodes.set(state, entry);\n\n state.subscribe(() => {\n if (entry.node && entry.node.parentNode) {\n const newValue = renderFn(state.value);\n entry.node.textContent = String(newValue ?? '');\n }\n });\n }\n\n return currentValue;\n }\n\n jsonToVNode(json: JsonNode | string | number | boolean | null | undefined | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tag, attributes = {}, children } = json;\n\n const props: Props = {};\n for (const key in attributes) {\n const value = attributes[key];\n if (key === 'class') {\n props.className = this.isState(value) ? value.value : value;\n } else {\n props[key] = this.isState(value) ? value.value : value;\n }\n }\n\n const childrenArray: Children = [];\n if (children != null) {\n if (Array.isArray(children)) {\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.jsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n } else if (this.isState(children)) {\n childrenArray.push(this.createReactiveChild(children, (v: any) => v));\n } else if (typeof children === 'object' && 'tag' in children) {\n const converted = this.jsonToVNode(children);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n } else {\n childrenArray.push(children as Child);\n }\n }\n\n return { tagName: tag, props, children: childrenArray };\n }\n\n vNodeJsonToVNode(json: VNodeJson | State<any>): Child {\n if (this.isState(json)) {\n return this.createReactiveChild(json, (v: any) => v);\n }\n\n if (isPrimitiveJson(json)) {\n return json as Child;\n }\n\n const { tagName, props = {}, children = [] } = json;\n\n const resolvedProps: Props = {};\n for (const key in props) {\n const value = props[key];\n resolvedProps[key] = this.isState(value) ? value.value : value;\n }\n\n const childrenArray: Children = [];\n for (const child of children) {\n if (this.isState(child)) {\n childrenArray.push(this.createReactiveChild(child, (v: any) => v));\n } else {\n const converted = this.vNodeJsonToVNode(child);\n if (converted != null && converted !== false) {\n childrenArray.push(converted);\n }\n }\n }\n\n return { tagName, props: resolvedProps, children: childrenArray };\n }\n\n renderJson(rootElement: string | HTMLElement, json: JsonNode): HTMLElement {\n const vNode = this.jsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderVNode(rootElement: string | HTMLElement, json: VNodeJson): HTMLElement {\n const vNode = this.vNodeJsonToVNode(json);\n if (!vNode || typeof vNode !== 'object' || !('tagName' in vNode)) {\n throw new Error('Invalid VNode JSON structure');\n }\n return this.render(rootElement, vNode as VNode);\n }\n\n renderJsonToString(json: JsonNode, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.jsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n renderVNodeToString(json: VNodeJson, options: { pretty?: boolean; indent?: number } = {}): string {\n const vNode = this.vNodeJsonToVNode(json);\n return this.renderToString(vNode, options);\n }\n\n\n // Generate complete HTML document as string (for SSR)\n renderToHTMLDocument(vNode: Child, options: {\n title?: string;\n meta?: Array<Record<string, string>>;\n links?: Array<Record<string, string>>;\n scripts?: Array<{ src?: string; content?: string; async?: boolean; defer?: boolean; type?: string }>;\n styles?: Array<{ href?: string; content?: string }>;\n lang?: string;\n head?: string;\n bodyAttrs?: Record<string, string>;\n pretty?: boolean;\n } = {}): string {\n const { title = '', meta = [], links = [], scripts = [], styles = [], lang = 'en', head = '', bodyAttrs = {}, pretty = false } = options;\n const nl = pretty ? '\\n' : '';\n const indent = pretty ? ' ' : '';\n const indent2 = pretty ? ' ' : '';\n\n let html = `<!DOCTYPE html>${nl}<html lang=\"${lang}\">${nl}${indent}<head>${nl}${indent2}<meta charset=\"UTF-8\">${nl}${indent2}<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">${nl}`;\n if (title) html += `${indent2}<title>${this.escapeHtml(title)}</title>${nl}`;\n\n for (const m of meta) {\n html += `${indent2}<meta`;\n for (const k in m) html += ` ${k}=\"${this.escapeHtml(m[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const l of links) {\n html += `${indent2}<link`;\n for (const k in l) html += ` ${k}=\"${this.escapeHtml(l[k])}\"`;\n html += `>${nl}`;\n }\n\n for (const s of styles) {\n if (s.href) {\n html += `${indent2}<link rel=\"stylesheet\" href=\"${this.escapeHtml(s.href)}\">${nl}`;\n } else if (s.content) {\n html += `${indent2}<style>${s.content}</style>${nl}`;\n }\n }\n\n if (head) html += head + nl;\n html += `${indent}</head>${nl}${indent}<body`;\n for (const k in bodyAttrs) html += ` ${k}=\"${this.escapeHtml(bodyAttrs[k])}\"`;\n html += `>${nl}`;\n html += this.renderToString(vNode, { pretty, indent: 2 });\n\n for (const script of scripts) {\n html += `${indent2}<script`;\n if (script.type) html += ` type=\"${this.escapeHtml(script.type)}\"`;\n if (script.async) html += ` async`;\n if (script.defer) html += ` defer`;\n if (script.src) {\n html += ` src=\"${this.escapeHtml(script.src)}\"></script>${nl}`;\n } else if (script.content) {\n html += `>${script.content}</script>${nl}`;\n } else {\n html += `></script>${nl}`;\n }\n }\n\n html += `${indent}</body>${nl}</html>`;\n return html;\n }\n\n // Expose elementCache for reactive updates\n getElementCache(): WeakMap<Element, boolean> {\n return this.elementCache;\n }\n}\n\nexport const dom = new DomNode();\n\n// Export helper functions for convenience\nexport const render = dom.render.bind(dom);\nexport const renderToString = dom.renderToString.bind(dom);\nexport const mount = render; // alias for render\n","/**\n * Elit - State Management\n */\n\nimport type { State, StateOptions, VNode, VirtualListController, Child, Props } from './types';\nimport { dom } from './dom';\n\n// State management helpers\nexport const createState = <T>(initial: T, options?: StateOptions): State<T> =>\n dom.createState(initial, options);\n\nexport const computed = <T extends any[], R>(\n states: { [K in keyof T]: State<T[K]> },\n fn: (...values: T) => R\n): State<R> => dom.computed(states, fn);\n\nexport const effect = (fn: () => void): void => dom.effect(fn);\n\n// Performance helpers\nexport const batchRender = (container: string | HTMLElement, vNodes: VNode[]): HTMLElement =>\n dom.batchRender(container, vNodes);\n\nexport const renderChunked = (\n container: string | HTMLElement,\n vNodes: VNode[],\n chunkSize?: number,\n onProgress?: (current: number, total: number) => void\n): HTMLElement => dom.renderChunked(container, vNodes, chunkSize, onProgress);\n\nexport const createVirtualList = <T>(\n container: HTMLElement,\n items: T[],\n renderItem: (item: T, index: number) => VNode,\n itemHeight?: number,\n bufferSize?: number\n): VirtualListController => dom.createVirtualList(container, items, renderItem, itemHeight, bufferSize);\n\nexport const lazy = <T extends any[], R>(loadFn: () => Promise<(...args: T) => R>) =>\n dom.lazy(loadFn);\n\nexport const cleanupUnused = (root: HTMLElement): number =>\n dom.cleanupUnusedElements(root);\n\n// Throttle helper\nexport const throttle = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n fn(...args);\n }, delay);\n }\n };\n};\n\n// Debounce helper\nexport const debounce = <T extends any[]>(fn: (...args: T) => void, delay: number) => {\n let timer: NodeJS.Timeout | null = null;\n return (...args: T) => {\n timer && clearTimeout(timer);\n timer = setTimeout(() => fn(...args), delay);\n };\n};\n\n// ===== Shared State - syncs with elit-server =====\n\ntype StateChangeCallback<T = any> = (value: T, oldValue: T) => void;\n\ninterface StateMessage {\n type: 'state:init' | 'state:update' | 'state:subscribe' | 'state:unsubscribe' | 'state:change';\n key: string;\n value?: any;\n timestamp?: number;\n}\n\n/**\n * Shared State - syncs with elit-server\n */\nexport class SharedState<T = any> {\n private localState: State<T>;\n private ws: WebSocket | null = null;\n private pendingUpdates: T[] = [];\n private previousValue: T;\n\n constructor(\n public readonly key: string,\n defaultValue: T,\n private wsUrl?: string\n ) {\n this.localState = createState(defaultValue);\n this.previousValue = defaultValue;\n this.connect();\n }\n\n /**\n * Get current value\n */\n get value(): T {\n return this.localState.value;\n }\n\n /**\n * Set new value and sync to server\n */\n set value(newValue: T) {\n this.previousValue = this.localState.value;\n this.localState.value = newValue;\n this.sendToServer(newValue);\n }\n\n /**\n * Get the underlying Elit State (for reactive binding)\n */\n get state(): State<T> {\n return this.localState;\n }\n\n /**\n * Subscribe to changes (returns Elit State for reactive)\n */\n onChange(callback: StateChangeCallback<T>): () => void {\n return this.localState.subscribe((newValue) => {\n const oldValue = this.previousValue;\n this.previousValue = newValue;\n callback(newValue, oldValue);\n });\n }\n\n /**\n * Update value using a function\n */\n update(updater: (current: T) => T): void {\n this.value = updater(this.value);\n }\n\n /**\n * Connect to WebSocket\n */\n private connect(): void {\n if (typeof window === 'undefined') return;\n\n const url = this.wsUrl || `ws://${location.host}`;\n this.ws = new WebSocket(url);\n\n this.ws.addEventListener('open', () => {\n this.subscribe();\n\n // Send pending updates\n while (this.pendingUpdates.length > 0) {\n const value = this.pendingUpdates.shift();\n this.sendToServer(value!);\n }\n });\n\n this.ws.addEventListener('message', (event) => {\n this.handleMessage(event.data);\n });\n\n this.ws.addEventListener('close', () => {\n // Reconnect after delay\n setTimeout(() => this.connect(), 1000);\n });\n\n this.ws.addEventListener('error', (error) => {\n console.error('[SharedState] WebSocket error:', error);\n });\n }\n\n /**\n * Subscribe to server state\n */\n private subscribe(): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n\n this.ws.send(JSON.stringify({\n type: 'state:subscribe',\n key: this.key\n }));\n }\n\n /**\n * Handle message from server\n */\n private handleMessage(data: string): void {\n try {\n const msg = JSON.parse(data) as StateMessage;\n\n if (msg.key !== this.key) return;\n\n if (msg.type === 'state:init' || msg.type === 'state:update') {\n // Update local state without sending back to server\n this.localState.value = msg.value;\n }\n } catch (error) {\n // Ignore parse errors (could be HMR messages)\n }\n }\n\n /**\n * Send value to server\n */\n private sendToServer(value: T): void {\n if (!this.ws) return;\n\n if (this.ws.readyState !== WebSocket.OPEN) {\n // Queue update for when connection is ready\n this.pendingUpdates.push(value);\n return;\n }\n\n this.ws.send(JSON.stringify({\n type: 'state:change',\n key: this.key,\n value\n }));\n }\n\n /**\n * Disconnect\n */\n disconnect(): void {\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n\n /**\n * Destroy state and cleanup\n */\n destroy(): void {\n this.disconnect();\n this.localState.destroy();\n }\n}\n\n/**\n * Create a shared state that syncs with elit-server\n */\nexport function createSharedState<T>(\n key: string,\n defaultValue: T,\n wsUrl?: string\n): SharedState<T> {\n return new SharedState(key, defaultValue, wsUrl);\n}\n\n/**\n * Shared State Manager for managing multiple shared states\n */\nclass SharedStateManager {\n private states = new Map<string, SharedState<any>>();\n\n /**\n * Create or get a shared state\n */\n create<T>(key: string, defaultValue: T, wsUrl?: string): SharedState<T> {\n if (this.states.has(key)) {\n return this.states.get(key) as SharedState<T>;\n }\n\n const state = new SharedState<T>(key, defaultValue, wsUrl);\n this.states.set(key, state);\n return state;\n }\n\n /**\n * Get existing state\n */\n get<T>(key: string): SharedState<T> | undefined {\n return this.states.get(key) as SharedState<T>;\n }\n\n /**\n * Delete a state\n */\n delete(key: string): boolean {\n const state = this.states.get(key);\n if (state) {\n state.destroy();\n return this.states.delete(key);\n }\n return false;\n }\n\n /**\n * Clear all states\n */\n clear(): void {\n this.states.forEach(state => state.destroy());\n this.states.clear();\n }\n}\n\n// Export singleton instance\nexport const sharedStateManager = new SharedStateManager();\n\n// ===== Reactive Rendering Helpers =====\n\n// Helper function to schedule RAF updates (reused in reactive and reactiveAs)\nconst scheduleRAFUpdate = (rafId: number | null, updateFn: () => void): number => {\n rafId && cancelAnimationFrame(rafId);\n return requestAnimationFrame(() => {\n updateFn();\n });\n};\n\n// Helper function to render content to fragment (reused in reactive and reactiveAs)\nconst renderToFragment = (content: VNode | Child | Child[], isVNode?: boolean): DocumentFragment => {\n const fragment = document.createDocumentFragment();\n\n if (Array.isArray(content)) {\n // Handle array of children\n for (const child of content) {\n dom.renderToDOM(child, fragment);\n }\n } else if (isVNode && content && typeof content === 'object' && 'tagName' in content) {\n const { children } = content as VNode;\n for (const child of children) {\n dom.renderToDOM(child, fragment);\n }\n } else {\n dom.renderToDOM(content, fragment);\n }\n\n return fragment;\n};\n\n// Helper function to update element props (reused in reactive)\nconst updateElementProps = (element: HTMLElement | SVGElement, props: Props): void => {\n for (const key in props) {\n const value = props[key];\n if (key === 'ref') continue;\n\n if (key === 'class' || key === 'className') {\n (element as HTMLElement).className = Array.isArray(value) ? value.join(' ') : (value || '');\n } else if (key === 'style' && typeof value === 'object') {\n const s = (element as HTMLElement).style;\n for (const k in value) (s as any)[k] = value[k];\n } else if (key.startsWith('on')) {\n (element as any)[key.toLowerCase()] = value;\n } else if (value != null && value !== false) {\n element.setAttribute(key, String(value === true ? '' : value));\n } else {\n element.removeAttribute(key);\n }\n }\n};\n\n// Reactive element helpers\nexport const reactive = <T>(state: State<T>, renderFn: (value: T) => VNode | Child | Child[]): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n let placeholder: Comment | null = null;\n let isInDOM = true;\n\n const initialResult = renderFn(state.value);\n const isVNodeResult = initialResult && typeof initialResult === 'object' && 'tagName' in initialResult;\n const initialIsNull = initialResult == null || initialResult === false;\n\n const updateElement = () => {\n if (!elementRef && !placeholder) return;\n\n const newResult = renderFn(state.value);\n const resultIsNull = newResult == null || newResult === false;\n\n if (resultIsNull) {\n if (isInDOM && elementRef) {\n placeholder = document.createComment('reactive');\n elementRef.parentNode?.replaceChild(placeholder, elementRef);\n isInDOM = false;\n }\n } else {\n if (!isInDOM && placeholder && elementRef) {\n placeholder.parentNode?.replaceChild(elementRef, placeholder);\n placeholder = null;\n isInDOM = true;\n }\n\n if (elementRef) {\n const isCurrentVNode = !!(isVNodeResult && newResult && typeof newResult === 'object' && 'tagName' in newResult);\n if (isCurrentVNode) {\n const { props } = newResult as VNode;\n updateElementProps(elementRef, props);\n }\n const fragment = renderToFragment(newResult as any, isCurrentVNode);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n dom.getElementCache().set(elementRef, true);\n }\n }\n };\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n updateElement();\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n if (initialIsNull && el.parentNode) {\n placeholder = document.createComment('reactive');\n el.parentNode.replaceChild(placeholder, el);\n isInDOM = false;\n }\n };\n\n if (isVNodeResult) {\n const vnode = initialResult as VNode;\n return {\n tagName: vnode.tagName,\n props: { ...vnode.props, ref: refCallback },\n children: vnode.children\n };\n }\n\n // Handle array result - wrap in fragment-like VNode\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n // Use span with display: contents as wrapper (doesn't affect layout)\n return { tagName: 'span', props: { ref: refCallback, style: { display: 'contents' } }, children: initialChildren };\n};\n\n// Reactive element with custom wrapper tag\nexport const reactiveAs = <T>(\n tagName: string,\n state: State<T>,\n renderFn: (value: T) => VNode | Child | Child[],\n props: Props = {}\n): VNode => {\n let rafId: number | null = null;\n let elementRef: HTMLElement | SVGElement | null = null;\n\n state.subscribe(() => {\n rafId = scheduleRAFUpdate(rafId, () => {\n if (elementRef) {\n const newResult = renderFn(state.value);\n\n if (newResult == null || newResult === false) {\n (elementRef as HTMLElement).style.display = 'none';\n elementRef.textContent = '';\n } else {\n (elementRef as HTMLElement).style.display = '';\n const fragment = renderToFragment(newResult as any, false);\n elementRef.textContent = '';\n elementRef.appendChild(fragment);\n }\n dom.getElementCache().set(elementRef, true);\n }\n rafId = null;\n });\n });\n\n const refCallback = (el: HTMLElement | SVGElement) => {\n elementRef = el;\n };\n\n const initialResult = renderFn(state.value);\n const initialChildren = Array.isArray(initialResult) ? initialResult : [initialResult];\n\n return { tagName, props: { ...props, ref: refCallback }, children: initialChildren };\n};\n\nexport const text = (state: State<any> | any): VNode | string =>\n (state && state.value !== undefined)\n ? reactive(state, v => ({ tagName: 'span', props: {}, children: [String(v)] }))\n : String(state);\n\nexport const bindValue = <T extends string | number>(state: State<T>): Props => ({\n value: state.value,\n oninput: (e: Event) => { state.value = (e.target as HTMLInputElement).value as T; }\n});\n\nexport const bindChecked = (state: State<boolean>): Props => ({\n checked: state.value,\n onchange: (e: Event) => { state.value = (e.target as HTMLInputElement).checked; }\n});\n","/**\n * Elit - CreateStyle CSS Generation System\n */\n\nexport interface CSSVariable {\n name: string;\n value: string;\n toString(): string;\n}\n\nexport interface CSSRule {\n selector: string;\n styles: Record<string, string | number>;\n nested?: CSSRule[];\n type: 'tag' | 'class' | 'id' | 'pseudo-class' | 'pseudo-element' | 'name' | 'custom' | 'media' | 'attribute';\n}\n\nexport interface MediaRule {\n type: string;\n condition: string;\n rules: CSSRule[];\n}\n\nexport interface KeyframeStep {\n step: string | number;\n styles: Record<string, string | number>;\n}\n\nexport interface Keyframes {\n name: string;\n steps: KeyframeStep[];\n}\n\nexport interface FontFace {\n fontFamily: string;\n src: string;\n fontWeight?: string | number;\n fontStyle?: string;\n fontDisplay?: string;\n unicodeRange?: string;\n}\n\nexport interface ContainerRule {\n name?: string;\n condition: string;\n rules: CSSRule[];\n}\n\nexport interface SupportsRule {\n condition: string;\n rules: CSSRule[];\n}\n\nexport interface LayerRule {\n name: string;\n rules: CSSRule[];\n}\n\nexport class CreateStyle {\n private variables: CSSVariable[] = [];\n private rules: CSSRule[] = [];\n private mediaRules: MediaRule[] = [];\n private keyframes: Keyframes[] = [];\n private fontFaces: FontFace[] = [];\n private imports: string[] = [];\n private containerRules: ContainerRule[] = [];\n private supportsRules: SupportsRule[] = [];\n private layerRules: LayerRule[] = [];\n private _layerOrder: string[] = [];\n\n // CSS Variables\n addVar(name: string, value: string): CSSVariable {\n const cssVar: CSSVariable = {\n name: name.startsWith('--') ? name : `--${name}`,\n value,\n toString() { return `var(${this.name})`; }\n };\n this.variables.push(cssVar);\n return cssVar;\n }\n\n var(variable: CSSVariable | string, fallback?: string): string {\n const varName = typeof variable === 'string'\n ? (variable.startsWith('--') ? variable : `--${variable}`)\n : variable.name;\n return fallback ? `var(${varName}, ${fallback})` : `var(${varName})`;\n }\n\n // Basic Selectors\n addTag(tag: string, styles: Record<string, string | number>): CSSRule {\n const rule: CSSRule = { selector: tag, styles, type: 'tag' };\n this.rules.push(rule);\n return rule;\n }\n\n addClass(name: string, styles: Record<string, string | number>): CSSRule {\n const selector = name.startsWith('.') ? name : `.${name}`;\n const rule: CSSRule = { selector, styles, type: 'class' };\n this.rules.push(rule);\n return rule;\n }\n\n addId(name: string, styles: Record<string, string | number>): CSSRule {\n const selector = name.startsWith('#') ? name : `#${name}`;\n const rule: CSSRule = { selector, styles, type: 'id' };\n this.rules.push(rule);\n return rule;\n }\n\n // Pseudo Selectors\n addPseudoClass(pseudo: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n const pseudoClass = pseudo.startsWith(':') ? pseudo : `:${pseudo}`;\n const selector = baseSelector ? `${baseSelector}${pseudoClass}` : pseudoClass;\n const rule: CSSRule = { selector, styles, type: 'pseudo-class' };\n this.rules.push(rule);\n return rule;\n }\n\n addPseudoElement(pseudo: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n const pseudoElement = pseudo.startsWith('::') ? pseudo : `::${pseudo}`;\n const selector = baseSelector ? `${baseSelector}${pseudoElement}` : pseudoElement;\n const rule: CSSRule = { selector, styles, type: 'pseudo-element' };\n this.rules.push(rule);\n return rule;\n }\n\n // Attribute Selectors\n addAttribute(attr: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n const attrSelector = attr.startsWith('[') ? attr : `[${attr}]`;\n const selector = baseSelector ? `${baseSelector}${attrSelector}` : attrSelector;\n const rule: CSSRule = { selector, styles, type: 'attribute' };\n this.rules.push(rule);\n return rule;\n }\n\n attrEquals(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}=\"${value}\"`, styles, baseSelector);\n }\n\n attrContainsWord(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}~=\"${value}\"`, styles, baseSelector);\n }\n\n attrStartsWith(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}^=\"${value}\"`, styles, baseSelector);\n }\n\n attrEndsWith(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}$=\"${value}\"`, styles, baseSelector);\n }\n\n attrContains(attr: string, value: string, styles: Record<string, string | number>, baseSelector?: string): CSSRule {\n return this.addAttribute(`${attr}*=\"${value}\"`, styles, baseSelector);\n }\n\n // Combinator Selectors\n descendant(ancestor: string, descendant: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${ancestor} ${descendant}`, styles);\n }\n\n child(parent: string, childSel: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${parent} > ${childSel}`, styles);\n }\n\n adjacentSibling(element: string, sibling: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${element} + ${sibling}`, styles);\n }\n\n generalSibling(element: string, sibling: string, styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(`${element} ~ ${sibling}`, styles);\n }\n\n multiple(selectors: string[], styles: Record<string, string | number>): CSSRule {\n return this.createAndAddRule(selectors.join(', '), styles);\n }\n\n // Nesting (BEM-style)\n addName(name: string, styles: Record<string, string | number>): CSSRule {\n const selector = name.startsWith('--') ? `&${name}` : `&--${name}`;\n const rule: CSSRule = { selector, styles, type: 'name' };\n return rule;\n }\n\n nesting(parentRule: CSSRule, ...childRules: CSSRule[]): CSSRule {\n parentRule.nested = childRules;\n return parentRule;\n }\n\n // @keyframes - Animations\n keyframe(name: string, steps: Record<string | number, Record<string, string | number>>): Keyframes {\n const keyframeSteps: KeyframeStep[] = Object.entries(steps).map(([step, styles]) => ({\n step: step === 'from' ? 'from' : step === 'to' ? 'to' : `${step}%`,\n styles\n }));\n const kf: Keyframes = { name, steps: keyframeSteps };\n this.keyframes.push(kf);\n return kf;\n }\n\n keyframeFromTo(name: string, from: Record<string, string | number>, to: Record<string, string | number>): Keyframes {\n return this.keyframe(name, { from, to });\n }\n\n // @font-face - Custom Fonts\n fontFace(options: FontFace): FontFace {\n this.fontFaces.push(options);\n return options;\n }\n\n // @import - Import Stylesheets\n import(url: string, mediaQuery?: string): string {\n const importRule = mediaQuery ? `@import url(\"${url}\") ${mediaQuery};` : `@import url(\"${url}\");`;\n this.imports.push(importRule);\n return importRule;\n }\n\n // @media - Media Queries\n media(type: string, condition: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type, condition, rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n mediaScreen(condition: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('screen', condition, rules);\n }\n\n mediaPrint(rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('print', '', rules);\n }\n\n mediaMinWidth(minWidth: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('screen', `min-width: ${minWidth}`, rules);\n }\n\n mediaMaxWidth(maxWidth: string, rules: Record<string, Record<string, string | number>>): MediaRule {\n return this.media('screen', `max-width: ${maxWidth}`, rules);\n }\n\n mediaDark(rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type: '', condition: 'prefers-color-scheme: dark', rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n mediaLight(rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type: '', condition: 'prefers-color-scheme: light', rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n mediaReducedMotion(rules: Record<string, Record<string, string | number>>): MediaRule {\n const mediaRule: MediaRule = { type: '', condition: 'prefers-reduced-motion: reduce', rules: this.rulesToCSSRules(rules) };\n this.mediaRules.push(mediaRule);\n return mediaRule;\n }\n\n // @container - Container Queries\n container(condition: string, rules: Record<string, Record<string, string | number>>, name?: string): ContainerRule {\n const containerRule: ContainerRule = { name, condition, rules: this.rulesToCSSRules(rules) };\n this.containerRules.push(containerRule);\n return containerRule;\n }\n\n addContainer(name: string, styles: Record<string, string | number>): CSSRule {\n const containerStyles = { ...styles, containerName: name };\n return this.addClass(name, containerStyles);\n }\n\n // @supports - Feature Queries\n supports(condition: string, rules: Record<string, Record<string, string | number>>): SupportsRule {\n const supportsRule: SupportsRule = { condition, rules: this.rulesToCSSRules(rules) };\n this.supportsRules.push(supportsRule);\n return supportsRule;\n }\n\n // @layer - Cascade Layers\n layerOrder(...layers: string[]): void {\n this._layerOrder = layers;\n }\n\n layer(name: string, rules: Record<string, Record<string, string | number>>): LayerRule {\n const layerRule: LayerRule = { name, rules: this.rulesToCSSRules(rules) };\n this.layerRules.push(layerRule);\n return layerRule;\n }\n\n // Custom Rules\n add(rules: Record<string, Record<string, string | number>>): CSSRule[] {\n const cssRules: CSSRule[] = Object.entries(rules).map(([selector, styles]) => {\n const rule: CSSRule = { selector, styles, type: 'custom' };\n this.rules.push(rule);\n return rule;\n });\n return cssRules;\n }\n\n important(value: string | number): string {\n return `${value} !important`;\n }\n\n // Utility Methods\n private toKebabCase(str: string): string {\n return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n }\n\n // Helper: Create and add rule (eliminates duplication in combinator selectors)\n private createAndAddRule(selector: string, styles: Record<string, string | number>, type: CSSRule['type'] = 'custom'): CSSRule {\n const rule: CSSRule = { selector, styles, type };\n this.rules.push(rule);\n return rule;\n }\n\n // Helper: Convert rules object to CSSRule array (eliminates duplication in media/container/supports/layer)\n private rulesToCSSRules(rules: Record<string, Record<string, string | number>>): CSSRule[] {\n return Object.entries(rules).map(([selector, styles]) => ({\n selector,\n styles,\n type: 'custom' as const\n }));\n }\n\n // Helper: Render rules with indentation (eliminates duplication in render methods)\n private renderRulesWithIndent(rules: CSSRule[], indent: string = ' '): string {\n return rules.map(rule => this.renderRule(rule, indent)).join('\\n');\n }\n\n private stylesToString(styles: Record<string, string | number>, indent: string = ' '): string {\n return Object.entries(styles)\n .map(([prop, value]) => {\n const cssValue = typeof value === 'object' && value !== null && 'name' in value\n ? `var(${(value as CSSVariable).name})`\n : value;\n return `${indent}${this.toKebabCase(prop)}: ${cssValue};`;\n })\n .join('\\n');\n }\n\n private renderRule(rule: CSSRule, indent: string = ''): string {\n let css = `${indent}${rule.selector} {\\n${this.stylesToString(rule.styles, indent + ' ')}\\n`;\n\n if (rule.nested && rule.nested.length > 0) {\n for (const nestedRule of rule.nested) {\n const nestedSelector = nestedRule.selector.startsWith('&')\n ? nestedRule.selector.replace(/&/g, rule.selector)\n : `${rule.selector} ${nestedRule.selector}`;\n css += `\\n${indent}${nestedSelector} {\\n${this.stylesToString(nestedRule.styles, indent + ' ')}\\n${indent}}\\n`;\n }\n }\n\n css += `${indent}}`;\n return css;\n }\n\n private renderMediaRule(media: MediaRule): string {\n const condition = media.type && media.condition\n ? `${media.type} and (${media.condition})`\n : media.type\n ? media.type\n : `(${media.condition})`;\n return `@media ${condition} {\\n${this.renderRulesWithIndent(media.rules)}\\n}`;\n }\n\n private renderKeyframes(kf: Keyframes): string {\n let css = `@keyframes ${kf.name} {\\n`;\n for (const step of kf.steps) {\n css += ` ${step.step} {\\n${this.stylesToString(step.styles, ' ')}\\n }\\n`;\n }\n css += '}';\n return css;\n }\n\n private renderFontFace(ff: FontFace): string {\n let css = '@font-face {\\n';\n css += ` font-family: \"${ff.fontFamily}\";\\n`;\n css += ` src: ${ff.src};\\n`;\n if (ff.fontWeight) css += ` font-weight: ${ff.fontWeight};\\n`;\n if (ff.fontStyle) css += ` font-style: ${ff.fontStyle};\\n`;\n if (ff.fontDisplay) css += ` font-display: ${ff.fontDisplay};\\n`;\n if (ff.unicodeRange) css += ` unicode-range: ${ff.unicodeRange};\\n`;\n css += '}';\n return css;\n }\n\n private renderContainerRule(container: ContainerRule): string {\n const nameStr = container.name ? `${container.name} ` : '';\n return `@container ${nameStr}(${container.condition}) {\\n${this.renderRulesWithIndent(container.rules)}\\n}`;\n }\n\n private renderSupportsRule(supports: SupportsRule): string {\n return `@supports (${supports.condition}) {\\n${this.renderRulesWithIndent(supports.rules)}\\n}`;\n }\n\n private renderLayerRule(layer: LayerRule): string {\n return `@layer ${layer.name} {\\n${this.renderRulesWithIndent(layer.rules)}\\n}`;\n }\n\n // Render Output\n render(...additionalRules: (CSSRule | CSSRule[] | MediaRule | Keyframes | ContainerRule | SupportsRule | LayerRule | undefined | null)[]): string {\n const parts: string[] = [];\n\n if (this.imports.length > 0) {\n parts.push(this.imports.join('\\n'));\n }\n\n if (this._layerOrder.length > 0) {\n parts.push(`@layer ${this._layerOrder.join(', ')};`);\n }\n\n if (this.variables.length > 0) {\n const varDeclarations = this.variables\n .map(v => ` ${v.name}: ${v.value};`)\n .join('\\n');\n parts.push(`:root {\\n${varDeclarations}\\n}`);\n }\n\n for (const ff of this.fontFaces) {\n parts.push(this.renderFontFace(ff));\n }\n\n for (const kf of this.keyframes) {\n parts.push(this.renderKeyframes(kf));\n }\n\n const allRules: CSSRule[] = [...this.rules];\n const allMediaRules: MediaRule[] = [...this.mediaRules];\n const allKeyframes: Keyframes[] = [];\n const allContainerRules: ContainerRule[] = [...this.containerRules];\n const allSupportsRules: SupportsRule[] = [...this.supportsRules];\n const allLayerRules: LayerRule[] = [...this.layerRules];\n\n for (const item of additionalRules) {\n if (!item) continue;\n if (Array.isArray(item)) {\n allRules.push(...item);\n } else if ('condition' in item && 'rules' in item && !('name' in item && 'steps' in item)) {\n if ('type' in item) {\n allMediaRules.push(item as MediaRule);\n } else if ('name' in item && typeof (item as any).name === 'string') {\n allContainerRules.push(item as ContainerRule);\n } else {\n allSupportsRules.push(item as SupportsRule);\n }\n } else if ('name' in item && 'steps' in item) {\n allKeyframes.push(item as Keyframes);\n } else if ('name' in item && 'rules' in item) {\n allLayerRules.push(item as LayerRule);\n } else {\n allRules.push(item as CSSRule);\n }\n }\n\n for (const kf of allKeyframes) {\n parts.push(this.renderKeyframes(kf));\n }\n\n for (const layer of allLayerRules) {\n parts.push(this.renderLayerRule(layer));\n }\n\n for (const rule of allRules) {\n parts.push(this.renderRule(rule));\n }\n\n for (const supports of allSupportsRules) {\n parts.push(this.renderSupportsRule(supports));\n }\n\n for (const container of allContainerRules) {\n parts.push(this.renderContainerRule(container));\n }\n\n for (const media of allMediaRules) {\n parts.push(this.renderMediaRule(media));\n }\n\n return parts.join('\\n\\n');\n }\n\n inject(styleId?: string): HTMLStyleElement {\n const css = this.render();\n const style = document.createElement('style');\n if (styleId) style.id = styleId;\n style.textContent = css;\n document.head.appendChild(style);\n return style;\n }\n\n clear(): void {\n this.variables = [];\n this.rules = [];\n this.mediaRules = [];\n this.keyframes = [];\n this.fontFaces = [];\n this.imports = [];\n this.containerRules = [];\n this.supportsRules = [];\n this.layerRules = [];\n this._layerOrder = [];\n }\n}\n\nexport const styles = new CreateStyle();\n\n\nexport const {\n addVar, var: getVar,\n addTag, addClass, addId,\n addPseudoClass, addPseudoElement, addAttribute, attrEquals, attrContainsWord, attrStartsWith, attrEndsWith, attrContains,\n descendant, child: childStyle, adjacentSibling, generalSibling, multiple: multipleStyle,\n addName, nesting,\n keyframe, keyframeFromTo,\n fontFace,\n import: importStyle,\n media: mediaStyle,\n mediaScreen, mediaPrint, mediaMinWidth, mediaMaxWidth, mediaDark, mediaLight, mediaReducedMotion,\n container, addContainer,\n supports: supportsStyle,\n layerOrder, layer,\n add: addStyle, important,\n render: renderStyle, inject: injectStyle, clear: clearStyle\n} = styles;\n\nexport default styles;","/**\n * Elit - Element Factories\n */\n\nimport type { VNode, Child, Props, ElementFactory } from './types';\n\n/**\n * Helper: Check if document is available (eliminates duplication in document checks)\n */\nconst hasDocument = typeof document !== 'undefined';\n\n/**\n * Helper: Capitalize first letter (eliminates duplication in tag name processing)\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\n/**\n * Helper: Bind document method safely (eliminates duplication in document method binding)\n */\nfunction bindDocMethod<T extends Function>(method: T | undefined): T | undefined {\n return hasDocument && method ? method.bind(doc) : undefined as any;\n}\n\n/**\n * Helper: Create prefixed element factories (eliminates duplication in factory creation)\n */\nfunction createPrefixedFactories(tags: readonly string[], prefix: string, elements: any): void {\n tags.forEach(tag => {\n const name = prefix + capitalize(tag);\n elements[name] = createElementFactory(tag);\n });\n}\n\nexport const createElementFactory = (tag: string): ElementFactory => {\n return function(props?: Props | Child | null, ...rest: Child[]): VNode {\n if (!arguments.length) return { tagName: tag, props: {}, children: [] };\n\n const isState = props && typeof props === 'object' && 'value' in props && 'subscribe' in props;\n const isVNode = props && typeof props === 'object' && 'tagName' in props;\n const isChild = typeof props !== 'object' || Array.isArray(props) || props === null || isState || isVNode;\n\n const actualProps: Props = isChild ? {} : props as Props;\n const args: Child[] = isChild ? [props as Child, ...rest] : rest;\n\n if (!args.length) return { tagName: tag, props: actualProps, children: [] };\n\n const flatChildren: Child[] = [];\n for (let i = 0, len = args.length; i < len; i++) {\n const child = args[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n\n return { tagName: tag, props: actualProps, children: flatChildren };\n } as ElementFactory;\n};\n\n// HTML Tags\nconst tags = [\n 'html', 'head', 'body', 'title', 'base', 'link', 'meta', 'style',\n 'address', 'article', 'aside', 'footer', 'header', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'main', 'nav', 'section',\n 'blockquote', 'dd', 'div', 'dl', 'dt', 'figcaption', 'figure', 'hr', 'li', 'ol', 'p', 'pre', 'ul',\n 'a', 'abbr', 'b', 'bdi', 'bdo', 'br', 'cite', 'code', 'data', 'dfn', 'em', 'i', 'kbd', 'mark', 'q',\n 'rp', 'rt', 'ruby', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'time', 'u', 'wbr',\n 'area', 'audio', 'img', 'map', 'track', 'video',\n 'embed', 'iframe', 'object', 'param', 'picture', 'portal', 'source',\n 'canvas', 'noscript', 'script',\n 'del', 'ins',\n 'caption', 'col', 'colgroup', 'table', 'tbody', 'td', 'tfoot', 'th', 'thead', 'tr',\n 'button', 'datalist', 'fieldset', 'form', 'input', 'label', 'legend', 'meter',\n 'optgroup', 'option', 'output', 'progress', 'select', 'textarea',\n 'details', 'dialog', 'menu', 'summary',\n 'slot', 'template'\n] as const;\n\n// SVG Tags\nconst svgTags = [\n 'svg', 'circle', 'rect', 'path', 'line', 'polyline', 'polygon', 'ellipse', 'g', 'text', 'tspan',\n 'defs', 'linearGradient', 'radialGradient', 'stop', 'pattern', 'mask', 'clipPath', 'use', 'symbol',\n 'marker', 'image', 'foreignObject', 'animate', 'animateTransform', 'animateMotion', 'set', 'filter',\n 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting',\n 'feDisplacementMap', 'feFlood', 'feGaussianBlur', 'feMorphology', 'feOffset', 'feSpecularLighting',\n 'feTile', 'feTurbulence'\n] as const;\n\n// MathML Tags\nconst mathTags = [\n 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'mrow', 'mfrac', 'msqrt', 'mroot', 'msub', 'msup'\n] as const;\n\ntype Elements = {\n [K in typeof tags[number]]: ElementFactory;\n} & {\n [K in typeof svgTags[number] as `svg${Capitalize<K>}`]: ElementFactory;\n} & {\n [K in typeof mathTags[number] as `math${Capitalize<K>}`]: ElementFactory;\n} & {\n varElement: ElementFactory;\n};\n\nconst elements: Partial<Elements> = {};\n\ntags.forEach(tag => {\n (elements as any)[tag] = createElementFactory(tag);\n});\n\ncreatePrefixedFactories(svgTags, 'svg', elements);\ncreatePrefixedFactories(mathTags, 'math', elements);\n\n(elements as any).varElement = createElementFactory('var');\n\n// Export all element factories\nexport const {\n html, head, body, title, base, link, meta, style,\n address, article, aside, footer, header, h1, h2, h3, h4, h5, h6, main, nav, section,\n blockquote, dd, div, dl, dt, figcaption, figure, hr, li, ol, p, pre, ul,\n a, abbr, b, bdi, bdo, br, cite, code, data, dfn, em, i, kbd, mark, q,\n rp, rt, ruby, s, samp, small, span, strong, sub, sup, time, u, wbr,\n area, audio, img, map, track, video,\n embed, iframe, object, param, picture, portal, source,\n canvas, noscript, script,\n del, ins,\n caption, col, colgroup, table, tbody, td, tfoot, th, thead, tr,\n button, datalist, fieldset, form, input, label, legend, meter,\n optgroup, option, output, progress, select, textarea,\n details, dialog, menu, summary,\n slot, template,\n svgSvg, svgCircle, svgRect, svgPath, svgLine, svgPolyline, svgPolygon, svgEllipse, svgG, svgText, svgTspan,\n svgDefs, svgLinearGradient, svgRadialGradient, svgStop, svgPattern, svgMask, svgClipPath, svgUse, svgSymbol,\n svgMarker, svgImage, svgForeignObject, svgAnimate, svgAnimateTransform, svgAnimateMotion, svgSet, svgFilter,\n svgFeBlend, svgFeColorMatrix, svgFeComponentTransfer, svgFeComposite, svgFeConvolveMatrix, svgFeDiffuseLighting,\n svgFeDisplacementMap, svgFeFlood, svgFeGaussianBlur, svgFeMorphology, svgFeOffset, svgFeSpecularLighting,\n svgFeTile, svgFeTurbulence,\n mathMath, mathMi, mathMn, mathMo, mathMs, mathMtext, mathMrow, mathMfrac, mathMsqrt, mathMroot, mathMsub, mathMsup,\n varElement\n} = elements as Elements;\nexport const el = elements;\n// Export elements object for dynamic access\nexport { elements };\n// Fragment element factory - groups children without a wrapper element\n// Similar to React's Fragment: <><div>1</div><div>2</div></>\nexport const frag: ElementFactory = function(...children: Child[]): VNode {\n const flatChildren: Child[] = [];\n for (let i = 0, len = children.length; i < len; i++) {\n const child = children[i];\n if (child == null || child === false) continue;\n\n if (Array.isArray(child)) {\n for (let j = 0, cLen = child.length; j < cLen; j++) {\n const c = child[j];\n c != null && c !== false && flatChildren.push(c);\n }\n } else {\n flatChildren.push(child);\n }\n }\n return { tagName: '', props: {}, children: flatChildren };\n} as ElementFactory;\n\n// DOM utility functions - Shorthand helpers for common document operations\nexport const doc = hasDocument ? document : undefined as any;\nexport const getEl = bindDocMethod(doc?.querySelector);\nexport const getEls = bindDocMethod(doc?.querySelectorAll);\nexport const createEl = bindDocMethod(doc?.createElement);\nexport const createSvgEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/2000/svg') : undefined as any;\nexport const createMathEl = hasDocument ? doc.createElementNS.bind(doc, 'http://www.w3.org/1998/Math/MathML') : undefined as any;\nexport const fragment = bindDocMethod(doc?.createDocumentFragment);\nexport const textNode = bindDocMethod(doc?.createTextNode);\nexport const commentNode = bindDocMethod(doc?.createComment);\nexport const getElId = bindDocMethod(doc?.getElementById);\nexport const getElClass = bindDocMethod(doc?.getElementsByClassName);\nexport const getElTag = bindDocMethod(doc?.getElementsByTagName);\nexport const getElName = bindDocMethod(doc?.getElementsByName);","/**\n * Elit - Router - Client-side routing\n */\n\nimport type { VNode, Child, Props, State } from './types';\nimport { dom } from './dom';\n\nexport interface Route {\n path: string;\n component: (params: RouteParams) => VNode | Child;\n beforeEnter?: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void;\n}\n\nexport interface RouteParams {\n [key: string]: string;\n}\n\nexport interface RouteLocation {\n path: string;\n params: RouteParams;\n query: Record<string, string>;\n hash: string;\n}\n\nexport interface RouterOptions {\n mode?: 'history' | 'hash';\n base?: string;\n routes: Route[];\n notFound?: (params: RouteParams) => VNode | Child;\n}\n\nexport interface Router {\n currentRoute: State<RouteLocation>;\n mode: 'history' | 'hash';\n navigate: (path: string, replace?: boolean) => void;\n push: (path: string) => void;\n replace: (path: string) => void;\n back: () => void;\n forward: () => void;\n go: (delta: number) => void;\n beforeEach: (guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void) => void;\n destroy: () => void;\n}\n\n/**\n * Helper: Match route pattern against path\n */\nfunction matchRoute(pattern: string, path: string): RouteParams | null {\n const patternParts = pattern.split('/').filter(Boolean);\n const pathParts = path.split('/').filter(Boolean);\n\n if (pattern.endsWith('*')) {\n const basePattern = pattern.slice(0, -1);\n if (path.startsWith(basePattern) || basePattern === '/' || pattern === '*') {\n return { '*': path.slice(basePattern.length) };\n }\n }\n\n if (patternParts.length !== pathParts.length) return null;\n\n const params: RouteParams = {};\n for (let i = 0; i < patternParts.length; i++) {\n const patternPart = patternParts[i];\n const pathPart = pathParts[i];\n\n if (patternPart.startsWith(':')) {\n params[patternPart.slice(1)] = decodeURIComponent(pathPart);\n } else if (patternPart !== pathPart) {\n return null;\n }\n }\n return params;\n}\n\n/**\n * Helper: Execute guard and handle result (eliminates duplication in navigate)\n */\nfunction executeGuard(\n guard: (to: RouteLocation, from: RouteLocation | null) => boolean | string | void,\n to: RouteLocation,\n from: RouteLocation | null,\n navigate: (path: string, replace?: boolean) => void,\n replace = false\n): boolean {\n const result = guard(to, from);\n if (result === false) return false;\n if (typeof result === 'string') {\n navigate(result, replace);\n return false;\n }\n return true;\n}\n\n/**\n * Helper: Wrap component in VNode if needed (eliminates duplication in createRouterView)\n */\nfunction wrapComponent(component: VNode | Child): VNode {\n if (typeof component === 'object' && component !== null && 'tagName' in component) {\n return component as VNode;\n }\n return { tagName: 'span', props: {}, children: [component] };\n}\n\nexport function createRouter(options: RouterOptions): Router {\n const { mode = 'history', base = '', routes } = options;\n const globalGuards: Array<(to: RouteLocation, from: RouteLocation | null) => boolean | string | void> = [];\n\n const parseQuery = (search: string): Record<string, string> => {\n const query: Record<string, string> = {};\n const params = new URLSearchParams(search);\n params.forEach((value, key) => { query[key] = value; });\n return query;\n };\n\n const getCurrentPath = (): string => {\n if (mode === 'hash') {\n return window.location.hash.slice(1) || '/';\n }\n return window.location.pathname.replace(base, '') || '/';\n };\n\n const parseLocation = (path: string): RouteLocation => {\n const [pathPart, queryPart = ''] = path.split('?');\n const [cleanPath, hash = ''] = pathPart.split('#');\n return {\n path: cleanPath || '/',\n params: {},\n query: parseQuery(queryPart),\n hash: hash ? '#' + hash : ''\n };\n };\n\n const findRoute = (path: string): { route: Route; params: RouteParams } | null => {\n for (const route of routes) {\n const params = matchRoute(route.path, path);\n if (params !== null) {\n return { route, params };\n }\n }\n return null;\n };\n\n const currentRoute = dom.createState<RouteLocation>(parseLocation(getCurrentPath()));\n\n const navigate = (path: string, replace = false): void => {\n const location = parseLocation(path);\n const match = findRoute(location.path);\n\n if (match) {\n location.params = match.params;\n }\n\n for (const guard of globalGuards) {\n if (!executeGuard(guard, location, currentRoute.value, navigate, replace)) return;\n }\n\n if (match?.route.beforeEnter) {\n if (!executeGuard(match.route.beforeEnter, location, currentRoute.value, navigate, replace)) return;\n }\n\n // Remove leading slash from path if base has trailing slash, or add slash if needed\n let urlPath = path;\n let url: string;\n if (mode === 'hash') {\n url = '#' + path;\n } else {\n // Ensure proper path joining\n const hasBaseSlash = base.endsWith('/');\n const hasPathSlash = path.startsWith('/');\n if (hasBaseSlash && hasPathSlash) {\n urlPath = path.slice(1); // Remove duplicate slash\n } else if (!hasBaseSlash && !hasPathSlash && path !== '/') {\n urlPath = '/' + path; // Add slash between\n }\n url = base + urlPath;\n }\n\n if (replace) {\n window.history.replaceState({ path }, '', url);\n } else {\n window.history.pushState({ path }, '', url);\n }\n\n currentRoute.value = location;\n };\n\n const handlePopState = (): void => {\n const path = getCurrentPath();\n const location = parseLocation(path);\n const match = findRoute(location.path);\n if (match) {\n location.params = match.params;\n }\n currentRoute.value = location;\n };\n\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', handlePopState);\n }\n\n return {\n currentRoute,\n mode,\n navigate,\n push: (path: string) => navigate(path, false),\n replace: (path: string) => navigate(path, true),\n back: () => window.history.back(),\n forward: () => window.history.forward(),\n go: (delta: number) => window.history.go(delta),\n beforeEach: (guard) => { globalGuards.push(guard); },\n destroy: () => {\n if (typeof window !== 'undefined') {\n window.removeEventListener('popstate', handlePopState);\n }\n currentRoute.destroy();\n }\n };\n}\n\n// RouterView component - renders current route\nexport function createRouterView(router: Router, options: RouterOptions): () => VNode {\n const { routes, notFound } = options;\n\n return (): VNode => {\n const location = router.currentRoute.value;\n const match = routes.find(r => matchRoute(r.path, location.path) !== null);\n\n if (match) {\n const params = matchRoute(match.path, location.path) || {};\n const component = match.component({ ...params, ...location.query });\n return wrapComponent(component);\n }\n\n if (notFound) {\n const component = notFound(location.params);\n return wrapComponent(component);\n }\n\n return { tagName: 'div', props: {}, children: ['404 - Not Found'] };\n };\n}\n\n// Link component - prevents default and uses router\nexport const routerLink = (router: Router, props: Props & { to: string }, ...children: Child[]): VNode => {\n // Use router.mode to determine href format\n const href = router.mode === 'hash' ? `#${props.to}` : props.to;\n\n return {\n tagName: 'a',\n props: {\n ...props,\n href,\n onclick: (e: MouseEvent) => {\n e.preventDefault();\n router.push(props.to);\n }\n },\n children\n };\n};\n","/**\n * Client-side HMR runtime for Elit\n * Import this in your app to enable hot module replacement\n */\n\nexport interface HMRClient {\n /** Check if HMR is enabled */\n enabled: boolean;\n /** Manually reload the page */\n reload: () => void;\n /** Accept HMR updates for current module */\n accept: (callback?: () => void) => void;\n /** Decline HMR updates (forces full reload) */\n decline: () => void;\n /** Dispose callback before module is replaced */\n dispose: (callback: () => void) => void;\n}\n\ndeclare global {\n interface Window {\n __ELIT_HMR__: HMRClient;\n }\n}\n\nclass ElitHMR implements HMRClient {\n enabled = false;\n private ws: WebSocket | null = null;\n private acceptCallbacks: (() => void)[] = [];\n private disposeCallbacks: (() => void)[] = [];\n private declined = false;\n\n constructor() {\n if (typeof window === 'undefined') {\n return;\n }\n\n // Skip HMR for file:// protocol\n if (window.location.protocol === 'file:') {\n console.log('[Elit HMR] Disabled for file:// protocol');\n return;\n }\n\n // Skip HMR in preview mode (no WebSocket server is running)\n if ((window as any).__ELIT_MODE__ === 'preview') {\n return;\n }\n\n this.connect();\n }\n\n private connect() {\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n const host = window.location.hostname;\n const port = window.location.port || '3000';\n\n this.ws = new WebSocket(`${protocol}//${host}:${port}`);\n\n this.ws.onopen = () => {\n this.enabled = true;\n console.log('[Elit HMR] Connected ✓');\n };\n\n this.ws.onmessage = (event) => {\n try {\n const data = JSON.parse(event.data);\n this.handleMessage(data);\n } catch (error) {\n console.error('[Elit HMR] Error parsing message:', error);\n }\n };\n\n this.ws.onclose = () => {\n this.enabled = false;\n console.log('[Elit HMR] Disconnected - HMR disabled until manual refresh');\n // Don't auto-reload, let user decide when to refresh\n };\n\n this.ws.onerror = (error) => {\n console.error('[Elit HMR] WebSocket error:', error);\n };\n }\n\n private handleMessage(data: any) {\n switch (data.type) {\n case 'connected':\n console.log('[Elit HMR] Ready');\n break;\n\n case 'update':\n console.log(`[Elit HMR] Update detected: ${data.path}`);\n\n if (this.declined) {\n this.reload();\n return;\n }\n\n // Run dispose callbacks\n this.disposeCallbacks.forEach(cb => cb());\n this.disposeCallbacks = [];\n\n // Run accept callbacks or log (don't auto-reload)\n if (this.acceptCallbacks.length > 0) {\n this.acceptCallbacks.forEach(cb => cb());\n console.log('[Elit HMR] Update accepted via callback');\n } else {\n console.log('[Elit HMR] Update detected - manually refresh to see changes');\n }\n break;\n\n case 'reload':\n console.log('[Elit HMR] Full reload requested - manually refresh to see changes');\n // Don't auto-reload\n break;\n\n case 'error':\n console.error('[Elit HMR] Server error:', data.error);\n break;\n }\n }\n\n reload() {\n window.location.reload();\n }\n\n accept(callback?: () => void) {\n if (callback) {\n this.acceptCallbacks.push(callback);\n }\n this.declined = false;\n }\n\n decline() {\n this.declined = true;\n }\n\n dispose(callback: () => void) {\n this.disposeCallbacks.push(callback);\n }\n}\n\n// Create singleton instance\nconst hmr = new ElitHMR();\n\n// Expose globally\nif (typeof window !== 'undefined') {\n window.__ELIT_HMR__ = hmr;\n}\n\nexport default hmr;\n"],"mappings":"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","names":["el","s","i","fragment","head","text","throttle","container","render","html","style","styles","title","meta","script","container","data","fragment","s","el","styles","descendant","container","layer","style","tags","elements","i","i","i","base","location","data"]}
|