@rasenjs/html 0.1.1-alpha → 0.1.3-alpha

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/jsx-dev-runtime.ts","../src/jsx-runtime.ts","../src/utils.ts","../src/components/element.ts","../src/components/text.ts","../src/components/fragment.ts","../src/components/elements.ts"],"names":["text","html","unrefValue","getReactiveRuntime","jsx_runtime_star","setTextPrimitive","setFragmentPrimitive","configureTags"],"mappings":"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","file":"jsx-dev-runtime.cjs","sourcesContent":["/**\n * JSX Dev Runtime for @rasenjs/html\n * Development mode version with additional debugging info\n */\n\nexport * from './jsx-runtime'\n","/**\n * JSX Runtime integration for @rasenjs/html (SSR/SSG)\n * \n * Auto-configures jsx-runtime with HTML string primitives and tags.\n */\n\nimport { setTextPrimitive, setFragmentPrimitive, configureTags, type TextPrimitive, type FragmentPrimitive } from '@rasenjs/jsx-runtime'\nimport {\n text,\n fragment,\n // Text elements\n div,\n span,\n p,\n a,\n // Headings\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n // Form elements\n button,\n input,\n textarea,\n select,\n option,\n label,\n form,\n // Lists\n ul,\n ol,\n li,\n // Media\n img,\n canvas,\n // Semantic HTML5\n section,\n article,\n header,\n footer,\n nav,\n main,\n aside,\n // Formatting\n code,\n pre,\n strong,\n em,\n small,\n br,\n hr,\n} from './index'\n\n// Configure primitives\nsetTextPrimitive(text as TextPrimitive)\nsetFragmentPrimitive(fragment as FragmentPrimitive)\n\n// Configure all HTML tags\nconfigureTags({\n '': {\n div,\n span,\n p,\n a,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n button,\n input,\n textarea,\n select,\n option,\n label,\n form,\n ul,\n ol,\n li,\n img,\n canvas,\n section,\n article,\n header,\n footer,\n nav,\n main,\n aside,\n code,\n pre,\n strong,\n em,\n small,\n br,\n hr,\n }\n})\n\n// Re-export jsx-runtime\nexport * from '@rasenjs/jsx-runtime'\n","/**\n * HTML 转义字符映射\n */\nconst HTML_ESCAPE_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n}\n\n/**\n * 转义 HTML 特殊字符,防止 XSS\n */\nexport function escapeHtml(text: string): string {\n return text.replace(/[&<>\"']/g, (char) => HTML_ESCAPE_MAP[char] || char)\n}\n\n/**\n * 转义属性值\n */\nexport function escapeAttr(value: string): string {\n return value.replace(/[&<>\"]/g, (char) => HTML_ESCAPE_MAP[char] || char)\n}\n\n/**\n * 将属性值转换为字符串\n */\nexport function stringifyAttr(\n name: string,\n value: string | number | boolean | null | undefined\n): string {\n if (value === null || value === undefined || value === false) {\n return ''\n }\n if (value === true) {\n return ` ${name}`\n }\n return ` ${name}=\"${escapeAttr(String(value))}\"`\n}\n\n/**\n * 将样式对象转换为 style 属性字符串\n */\nexport function stringifyStyle(\n styles: Record<string, string | number | null | undefined>\n): string {\n const parts: string[] = []\n for (const [key, value] of Object.entries(styles)) {\n if (value !== null && value !== undefined) {\n // 将 camelCase 转换为 kebab-case\n const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n parts.push(`${kebabKey}: ${value}`)\n }\n }\n return parts.join('; ')\n}\n\n/**\n * 将类名数组或对象转换为 class 属性字符串\n */\nexport function stringifyClass(\n className: string | string[] | Record<string, boolean> | undefined\n): string {\n if (!className) {\n return ''\n }\n if (typeof className === 'string') {\n return className\n }\n if (Array.isArray(className)) {\n return className.filter(Boolean).join(' ')\n }\n // 对象形式 { 'class-name': true/false }\n return Object.entries(className)\n .filter(([, value]) => value)\n .map(([key]) => key)\n .join(' ')\n}\n\n/**\n * 自闭合标签列表\n */\nexport const VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n])\n\n/**\n * 判断是否为自闭合标签\n */\nexport function isVoidElement(tag: string): boolean {\n return VOID_ELEMENTS.has(tag.toLowerCase())\n}\n","import type { PropValue, Mountable } from '@rasenjs/core'\nimport { unrefValue } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport {\n stringifyAttr,\n stringifyStyle,\n escapeHtml,\n isVoidElement\n} from '../utils'\n\n/**\n * element 组件 - 通用 HTML 元素组件(字符串版本)\n *\n * SSR 场景下不需要响应式更新,直接取值渲染\n */\nexport const element = (props: {\n tag: string\n id?: PropValue<string>\n className?: PropValue<string>\n style?: PropValue<Record<string, string | number>>\n attrs?: PropValue<Record<string, string | number | boolean>>\n /** Text content or child mount functions (including reactive text functions) */\n children?: PropValue<string> | Array<string | (() => string | number) | Mountable<StringHost>>\n value?: PropValue<string | number>\n // SSR does not need events - removed for consistency\n}): Mountable<StringHost> => {\n return (host: StringHost) => {\n const tag = props.tag\n const isVoid = isVoidElement(tag)\n\n // 构建开始标签\n let html = `<${tag}`\n\n // id\n const id = unrefValue(props.id)\n if (id) {\n html += stringifyAttr('id', id)\n }\n\n // className\n const className = unrefValue(props.className)\n if (className) {\n html += stringifyAttr('class', className)\n }\n\n // style\n const style = unrefValue(props.style)\n if (style && Object.keys(style).length > 0) {\n html += stringifyAttr('style', stringifyStyle(style))\n }\n\n // value (for input, textarea, select)\n const value = unrefValue(props.value)\n if (value !== undefined) {\n html += stringifyAttr('value', String(value))\n }\n\n // attrs (other attributes)\n const attrs = unrefValue(props.attrs)\n if (attrs) {\n for (const [key, val] of Object.entries(attrs)) {\n // 跳过无效的属性名(数字开头或纯数字)\n if (/^\\d/.test(key)) continue\n html += stringifyAttr(key, val)\n }\n }\n \n // 处理其他props(除了特殊props和已处理的)\n const specialProps = new Set(['tag', 'id', 'className', 'style', 'value', 'attrs', 'children', 'on'])\n for (const [key, val] of Object.entries(props)) {\n if (specialProps.has(key)) continue\n if (key.startsWith('on')) continue // 跳过事件处理器(SSR不需要)\n if (val === undefined || val === null) continue\n \n const attrValue = unrefValue(val as PropValue<unknown>)\n if (attrValue !== undefined && attrValue !== null) {\n // 只处理基本类型(string, number, boolean)\n if (typeof attrValue === 'string' || typeof attrValue === 'number' || typeof attrValue === 'boolean') {\n html += stringifyAttr(key, attrValue)\n }\n }\n }\n\n html += '>'\n\n // 自闭合标签不需要内容和结束标签\n if (isVoid) {\n host.append(html)\n return undefined\n }\n\n // children (text content or mount functions)\n const children = props.children\n if (children !== undefined) {\n if (typeof children === 'string' || (typeof children === 'object' && 'value' in (children as any))) {\n // String content (or ref to string)\n html += escapeHtml(String(unrefValue(children as PropValue<string>)))\n } else if (Array.isArray(children) && children.length > 0) {\n // Array of children - 创建子宿主收集子元素内容\n const childHost: StringHost = {\n fragments: [],\n append(s: string) {\n this.fragments.push(s)\n },\n toString() {\n return this.fragments.join('')\n }\n }\n\n for (const child of children) {\n if (child === null || child === undefined) continue\n \n if (typeof child === 'string') {\n // String child\n childHost.append(escapeHtml(child))\n } else if (typeof child === 'function') {\n // Function - could be Mountable or reactive text function\n // Call it with childHost and check the return value type\n const result = (child as any)(childHost)\n \n // If it returns string/number, it's a reactive text function that ignored our parameter\n if (typeof result === 'string' || typeof result === 'number') {\n childHost.append(escapeHtml(String(result)))\n }\n // Otherwise it's a Mountable, already executed correctly\n }\n }\n\n html += childHost.toString()\n }\n }\n\n // 结束标签\n html += `</${tag}>`\n\n host.append(html)\n\n // SSR 不需要 unmount\n return undefined\n }\n}\n","/**\n * Text node component for HTML (SSR)\n * \n * Outputs escaped text content\n */\n\nimport type { Mountable } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport { escapeHtml } from '../utils'\n\nexport interface TextProps {\n /** Text content - can be static string/number or reactive getter */\n content: string | number | (() => string | number)\n}\n\n/**\n * Create a text node for SSR\n * \n * @example\n * ```ts\n * // Static text\n * text({ content: 'Hello' })\n * \n * // Reactive text (evaluates immediately in SSR)\n * text({ content: () => count.value })\n * ```\n */\nexport function text(props: TextProps): Mountable<StringHost> {\n const { content } = props\n\n return (host: StringHost) => {\n // Resolve content\n const textContent = typeof content === 'function' \n ? String(content())\n : String(content)\n \n // Append escaped text\n host.append(escapeHtml(textContent))\n \n return undefined\n }\n}\n","/**\n * HTML fragment implementation for SSR\n */\nimport { getReactiveRuntime, type Mountable, type FragmentChild } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport { escapeHtml } from '../utils'\n\n/**\n * HTML fragment uses empty comments as separators between text nodes\n * to preserve the same structure as client-side rendering for proper hydration\n */\nconst hostHooks = {\n createTextNode: (text: string) => {\n // Wrap each text piece with comment markers for hydration matching\n return `<!-- t -->${escapeHtml(text)}<!-- /t -->`\n },\n appendNode: (host: StringHost, node: string) => host.append(node),\n updateTextNode: () => {\n // SSR 中不需要更新文本节点\n },\n removeNode: () => {\n // SSR 中不需要移除节点\n }\n}\n\n/**\n * Fragment function interface for HTML/SSR\n */\ninterface FragmentFunction {\n (config: { children: Array<Mountable<StringHost>> }): Mountable<StringHost>\n (strings: TemplateStringsArray, ...values: FragmentChild<StringHost>[]): Mountable<StringHost>\n}\n\n/**\n * fragment - 组合多个子组件\n * \n * 注意:在 SSR 中,响应式值会被立即求值并转换为静态字符串\n * \n * @example\n * // 对象参数用法\n * fragment({ children: [child1, child2] })\n * \n * // Tagged template 用法\n * const count = ref(0)\n * fragment`Count: ${count} items` // SSR: 立即求值\n * \n * // 别名\n * f`Count: ${count} items`\n */\nexport const fragment: FragmentFunction = (\n configOrStrings: { children: Array<Mountable<StringHost>> } | TemplateStringsArray,\n ...values: FragmentChild<StringHost>[]\n): Mountable<StringHost> => {\n const runtime = getReactiveRuntime()\n \n // 检测是否是 tagged template 调用\n if (Array.isArray(configOrStrings) && 'raw' in configOrStrings) {\n const strings = configOrStrings as TemplateStringsArray\n \n // 直接生成 HTML 字符串而不是通过 core fragment\n // 这样可以避免每个片段都被包装,减少注释标记\n return (host: StringHost) => {\n let html = ''\n for (let i = 0; i < strings.length; i++) {\n if (strings[i]) {\n html += escapeHtml(strings[i])\n }\n if (i < values.length) {\n const value = values[i]\n // Check if it's a ref\n if (runtime.isRef(value)) {\n html += escapeHtml(String((value as any).value))\n } else if (typeof value === 'string' || typeof value === 'number') {\n html += escapeHtml(String(value))\n }\n // Mountables not supported in template strings for SSR\n }\n }\n host.append(html)\n return undefined\n }\n }\n \n // For object config, import core fragment\n const { fragment: coreFragment } = require('@rasenjs/core')\n const config = configOrStrings as { children: Array<Mountable<StringHost>> }\n return coreFragment({ children: config.children, hooks: hostHooks })\n}\n\n/**\n * f - fragment 的简写别名\n */\nexport const f = fragment\n","import type { PropValue, Mountable } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport { element } from './element'\n\n// ============================================================================\n// Type definitions\n// ============================================================================\n\ninterface BaseProps {\n id?: PropValue<string>\n class?: PropValue<string>\n className?: PropValue<string>\n style?: PropValue<Record<string, string | number>>\n attrs?: PropValue<Record<string, string | number | boolean>>\n /** Text content or child mount functions */\n children?: PropValue<string> | Array<string | (() => string | number) | Mountable<StringHost>>\n // SSR does not support events - removed on, onClick, onInput, etc.\n}\n\n/** Child type - 响应式文本函数优先匹配 */\ntype Child = string | (() => string | number) | Mountable<StringHost>\n\n/**\n * Factory function to create HTML element components\n * Supports: el(), el('text'), el(child), el(props), el(props, ...children)\n */\nfunction createElement(tag: string) {\n return (\n propsOrChild?: BaseProps | Child,\n ...restChildren: Child[]\n ): Mountable<StringHost> => {\n // No arguments\n if (propsOrChild === undefined) {\n return element({ tag })\n }\n\n // First argument is string or function (Mountable or reactive text), treat as child\n if (\n typeof propsOrChild === 'string' ||\n typeof propsOrChild === 'function'\n ) {\n const children = [propsOrChild, ...restChildren]\n return element({ tag, children })\n }\n \n // First argument is props object\n const props = propsOrChild as BaseProps\n \n // Normalize props: convert `class` to `className` for element()\n const { class: cls, className, ...restProps } = props as any\n const normalizedProps = {\n ...restProps,\n className: className || cls\n }\n \n if (restChildren.length > 0) {\n // Merge children\n const existingChildren = props.children\n const children = Array.isArray(existingChildren)\n ? [...existingChildren, ...restChildren]\n : existingChildren !== undefined\n ? [existingChildren, ...restChildren]\n : restChildren\n \n return element({ tag, ...normalizedProps, children })\n }\n\n return element({ tag, ...normalizedProps })\n }\n}\n\n// ============================================================================\n// Common elements\n// ============================================================================\n\nexport const div = createElement('div')\nexport const span = createElement('span')\nexport const button = createElement('button')\nexport const a = createElement('a')\nexport const p = createElement('p')\n\n// Headings\nexport const h1 = createElement('h1')\nexport const h2 = createElement('h2')\nexport const h3 = createElement('h3')\nexport const h4 = createElement('h4')\nexport const h5 = createElement('h5')\nexport const h6 = createElement('h6')\n\n// Lists\nexport const ul = createElement('ul')\nexport const ol = createElement('ol')\nexport const li = createElement('li')\n\n// Forms\nexport const form = createElement('form')\nexport const label = createElement('label')\nexport const select = createElement('select')\n\n// Tables\nexport const table = createElement('table')\nexport const thead = createElement('thead')\nexport const tbody = createElement('tbody')\nexport const tfoot = createElement('tfoot')\nexport const tr = createElement('tr')\nexport const th = createElement('th')\nexport const td = createElement('td')\n\n// Semantic layout\nexport const section = createElement('section')\nexport const article = createElement('article')\nexport const header = createElement('header')\nexport const footer = createElement('footer')\nexport const nav = createElement('nav')\nexport const main = createElement('main')\nexport const aside = createElement('aside')\n\n// Other common elements\nexport const pre = createElement('pre')\nexport const code = createElement('code')\nexport const blockquote = createElement('blockquote')\nexport const strong = createElement('strong')\nexport const em = createElement('em')\nexport const small = createElement('small')\nexport const mark = createElement('mark')\nexport const del = createElement('del')\nexport const ins = createElement('ins')\nexport const sub = createElement('sub')\nexport const sup = createElement('sup')\nexport const svg = createElement('svg')\n\n// Self-closing elements\nexport const br = () => element({ tag: 'br' })\nexport const hr = () => element({ tag: 'hr' })\n\n// ============================================================================\n// Special elements with extended props\n// ============================================================================\n\n/**\n * input component\n */\nexport const input = (\n props: BaseProps & {\n type?: PropValue<string>\n value?: PropValue<string | any>\n placeholder?: PropValue<string>\n disabled?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { type, value, placeholder, disabled, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(type !== undefined ? { type } : {}),\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(disabled !== undefined ? { disabled } : {})\n }\n\n return element({\n tag: 'input',\n ...restProps,\n attrs: newAttrs as any,\n ...(value !== undefined ? { value } : {})\n })\n}\n\n/**\n * img component\n */\nexport const img = (props: BaseProps & {\n src?: PropValue<string>\n alt?: PropValue<string>\n width?: PropValue<string | number>\n height?: PropValue<string | number>\n}): Mountable<StringHost> => {\n return element({ tag: 'img', ...props })\n}\n\n/**\n * textarea component\n */\nexport const textarea = (\n props: BaseProps & {\n value?: PropValue<string>\n placeholder?: PropValue<string>\n disabled?: PropValue<boolean>\n rows?: PropValue<number>\n cols?: PropValue<number>\n }\n): Mountable<StringHost> => {\n const { value, placeholder, disabled, rows, cols, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(disabled !== undefined ? { disabled } : {}),\n ...(rows !== undefined ? { rows } : {}),\n ...(cols !== undefined ? { cols } : {})\n }\n\n // textarea value should be children (text content)\n return element({\n tag: 'textarea',\n ...restProps,\n attrs: newAttrs as any,\n ...(value !== undefined ? { children: String(value) } : {})\n })\n}\n\n/**\n * option component\n */\nexport const option = (\n props: BaseProps & {\n value?: PropValue<string | number>\n selected?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { value, selected, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(value !== undefined ? { value } : {}),\n ...(selected ? { selected: true } : {})\n }\n\n return element({\n tag: 'option',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * video component\n */\nexport const video = (\n props: BaseProps & {\n src?: PropValue<string>\n poster?: PropValue<string>\n controls?: PropValue<boolean>\n autoplay?: PropValue<boolean>\n loop?: PropValue<boolean>\n muted?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { src, poster, controls, autoplay, loop, muted, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(poster !== undefined ? { poster } : {}),\n ...(controls ? { controls: true } : {}),\n ...(autoplay ? { autoplay: true } : {}),\n ...(loop ? { loop: true } : {}),\n ...(muted ? { muted: true } : {})\n }\n\n return element({\n tag: 'video',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * audio component\n */\nexport const audio = (\n props: BaseProps & {\n src?: PropValue<string>\n controls?: PropValue<boolean>\n autoplay?: PropValue<boolean>\n loop?: PropValue<boolean>\n muted?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { src, controls, autoplay, loop, muted, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(controls ? { controls: true } : {}),\n ...(autoplay ? { autoplay: true } : {}),\n ...(loop ? { loop: true } : {}),\n ...(muted ? { muted: true } : {})\n }\n\n return element({\n tag: 'audio',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * source component\n */\nexport const source = (\n props: BaseProps & {\n src?: PropValue<string>\n type?: PropValue<string>\n }\n): Mountable<StringHost> => {\n const { src, type, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(type !== undefined ? { type } : {})\n }\n\n return element({\n tag: 'source',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * iframe component\n */\nexport const iframe = (\n props: BaseProps & {\n src?: PropValue<string>\n width?: PropValue<string | number>\n height?: PropValue<string | number>\n frameborder?: PropValue<string | number>\n allowfullscreen?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { src, width, height, frameborder, allowfullscreen, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(frameborder !== undefined ? { frameborder } : {}),\n ...(allowfullscreen ? { allowfullscreen: true } : {})\n }\n\n return element({\n tag: 'iframe',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * canvas component (SSR only renders empty canvas tag)\n */\nexport const canvas = (\n props: BaseProps & {\n width?: PropValue<string | number>\n height?: PropValue<string | number>\n }\n): Mountable<StringHost> => {\n const { width, height, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {})\n }\n\n return element({\n tag: 'canvas',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n"]}
@@ -0,0 +1 @@
1
+ export * from '@rasenjs/jsx-runtime';
@@ -0,0 +1 @@
1
+ export * from '@rasenjs/jsx-runtime';
@@ -0,0 +1,375 @@
1
+ import * as jsx_runtime_star from '@rasenjs/jsx-runtime';
2
+ import { setTextPrimitive, setFragmentPrimitive, configureTags } from '@rasenjs/jsx-runtime';
3
+ import { getReactiveRuntime, unrefValue } from '@rasenjs/core';
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
10
+ get: (a2, b) => (typeof require !== "undefined" ? require : a2)[b]
11
+ }) : x)(function(x) {
12
+ if (typeof require !== "undefined") return require.apply(this, arguments);
13
+ throw Error('Dynamic require of "' + x + '" is not supported');
14
+ });
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget);
24
+
25
+ // src/jsx-dev-runtime.ts
26
+ var jsx_dev_runtime_exports = {};
27
+
28
+ // src/jsx-runtime.ts
29
+ var jsx_runtime_exports = {};
30
+
31
+ // src/utils.ts
32
+ var HTML_ESCAPE_MAP = {
33
+ "&": "&amp;",
34
+ "<": "&lt;",
35
+ ">": "&gt;",
36
+ '"': "&quot;",
37
+ "'": "&#39;"
38
+ };
39
+ function escapeHtml(text2) {
40
+ return text2.replace(/[&<>"']/g, (char) => HTML_ESCAPE_MAP[char] || char);
41
+ }
42
+ function escapeAttr(value) {
43
+ return value.replace(/[&<>"]/g, (char) => HTML_ESCAPE_MAP[char] || char);
44
+ }
45
+ function stringifyAttr(name, value) {
46
+ if (value === null || value === void 0 || value === false) {
47
+ return "";
48
+ }
49
+ if (value === true) {
50
+ return ` ${name}`;
51
+ }
52
+ return ` ${name}="${escapeAttr(String(value))}"`;
53
+ }
54
+ function stringifyStyle(styles) {
55
+ const parts = [];
56
+ for (const [key, value] of Object.entries(styles)) {
57
+ if (value !== null && value !== void 0) {
58
+ const kebabKey = key.replace(/([A-Z])/g, "-$1").toLowerCase();
59
+ parts.push(`${kebabKey}: ${value}`);
60
+ }
61
+ }
62
+ return parts.join("; ");
63
+ }
64
+ var VOID_ELEMENTS = /* @__PURE__ */ new Set([
65
+ "area",
66
+ "base",
67
+ "br",
68
+ "col",
69
+ "embed",
70
+ "hr",
71
+ "img",
72
+ "input",
73
+ "link",
74
+ "meta",
75
+ "param",
76
+ "source",
77
+ "track",
78
+ "wbr"
79
+ ]);
80
+ function isVoidElement(tag) {
81
+ return VOID_ELEMENTS.has(tag.toLowerCase());
82
+ }
83
+
84
+ // src/components/element.ts
85
+ var element = (props) => {
86
+ return (host) => {
87
+ const tag = props.tag;
88
+ const isVoid = isVoidElement(tag);
89
+ let html2 = `<${tag}`;
90
+ const id = unrefValue(props.id);
91
+ if (id) {
92
+ html2 += stringifyAttr("id", id);
93
+ }
94
+ const className = unrefValue(props.className);
95
+ if (className) {
96
+ html2 += stringifyAttr("class", className);
97
+ }
98
+ const style = unrefValue(props.style);
99
+ if (style && Object.keys(style).length > 0) {
100
+ html2 += stringifyAttr("style", stringifyStyle(style));
101
+ }
102
+ const value = unrefValue(props.value);
103
+ if (value !== void 0) {
104
+ html2 += stringifyAttr("value", String(value));
105
+ }
106
+ const attrs = unrefValue(props.attrs);
107
+ if (attrs) {
108
+ for (const [key, val] of Object.entries(attrs)) {
109
+ if (/^\d/.test(key)) continue;
110
+ html2 += stringifyAttr(key, val);
111
+ }
112
+ }
113
+ const specialProps = /* @__PURE__ */ new Set(["tag", "id", "className", "style", "value", "attrs", "children", "on"]);
114
+ for (const [key, val] of Object.entries(props)) {
115
+ if (specialProps.has(key)) continue;
116
+ if (key.startsWith("on")) continue;
117
+ if (val === void 0 || val === null) continue;
118
+ const attrValue = unrefValue(val);
119
+ if (attrValue !== void 0 && attrValue !== null) {
120
+ if (typeof attrValue === "string" || typeof attrValue === "number" || typeof attrValue === "boolean") {
121
+ html2 += stringifyAttr(key, attrValue);
122
+ }
123
+ }
124
+ }
125
+ html2 += ">";
126
+ if (isVoid) {
127
+ host.append(html2);
128
+ return void 0;
129
+ }
130
+ const children = props.children;
131
+ if (children !== void 0) {
132
+ if (typeof children === "string" || typeof children === "object" && "value" in children) {
133
+ html2 += escapeHtml(String(unrefValue(children)));
134
+ } else if (Array.isArray(children) && children.length > 0) {
135
+ const childHost = {
136
+ fragments: [],
137
+ append(s) {
138
+ this.fragments.push(s);
139
+ },
140
+ toString() {
141
+ return this.fragments.join("");
142
+ }
143
+ };
144
+ for (const child of children) {
145
+ if (child === null || child === void 0) continue;
146
+ if (typeof child === "string") {
147
+ childHost.append(escapeHtml(child));
148
+ } else if (typeof child === "function") {
149
+ const result = child(childHost);
150
+ if (typeof result === "string" || typeof result === "number") {
151
+ childHost.append(escapeHtml(String(result)));
152
+ }
153
+ }
154
+ }
155
+ html2 += childHost.toString();
156
+ }
157
+ }
158
+ html2 += `</${tag}>`;
159
+ host.append(html2);
160
+ return void 0;
161
+ };
162
+ };
163
+
164
+ // src/components/text.ts
165
+ function text(props) {
166
+ const { content } = props;
167
+ return (host) => {
168
+ const textContent = typeof content === "function" ? String(content()) : String(content);
169
+ host.append(escapeHtml(textContent));
170
+ return void 0;
171
+ };
172
+ }
173
+ var hostHooks = {
174
+ createTextNode: (text2) => {
175
+ return `<!-- t -->${escapeHtml(text2)}<!-- /t -->`;
176
+ },
177
+ appendNode: (host, node) => host.append(node),
178
+ updateTextNode: () => {
179
+ },
180
+ removeNode: () => {
181
+ }
182
+ };
183
+ var fragment = (configOrStrings, ...values) => {
184
+ const runtime = getReactiveRuntime();
185
+ if (Array.isArray(configOrStrings) && "raw" in configOrStrings) {
186
+ const strings = configOrStrings;
187
+ return (host) => {
188
+ let html2 = "";
189
+ for (let i = 0; i < strings.length; i++) {
190
+ if (strings[i]) {
191
+ html2 += escapeHtml(strings[i]);
192
+ }
193
+ if (i < values.length) {
194
+ const value = values[i];
195
+ if (runtime.isRef(value)) {
196
+ html2 += escapeHtml(String(value.value));
197
+ } else if (typeof value === "string" || typeof value === "number") {
198
+ html2 += escapeHtml(String(value));
199
+ }
200
+ }
201
+ }
202
+ host.append(html2);
203
+ return void 0;
204
+ };
205
+ }
206
+ const { fragment: coreFragment } = __require("@rasenjs/core");
207
+ const config = configOrStrings;
208
+ return coreFragment({ children: config.children, hooks: hostHooks });
209
+ };
210
+
211
+ // src/components/elements.ts
212
+ function createElement(tag) {
213
+ return (propsOrChild, ...restChildren) => {
214
+ if (propsOrChild === void 0) {
215
+ return element({ tag });
216
+ }
217
+ if (typeof propsOrChild === "string" || typeof propsOrChild === "function") {
218
+ const children = [propsOrChild, ...restChildren];
219
+ return element({ tag, children });
220
+ }
221
+ const props = propsOrChild;
222
+ const { class: cls, className, ...restProps } = props;
223
+ const normalizedProps = {
224
+ ...restProps,
225
+ className: className || cls
226
+ };
227
+ if (restChildren.length > 0) {
228
+ const existingChildren = props.children;
229
+ const children = Array.isArray(existingChildren) ? [...existingChildren, ...restChildren] : existingChildren !== void 0 ? [existingChildren, ...restChildren] : restChildren;
230
+ return element({ tag, ...normalizedProps, children });
231
+ }
232
+ return element({ tag, ...normalizedProps });
233
+ };
234
+ }
235
+ var div = createElement("div");
236
+ var span = createElement("span");
237
+ var button = createElement("button");
238
+ var a = createElement("a");
239
+ var p = createElement("p");
240
+ var h1 = createElement("h1");
241
+ var h2 = createElement("h2");
242
+ var h3 = createElement("h3");
243
+ var h4 = createElement("h4");
244
+ var h5 = createElement("h5");
245
+ var h6 = createElement("h6");
246
+ var ul = createElement("ul");
247
+ var ol = createElement("ol");
248
+ var li = createElement("li");
249
+ var form = createElement("form");
250
+ var label = createElement("label");
251
+ var select = createElement("select");
252
+ var section = createElement("section");
253
+ var article = createElement("article");
254
+ var header = createElement("header");
255
+ var footer = createElement("footer");
256
+ var nav = createElement("nav");
257
+ var main = createElement("main");
258
+ var aside = createElement("aside");
259
+ var pre = createElement("pre");
260
+ var code = createElement("code");
261
+ var strong = createElement("strong");
262
+ var em = createElement("em");
263
+ var small = createElement("small");
264
+ var br = () => element({ tag: "br" });
265
+ var hr = () => element({ tag: "hr" });
266
+ var input = (props) => {
267
+ const { type, value, placeholder, disabled, attrs, ...restProps } = props;
268
+ const newAttrs = {
269
+ ...attrs || {},
270
+ ...type !== void 0 ? { type } : {},
271
+ ...placeholder !== void 0 ? { placeholder } : {},
272
+ ...disabled !== void 0 ? { disabled } : {}
273
+ };
274
+ return element({
275
+ tag: "input",
276
+ ...restProps,
277
+ attrs: newAttrs,
278
+ ...value !== void 0 ? { value } : {}
279
+ });
280
+ };
281
+ var img = (props) => {
282
+ return element({ tag: "img", ...props });
283
+ };
284
+ var textarea = (props) => {
285
+ const { value, placeholder, disabled, rows, cols, attrs, ...restProps } = props;
286
+ const newAttrs = {
287
+ ...attrs || {},
288
+ ...placeholder !== void 0 ? { placeholder } : {},
289
+ ...disabled !== void 0 ? { disabled } : {},
290
+ ...rows !== void 0 ? { rows } : {},
291
+ ...cols !== void 0 ? { cols } : {}
292
+ };
293
+ return element({
294
+ tag: "textarea",
295
+ ...restProps,
296
+ attrs: newAttrs,
297
+ ...value !== void 0 ? { children: String(value) } : {}
298
+ });
299
+ };
300
+ var option = (props) => {
301
+ const { value, selected, attrs, ...restProps } = props;
302
+ const newAttrs = {
303
+ ...attrs || {},
304
+ ...value !== void 0 ? { value } : {},
305
+ ...selected ? { selected: true } : {}
306
+ };
307
+ return element({
308
+ tag: "option",
309
+ ...restProps,
310
+ attrs: newAttrs
311
+ });
312
+ };
313
+ var canvas = (props) => {
314
+ const { width, height, attrs, ...restProps } = props;
315
+ const newAttrs = {
316
+ ...attrs || {},
317
+ ...width !== void 0 ? { width } : {},
318
+ ...height !== void 0 ? { height } : {}
319
+ };
320
+ return element({
321
+ tag: "canvas",
322
+ ...restProps,
323
+ attrs: newAttrs
324
+ });
325
+ };
326
+
327
+ // src/jsx-runtime.ts
328
+ __reExport(jsx_runtime_exports, jsx_runtime_star);
329
+ setTextPrimitive(text);
330
+ setFragmentPrimitive(fragment);
331
+ configureTags({
332
+ "": {
333
+ div,
334
+ span,
335
+ p,
336
+ a,
337
+ h1,
338
+ h2,
339
+ h3,
340
+ h4,
341
+ h5,
342
+ h6,
343
+ button,
344
+ input,
345
+ textarea,
346
+ select,
347
+ option,
348
+ label,
349
+ form,
350
+ ul,
351
+ ol,
352
+ li,
353
+ img,
354
+ canvas,
355
+ section,
356
+ article,
357
+ header,
358
+ footer,
359
+ nav,
360
+ main,
361
+ aside,
362
+ code,
363
+ pre,
364
+ strong,
365
+ em,
366
+ small,
367
+ br,
368
+ hr
369
+ }
370
+ });
371
+
372
+ // src/jsx-dev-runtime.ts
373
+ __reExport(jsx_dev_runtime_exports, jsx_runtime_exports);
374
+ //# sourceMappingURL=jsx-dev-runtime.js.map
375
+ //# sourceMappingURL=jsx-dev-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/jsx-dev-runtime.ts","../src/jsx-runtime.ts","../src/utils.ts","../src/components/element.ts","../src/components/text.ts","../src/components/fragment.ts","../src/components/elements.ts"],"names":["text","html"],"mappings":"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","file":"jsx-dev-runtime.js","sourcesContent":["/**\n * JSX Dev Runtime for @rasenjs/html\n * Development mode version with additional debugging info\n */\n\nexport * from './jsx-runtime'\n","/**\n * JSX Runtime integration for @rasenjs/html (SSR/SSG)\n * \n * Auto-configures jsx-runtime with HTML string primitives and tags.\n */\n\nimport { setTextPrimitive, setFragmentPrimitive, configureTags, type TextPrimitive, type FragmentPrimitive } from '@rasenjs/jsx-runtime'\nimport {\n text,\n fragment,\n // Text elements\n div,\n span,\n p,\n a,\n // Headings\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n // Form elements\n button,\n input,\n textarea,\n select,\n option,\n label,\n form,\n // Lists\n ul,\n ol,\n li,\n // Media\n img,\n canvas,\n // Semantic HTML5\n section,\n article,\n header,\n footer,\n nav,\n main,\n aside,\n // Formatting\n code,\n pre,\n strong,\n em,\n small,\n br,\n hr,\n} from './index'\n\n// Configure primitives\nsetTextPrimitive(text as TextPrimitive)\nsetFragmentPrimitive(fragment as FragmentPrimitive)\n\n// Configure all HTML tags\nconfigureTags({\n '': {\n div,\n span,\n p,\n a,\n h1,\n h2,\n h3,\n h4,\n h5,\n h6,\n button,\n input,\n textarea,\n select,\n option,\n label,\n form,\n ul,\n ol,\n li,\n img,\n canvas,\n section,\n article,\n header,\n footer,\n nav,\n main,\n aside,\n code,\n pre,\n strong,\n em,\n small,\n br,\n hr,\n }\n})\n\n// Re-export jsx-runtime\nexport * from '@rasenjs/jsx-runtime'\n","/**\n * HTML 转义字符映射\n */\nconst HTML_ESCAPE_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n}\n\n/**\n * 转义 HTML 特殊字符,防止 XSS\n */\nexport function escapeHtml(text: string): string {\n return text.replace(/[&<>\"']/g, (char) => HTML_ESCAPE_MAP[char] || char)\n}\n\n/**\n * 转义属性值\n */\nexport function escapeAttr(value: string): string {\n return value.replace(/[&<>\"]/g, (char) => HTML_ESCAPE_MAP[char] || char)\n}\n\n/**\n * 将属性值转换为字符串\n */\nexport function stringifyAttr(\n name: string,\n value: string | number | boolean | null | undefined\n): string {\n if (value === null || value === undefined || value === false) {\n return ''\n }\n if (value === true) {\n return ` ${name}`\n }\n return ` ${name}=\"${escapeAttr(String(value))}\"`\n}\n\n/**\n * 将样式对象转换为 style 属性字符串\n */\nexport function stringifyStyle(\n styles: Record<string, string | number | null | undefined>\n): string {\n const parts: string[] = []\n for (const [key, value] of Object.entries(styles)) {\n if (value !== null && value !== undefined) {\n // 将 camelCase 转换为 kebab-case\n const kebabKey = key.replace(/([A-Z])/g, '-$1').toLowerCase()\n parts.push(`${kebabKey}: ${value}`)\n }\n }\n return parts.join('; ')\n}\n\n/**\n * 将类名数组或对象转换为 class 属性字符串\n */\nexport function stringifyClass(\n className: string | string[] | Record<string, boolean> | undefined\n): string {\n if (!className) {\n return ''\n }\n if (typeof className === 'string') {\n return className\n }\n if (Array.isArray(className)) {\n return className.filter(Boolean).join(' ')\n }\n // 对象形式 { 'class-name': true/false }\n return Object.entries(className)\n .filter(([, value]) => value)\n .map(([key]) => key)\n .join(' ')\n}\n\n/**\n * 自闭合标签列表\n */\nexport const VOID_ELEMENTS = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n])\n\n/**\n * 判断是否为自闭合标签\n */\nexport function isVoidElement(tag: string): boolean {\n return VOID_ELEMENTS.has(tag.toLowerCase())\n}\n","import type { PropValue, Mountable } from '@rasenjs/core'\nimport { unrefValue } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport {\n stringifyAttr,\n stringifyStyle,\n escapeHtml,\n isVoidElement\n} from '../utils'\n\n/**\n * element 组件 - 通用 HTML 元素组件(字符串版本)\n *\n * SSR 场景下不需要响应式更新,直接取值渲染\n */\nexport const element = (props: {\n tag: string\n id?: PropValue<string>\n className?: PropValue<string>\n style?: PropValue<Record<string, string | number>>\n attrs?: PropValue<Record<string, string | number | boolean>>\n /** Text content or child mount functions (including reactive text functions) */\n children?: PropValue<string> | Array<string | (() => string | number) | Mountable<StringHost>>\n value?: PropValue<string | number>\n // SSR does not need events - removed for consistency\n}): Mountable<StringHost> => {\n return (host: StringHost) => {\n const tag = props.tag\n const isVoid = isVoidElement(tag)\n\n // 构建开始标签\n let html = `<${tag}`\n\n // id\n const id = unrefValue(props.id)\n if (id) {\n html += stringifyAttr('id', id)\n }\n\n // className\n const className = unrefValue(props.className)\n if (className) {\n html += stringifyAttr('class', className)\n }\n\n // style\n const style = unrefValue(props.style)\n if (style && Object.keys(style).length > 0) {\n html += stringifyAttr('style', stringifyStyle(style))\n }\n\n // value (for input, textarea, select)\n const value = unrefValue(props.value)\n if (value !== undefined) {\n html += stringifyAttr('value', String(value))\n }\n\n // attrs (other attributes)\n const attrs = unrefValue(props.attrs)\n if (attrs) {\n for (const [key, val] of Object.entries(attrs)) {\n // 跳过无效的属性名(数字开头或纯数字)\n if (/^\\d/.test(key)) continue\n html += stringifyAttr(key, val)\n }\n }\n \n // 处理其他props(除了特殊props和已处理的)\n const specialProps = new Set(['tag', 'id', 'className', 'style', 'value', 'attrs', 'children', 'on'])\n for (const [key, val] of Object.entries(props)) {\n if (specialProps.has(key)) continue\n if (key.startsWith('on')) continue // 跳过事件处理器(SSR不需要)\n if (val === undefined || val === null) continue\n \n const attrValue = unrefValue(val as PropValue<unknown>)\n if (attrValue !== undefined && attrValue !== null) {\n // 只处理基本类型(string, number, boolean)\n if (typeof attrValue === 'string' || typeof attrValue === 'number' || typeof attrValue === 'boolean') {\n html += stringifyAttr(key, attrValue)\n }\n }\n }\n\n html += '>'\n\n // 自闭合标签不需要内容和结束标签\n if (isVoid) {\n host.append(html)\n return undefined\n }\n\n // children (text content or mount functions)\n const children = props.children\n if (children !== undefined) {\n if (typeof children === 'string' || (typeof children === 'object' && 'value' in (children as any))) {\n // String content (or ref to string)\n html += escapeHtml(String(unrefValue(children as PropValue<string>)))\n } else if (Array.isArray(children) && children.length > 0) {\n // Array of children - 创建子宿主收集子元素内容\n const childHost: StringHost = {\n fragments: [],\n append(s: string) {\n this.fragments.push(s)\n },\n toString() {\n return this.fragments.join('')\n }\n }\n\n for (const child of children) {\n if (child === null || child === undefined) continue\n \n if (typeof child === 'string') {\n // String child\n childHost.append(escapeHtml(child))\n } else if (typeof child === 'function') {\n // Function - could be Mountable or reactive text function\n // Call it with childHost and check the return value type\n const result = (child as any)(childHost)\n \n // If it returns string/number, it's a reactive text function that ignored our parameter\n if (typeof result === 'string' || typeof result === 'number') {\n childHost.append(escapeHtml(String(result)))\n }\n // Otherwise it's a Mountable, already executed correctly\n }\n }\n\n html += childHost.toString()\n }\n }\n\n // 结束标签\n html += `</${tag}>`\n\n host.append(html)\n\n // SSR 不需要 unmount\n return undefined\n }\n}\n","/**\n * Text node component for HTML (SSR)\n * \n * Outputs escaped text content\n */\n\nimport type { Mountable } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport { escapeHtml } from '../utils'\n\nexport interface TextProps {\n /** Text content - can be static string/number or reactive getter */\n content: string | number | (() => string | number)\n}\n\n/**\n * Create a text node for SSR\n * \n * @example\n * ```ts\n * // Static text\n * text({ content: 'Hello' })\n * \n * // Reactive text (evaluates immediately in SSR)\n * text({ content: () => count.value })\n * ```\n */\nexport function text(props: TextProps): Mountable<StringHost> {\n const { content } = props\n\n return (host: StringHost) => {\n // Resolve content\n const textContent = typeof content === 'function' \n ? String(content())\n : String(content)\n \n // Append escaped text\n host.append(escapeHtml(textContent))\n \n return undefined\n }\n}\n","/**\n * HTML fragment implementation for SSR\n */\nimport { getReactiveRuntime, type Mountable, type FragmentChild } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport { escapeHtml } from '../utils'\n\n/**\n * HTML fragment uses empty comments as separators between text nodes\n * to preserve the same structure as client-side rendering for proper hydration\n */\nconst hostHooks = {\n createTextNode: (text: string) => {\n // Wrap each text piece with comment markers for hydration matching\n return `<!-- t -->${escapeHtml(text)}<!-- /t -->`\n },\n appendNode: (host: StringHost, node: string) => host.append(node),\n updateTextNode: () => {\n // SSR 中不需要更新文本节点\n },\n removeNode: () => {\n // SSR 中不需要移除节点\n }\n}\n\n/**\n * Fragment function interface for HTML/SSR\n */\ninterface FragmentFunction {\n (config: { children: Array<Mountable<StringHost>> }): Mountable<StringHost>\n (strings: TemplateStringsArray, ...values: FragmentChild<StringHost>[]): Mountable<StringHost>\n}\n\n/**\n * fragment - 组合多个子组件\n * \n * 注意:在 SSR 中,响应式值会被立即求值并转换为静态字符串\n * \n * @example\n * // 对象参数用法\n * fragment({ children: [child1, child2] })\n * \n * // Tagged template 用法\n * const count = ref(0)\n * fragment`Count: ${count} items` // SSR: 立即求值\n * \n * // 别名\n * f`Count: ${count} items`\n */\nexport const fragment: FragmentFunction = (\n configOrStrings: { children: Array<Mountable<StringHost>> } | TemplateStringsArray,\n ...values: FragmentChild<StringHost>[]\n): Mountable<StringHost> => {\n const runtime = getReactiveRuntime()\n \n // 检测是否是 tagged template 调用\n if (Array.isArray(configOrStrings) && 'raw' in configOrStrings) {\n const strings = configOrStrings as TemplateStringsArray\n \n // 直接生成 HTML 字符串而不是通过 core fragment\n // 这样可以避免每个片段都被包装,减少注释标记\n return (host: StringHost) => {\n let html = ''\n for (let i = 0; i < strings.length; i++) {\n if (strings[i]) {\n html += escapeHtml(strings[i])\n }\n if (i < values.length) {\n const value = values[i]\n // Check if it's a ref\n if (runtime.isRef(value)) {\n html += escapeHtml(String((value as any).value))\n } else if (typeof value === 'string' || typeof value === 'number') {\n html += escapeHtml(String(value))\n }\n // Mountables not supported in template strings for SSR\n }\n }\n host.append(html)\n return undefined\n }\n }\n \n // For object config, import core fragment\n const { fragment: coreFragment } = require('@rasenjs/core')\n const config = configOrStrings as { children: Array<Mountable<StringHost>> }\n return coreFragment({ children: config.children, hooks: hostHooks })\n}\n\n/**\n * f - fragment 的简写别名\n */\nexport const f = fragment\n","import type { PropValue, Mountable } from '@rasenjs/core'\nimport type { StringHost } from '../types'\nimport { element } from './element'\n\n// ============================================================================\n// Type definitions\n// ============================================================================\n\ninterface BaseProps {\n id?: PropValue<string>\n class?: PropValue<string>\n className?: PropValue<string>\n style?: PropValue<Record<string, string | number>>\n attrs?: PropValue<Record<string, string | number | boolean>>\n /** Text content or child mount functions */\n children?: PropValue<string> | Array<string | (() => string | number) | Mountable<StringHost>>\n // SSR does not support events - removed on, onClick, onInput, etc.\n}\n\n/** Child type - 响应式文本函数优先匹配 */\ntype Child = string | (() => string | number) | Mountable<StringHost>\n\n/**\n * Factory function to create HTML element components\n * Supports: el(), el('text'), el(child), el(props), el(props, ...children)\n */\nfunction createElement(tag: string) {\n return (\n propsOrChild?: BaseProps | Child,\n ...restChildren: Child[]\n ): Mountable<StringHost> => {\n // No arguments\n if (propsOrChild === undefined) {\n return element({ tag })\n }\n\n // First argument is string or function (Mountable or reactive text), treat as child\n if (\n typeof propsOrChild === 'string' ||\n typeof propsOrChild === 'function'\n ) {\n const children = [propsOrChild, ...restChildren]\n return element({ tag, children })\n }\n \n // First argument is props object\n const props = propsOrChild as BaseProps\n \n // Normalize props: convert `class` to `className` for element()\n const { class: cls, className, ...restProps } = props as any\n const normalizedProps = {\n ...restProps,\n className: className || cls\n }\n \n if (restChildren.length > 0) {\n // Merge children\n const existingChildren = props.children\n const children = Array.isArray(existingChildren)\n ? [...existingChildren, ...restChildren]\n : existingChildren !== undefined\n ? [existingChildren, ...restChildren]\n : restChildren\n \n return element({ tag, ...normalizedProps, children })\n }\n\n return element({ tag, ...normalizedProps })\n }\n}\n\n// ============================================================================\n// Common elements\n// ============================================================================\n\nexport const div = createElement('div')\nexport const span = createElement('span')\nexport const button = createElement('button')\nexport const a = createElement('a')\nexport const p = createElement('p')\n\n// Headings\nexport const h1 = createElement('h1')\nexport const h2 = createElement('h2')\nexport const h3 = createElement('h3')\nexport const h4 = createElement('h4')\nexport const h5 = createElement('h5')\nexport const h6 = createElement('h6')\n\n// Lists\nexport const ul = createElement('ul')\nexport const ol = createElement('ol')\nexport const li = createElement('li')\n\n// Forms\nexport const form = createElement('form')\nexport const label = createElement('label')\nexport const select = createElement('select')\n\n// Tables\nexport const table = createElement('table')\nexport const thead = createElement('thead')\nexport const tbody = createElement('tbody')\nexport const tfoot = createElement('tfoot')\nexport const tr = createElement('tr')\nexport const th = createElement('th')\nexport const td = createElement('td')\n\n// Semantic layout\nexport const section = createElement('section')\nexport const article = createElement('article')\nexport const header = createElement('header')\nexport const footer = createElement('footer')\nexport const nav = createElement('nav')\nexport const main = createElement('main')\nexport const aside = createElement('aside')\n\n// Other common elements\nexport const pre = createElement('pre')\nexport const code = createElement('code')\nexport const blockquote = createElement('blockquote')\nexport const strong = createElement('strong')\nexport const em = createElement('em')\nexport const small = createElement('small')\nexport const mark = createElement('mark')\nexport const del = createElement('del')\nexport const ins = createElement('ins')\nexport const sub = createElement('sub')\nexport const sup = createElement('sup')\nexport const svg = createElement('svg')\n\n// Self-closing elements\nexport const br = () => element({ tag: 'br' })\nexport const hr = () => element({ tag: 'hr' })\n\n// ============================================================================\n// Special elements with extended props\n// ============================================================================\n\n/**\n * input component\n */\nexport const input = (\n props: BaseProps & {\n type?: PropValue<string>\n value?: PropValue<string | any>\n placeholder?: PropValue<string>\n disabled?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { type, value, placeholder, disabled, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(type !== undefined ? { type } : {}),\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(disabled !== undefined ? { disabled } : {})\n }\n\n return element({\n tag: 'input',\n ...restProps,\n attrs: newAttrs as any,\n ...(value !== undefined ? { value } : {})\n })\n}\n\n/**\n * img component\n */\nexport const img = (props: BaseProps & {\n src?: PropValue<string>\n alt?: PropValue<string>\n width?: PropValue<string | number>\n height?: PropValue<string | number>\n}): Mountable<StringHost> => {\n return element({ tag: 'img', ...props })\n}\n\n/**\n * textarea component\n */\nexport const textarea = (\n props: BaseProps & {\n value?: PropValue<string>\n placeholder?: PropValue<string>\n disabled?: PropValue<boolean>\n rows?: PropValue<number>\n cols?: PropValue<number>\n }\n): Mountable<StringHost> => {\n const { value, placeholder, disabled, rows, cols, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(placeholder !== undefined ? { placeholder } : {}),\n ...(disabled !== undefined ? { disabled } : {}),\n ...(rows !== undefined ? { rows } : {}),\n ...(cols !== undefined ? { cols } : {})\n }\n\n // textarea value should be children (text content)\n return element({\n tag: 'textarea',\n ...restProps,\n attrs: newAttrs as any,\n ...(value !== undefined ? { children: String(value) } : {})\n })\n}\n\n/**\n * option component\n */\nexport const option = (\n props: BaseProps & {\n value?: PropValue<string | number>\n selected?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { value, selected, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(value !== undefined ? { value } : {}),\n ...(selected ? { selected: true } : {})\n }\n\n return element({\n tag: 'option',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * video component\n */\nexport const video = (\n props: BaseProps & {\n src?: PropValue<string>\n poster?: PropValue<string>\n controls?: PropValue<boolean>\n autoplay?: PropValue<boolean>\n loop?: PropValue<boolean>\n muted?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { src, poster, controls, autoplay, loop, muted, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(poster !== undefined ? { poster } : {}),\n ...(controls ? { controls: true } : {}),\n ...(autoplay ? { autoplay: true } : {}),\n ...(loop ? { loop: true } : {}),\n ...(muted ? { muted: true } : {})\n }\n\n return element({\n tag: 'video',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * audio component\n */\nexport const audio = (\n props: BaseProps & {\n src?: PropValue<string>\n controls?: PropValue<boolean>\n autoplay?: PropValue<boolean>\n loop?: PropValue<boolean>\n muted?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { src, controls, autoplay, loop, muted, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(controls ? { controls: true } : {}),\n ...(autoplay ? { autoplay: true } : {}),\n ...(loop ? { loop: true } : {}),\n ...(muted ? { muted: true } : {})\n }\n\n return element({\n tag: 'audio',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * source component\n */\nexport const source = (\n props: BaseProps & {\n src?: PropValue<string>\n type?: PropValue<string>\n }\n): Mountable<StringHost> => {\n const { src, type, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(type !== undefined ? { type } : {})\n }\n\n return element({\n tag: 'source',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * iframe component\n */\nexport const iframe = (\n props: BaseProps & {\n src?: PropValue<string>\n width?: PropValue<string | number>\n height?: PropValue<string | number>\n frameborder?: PropValue<string | number>\n allowfullscreen?: PropValue<boolean>\n }\n): Mountable<StringHost> => {\n const { src, width, height, frameborder, allowfullscreen, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(src !== undefined ? { src } : {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {}),\n ...(frameborder !== undefined ? { frameborder } : {}),\n ...(allowfullscreen ? { allowfullscreen: true } : {})\n }\n\n return element({\n tag: 'iframe',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n\n/**\n * canvas component (SSR only renders empty canvas tag)\n */\nexport const canvas = (\n props: BaseProps & {\n width?: PropValue<string | number>\n height?: PropValue<string | number>\n }\n): Mountable<StringHost> => {\n const { width, height, attrs, ...restProps } = props as any\n\n const newAttrs = {\n ...(attrs || {}),\n ...(width !== undefined ? { width } : {}),\n ...(height !== undefined ? { height } : {})\n }\n\n return element({\n tag: 'canvas',\n ...restProps,\n attrs: newAttrs as any\n })\n}\n"]}