{"version":3,"sources":["../src/jsx-runtime.ts","../src/encoding.ts","../src/h.ts","../src/vcss.ts","../src/vdom.ts","../src/utils.ts","../src/html.ts"],"sourcesContent":["import { h } from './html'\n\n// See\n// https://esbuild.github.io/api/#jsx-import-source\n// https://www.typescriptlang.org/tsconfig/#jsxImportSource\n\nexport {\n  h,\n  h as jsx,\n  h as jsxDEV,\n  h as jsxs,\n}\n","// import { decode } from './encoding-he'\nimport { decodeHTML as decode } from 'entities'\n\nexport function escapeHTML(text: string) {\n  return text\n    .replace(/&/g, '&amp;')\n    .replace(/</g, '&lt;')\n    .replace(/>/g, '&gt;')\n    .replace(/'/g, '&apos;')\n    .replace(/\"/g, '&quot;')\n    .replace(/\\xA0/g, '&nbsp;')\n    .replace(/\\xAD/g, '&shy;')\n}\n\n// encode(text, {\n//   useNamedReferences: true,\n// })\n\nexport const unescapeHTML = (html: string) => decode(html)\n","import type { VDocument, VDocumentFragment, VElement } from './vdom'\n\n/*\n * Abstraction for h/jsx like DOM descriptions.\n * It is used in DOM, VDOM\n *\n */\n\ninterface Context {\n  h?: any\n  document: VDocument | VDocumentFragment\n}\n\nfunction _h(\n  context: Context,\n  tag: string | ((a0: any) => VDocumentFragment | VElement),\n  attrs: object,\n  children: any[],\n): VDocumentFragment | VElement {\n  if (typeof tag === 'function') {\n    return tag({\n      props: { ...attrs, children },\n      attrs,\n      children,\n      h: context.h,\n      context,\n    })\n  }\n  else {\n    let isElement = true\n    let el: VDocumentFragment | VElement\n    if (tag) {\n      if (tag.toLowerCase() === 'fragment') {\n        el = context.document.createDocumentFragment()\n        isElement = false\n      }\n      else { el = context.document.createElement(tag) }\n    }\n    else {\n      el = context.document.createElement('div')\n    }\n    if (attrs && isElement) {\n      const element = el as VElement\n      for (const [key, value] of Object.entries(attrs)) {\n        const compareKey = key.toLowerCase()\n        if (compareKey === 'classname') {\n          element.className = value\n        }\n        else if (compareKey === 'on') {\n          for (const [name, v] of Object.entries(value)) {\n            element.setAttribute(`on${name}`, String(v))\n          }\n        }\n        else if (value !== false && value != null) {\n          element.setAttribute(key, value === true ? key : value.toString())\n        }\n      }\n    }\n    if (children) {\n      for (const childOuter of children) {\n        const cc = Array.isArray(childOuter) ? childOuter : [childOuter]\n        for (const child of cc) {\n          if (child !== false && child != null) {\n            if (typeof child !== 'object') {\n              el.appendChild(context.document.createTextNode(child.toString()))\n            }\n            else {\n              el.appendChild(child)\n            }\n          }\n        }\n      }\n    }\n    return el\n  }\n}\n\nexport function hArgumentParser(\n  tag: string | ((props: any) => VDocumentFragment | VElement),\n  attrs?: Record<string, unknown> | unknown[] | null,\n  ...childrenInput: unknown[]\n): { tag: string | ((props: any) => VDocumentFragment | VElement), attrs: Record<string, unknown>, children: unknown[] } {\n  let children: unknown[] = childrenInput\n\n  if (typeof tag === 'object' && tag !== null) {\n    // If tag is an object, treat as fragment-like\n    children = (tag as any).children\n    attrs = (tag as any).attrs\n    tag = 'fragment'\n  }\n\n  if (Array.isArray(attrs)) {\n    children = [attrs]\n    attrs = {}\n  }\n  else if (attrs) {\n    if ((attrs as Record<string, unknown>).attrs) {\n      const attrsObj = (attrs as Record<string, unknown>).attrs\n      attrs = { ...(typeof attrsObj === 'object' && attrsObj !== null ? attrsObj : {}), ...attrs }\n      delete (attrs as Record<string, unknown>).attrs\n    }\n  }\n  else {\n    attrs = {}\n  }\n\n  return {\n    tag,\n    attrs: attrs ?? {},\n    children:\n      typeof children[0] === 'string'\n        ? children\n        : children.flat(Number.POSITIVE_INFINITY),\n  }\n}\n\nexport function hFactory(context: Context) {\n  // let context = { document }\n  context.h = function h(itag: any, iattrs: any, ...ichildren: any[]) {\n    const { tag, attrs, children } = hArgumentParser(itag, iattrs, ichildren)\n    return _h(context, tag, attrs, children)\n  }\n  return context.h\n}\n","import type { VElement } from './vdom'\nimport { parse } from 'css-what'\n\nconst cache: Record<string, any> = {}\n\nexport function parseSelector(selector: string) {\n  if (!(selector in cache)) {\n    cache[selector] = parse(selector)\n  }\n  return cache[selector]\n}\n\nexport function matchSelector(\n  selector: string,\n  element: VElement,\n) {\n  for (const rules of parseSelector(selector)) {\n    function matchRule(el: VElement | null, ruleParts: any[], idx: number): boolean {\n      while (el && el.nodeType !== 1) el = el.parentNode\n      if (!el || idx < 0)\n        return false\n      const part = ruleParts[idx]\n      switch (part.type) {\n        case 'descendant': {\n          let parent = el.parentNode\n          while (parent) {\n            if (parent.nodeType === 1 && matchRule(parent, ruleParts, idx - 1))\n              return true\n            parent = parent.parentNode\n          }\n          return false\n        }\n        case 'child': {\n          let parent = el.parentNode\n          while (parent && parent.nodeType !== 1) parent = parent.parentNode\n          return !!parent && matchRule(parent, ruleParts, idx - 1)\n        }\n        case 'sibling': {\n          let prev = el.previousSibling\n          while (prev) {\n            if (prev.nodeType === 1 && matchRule(prev, ruleParts, idx - 1))\n              return true\n            prev = prev.previousSibling\n          }\n          return false\n        }\n        case 'adjacent': {\n          let prev = el.previousSibling\n          while (prev && prev.nodeType !== 1) prev = prev.previousSibling\n          return !!prev && matchRule(prev, ruleParts, idx - 1)\n        }\n        case 'general': { // general sibling combinator (~)\n          let prev = el.previousSibling\n          while (prev) {\n            if (prev.nodeType === 1 && matchRule(prev, ruleParts, idx - 1))\n              return true\n            prev = prev.previousSibling\n          }\n          return false\n        }\n        default: {\n          if (!matchSimple(el, part))\n            return false\n          if (idx === 0)\n            return true\n          return matchRule(el, ruleParts, idx - 1)\n        }\n      }\n    }\n\n    function matchSimple(element: VElement, part: any): boolean {\n      const { type, name, action, value, data } = part\n      if (type === 'attribute') {\n        const attrValue = element.getAttribute(name)\n        switch (action) {\n          case 'equals': return attrValue === value\n          case 'start': return !!attrValue?.startsWith(value)\n          case 'end': return !!attrValue?.endsWith(value)\n          case 'element':\n            return name === 'class'\n              ? element.classList.contains(value)\n              : !!attrValue?.includes(value)\n          case 'exists': return element.hasAttribute(name)\n          case 'any': return !!attrValue?.includes(value)\n          case 'hyphen': // [attr|=val]\n            return attrValue === value || !!attrValue?.startsWith(`${value}-`)\n          case 'contains': // [attr*=val]\n            return !!attrValue?.includes(value)\n          default: return false\n        }\n      }\n      if (type === 'tag')\n        return element.tagName === name.toUpperCase()\n      if (type === 'universal')\n        return true\n      if (type === 'pseudo') {\n        if (name === 'not') {\n          return !data.some((rules: any) => rules.every((p: any) => matchSimple(element, p)))\n        }\n        const parent = element.parentNode\n        if (!parent || !parent.childNodes)\n          return false\n        const elementChildren = parent.childNodes.filter((n: any) => n.nodeType === 1)\n        if (name === 'first-child')\n          return elementChildren[0] === element\n        if (name === 'last-child')\n          return elementChildren[elementChildren.length - 1] === element\n        if (name === 'nth-child') {\n          const idx = elementChildren.indexOf(element)\n          const nth = data && data.length > 0 ? Number.parseInt(data[0], 10) - 1 : 0\n          return idx === nth\n        }\n        return false\n      }\n      return false\n    }\n\n    if (matchRule(element, rules, rules.length - 1))\n      return true\n  }\n  return false\n}\n","import { escapeHTML } from './encoding'\nimport { hFactory } from './h'\nimport { html, htmlVDOM } from './html'\nimport { matchSelector } from './vcss'\n\n// For node debugging\nconst inspect = Symbol.for('nodejs.util.inspect.custom')\n\nconst B = { fontWeight: 'bold' }\nconst I = { fontStyle: 'italic' }\nconst M = { backgroundColor: 'rgb(255, 250, 165)' }\nconst U = { textDecorations: 'underline' }\nconst S = { textDecorations: 'line-through' }\n// let C = {}\n\nconst DEFAULTS = {\n  b: B,\n  strong: B,\n  em: I,\n  i: I,\n  mark: M,\n  u: U,\n  a: U,\n  s: S,\n  del: S,\n  ins: M,\n  strike: S,\n  // 'code': C,\n  // 'tt': C\n} as any\n\nfunction toCamelCase(s: string): string {\n  return s.toLowerCase().replace(/[^a-z0-9]+(.)/gi, (_m, chr) => chr.toUpperCase())\n}\n\nexport class VNode {\n  static ELEMENT_NODE = 1\n  static TEXT_NODE = 3\n  static CDATA_SECTION_NODE = 4\n  static PROCESSING_INSTRUCTION_NODE = 7\n  static COMMENT_NODE = 8\n  static DOCUMENT_NODE = 9\n  static DOCUMENT_TYPE_NODE = 10\n  static DOCUMENT_FRAGMENT_NODE = 11\n\n  _parentNode: any\n  _childNodes: any[]\n\n  get nodeType(): number {\n    console.error('Subclasses should define nodeType!')\n    return 0\n  }\n\n  get nodeName() {\n    console.error('Subclasses should define nodeName!')\n    return ''\n  }\n\n  get nodeValue(): string | null {\n    return null\n  }\n\n  constructor() {\n    this._parentNode = null\n    this._childNodes = []\n  }\n\n  cloneNode(deep = false) {\n    // @ts-expect-error xxx\n    const node = new this.constructor()\n    if (deep) {\n      node._childNodes = this._childNodes.map(c => c.cloneNode(true))\n      node._fixChildNodesParent()\n    }\n    return node\n  }\n\n  _fixChildNodesParent() {\n    this._childNodes.forEach(node => (node._parentNode = this))\n  }\n\n  insertBefore(newNode: VNode, node?: VNode) {\n    if (newNode !== node) {\n      let index = node ? this._childNodes.indexOf(node) : 0\n      if (index < 0)\n        index = 0\n      this._childNodes.splice(index, 0, newNode)\n      this._fixChildNodesParent()\n    }\n  }\n\n  appendChild(node: VNode | VNode[] | string | string[] | null | undefined) {\n    if (node == null)\n      return\n    if (node === this) {\n      console.warn('Cannot appendChild to self')\n      return\n    }\n    // log('appendChild', node, this)\n\n    if (node instanceof VDocument)\n      console.warn('No defined how to append a document to a node!', node)\n\n    if (node instanceof VDocumentFragment) {\n      for (const c of [...node._childNodes]) {\n        // Don't iterate over the original! Do [...el]\n        this.appendChild(c)\n      }\n    }\n    else if (Array.isArray(node)) {\n      for (const c of [...node]) {\n        // Don't iterate over the original! Do [...el]\n        this.appendChild(c)\n      }\n    }\n    else if (node instanceof VNode) {\n      node.remove()\n      this._childNodes.push(node)\n    }\n    else {\n      // Fallback for unknown data\n      try {\n        const text\n          = typeof node === 'string' ? node : JSON.stringify(node, null, 2)\n        this._childNodes.push(new VTextNode(text))\n      }\n      catch (err) {\n        console.error(`The data ${node} to be added to ${this.render()} is problematic: ${err}`)\n      }\n    }\n    this._fixChildNodesParent()\n  }\n\n  append = this.appendChild\n\n  removeChild(node: { _parentNode: null }) {\n    const i = this._childNodes.indexOf(node)\n    if (i >= 0) {\n      node._parentNode = null\n      this._childNodes.splice(i, 1)\n      this._fixChildNodesParent()\n    }\n  }\n\n  /** Remove node */\n  remove() {\n    this?.parentNode?.removeChild(this)\n    return this\n  }\n\n  /** Replace content of node with text or nodes */\n  replaceChildren(...nodes: any[]) {\n    this._childNodes = nodes.map(n =>\n      typeof n === 'string' ? new VTextNode(n) : n.remove(),\n    )\n    this._fixChildNodesParent()\n  }\n\n  /** Replace node itself with nodes */\n  replaceWith(...nodes: any[]) {\n    const p = this._parentNode\n    if (p) {\n      const index = this._indexInParent()\n      if (index >= 0) {\n        nodes = nodes.map(n =>\n          typeof n === 'string' ? new VTextNode(n) : n.remove(),\n        )\n        p._childNodes.splice(index, 1, ...nodes)\n        this._parentNode = null\n        p._fixChildNodesParent()\n      }\n    }\n  }\n\n  _indexInParent() {\n    if (this._parentNode)\n      return this._parentNode.childNodes.indexOf(this)\n    return -1\n  }\n\n  get parentNode() {\n    return this._parentNode\n  }\n\n  get childNodes() {\n    return this._childNodes || []\n  }\n\n  get children() {\n    return (this._childNodes || []).filter<any>(isVElement)\n  }\n\n  get firstChild() {\n    return this._childNodes[0]\n  }\n\n  get lastChild() {\n    return this._childNodes[this._childNodes.length - 1]\n  }\n\n  get nextSibling() {\n    const i = this._indexInParent()\n    if (i != null)\n      return this.parentNode.childNodes[i + 1] || null\n    return null\n  }\n\n  get previousSibling() {\n    const i = this._indexInParent()\n    if (i > 0)\n      return this.parentNode.childNodes[i - 1] || null\n    return null\n  }\n\n  get childElementCount() {\n    return this._childNodes.filter(child => child.nodeType === VNode.ELEMENT_NODE).length\n  }\n\n  get firstElementChild() {\n    return this._childNodes.find(child => child.nodeType === VNode.ELEMENT_NODE) || null\n  }\n\n  get lastElementChild() {\n    for (let i = this._childNodes.length - 1; i >= 0; i--) {\n      if (this._childNodes[i].nodeType === VNode.ELEMENT_NODE) {\n        return this._childNodes[i]\n      }\n    }\n    return null\n  }\n\n  flatten(): VElement[] {\n    const elements: VElement[] = []\n    if (this instanceof VElement)\n      elements.push(this)\n    for (const child of this._childNodes)\n      elements.push(...child.flatten())\n    return elements\n  }\n\n  flattenNodes(): VNode[] {\n    const nodes: VNode[] = []\n    nodes.push(this)\n    for (const child of this._childNodes)\n      nodes.push(...child.flattenNodes())\n    return nodes\n  }\n\n  render() {\n    return ''\n  }\n\n  get textContent(): string | null {\n    return this._childNodes.map(c => c.textContent).join('')\n  }\n\n  set textContent(text) {\n    this._childNodes = []\n    if (text)\n      this.appendChild(new VTextNode(text.toString()))\n  }\n\n  contains(otherNode: this) {\n    if (otherNode === this)\n      return true\n    // if (this._childNodes.includes(otherNode)) return true\n    return this._childNodes.some(n => n.contains(otherNode))\n  }\n\n  get ownerDocument() {\n    if (this.nodeType === VNode.DOCUMENT_NODE || this.nodeType === VNode.DOCUMENT_FRAGMENT_NODE)\n      return this\n\n    return this?._parentNode?.ownerDocument\n  }\n\n  toString(): string {\n    return `${this.nodeName}`\n    // return `${this.nodeName}: ${JSON.stringify(this.nodeValue)}`\n  }\n\n  [inspect]() {\n    return `${this.constructor.name} \"${this.render()}\"`\n  }\n\n  get parentElement() {\n    // DOM spec: parentNode if it is an element, else null\n    const p = this.parentNode\n    return p && p.nodeType === VNode.ELEMENT_NODE ? p : null\n  }\n\n  // insertAdjacentHTML(position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend', text: string) {\n  //   let nodes: VNode[] = []\n  //   try {\n  //     const fragment = parseHTML(text)\n  //     nodes = fragment.childNodes.filter((n: any) => n instanceof VNode)\n  //   } catch (e) {\n  //     // Only fallback if text is not valid HTML\n  //     if (/^\\s*<\\/?[a-zA-Z]/.test(text)) {\n  //       throw new Error('HTML parsing failed in insertAdjacentHTML')\n  //     }\n  //     nodes = [new VTextNode(text)]\n  //   }\n  //   switch (position) {\n  //     case 'beforebegin':\n  //       if (this.parentNode) {\n  //         const idx = this._indexInParent()\n  //         if (idx >= 0) {\n  //           this.parentNode._childNodes.splice(idx, 0, ...nodes)\n  //           this.parentNode._fixChildNodesParent()\n  //         }\n  //       }\n  //       break\n  //     case 'afterbegin':\n  //       this._childNodes.unshift(...nodes)\n  //       this._fixChildNodesParent()\n  //       break\n  //     case 'beforeend':\n  //       this._childNodes.push(...nodes)\n  //       this._fixChildNodesParent()\n  //       break\n  //     case 'afterend':\n  //       if (this.parentNode) {\n  //         const idx = this._indexInParent()\n  //         if (idx >= 0) {\n  //           this.parentNode._childNodes.splice(idx + 1, 0, ...nodes)\n  //           this.parentNode._fixChildNodesParent()\n  //         }\n  //       }\n  //       break\n  //   }\n  // }\n}\n\nexport class VTextNode extends VNode {\n  _text: string\n\n  get nodeType(): number {\n    return VNode.TEXT_NODE\n  }\n\n  get nodeName() {\n    return '#text'\n  }\n\n  get nodeValue(): string | null {\n    return this._text || ''\n  }\n\n  get textContent(): string | null {\n    return this.nodeValue\n  }\n\n  constructor(text = '') {\n    super()\n    this._text = text\n  }\n\n  render() {\n    const parentTagName = this.parentNode?.tagName\n    if (parentTagName === 'SCRIPT' || parentTagName === 'STYLE')\n      return this._text\n\n    return escapeHTML(this._text)\n  }\n\n  cloneNode(deep = false) {\n    const node = super.cloneNode(deep)\n    node._text = this._text\n    return node\n  }\n}\n\nexport class VNodeQuery extends VNode {\n  getElementById(name: string) {\n    return this.flatten().find(e => e._attributes.id === name)\n  }\n\n  getElementsByClassName(name: any) {\n    return this.flatten().filter(e => e.classList.contains(name))\n  }\n\n  matches(selector: string) {\n    return matchSelector(selector, this as any)\n  }\n\n  querySelectorAll(selector: any) {\n    return this.flatten().filter(e => e.matches(selector))\n  }\n\n  querySelector(selector: string) {\n    return this.flatten().find(e => e.matches(selector))\n  }\n\n  getElementsByName(name: string) {\n    // DOM spec: only elements with a matching name attribute\n    return this.flatten().filter(e => e.getAttribute && e.getAttribute('name') === name)\n  }\n\n  //\n\n  parent(selector: string) {\n    if (this.matches(selector))\n      return this\n\n    if (this.parentNode == null)\n      return null\n\n    return this.parentNode?.parent(selector)\n  }\n\n  handle(selector: any, handler: (arg0: VElement, arg1: number) => void) {\n    let i = 0\n    for (const el of this.querySelectorAll(selector))\n      handler(el, i++)\n  }\n}\n\ninterface Attr {\n  name: string\n  value: string\n}\n\nexport type VElementStyle = Record<string, string> & {\n  get length(): number\n  getPropertyValue: (name: string) => any\n}\n\nexport class VElement extends VNodeQuery {\n  _originalTagName: string\n  _nodeName: string\n  _attributes: Record<string, string>\n  _styles: VElementStyle | undefined\n  _dataset: Record<string, string> | undefined\n\n  get nodeType() {\n    return VNode.ELEMENT_NODE\n  }\n\n  get nodeName() {\n    return this._nodeName\n  }\n\n  constructor(name = 'div', attrs = {}) {\n    super()\n    this._originalTagName = name\n    this._nodeName = (name || '').toUpperCase()\n    this._attributes = attrs || {}\n  }\n\n  cloneNode(deep = false) {\n    const node = super.cloneNode(deep)\n    node._originalTagName = this._originalTagName\n    node._nodeName = this._nodeName\n    node._attributes = Object.assign({}, this._attributes)\n    return node\n  }\n\n  get attributes(): Attr[] {\n    return Object.entries(this._attributes).map(([name, value]): Attr => ({ name, value }))\n    // return this._attributes\n  }\n\n  get attributesObject() {\n    return { ...this._attributes }\n  }\n\n  _findAttributeName(name: string) {\n    const search = name.toLowerCase()\n    return (\n      Object.keys(this._attributes).find(\n        name => search === name.toLowerCase(),\n      ) || null\n    )\n  }\n\n  setAttribute(name: string, value: any) {\n    this.removeAttribute(name)\n    if (value != null && value !== false) {\n      this._attributes[name] = value\n    }\n    this._styles = undefined\n    this._dataset = undefined\n  }\n\n  getAttribute(name: string): string | null {\n    const originalName = this._findAttributeName(name)\n    const value = originalName ? this._attributes[originalName] : null\n    if (value == null)\n      return null\n    else if (typeof value === 'string')\n      return value\n    else\n      return ''\n  }\n\n  removeAttribute(name: string | number) {\n    const originalName = this._findAttributeName(String(name))\n    if (originalName)\n      delete this._attributes[name]\n  }\n\n  hasAttribute(name: any) {\n    const originalName = this._findAttributeName(name)\n    return originalName ? this._attributes[originalName] != null : false\n  }\n\n  /// See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\n  get style(): VElementStyle {\n    if (this._styles == null) {\n      // const styles = Object.assign({}, DEFAULTS[this.tagName.toLowerCase()] || {})\n\n      const styles: Record<string, string> = {}\n      let count = 0\n\n      const styleString = this.getAttribute('style')\n      if (styleString) {\n        let m: string[] | null\n\n        // Thanks to https://github.com/holtwick/zeed-dom/issues/12#issuecomment-2148998665\n        const re = /\\s*([\\w-]+)\\s*:\\s*((url\\(.*?\\)[^;]*|[^;]+))/gi\n\n        // eslint-disable-next-line no-cond-assign\n        while ((m = re.exec(styleString))) {\n          ++count\n          const name = m[1]\n          const value = m[2].trim()\n          styles[name] = value\n          styles[toCamelCase(name)] = value\n        }\n      }\n      this._styles = {\n        get length(): number {\n          return count\n        },\n        getPropertyValue(name: string) {\n          return styles[name]\n        },\n\n        ...DEFAULTS[this.tagName.toLowerCase()],\n        ...styles,\n      }\n    }\n    return this._styles!\n  }\n\n  /// See https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/dataset\n  get dataset() {\n    if (this._dataset == null) {\n      const dataset: Record<string, string> = {}\n      for (const [key, value] of Object.entries(this._attributes)) {\n        if (key.startsWith('data-')) {\n          dataset[key.slice(5)] = value\n          dataset[toCamelCase(key.slice(5))] = value\n        }\n      }\n      this._dataset = dataset\n    }\n    return this._dataset\n  }\n\n  get tagName() {\n    return this._nodeName\n  }\n\n  /** Private function to easily change the tagName */\n  setTagName(name: string) {\n    this._originalTagName = name\n    this._nodeName = name.toUpperCase()\n  }\n\n  get id(): string | null {\n    return this._attributes.id || null\n  }\n\n  set id(value: string | null) {\n    if (value == null)\n      delete this._attributes.id\n    else this._attributes.id = value\n  }\n\n  get src(): string | null {\n    return this._attributes.src\n  }\n\n  set src(value: string | null) {\n    if (value == null)\n      delete this._attributes.src\n    else this._attributes.src = value\n  }\n\n  //\n\n  getElementsByTagName(name: string) {\n    name = name.toUpperCase()\n    const elements = this.flatten()\n    if (name !== '*')\n      return elements.filter(e => e.tagName === name)\n\n    return elements\n  }\n\n  // html\n\n  setInnerHTML(_html: string) {\n    // throw new Error('setInnerHTML is not implemented; see vdomparser for an example')\n  }\n\n  insertAdjacentHTML(\n    position: 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend',\n    text: string,\n  ) {\n    // throw new Error('setInnerHTML is not implemented; see vdomparser for an example')\n  }\n\n  get innerHTML() {\n    return this._childNodes.map(c => c.render(html)).join('')\n  }\n\n  set innerHTML(html) {\n    this.setInnerHTML(html)\n  }\n\n  get outerHTML() {\n    return this.render(htmlVDOM)\n  }\n\n  // class\n\n  get className(): string {\n    return this._attributes.class || ''\n  }\n\n  set className(name: string | string[]) {\n    if (Array.isArray(name)) {\n      name = name.filter(n => !!n).join(' ')\n    }\n    else if (typeof name === 'object') {\n      name = Object.entries(name)\n        .filter(([_k, v]) => !!v)\n        .map(([k, _v]) => k)\n        .join(' ')\n    }\n    this._attributes.class = name\n  }\n\n  get classList() {\n    const classNames = String(this.className ?? '').trim().split(/\\s+/g) || []\n    // log('classList', classNames)\n    return {\n      contains(s: any) {\n        return classNames.includes(s)\n      },\n      add: (s: any) => {\n        if (!classNames.includes(s)) {\n          classNames.push(s)\n          this.className = classNames\n        }\n      },\n      remove: (s: any) => {\n        const index = classNames.indexOf(s)\n        if (index >= 0) {\n          classNames.splice(index, 1)\n          this.className = classNames\n        }\n      },\n    }\n  }\n\n  //\n\n  render(h = htmlVDOM) {\n    return h(\n      this._originalTagName || this.tagName,\n      this._attributes,\n      this._childNodes.map(c => c.render(h)).join(''), // children:string is not escaped again\n    )\n  }\n}\n\nexport class VDocType extends VNode {\n  // todo\n\n  name: any\n  publicId: any\n  systemId: any\n\n  get nodeName(): string {\n    return super.nodeName\n  }\n\n  get nodeValue(): string | null {\n    return super.nodeValue\n  }\n\n  get nodeType(): number {\n    return VDocType.DOCUMENT_TYPE_NODE\n  }\n\n  render() {\n    return '<!DOCTYPE html>' // hack!\n  }\n}\n\nexport class VDocumentFragment extends VNodeQuery {\n  docType?: VDocType\n\n  get nodeType() {\n    return VNode.DOCUMENT_FRAGMENT_NODE\n  }\n\n  get nodeName() {\n    return '#document-fragment'\n  }\n\n  render(h = htmlVDOM) {\n    return this._childNodes.map(c => c.render(h) || []).join('')\n  }\n\n  get innerHTML() {\n    // for debug\n    return this._childNodes.map(c => c.render(html)).join('')\n  }\n\n  createElement(name: string, attrs = {}) {\n    return new VElement(name, attrs)\n  }\n\n  createDocumentFragment() {\n    return new VDocumentFragment()\n  }\n\n  createTextNode(text?: string) {\n    return new VTextNode(text)\n  }\n}\n\nexport class VDocument extends VDocumentFragment {\n  get nodeType() {\n    return VNode.DOCUMENT_NODE\n  }\n\n  get nodeName() {\n    return '#document'\n  }\n\n  get documentElement() {\n    return this.firstChild\n  }\n\n  render(h = htmlVDOM) {\n    let content = super.render(h)\n    if (this.docType)\n      content = this.docType.render() + content\n    return content\n  }\n}\n\nexport class VHTMLDocument extends VDocument {\n  constructor(empty = false) {\n    super()\n    this.docType = new VDocType()\n    if (!empty) {\n      const html = new VElement('html')\n      const body = new VElement('body')\n      const head = new VElement('head')\n      const title = new VElement('title')\n      html.appendChild(head)\n      head.appendChild(title)\n      html.appendChild(body)\n      this.appendChild(html)\n    }\n  }\n\n  get body(): VElement {\n    let body = this.querySelector('body')\n    if (!body) {\n      let html = this.querySelector('html')\n      if (!html) {\n        html = new VElement('html')\n        this.appendChild(html)\n      }\n      body = new VElement('body')\n      html.appendChild(html)\n    }\n    return body\n  }\n\n  get title(): string {\n    return this.querySelector('title')?.textContent || ''\n  }\n\n  set title(title: string) {\n    const titleElement = this.querySelector('title')\n    if (titleElement)\n      titleElement.textContent = title\n  }\n\n  get head(): VElement {\n    let head = this.querySelector('head')\n    if (!head) {\n      let html = this.querySelector('html')\n      if (!html) {\n        html = new VElement('html')\n        this.appendChild(html)\n      }\n      head = new VElement('head')\n      html.insertBefore(html)\n    }\n    return head\n  }\n}\n\nexport function createDocument(): VDocument {\n  return new VDocument()\n}\n\nexport function createHTMLDocument(): VHTMLDocument {\n  return new VHTMLDocument()\n}\n\nexport const document = createDocument()\nexport const h = hFactory({ document })\n\nexport function isVElement(n: VNode): n is VElement {\n  return n.nodeType === VNode.ELEMENT_NODE\n}\n\nexport function isVTextElement(n: VNode): n is VTextNode {\n  return n.nodeType === VNode.TEXT_NODE\n}\n\nexport function isVDocument(n: VNode): n is VDocument {\n  return n.nodeType === VNode.DOCUMENT_NODE\n}\n","import type { VNodeQuery } from './vdom'\nimport { VDocumentFragment } from './vdom'\n\nexport function removeBodyContainer(body: VNodeQuery): VNodeQuery {\n  const ehead = body.querySelector('head')\n  const ebody = body.querySelector('body')\n  if (ebody || ehead) {\n    const body = new VDocumentFragment()\n    if (ehead) {\n      body.appendChild(ehead.childNodes)\n    }\n    if (ebody) {\n      body.appendChild(ebody.children)\n    }\n    return body\n  }\n  return body\n}\n\nconst object = {}\nconst hasOwnProperty = object.hasOwnProperty\n\n/** Fallback for Object.hasOwn */\nexport function hasOwn(object: any, propertyName: string) {\n  return hasOwnProperty.call(object, propertyName)\n}\n","// Special cases:\n// 1. <noop> is an element that is not printed out, can be used to create a list of elements\n// 2. Attribute name '__' gets transformed to ':' for namespace emulation\n// 3. Emulate CDATA by <cdata> element\n\nimport type { VDocumentFragment, VElement } from './vdom'\nimport { escapeHTML } from './encoding'\nimport { hArgumentParser } from './h'\nimport { hasOwn } from './utils'\n\nexport const SELF_CLOSING_TAGS = [\n  'area',\n  'base',\n  'br',\n  'col',\n  'embed',\n  'hr',\n  'img',\n  'input',\n  'keygen',\n  'link',\n  'meta',\n  'param',\n  'source',\n  'track',\n  'wbr',\n  'command',\n]\n\nexport const CDATA = (s: string) => `<![CDATA[${s}]]>`\nexport const HTML = (s: string) => s\n\n// export function prependXMLIdentifier(s) {\n//   return '<?xml version=\"1.0\" encoding=\"utf-8\"?>\\n' + s\n// }\n\n// https://reactjs.org/docs/jsx-in-depth.html\nexport function markup(\n  xmlMode: boolean,\n  tag: string,\n  attrs: any = {},\n  children?: any[] | string,\n) {\n  const hasChildren = !(\n    (typeof children === 'string' && children === '')\n    || (Array.isArray(children)\n      && (children.length === 0\n        || (children.length === 1 && children[0] === '')))\n      || children == null\n  )\n\n  const parts: string[] = []\n  tag = tag.replace(/__/g, ':')\n\n  // React fragment <>...</> and ours: <noop>...</noop>\n  if (tag !== 'noop' && tag !== '') {\n    if (tag !== 'cdata') {\n      parts.push(`<${tag}`)\n    }\n    else {\n      parts.push('<![CDATA[')\n    }\n\n    // Add attributes\n    for (let name in attrs) {\n      if (!name || !hasOwn(attrs, name))\n        continue\n      const v = attrs[name]\n      if (name === 'html')\n        continue\n      if (name.toLowerCase() === 'classname')\n        name = 'class'\n      name = name.replace(/__/g, ':')\n      if (v === true) {\n        parts.push(` ${name}`)\n      }\n      else if (name === 'style' && typeof v === 'object') {\n        const styleStr = Object.entries(v)\n          .filter(([, val]) => val != null)\n          .map(([k, val]) => {\n            const vv = typeof val === 'number' ? `${val}px` : val\n            return `${k.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase()}:${vv}`\n          })\n          .join(';')\n        if (styleStr)\n          parts.push(` ${name}=\"${styleStr}\"`)\n      }\n      else if (v !== false && v != null) {\n        parts.push(` ${name}=\"${escapeHTML(v.toString())}\"`)\n      }\n    }\n\n    const isSelfClosing = !xmlMode && SELF_CLOSING_TAGS.includes(tag)\n    if (tag !== 'cdata') {\n      if (xmlMode && !hasChildren) {\n        parts.push(' />')\n        return parts.join('')\n      }\n      else {\n        parts.push('>')\n      }\n    }\n    if (isSelfClosing)\n      return parts.join('')\n  }\n\n  // Append children\n  if (hasChildren) {\n    if (typeof children === 'string') {\n      parts.push(children)\n    }\n    else if (children && children.length > 0) {\n      for (const child of children) {\n        if (child == null || child === false)\n          continue\n        if (Array.isArray(child)) {\n          for (const c of child) {\n            if (c == null || c === false)\n              continue\n            if ((typeof c === 'string' && c.startsWith('<') && c.endsWith('>')) || tag === 'script' || tag === 'style') {\n              parts.push(c)\n            }\n            else {\n              parts.push(escapeHTML(c.toString()))\n            }\n          }\n        }\n        else {\n          if ((typeof child === 'string' && child.startsWith('<') && child.endsWith('>')) || tag === 'script' || tag === 'style') {\n            parts.push(child)\n          }\n          else {\n            parts.push(escapeHTML(child.toString()))\n          }\n        }\n      }\n    }\n  }\n\n  if (attrs.html)\n    parts.push(attrs.html)\n\n  if (tag !== 'noop' && tag !== '') {\n    if (tag !== 'cdata') {\n      parts.push(`</${tag}>`)\n    }\n    else {\n      parts.push(']]>')\n    }\n  }\n  return parts.join('')\n}\n\nexport function html(\n  tag: string | ((props: any) => VDocumentFragment | VElement),\n  attrs?: Record<string, unknown> | unknown[] | null,\n  ...children: unknown[]\n): string {\n  const parsed = hArgumentParser(tag, attrs, ...children)\n  return markup(false, parsed.tag as string, parsed.attrs, parsed.children)\n}\n\nexport const htmlVDOM = markup.bind(null, false)\n\nhtml.firstLine = '<!DOCTYPE html>'\nhtml.html = true\n\nexport const h = html\n"],"mappings":"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","names":["h","h","matchRule","matchSimple","element","rules","name","html","h","h","object","h"]}