bobe-dom 0.0.60 → 0.0.62

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.
@@ -426,8 +426,7 @@ class TreeCursor {
426
426
  }
427
427
  }
428
428
  const hydrate = (ComponentClass, rootEl) => {
429
- const container = rootEl.parentNode;
430
- const cursor = new TreeCursor(container);
429
+ const cursor = new TreeCursor(rootEl);
431
430
  let isFirstRender = true;
432
431
  const hydrateSetProp = (node, key, value) => {
433
432
  if (isFirstRender && (key === 'text' || key === 'html')) {
@@ -486,7 +485,7 @@ const hydrate = (ComponentClass, rootEl) => {
486
485
  isFirstRender = false;
487
486
  }
488
487
  });
489
- return render(ComponentClass, container);
488
+ return render(ComponentClass, rootEl);
490
489
  };
491
490
 
492
491
  exports.BOOLEAN_ATTRS = BOOLEAN_ATTRS$1;
@@ -1 +1 @@
1
- {"version":3,"file":"bobe-dom.cjs.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = 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\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\nclass TreeCursor {\n private parent: Node;\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const container = rootEl.parentNode!;\n const cursor = new TreeCursor(container);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, container);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
1
+ {"version":3,"file":"bobe-dom.cjs.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = 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\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\n/**\n * SSR DOM 认领游标。\n *\n * 工作方式:\n * - 维护一个 `parent` 指针,始终指向\"当前容器\"。\n * - `findUnclaimed` 只在 `parent.firstChild` 中平铺搜索(只搜一层,不递归)。\n * - 认领过的节点放入 `claimed` WeakSet,同一次遍历不会重复认领。\n *\n * 典型调用(以 hydrate 测试为例):\n * container.innerHTML = ssrHtml; // <div id=\"app1\"><div>SSR...</div></div>\n * hydrate(Ctor, container);\n *\n * hydrate 内部:\n * cursor = new TreeCursor(rootEl.parentNode); // 光标起点 = container,即 <div id=\"app1\">\n * createNode('div') → findUnclaimed 搜 <div id=\"app1\"> 的直接子级 → 找到 rootEl → 认领 ✅\n * beforeIndent → enterChildren(rootEl) // 光标进入 rootEl\n * createNode('nav') → findUnclaimed 搜 rootEl 的直接子级 → 找到 SSR <nav> → 认领 ✅\n *\n * 关键约束:游标只在当前层级搜索。这就是为什么光标起点必须在 container 层——让 App 的\n * 外层 div 在 container 的子级中被认领,而不是在 <body> 层误将 #app 当 div 认领走。\n */\nclass TreeCursor {\n /** 当前搜索容器——findUnclaimed 在此节点的 firstChild 链上搜索 */\n private parent: Node;\n /** 已认领节点集合,避免同一次遍历中重复认领 */\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n /** 进入子节点:后续 findUnclaimed 搜 node 的直接子级 */\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n /** 退出当前节点,回到父级 */\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n /** 在 this.parent 的 firstChild 链上查找第一个满足条件且未被认领的节点 */\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n /** 认领一个未使用的元素节点(按 tagName 匹配) */\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n /** 认领一个未使用的注释节点(按注释内容匹配) */\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n /** 认领一个未使用的文本节点(非空文本) */\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const cursor = new TreeCursor(rootEl);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, rootEl);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
@@ -424,8 +424,7 @@ class TreeCursor {
424
424
  }
425
425
  }
426
426
  const hydrate = (ComponentClass, rootEl) => {
427
- const container = rootEl.parentNode;
428
- const cursor = new TreeCursor(container);
427
+ const cursor = new TreeCursor(rootEl);
429
428
  let isFirstRender = true;
430
429
  const hydrateSetProp = (node, key, value) => {
431
430
  if (isFirstRender && (key === 'text' || key === 'html')) {
@@ -484,7 +483,7 @@ const hydrate = (ComponentClass, rootEl) => {
484
483
  isFirstRender = false;
485
484
  }
486
485
  });
487
- return render(ComponentClass, container);
486
+ return render(ComponentClass, rootEl);
488
487
  };
489
488
 
490
489
  export { BOOLEAN_ATTRS$1 as BOOLEAN_ATTRS, CONTENT_FLAG, beforeIndent$1 as beforeIndent, createAnchor$1 as createAnchor, createNode$1 as createNode, firstChild$1 as firstChild, hydrate, insertAfter$1 as insertAfter, leaveLogicNode$1 as leaveLogicNode, leaveNode$1 as leaveNode, nextSib$1 as nextSib, remove$1 as remove, render, renderHtmlStr, setProp$1 as setProp };
@@ -1 +1 @@
1
- {"version":3,"file":"bobe-dom.esm.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = 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\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\nclass TreeCursor {\n private parent: Node;\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const container = rootEl.parentNode!;\n const cursor = new TreeCursor(container);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, container);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
1
+ {"version":3,"file":"bobe-dom.esm.js","sources":["../src/render.ts","../src/global.ts","../src/type.ts","../src/render-html-str.ts","../src/render-hydrate.ts"],"sourcesContent":["import { customRender } from 'bobe';\n\nexport const BOOLEAN_ATTRS = new Set([\n 'disabled', 'readonly', 'checked', 'selected', 'hidden',\n 'multiple', 'required', 'autofocus', 'autoplay', 'controls',\n 'loop', 'muted', 'defer', 'async', 'reversed', 'open',\n 'itemscope', 'ismap', 'nohref', 'noshade', 'nowrap', 'compact', 'default'\n]);\n\nconst VALUE_PROP_TAGS = new Set(['INPUT', 'TEXTAREA', 'SELECT']);\n\nconst SVG_NS = 'http://www.w3.org/2000/svg';\nconst MATH_NS = 'http://www.w3.org/1998/Math/MathML';\n\nconst SVG_TAGS = new Set([\n 'svg', 'animate', 'animateMotion', 'animateTransform', 'circle', 'clipPath',\n 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer',\n 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap',\n 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG',\n 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology',\n 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile',\n 'feTurbulence', 'filter', 'foreignObject', 'g', 'image', 'line', 'linearGradient',\n 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline',\n 'radialGradient', 'rect', 'set', 'stop', 'switch', 'symbol', 'textPath',\n 'tspan', 'use', 'view'\n]);\n\nconst MATH_TAGS = new Set([\n 'math', 'maction', 'maligngroup', 'malignmark', 'menclose', 'merror',\n 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mlongdiv', 'mmultiscripts',\n 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mscarries',\n 'mscarry', 'msgroup', 'mstack', 'mspace', 'msqrt', 'msrow', 'mstyle', 'msub',\n 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover',\n 'semantics', 'annotation', 'annotation-xml'\n]);\n\nconst isNS = (el: Element) => el.namespaceURI === SVG_NS || el.namespaceURI === MATH_NS;\n\n// ---- exported for unit testing ----\n\nexport const createNode = (name: string): Node => {\n if (name === 'text') return document.createTextNode('');\n if (MATH_TAGS.has(name)) return document.createElementNS(MATH_NS, name);\n if (SVG_TAGS.has(name)) return document.createElementNS(SVG_NS, name);\n return document.createElement(name);\n};\n\nexport const CONTENT_FLAG = Symbol('hasContent');\n\nexport const setProp = (node: Node, key: string, value: any): (() => void) | undefined => {\n const el = node as HTMLElement;\n\n // 0. text\n if (key === 'text') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. 事件\n if (key.startsWith('on')) {\n const evtName = key.slice(2);\n node.addEventListener(evtName, value);\n return () => node.removeEventListener(evtName, value);\n }\n\n // 2. class\n if (key === 'class') {\n if (value == null) {\n el.className = '';\n } else if (typeof value === 'object' && !Array.isArray(value)) {\n if (isNS(el)) {\n const names = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n el.setAttribute('class', names);\n } else {\n for (const k in value) {\n el.classList.toggle(k, !!(value as Record<string, any>)[k]);\n }\n }\n } else {\n const str = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n if (isNS(el)) {\n el.setAttribute('class', str);\n } else {\n el.className = str;\n }\n }\n return;\n }\n\n // 3. style\n if (key === 'style') {\n if (value == null) {\n el.style.cssText = '';\n } else {\n el.style.cssText = String(value);\n }\n return;\n }\n\n // 4. html\n if (key === 'html') {\n (node as any)[CONTENT_FLAG] = value != null;\n if (value == null) return;\n (node as Element).innerHTML = String(value);\n return;\n }\n\n // 5. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value === false || value === null || value === undefined) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, '');\n }\n return;\n }\n\n // 6. input/textarea/select value & checked\n if ((key === 'value' || key === 'checked') && VALUE_PROP_TAGS.has(el.tagName)) {\n (el as any)[key] = value;\n return;\n }\n\n // 7. SVG/MathML 元素\n if (isNS(el)) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 8. data-* / aria-*\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) {\n el.removeAttribute(key);\n } else {\n el.setAttribute(key, String(value));\n }\n return;\n }\n\n // 9. 其余属性\n if (value == null) {\n el.removeAttribute(key);\n } else if (key in el) {\n (el as any)[key] = value;\n } else {\n el.setAttribute(key, String(value));\n }\n};\n\nexport const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (!prev) parent.insertBefore(node, parent.firstChild);\n else parent.insertBefore(node, prev.nextSibling);\n};\n\nexport const createAnchor = (name: string) => document.createComment(name);\n\nexport const remove = (node: Node) => { (node as Element).remove(); };\n\nexport const firstChild = (node: Node) => node.firstChild;\n\nexport const nextSib = (node: Node) => node.nextSibling;\n\nexport const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(`<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`);\n return false;\n }\n};\n\n// 浏览器渲染器中 leave 不需要额外操作(DOM 插入已由 insertAfter 完成)\nexport const leaveNode = () => {};\nexport const leaveLogicNode = () => {};\n\nexport const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode\n});\n","import { SSRCtx } from './type';\nexport let ctx: SSRCtx = {\n root: null,\n current: null\n};\n\nexport const cleanCtx = () =>\n Object.keys(ctx).forEach(key => {\n ctx[key] = null;\n });\n","export class SSRNode {\n type: SSRNodeType;\n // 链表\n parent?: SSRNode | null = null;\n firstChild: SSRNode | null = null;\n lastChild: SSRNode | null = null; // O(1) 尾插\n nextSibling: SSRNode | null = null;\n prevSibling: SSRNode | null = null;\n closed: boolean = false;\n startClosed: boolean = false;\n // innerHTML 缓存\n _innerHtml: string | null = null;\n}\n\nexport enum SSRNodeType {\n Element,\n Text,\n Anchor,\n Root\n}\n\nexport class Element extends SSRNode {\n type = SSRNodeType.Element;\n textContent: string | null = null;\n\n attrs: Record<string, string> = {};\n constructor(\n /** 标签名 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Text extends SSRNode {\n type = SSRNodeType.Text;\n constructor(\n /** 文本内容 */\n public textContent: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport class Anchor extends SSRNode {\n type = SSRNodeType.Anchor;\n constructor(\n /** 注释内容 */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\nexport class Root extends SSRNode {\n type = SSRNodeType.Root;\n constructor(\n /** 输出 HTML */\n public value: string,\n public parent?: SSRNode | null\n ) {\n super();\n }\n}\n\nexport type SSRCtx = {\n /** 根节点 */\n root: Root;\n /** 当前节点 */\n current: SSRNode;\n};\n","import { customRender, Store, LogicNode } from 'bobe';\nimport { cleanCtx, ctx } from './global';\nimport { Root, Element, Text, Anchor, SSRNode, SSRNodeType } from './type';\n\nconst VOID_TAGS = 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\nconst BOOLEAN_ATTRS = new Set([\n 'disabled',\n 'readonly',\n 'checked',\n 'selected',\n 'hidden',\n 'multiple',\n 'required',\n 'autofocus',\n 'autoplay',\n 'controls',\n 'loop',\n 'muted',\n 'defer',\n 'async',\n 'reversed',\n 'open',\n 'itemscope',\n 'ismap',\n 'nohref',\n 'noshade',\n 'nowrap',\n 'compact',\n 'default'\n]);\n\nconst ATTR_RE = /[&\"<>]/g;\nconst TEXT_RE = /[&<>]/g;\nconst ATTR_MAP: Record<string, string> = {\n '&': '&amp;',\n '\"': '&quot;',\n '<': '&lt;',\n '>': '&gt;'\n};\nconst TEXT_MAP: Record<string, string> = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;'\n};\n\nconst escapeAttr = (str: string) => {\n const s = String(str);\n return ATTR_RE.test(s) ? s.replace(ATTR_RE, m => ATTR_MAP[m]) : s;\n};\n\nconst escapeText = (str: string) => {\n const s = String(str);\n return TEXT_RE.test(s) ? s.replace(TEXT_RE, m => TEXT_MAP[m]) : s;\n};\n\nconst createNode = (name: string) => {\n if (name === 'text') {\n return new Text('');\n }\n ctx.root.value += `<${name}`;\n return new Element(name);\n};\n\nconst setProp = (node: Text | Element, key: string, value: any) => {\n if (node.startClosed) return;\n if (key.startsWith('on') || key === 'ref') return;\n\n // 0. text\n if (key === 'text') {\n if (value == null) return;\n node.textContent = value;\n return;\n }\n\n // 1. html\n if (key === 'html') {\n if (value == null) return;\n node._innerHtml = String(value);\n return;\n }\n\n // 2. class — 对齐 Browser:支持对象/字符串/null\n if (key === 'class') {\n if (value == null) return;\n let classStr: string;\n if (typeof value === 'object' && !Array.isArray(value)) {\n classStr = Object.entries(value as Record<string, any>)\n .filter(([, v]) => !!v)\n .map(([k]) => k)\n .join(' ');\n } else {\n classStr = typeof value === 'boolean' ? (value ? 'true' : '') : String(value);\n }\n if (classStr) ctx.root.value += ` class=\"${escapeAttr(classStr)}\"`;\n return;\n }\n\n // 3. style — 对齐 Browser\n if (key === 'style') {\n if (value == null) return;\n ctx.root.value += ` style=\"${escapeAttr(String(value))}\"`;\n return;\n }\n\n // 4. 布尔属性\n if (BOOLEAN_ATTRS.has(key)) {\n if (value !== false && value !== null && value !== undefined) {\n ctx.root.value += ` ${key}`;\n }\n return;\n }\n\n // 5. data-* / aria-* — 对齐 Browser:null 时不输出\n if (key.startsWith('data-') || key.startsWith('aria-')) {\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n return;\n }\n\n // 6. 其余属性 — 对齐 Browser:null 时不输出\n if (value == null) return;\n ctx.root.value += ` ${key}=\"${escapeAttr(value)}\"`;\n};\n\nconst appendInnerContent = (node: Element) => {\n if (node._innerHtml != null) {\n ctx.root.value += node._innerHtml;\n return true;\n }\n if (node.textContent != null) {\n ctx.root.value += escapeText(node.textContent);\n return true;\n }\n return false;\n};\n\nconst beforeIndent = (node: Text | Element): boolean => {\n if (node instanceof Text) return true;\n\n const hasText = node.textContent != null;\n const hasHtml = node._innerHtml != null;\n\n // 不能包含内容的元素\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += `/>`;\n console.warn(`<${node.value}> can't have children`);\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n if (hasText || hasHtml) {\n console.warn(`<${node.value}> has ${hasHtml ? 'html' : 'text'} content and child elements — children ignored`);\n ctx.root.value += `>`;\n // 容器元素有 text/html 内容且检测到子节点冲突,立即闭合;与 leaveNode 叶元素路径互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n node.startClosed = true;\n node.closed = true;\n return false;\n }\n\n ctx.root.value += `>`;\n node.startClosed = true;\n return true;\n};\n\nconst leaveLogicNode = (node: LogicNode) => {\n const realAfter = node.realAfter as Anchor;\n ctx.root.value += `<!--${realAfter.value}-->`;\n};\nconst leaveNode = (node: Text | Element, isDedent: boolean) => {\n /**\n * indent 提前 closed 就退出,这两种都是有缩进的\n * 1. 元素属于 VOID_TAGS\n * 2. 元素 text/html 属性与 children 冲突,采用 text/html\n */\n if (node.closed) return;\n if (node instanceof Text) {\n ctx.root.value += escapeText(node.textContent);\n } else {\n // 如果现在是 \"<div>\" 状态,添加 />\n if (node.startClosed) {\n // 什么都不做,正常永远都不会进入,因为 beforeIndent 会直接加 /> 设置 closed = true\n if (VOID_TAGS.has(node.value)) {\n } else {\n ctx.root.value += `</${node.value}>`;\n }\n }\n // 无 startClosed, 叶子节点\n else {\n // 直接自闭合\n if (VOID_TAGS.has(node.value)) {\n ctx.root.value += ` />`;\n }\n // 先加入 '>' 再看有内容加内容,最后反 Tag 闭合\n else {\n ctx.root.value += `>`;\n // 叶元素,无子节点;与 beforeIndent 中的 appendInnerContent 互斥\n appendInnerContent(node);\n ctx.root.value += `</${node.value}>`;\n }\n }\n }\n};\n\nconst insertAfter = (parent: SSRNode, node: SSRNode, prev: SSRNode | null) => {\n const next = prev ? prev.nextSibling : parent.firstChild;\n node.nextSibling = next;\n node.prevSibling = prev;\n\n if (prev) {\n prev.nextSibling = node;\n } else {\n parent.firstChild = node;\n }\n if (next) {\n next.prevSibling = node;\n } else {\n parent.lastChild = node;\n }\n node.parent = parent;\n};\n\nconst createAnchor = (name: string, isBefore?: boolean) => {\n if (isBefore) {\n ctx.root.value += `<!--${name}-->`;\n }\n return new Anchor(name);\n};\n\nconst remove = (node: SSRNode) => {\n const { parent, prevSibling, nextSibling } = node;\n if (prevSibling) {\n prevSibling.nextSibling = nextSibling;\n }\n if (nextSibling) {\n nextSibling.prevSibling = prevSibling;\n }\n if (parent) {\n if (parent.firstChild === node) {\n parent.firstChild = nextSibling;\n }\n if (parent.lastChild === node) {\n parent.lastChild = prevSibling;\n }\n }\n};\n\nconst firstChild = (node: SSRNode) => node.firstChild;\n\nconst nextSib = (node: SSRNode) => node.nextSibling;\n\nexport const renderHtmlStr = (ComponentClass: typeof Store) => {\n cleanCtx();\n const root = new Root('');\n ctx.root = ctx.current = root;\n const render = customRender({\n createNode,\n setProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n noopEffect: true\n });\n render(ComponentClass, root);\n return {\n html: ctx.root.value\n };\n};\n","import { customRender, Store } from 'bobe';\nimport {\n setProp,\n createNode as browserCreateNode,\n remove,\n firstChild,\n nextSib,\n CONTENT_FLAG\n} from './render';\n\n// ====== TreeCursor ======\n\n/**\n * SSR DOM 认领游标。\n *\n * 工作方式:\n * - 维护一个 `parent` 指针,始终指向\"当前容器\"。\n * - `findUnclaimed` 只在 `parent.firstChild` 中平铺搜索(只搜一层,不递归)。\n * - 认领过的节点放入 `claimed` WeakSet,同一次遍历不会重复认领。\n *\n * 典型调用(以 hydrate 测试为例):\n * container.innerHTML = ssrHtml; // <div id=\"app1\"><div>SSR...</div></div>\n * hydrate(Ctor, container);\n *\n * hydrate 内部:\n * cursor = new TreeCursor(rootEl.parentNode); // 光标起点 = container,即 <div id=\"app1\">\n * createNode('div') → findUnclaimed 搜 <div id=\"app1\"> 的直接子级 → 找到 rootEl → 认领 ✅\n * beforeIndent → enterChildren(rootEl) // 光标进入 rootEl\n * createNode('nav') → findUnclaimed 搜 rootEl 的直接子级 → 找到 SSR <nav> → 认领 ✅\n *\n * 关键约束:游标只在当前层级搜索。这就是为什么光标起点必须在 container 层——让 App 的\n * 外层 div 在 container 的子级中被认领,而不是在 <body> 层误将 #app 当 div 认领走。\n */\nclass TreeCursor {\n /** 当前搜索容器——findUnclaimed 在此节点的 firstChild 链上搜索 */\n private parent: Node;\n /** 已认领节点集合,避免同一次遍历中重复认领 */\n private claimed = new WeakSet<Node>();\n\n constructor(container: Node) {\n this.parent = container;\n }\n\n /** 进入子节点:后续 findUnclaimed 搜 node 的直接子级 */\n enterChildren(node: Node) {\n this.parent = node;\n }\n\n /** 退出当前节点,回到父级 */\n leaveToParent(node: Node) {\n if (node === this.parent && this.parent.parentNode) {\n this.parent = this.parent.parentNode;\n }\n }\n\n /** 在 this.parent 的 firstChild 链上查找第一个满足条件且未被认领的节点 */\n private findUnclaimed(predicate: (node: Node) => boolean): Node | null {\n let node = this.parent.firstChild;\n while (node) {\n if (!this.claimed.has(node) && predicate(node)) {\n this.claimed.add(node);\n return node;\n }\n node = node.nextSibling;\n }\n return null;\n }\n\n /** 认领一个未使用的元素节点(按 tagName 匹配) */\n tryClaimElement(tagName: string): Element | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 1 && (node as Element).tagName.toLowerCase() === tagName\n ) as Element | null;\n }\n\n /** 认领一个未使用的注释节点(按注释内容匹配) */\n tryClaimComment(name: string): Comment | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 8 && (node as Comment).data === name\n ) as Comment | null;\n }\n\n /** 认领一个未使用的文本节点(非空文本) */\n tryClaimText(): Text | null {\n return this.findUnclaimed(\n (node) => node.nodeType === 3 && !!(node.textContent?.trim())\n ) as Text | null;\n }\n}\n\n// ====== 回调 ======\n\nexport const hydrate = (ComponentClass: typeof Store, rootEl: Element) => {\n const cursor = new TreeCursor(rootEl);\n // 首屏 render 期间(含 flushMicroEffectManual 中的 for/if effect 首次执行)为 true\n // 后续响应式更新为 false,createNode/createAnchor 直接创建新节点\n let isFirstRender = true;\n\n // 首屏时 text/html 的 DOM 内容已由 SSR 生成,跳过 innerHTML/textContent 赋值避免重绘\n // 但仍需设 CONTENT_FLAG 保证 beforeIndent 冲突检测正常\n const hydrateSetProp = (node: Node, key: string, value: any) => {\n if (isFirstRender && (key === 'text' || key === 'html')) {\n (node as any)[CONTENT_FLAG] = value != null;\n return;\n }\n return setProp(node, key, value);\n };\n\n const createNode = (name: string): Node => {\n if (isFirstRender) {\n const claimed = name === 'text'\n ? cursor.tryClaimText()\n : cursor.tryClaimElement(name);\n if (claimed) return claimed;\n }\n return name === 'text'\n ? document.createTextNode('')\n : browserCreateNode(name);\n };\n\n const createAnchor = (name: string): Comment => {\n if (isFirstRender) {\n const claimed = cursor.tryClaimComment(name);\n if (claimed) return claimed;\n }\n return document.createComment(name);\n };\n\n const insertAfter = (parent: Node, node: Node, prev: Node | null) => {\n if (node === parent) return;\n const expectedNext = prev ? prev.nextSibling : parent.firstChild;\n if (node === expectedNext) return;\n parent.insertBefore(node, expectedNext);\n };\n\n const beforeIndent = (node: Node): boolean | void => {\n if ((node as any)[CONTENT_FLAG]) {\n const tag = (node as Element).tagName?.toLowerCase();\n const hasText = (node as HTMLElement).textContent != null;\n console.warn(\n `<${tag}> has ${hasText ? 'text' : 'html'} content and child elements — children ignored`\n );\n return false;\n }\n if (isFirstRender) cursor.enterChildren(node);\n };\n\n const leaveNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const leaveLogicNode = (node: Node) => {\n if (isFirstRender) cursor.leaveToParent(node);\n };\n\n const render = customRender({\n createNode,\n setProp: hydrateSetProp,\n insertAfter,\n createAnchor,\n remove,\n firstChild,\n nextSib,\n beforeIndent,\n leaveNode,\n leaveLogicNode,\n // program() 遍历完模板后、flushMicroEffectManual 首次执行 effect 前切回首屏标志\n // 后续 for/if effect 中的 createNode 走浏览器新建路径,不再尝试从 SSR DOM 认领\n onBeforeFlush: () => {\n isFirstRender = false;\n }\n });\n\n return render(ComponentClass, rootEl);\n};\n"],"names":["BOOLEAN_ATTRS","Set","VALUE_PROP_TAGS","SVG_NS","MATH_NS","SVG_TAGS","MATH_TAGS","isNS","el","namespaceURI","createNode","name","document","createTextNode","has","createElementNS","createElement","CONTENT_FLAG","Symbol","setProp","node","key","value","textContent","startsWith","evtName","slice","addEventListener","removeEventListener","className","Array","isArray","names","Object","entries","filter","v","map","k","join","setAttribute","classList","toggle","str","String","style","cssText","innerHTML","undefined","removeAttribute","tagName","insertAfter","parent","prev","insertBefore","firstChild","nextSibling","createAnchor","createComment","remove","nextSib","beforeIndent","tag","toLowerCase","hasText","console","warn","leaveNode","leaveLogicNode","render","customRender","ctx","root","current","cleanCtx","keys","forEach","SSRNode","lastChild","prevSibling","closed","startClosed","_innerHtml","SSRNodeType","Element","type","attrs","constructor","Text","Anchor","Root","VOID_TAGS","ATTR_RE","TEXT_RE","ATTR_MAP","TEXT_MAP","escapeAttr","s","test","replace","m","escapeText","classStr","appendInnerContent","hasHtml","realAfter","isDedent","next","isBefore","renderHtmlStr","ComponentClass","noopEffect","html","TreeCursor","claimed","WeakSet","container","enterChildren","leaveToParent","parentNode","findUnclaimed","predicate","add","tryClaimElement","nodeType","tryClaimComment","data","tryClaimText","trim","hydrate","rootEl","cursor","isFirstRender","hydrateSetProp","browserCreateNode","expectedNext","onBeforeFlush"],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ var bobe = require('bobe');
4
+
5
+ class Code extends bobe.Store {
6
+ activeIndex = 0;
7
+ files = [];
8
+ switchTab(i) {
9
+ this.activeIndex = i;
10
+ }
11
+ get activeFile() {
12
+ return this.files[this.activeIndex];
13
+ }
14
+ preview = null;
15
+ normalBlock = null;
16
+ fullBlock = null;
17
+ isFull = false;
18
+ toggleFull = () => {
19
+ this.isFull = !this.isFull;
20
+ console.log('isFull', this.isFull);
21
+ };
22
+ get blockTarget() {
23
+ return this.isFull ? this.fullBlock : this.normalBlock;
24
+ }
25
+ ui = bobe.bobe`
26
+ tp node={blockTarget}
27
+ div class="code-tabs"
28
+ button class="full-button" onclick={toggleFull} text={isFull ? '收起' : '全屏'}
29
+ for files; file i; file.path
30
+ button class={activeIndex === i ? 'code-tab code-tab-active' : 'code-tab'} onclick={() => switchTab(i)} text={file.name}
31
+ div ref={normalPreview} class="code-panel-preview"
32
+ pre class="code-panel"
33
+ code class="hljs" html={activeFile.html}
34
+ if preview
35
+ div class="code-preview"
36
+ {preview}
37
+ div ref={normalBlock} class="code-block"
38
+ div ref={fullBlock} class={isFull ? "code-block-full code-block-full-active" : "code-block-full"}
39
+ `;
40
+ }
41
+
42
+ module.exports = Code;
43
+ //# sourceMappingURL=code.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code.cjs.js","sources":["../src/plugins/markdown/components/code.ts"],"sourcesContent":["import { bobe, Store } from 'bobe';\nimport './code.css';\nimport './markdown.css';\nimport './tokyo-night-dark.css';\n\n\nclass Code extends Store {\n activeIndex = 0;\n files: Array<{ name: string; html: string }> = [];\n\n switchTab(i: number) { this.activeIndex = i }\n\n get activeFile() { return this.files[this.activeIndex]; }\n preview = null;\n\n normalBlock = null;\n fullBlock = null;\n\n isFull = false;\n\n toggleFull = () => {\n this.isFull = !this.isFull;\n console.log('isFull', this.isFull);\n \n }\n\n get blockTarget() {\n return this.isFull ? this.fullBlock : this.normalBlock;\n }\n\n ui = bobe`\n tp node={blockTarget} \n div class=\"code-tabs\"\n button class=\"full-button\" onclick={toggleFull} text={isFull ? '收起' : '全屏'}\n for files; file i; file.path\n button class={activeIndex === i ? 'code-tab code-tab-active' : 'code-tab'} onclick={() => switchTab(i)} text={file.name}\n div ref={normalPreview} class=\"code-panel-preview\"\n pre class=\"code-panel\" \n code class=\"hljs\" html={activeFile.html}\n if preview \n div class=\"code-preview\"\n {preview} \n div ref={normalBlock} class=\"code-block\"\n div ref={fullBlock} class={isFull ? \"code-block-full code-block-full-active\" : \"code-block-full\"} \n `;\n}\n\nexport default Code;\n"],"names":["Code","Store","activeIndex","files","switchTab","i","activeFile","preview","normalBlock","fullBlock","isFull","toggleFull","console","log","blockTarget","ui","bobe"],"mappings":";;;;AAMA,MAAMA,IAAI,SAASC,UAAK,CAAC;AACvBC,EAAAA,WAAW,GAAG,CAAC;AACfC,EAAAA,KAAK,GAA0C,EAAE;EAEjDC,SAASA,CAACC,CAAS,EAAE;IAAE,IAAI,CAACH,WAAW,GAAGG,CAAC;AAAC,EAAA;EAE5C,IAAIC,UAAUA,GAAG;AAAE,IAAA,OAAO,IAAI,CAACH,KAAK,CAAC,IAAI,CAACD,WAAW,CAAC;AAAE,EAAA;AACxDK,EAAAA,OAAO,GAAG,IAAI;AAEdC,EAAAA,WAAW,GAAG,IAAI;AAClBC,EAAAA,SAAS,GAAG,IAAI;AAEhBC,EAAAA,MAAM,GAAG,KAAK;EAEdC,UAAU,GAAGA,MAAM;AACjB,IAAA,IAAI,CAACD,MAAM,GAAG,CAAC,IAAI,CAACA,MAAM;IAC1BE,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAACH,MAAM,CAAC;EAEpC,CAAC;EAED,IAAII,WAAWA,GAAG;IAChB,OAAO,IAAI,CAACJ,MAAM,GAAG,IAAI,CAACD,SAAS,GAAG,IAAI,CAACD,WAAW;AACxD,EAAA;AAEAO,EAAAA,EAAE,GAAGC,SAAI;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,CAAG;AACH;;;;"}