{"version":3,"file":"index.mjs","names":[],"sources":["../src/common/owner.ts","../src/common/reinforce.ts","../../../node_modules/.pnpm/type-narrow@0.2.2/node_modules/type-narrow/dist/index.mjs","../src/reactable/reactive.ts","../src/reactable/common.ts","../src/h/attr-helpers.ts","../src/h/attr.ts","../src/common/anchor.ts","../src/h/content.ts","../src/h/model.ts","../src/h/index.ts","../src/reactable/scheduler.ts","../src/reactable/ref.ts","../src/jsx/fragment.ts","../src/jsx/common.ts","../src/jsx/jsx-runtime.ts","../src/reactable/computed.ts","../src/reactable/effect.ts","../src/reactable/index.ts","../src/jsx/async.ts","../src/jsx/for.ts","../src/jsx/if.ts"],"sourcesContent":["import { $indom } from '@ktjs/shared';\n\ninterface KTOwnerBag {\n  mounted: boolean;\n  disconnected: boolean;\n  disposing: boolean;\n  cleanups: Set<() => void>;\n}\n\nconst ownerBags = new WeakMap<Node, KTOwnerBag>();\nlet observer: MutationObserver | undefined;\nlet pendingRemoved: Node[] = [];\nlet pending = false;\n\nconst visit = (node: Node, fn: (node: Node) => void) => {\n  fn(node);\n  for (let child = node.firstChild; child; child = child.nextSibling) {\n    visit(child, fn);\n  }\n};\n\nconst getOwnerBag = (owner: Node): KTOwnerBag => {\n  let bag = ownerBags.get(owner);\n  if (!bag) {\n    bag = { mounted: $indom(owner), disconnected: false, disposing: false, cleanups: new Set() };\n    ownerBags.set(owner, bag);\n  }\n  return bag;\n};\n\nconst flushRemoved = () => {\n  pending = false;\n  const nodes = pendingRemoved;\n  pendingRemoved = [];\n  for (let i = 0; i < nodes.length; i++) {\n    if (!$indom(nodes[i])) {\n      disposeOwnedSubtree(nodes[i]);\n    }\n  }\n};\n\nconst ensureObserver = () => {\n  if (observer || typeof MutationObserver === 'undefined' || typeof document === 'undefined') {\n    return;\n  }\n  const root = document.documentElement ?? document.body;\n  if (!root) {\n    return;\n  }\n  observer = new MutationObserver((mutations) => {\n    for (let i = 0; i < mutations.length; i++) {\n      const added = mutations[i].addedNodes;\n      for (let j = 0; j < added.length; j++) {\n        markOwnerMounted(added[j]);\n      }\n\n      const removed = mutations[i].removedNodes;\n      for (let j = 0; j < removed.length; j++) {\n        pendingRemoved.push(removed[j]);\n      }\n    }\n    if (!pending && pendingRemoved.length > 0) {\n      pending = true;\n      Promise.resolve().then(flushRemoved);\n    }\n  });\n  observer.observe(root, { childList: true, subtree: true });\n};\n\nexport const markOwnerMounted = (owner: Node): void => {\n  visit(owner, (node) => {\n    const bag = ownerBags.get(node);\n    if (bag && $indom(node)) {\n      bag.mounted = true;\n      bag.disconnected = false;\n    }\n  });\n};\n\nexport const isOwnerDead = (owner: Node): boolean => {\n  const bag = ownerBags.get(owner);\n  if (!bag) {\n    return false;\n  }\n  if (bag.disconnected) {\n    return true;\n  }\n  if ($indom(owner)) {\n    bag.mounted = true;\n    return false;\n  }\n  return bag.mounted;\n};\n\nexport const own = (owner: Node, cleanup: () => void): (() => void) => {\n  ensureObserver();\n  const bag = getOwnerBag(owner);\n  bag.cleanups.add(cleanup);\n  return cleanup;\n};\n\nexport const unown = (owner: Node, cleanup: () => void): void => {\n  ownerBags.get(owner)?.cleanups.delete(cleanup);\n};\n\nexport const disposeOwner = (owner: Node): void => {\n  const bag = ownerBags.get(owner);\n  if (!bag) {\n    return;\n  }\n  if (bag.disposing) {\n    return;\n  }\n  bag.disposing = true;\n  bag.disconnected = true;\n  bag.cleanups.forEach((cleanup) => cleanup());\n  bag.cleanups.clear();\n  bag.disposing = false;\n};\n\nexport const disposeOwnedSubtree = (owner: Node): void => visit(owner, disposeOwner);\n","import { markOwnerMounted } from './owner.js';\n\nNode.prototype._appendTo = function (this: Node, parent: Node) {\n  const result = parent.appendChild(this);\n  markOwnerMounted(this);\n  return result;\n};\n\ndeclare global {\n  interface Node {\n    /**\n     * Only `Node` and `KTAnchor` are implemented with this method\n     *\n     * [NOTE] This is needed because we need its Polymorphism to avoid if/switch branches.\n     */\n    _appendTo(parent: Node): this;\n  }\n\n  interface Versioned {\n    _version: number;\n  }\n}\n","function n(n) {}\n\nconst t = n;\n\nfunction o() {\n  return n => {};\n}\n\nexport { o as createNarrower, n as narrow, t as static_cast };\n","import type { KTComputed } from './computed.js';\nimport { type ChangeListener, type KTListenOptions } from './types.js';\nimport { isOwnerDead, own, unown } from '../common/owner.js';\n\nexport const enum KType {\n  Ref /*--------*/ = 1 << 1,\n  SubRef /*-----*/ = 1 << 2,\n  Computed /*---*/ = 1 << 3,\n  Reactive /*---*/ = Ref | Computed,\n\n  /**\n   * Used for custom reactive-like objects.\n   */\n  Custom /*-----*/ = 1 << 30,\n}\n\nlet kid = 1;\nexport const nextKid = () => kid++;\n\nexport abstract class KTReactive<T> {\n  readonly kid = nextKid();\n\n  /**\n   * Internal value storage.\n   */\n  _value: T;\n\n  private readonly _ownedCleanups = new Map<ChangeListener<any>, () => void>();\n  readonly _listeners = new Map<ChangeListener<any>, Node | undefined>();\n\n  constructor(value: T) {\n    this._value = value;\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  set value(newValue: T) {\n    $warn('Setting value to a non-ref instance takes no effect.' + (newValue ? '' : ''));\n  }\n\n  protected _emit(newValue: T, oldValue: T): this {\n    this._listeners.forEach((owner, f) => {\n      if (owner && isOwnerDead(owner)) {\n        this.unlisten(f);\n        return;\n      }\n      f(newValue, oldValue);\n    });\n    return this;\n  }\n\n  listen(listener: ChangeListener<T>, options?: KTListenOptions | Node): this {\n    if (this._listeners.has(listener)) {\n      $warn(`Overriding existing change handler with ${listener.toString()}.`);\n      return this;\n    }\n    const owner =\n      typeof Node !== 'undefined' && options instanceof Node ? options : (options as KTListenOptions | undefined)?.owner;\n    this._listeners.set(listener, owner);\n    if (owner) {\n      const cleanup = () => this.unlisten(listener);\n      this._ownedCleanups.set(listener, cleanup);\n      own(owner, cleanup);\n    }\n    return this;\n  }\n\n  unlisten(listener: ChangeListener<T>): this {\n    const owner = this._listeners.get(listener);\n    this._listeners.delete(listener);\n    const cleanup = this._ownedCleanups.get(listener);\n    if (owner && cleanup) {\n      unown(owner, cleanup);\n      this._ownedCleanups.delete(listener);\n    }\n    return this;\n  }\n\n  unlistenAll(): this {\n    this._ownedCleanups.clear();\n    this._listeners.clear();\n    return this;\n  }\n\n  notify(): this {\n    return this._emit(this._value, this._value);\n  }\n\n  /**\n   * Create a computed value via current reactive value.\n   * - No matter `this` is added to `dependencies` or not, it is always listened.\n   * @param calculator A function that generates a new value based on current value.\n   * @param dependencies optional other dependencies that the computed value depends on.\n   */\n  map<U>(calculator: (value: T) => U, dependencies?: Array<KTReactive<any>>): KTComputed<U> {\n    return (calculator || dependencies || null) as any; // & implemented in computed.ts to avoid circular dependency\n  }\n\n  /**\n   * Make a computed value that checks if the reactive value is strictly equal to a specific value.\n   * - Use `Object.is` for comparison.\n   * - if `o` is reactive-like, it will be added to dependencies\n   */\n  is(o: T | KTReactive<T>): KTComputed<boolean> {\n    return o as any; // & implemented in computed.ts to avoid circular dependency\n  }\n\n  /**\n   * Make a computed value that checks if the reactive value matches a specific object structure.\n   * - Deeply match.\n   * - if `o` is reactive-like, it will be added to dependencies\n   */\n  match(o: object | KTReactive<object>): KTComputed<boolean> {\n    return o as any; // & implemented in computed.ts to avoid circular dependency\n  }\n\n  /**\n   * Generate a computed value based on this reactive, using keys to access nested properties.\n   * - `reactive.get('a', 'b')` means a computed value to `this.value.a.b`.\n   */\n  get<K0 extends keyof T, K1 extends keyof T[K0], K2 extends keyof T[K0][K1]>(\n    key0: K0,\n    key1: K1,\n    key2: K2,\n  ): KTComputed<T[K0][K1][K2]>;\n  /**\n   * Generate a computed value based on this reactive, using keys to access nested properties.\n   * - `reactive.get('a', 'b')` means a computed value to `this.value.a.b`.\n   */\n  get<K0 extends keyof T, K1 extends keyof T[K0]>(key0: K0, key1: K1): KTComputed<T[K0][K1]>;\n  /**\n   * Generate a computed value based on this reactive, using keys to access nested properties.\n   * - `reactive.get('a', 'b')` means a computed value to `this.value.a.b`.\n   */\n  get<K0 extends keyof T>(key0: K0): KTComputed<T[K0]>;\n  /**\n   * Generate a computed value based on this reactive, using keys to access nested properties.\n   * - `reactive.get('a', 'b')` means a computed value to `this.value.a.b`.\n   */\n  get(..._keys: Array<string | number>): KTComputed<any> {\n    // & Will be implemented in computed.ts to avoid circular dependency\n    return null as any;\n  }\n}\n","import type { KTRef, KTSubRef } from './ref.js';\nimport type { KTComputed } from './computed.js';\nimport { KType, type KTReactive } from './reactive.js';\n\n// #region type guards\n\n// & Shockingly, using `typeof` first is about 2~4 times faster than directly `o?.ktype === KType.XXX`.\n\n/**\n * @returns `true` for both `KTRef` and `KTSubRef`, since `KTSubRef` is a subclass of `KTRef`\n */\nexport const isRef = <T = any>(o: any): o is KTRef<T> =>\n  typeof o?.ktype === 'number' ? o.ktype === KType.Ref || o.ktype === KType.SubRef : false;\n\nexport const isSubRef = <T = any>(o: any): o is KTSubRef<T> =>\n  typeof o?.ktype === 'number' ? o.ktype === KType.SubRef : false;\n\nexport const isRefExact = <T = any>(o: any): o is KTRef<T> =>\n  typeof o?.ktype === 'number' ? o.ktype === KType.Ref : false;\n\nexport const isComputed = <T = any>(o: any): o is KTComputed<T> =>\n  typeof o?.ktype === 'number' ? o.ktype === KType.Computed : false;\n\n/**\n * A little different from `isKT`\n * @returns true if `o` is computed\\ref\\subref\n */\nexport const isReactive = <T = any>(o: any): o is KTReactive<T> =>\n  typeof o?.ktype === 'number' ? (o.ktype & KType.Reactive) !== 0 : false;\n\n/**\n * Only checks if `ktype` is a number, which is the common property of all KTReactive instances.\n */\nexport const isKT = <T = any>(o: any): o is KTReactive<T> => typeof o?.ktype === 'number';\n\n// #endregion\n\n// #region sub getter/setter factory\n\ntype SubGetter = (s: any) => any;\ntype SubSetter = (s: any, newValue: any) => void;\n\n/**\n * Create a value getter which params is `reactive.value`(or `ref.draft`)\n */\nexport const $createSubGetter = (path: Array<string | number>): SubGetter => {\n  // & path.length is guaranteed to be greater than 0 in `KTReactive.get` and `KTRef.get`\n  switch (path.length) {\n    case 1:\n      return (s) => s[path[0]];\n    case 2:\n      return (s) => s[path[0]][path[1]];\n    case 3:\n      return (s) => s[path[0]][path[1]][path[2]];\n    default:\n      return (s) => {\n        let r = s[path[0]][path[1]][path[2]];\n        for (let i = 3; i < path.length; i++) {\n          r = r[path[i]];\n        }\n        return r;\n      };\n  }\n};\n\n/**\n * Create a value setter which params is `reactive.value`(or `ref.draft`)\n */\nexport const $createSubSetter = (path: Array<string | number>): SubSetter => {\n  switch (path.length) {\n    case 1:\n      return (s, newValue) => (s[path[0]] = newValue);\n    case 2:\n      return (s, newValue) => (s[path[0]][path[1]] = newValue);\n    case 3:\n      return (s, newValue) => (s[path[0]][path[1]][path[2]] = newValue);\n    default:\n      return (s, newValue) => {\n        let r = s[path[0]][path[1]][path[2]];\n        for (let i = 3; i < path.length - 1; i++) {\n          r = r[path[i]];\n        }\n        r[path[path.length - 1]] = newValue;\n      };\n  }\n};\n\n// #endregion\n","import type { JSX } from '../types/jsx.js';\n\nconst booleanHandler = (element: JSX.Element, key: string, value: any) => {\n  if (key in element) {\n    (element as any)[key] = !!value;\n  } else {\n    element.setAttribute(key, value);\n  }\n};\n\nconst valueHandler = (element: JSX.Element, key: string, value: any) => {\n  if (key in element) {\n    (element as any)[key] = value;\n  } else {\n    element.setAttribute(key, value);\n  }\n};\n\n// Attribute handlers map for optimized lookup\nexport const handlers: Record<string, (element: JSX.Element, key: string, value: any) => void> = {\n  checked: booleanHandler,\n  selected: booleanHandler,\n  value: valueHandler,\n  valueAsDate: valueHandler,\n  valueAsNumber: valueHandler,\n  defaultValue: valueHandler,\n  defaultChecked: booleanHandler,\n  defaultSelected: booleanHandler,\n  disabled: booleanHandler,\n  readOnly: booleanHandler,\n  multiple: booleanHandler,\n  required: booleanHandler,\n  autofocus: booleanHandler,\n  open: booleanHandler,\n  controls: booleanHandler,\n  autoplay: booleanHandler,\n  loop: booleanHandler,\n  muted: booleanHandler,\n  defer: booleanHandler,\n  async: booleanHandler,\n  hidden: (element, _key, value) => ((element as HTMLElement).hidden = !!value),\n};\n","import type { JSX } from '../types/jsx.js';\nimport type { KTReactifyProps } from '../reactable/types.js';\nimport type { KTAttribute } from '../types/h.js';\n\nimport { $assign, $isArray } from '@ktjs/shared';\nimport { static_cast } from 'type-narrow';\nimport { isKT } from '../reactable/common.js';\nimport { own } from '../common/owner.js';\nimport { handlers } from './attr-helpers.js';\n\nconst defaultHandler = (element: JSX.Element, key: string, value: any) => element.setAttribute(key, value);\n\nconst setAttr = (owner: Node, value: any, setter: (value: any, oldValue: any) => void) => {\n  if (isKT(value)) {\n    setter(value.value, value.value);\n    value.listen(setter, { owner });\n  } else {\n    setter(value, value);\n  }\n};\nconst setNonNullableAttr = (owner: Node, value: any, setter: (value: any, oldValue: any) => void) => {\n  if (value !== undefined) {\n    setAttr(owner, value, setter);\n  }\n};\n\nexport function applyAttr(element: JSX.Element, attr: KTReactifyProps<KTAttribute>) {\n  // & Since JSX.Element is Element, Element has only 3 sub-classes.\n  static_cast<HTMLElement | SVGElement | MathMLElement>(element);\n  setNonNullableAttr(element, attr.class ?? attr.className, (v) => (element.classList = $isArray(v) ? v.join(' ') : v));\n  setNonNullableAttr(element, attr.style, (v: Partial<CSSStyleDeclaration> | string) => {\n    if (typeof v === 'string') {\n      element.style.cssText = v;\n    } else if (typeof v === 'object') {\n      $assign(element.style, v);\n    }\n  });\n  setNonNullableAttr(element, attr['k-html'], (v) => (element.innerHTML = v));\n\n  for (const key in attr) {\n    // & Arranged in order of usage frequency\n    if (\n      // key === 'k-if' ||\n      // key === 'k-else' ||\n      key === 'k-model' ||\n      key === 'k-for' ||\n      key === 'k-key' ||\n      key === 'ref' ||\n      key === 'class' ||\n      key === 'className' ||\n      key === 'style' ||\n      key === 'children' ||\n      key === 'k-html' ||\n      // & Clearly indicate that we do nothing when its undefined\n      attr[key] === undefined\n    ) {\n      continue;\n    }\n\n    // normal event handler\n    if (key.startsWith('on:')) {\n      const eventName = key.slice(3);\n      let current: EventListener | undefined;\n      setAttr(element, attr[key], (v) => {\n        if (current) {\n          element.removeEventListener(eventName, current);\n        }\n        current = v;\n        element.addEventListener(eventName, current!);\n      });\n      own(element, () => current && element.removeEventListener(eventName, current));\n      continue;\n    }\n\n    const handler = handlers[key] ?? defaultHandler;\n    setAttr(element, attr[key], (v) => handler(element, key, v));\n  }\n}\n","import type { JSX } from '../types/jsx.js';\nimport type { PrimaryContent } from '../types/h.js';\nimport type { Satisfied } from '../types/type-utils.js';\nimport { disposeOwnedSubtree } from './owner.js';\n\nexport const enum AType {\n  Null = 'kt-null',\n  Content = 'kt-content',\n  Fragment = 'kt-fragment',\n  For = 'kt-for',\n  If = 'kt-if',\n  Async = 'kt-async',\n}\n\n// # Main Anchor class\nconst rm = Comment.prototype.remove;\nexport abstract class KTAnchor extends Comment {\n  readonly atype: AType;\n\n  constructor(atype: AType) {\n    super();\n    this.atype = atype;\n  }\n\n  // TASK 对于此函数，需要让parentAppend的时候也能触发它，能做到吗？\n  abstract _appendTo(parent: Element): this; // parent.appendChild(this);\n\n  /**\n   * Remove the elements related but **not itself**.\n   * - Will be called when the anchor is removed.\n   */\n  abstract _remove(): void;\n\n  /**\n   * [WARN] Different from `_remove`, removes the elements **and itself**.\n   */\n  remove(): void {\n    this._remove.call(this);\n    disposeOwnedSubtree(this);\n    rm.call(this);\n  }\n}\n\n// # NullAnchor\n\nclass NullAnchor extends KTAnchor {\n  constructor() {\n    super(AType.Null);\n  }\n\n  _appendTo(_parent: Element): this {\n    return this;\n  }\n\n  _remove(): void {}\n}\n\n/**\n * A special anchor that renders nothing. Used for `KTIf` when the condition is false.\n * - There'is only one instance of `NullAnchor` in the whole app.\n */\nexport const NULL_ANCHOR = new NullAnchor() as JSX.Element & NullAnchor;\n\n// # Utils\n\nexport const isAnchor = (o: any): o is KTAnchor => typeof o?.atype === 'string';\n\n/**\n * @alias isAppendable Can be appended to DOM, has `_appendTo` method. Not necessarily a KTAnchor.\n */\nexport const isAppendable = (o: any): o is KTAnchor => typeof o?._appendTo === 'function';\n\nexport const _node = (c: PrimaryContent): Node =>\n  typeof (c as any)?.nodeType === 'number' ? (c as Node) : document.createTextNode(c as Satisfied);\n","import type { KTRawContent, PrimaryContent, SingleContent } from '../types/h.js';\nimport type { KTReactive } from '../reactable/reactive.js';\n\nimport { $isNull, $isArray } from '@ktjs/shared';\nimport { isAppendable, _node, AType, KTAnchor } from '../common/anchor.js';\nimport { disposeOwnedSubtree, markOwnerMounted } from '../common/owner.js';\nimport { isKT } from '../reactable/common.js';\nimport { static_cast } from 'type-narrow';\n\nclass KTContentAnchor extends KTAnchor {\n  /**\n   * When it is `Node[]`, it is created by `.map`.\n   * So `newValue !== _current` is definite.\n   */\n  _current!: this | Node | Node[];\n\n  _insertTo!: (parent: any) => void;\n\n  _remove!: () => void;\n\n  private _load(value: PrimaryContent | SingleContent[]) {\n    if ($isNull(value)) {\n      this._current = this;\n      this._insertTo = this._insertOneTo;\n      this._remove = this._removeOne;\n    } else if ($isArray(value)) {\n      this._current = [];\n      for (let i = 0; i < value.length; i++) {\n        if (!$isNull(value[i])) {\n          this._current.push(_toAppendable(value[i]));\n        }\n      }\n      this._insertTo = this._insertArrayTo;\n      this._remove = this._removeArray;\n    } else {\n      this._current = _node(value); // & _node is enough because this anchor only used for reactive...\n      this._insertTo = this._insertOneTo;\n      this._remove = this._removeOne;\n    }\n  }\n\n  constructor(r: KTReactive<PrimaryContent> | KTReactive<SingleContent[]>) {\n    super(AType.Content);\n\n    this._load(r.value);\n\n    r.listen((v) => {\n      this._remove.call(this);\n      this._load(v);\n      if (this.parentNode) {\n        this._insertTo.call(this, this.parentNode);\n      }\n    }, { owner: this });\n  }\n\n  _insertOneTo(parent: Node): void {\n    if (this._current !== this) {\n      parent.insertBefore(this._current as Node, this);\n      markOwnerMounted(this._current as Node);\n    }\n  }\n\n  _insertArrayTo(parent: Node): void {\n    if (this._current !== this) {\n      static_cast<Node[]>(this._current);\n      for (let i = 0; i < this._current.length; i++) {\n        parent.insertBefore(this._current[i], this);\n        markOwnerMounted(this._current[i]);\n      }\n    }\n  }\n\n  _removeOne(): void {\n    if (this._current !== this) {\n      disposeOwnedSubtree(this._current as Node);\n      (this._current as ChildNode).remove();\n    }\n  }\n\n  _removeArray(): void {\n    static_cast<ChildNode[]>(this._current);\n    for (let i = 0; i < this._current.length; i++) {\n      disposeOwnedSubtree(this._current[i]);\n      this._current[i].remove();\n    }\n  }\n\n  _appendTo(parent: Node): this {\n    parent.appendChild(this);\n    markOwnerMounted(this);\n    this._insertTo.call(this, parent);\n    return this;\n  }\n}\n\nexport const _toAppendable = (c: SingleContent | KTReactive<SingleContent[]>): Node => {\n  if (isKT(c)) {\n    return new KTContentAnchor(c);\n  } else if (isAppendable(c)) {\n    return c;\n  } else {\n    return _node(c);\n  }\n};\n\nexport function append(element: Element, c: KTRawContent): void {\n  if ($isNull(c)) {\n    return;\n  } else if ($isArray(c)) {\n    for (let i = 0; i < c.length; i++) {\n      append(element, c[i]);\n    }\n  } else {\n    _toAppendable(c)._appendTo(element);\n  }\n}\n","import type { JSX } from '../types/jsx.js';\nimport type { KTAttribute } from '../types/h.js';\nimport type { KTReactifyProps } from '../reactable/types.js';\n\nimport { static_cast } from 'type-narrow';\nimport { isRef } from '../reactable/common.js';\nimport { own } from '../common/owner.js';\n\nexport function applyKModel(element: JSX.Element, attr: KTReactifyProps<KTAttribute>) {\n  if (!('k-model' in attr)) {\n    return;\n  }\n\n  const model = attr['k-model'];\n  if (!isRef(model)) {\n    $throw('k-model value must be a KTRef.');\n  }\n\n  if (element.tagName === 'INPUT') {\n    static_cast<HTMLInputElement>(element);\n    if (element.type === 'radio' || element.type === 'checkbox') {\n      element.checked = !!model.value;\n      const change = () => (model.value = element.checked);\n      element.addEventListener('change', change);\n      own(element, () => element.removeEventListener('change', change));\n      model.listen((newValue: boolean) => (element.checked = !!newValue), { owner: element });\n    } else {\n      element.value = model.value ?? '';\n      const input = () => (model.value = element.value);\n      element.addEventListener('input', input);\n      own(element, () => element.removeEventListener('input', input));\n      model.listen((newValue: string) => (element.value = newValue), { owner: element });\n    }\n    return;\n  }\n\n  if (element.tagName === 'SELECT' || element.tagName === 'TEXTAREA') {\n    static_cast<HTMLSelectElement | HTMLTextAreaElement>(element);\n    element.value = model.value ?? '';\n    const change = () => (model.value = element.value);\n    element.addEventListener('change', change);\n    own(element, () => element.removeEventListener('change', change));\n    model.listen((newValue: string) => (element.value = newValue), { owner: element });\n    return;\n  }\n\n  $warn(`not supported element for k-model, nodeType: ${element.nodeType}`);\n}\n","import type { JSX } from '../types/jsx.js';\nimport type { HTMLTag, MathMLTag, SVGTag } from '@ktjs/shared';\nimport type { KTRawAttr, KTRawContent, HTML } from '../types/h.js';\n\nimport { applyAttr } from './attr.js';\nimport { append } from './content.js';\nimport { applyKModel } from './model.js';\n\nconst apply = <T extends JSX.Element>(element: T, attr: KTRawAttr, content: KTRawContent): T => {\n  if (attr !== null && typeof attr === 'object') {\n    applyKModel(element, attr);\n    applyAttr(element, attr);\n  }\n  return (append(element, content), element);\n};\n\n/**\n * Create an enhanced HTMLElement.\n * - Only supports HTMLElements, **NOT** SVGElements or other Elements.\n * @param tag tag of an `HTMLElement`\n * @param attr attribute object or className\n * @param content a string or an array of HTMLEnhancedElement as child nodes\n *\n * __PKG_INFO__\n */\nexport const h = <T extends HTMLTag | SVGTag | MathMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> =>\n  apply(document.createElement(tag), attr, content) as HTML<T>;\n\nexport const svg = <T extends SVGTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> =>\n  apply(document.createElementNS('http://www.w3.org/2000/svg', tag), attr, content) as HTML<T>;\n\nexport const mathml = <T extends MathMLTag>(tag: T, attr?: KTRawAttr, content?: KTRawContent): HTML<T> =>\n  apply(document.createElementNS('http://www.w3.org/1998/Math/MathML', tag), attr, content) as HTML<T>;\n","// Use microqueue to schedule the flush of pending reactions\n\nimport type { KTRef } from './ref.js';\n\nconst reactiveToOldValue = new Map<KTRef<any>, any>();\n\nlet scheduled = false;\n\nexport const _markMutation = (reactive: KTRef<any>) => {\n  if (!reactiveToOldValue.has(reactive)) {\n    reactiveToOldValue.set(reactive, reactive._value);\n\n    // # schedule by microqueue\n    if (scheduled) {\n      return;\n    }\n\n    scheduled = true;\n    Promise.resolve().then(() => {\n      scheduled = false;\n      reactiveToOldValue.forEach((oldValue, reactive) => {\n        try {\n          reactive.notify();\n        } catch (error) {\n          $error('KTScheduler:', error);\n        }\n      });\n      reactiveToOldValue.clear();\n    });\n  }\n};\n","import type { ChangeListener, KTListenOptions } from './types.js';\nimport type { KTComputed } from './computed.js';\n\nimport { $is } from '@ktjs/shared';\nimport { $createSubGetter, $createSubSetter, isRef } from './common.js';\nimport { KTReactive, KType, nextKid } from './reactive.js';\nimport { _markMutation } from './scheduler.js';\n\nexport class KTRef<T> extends KTReactive<T> {\n  readonly ktype: KType = KType.Ref;\n\n  constructor(_value: T) {\n    super(_value);\n  }\n\n  // ! Cannot be omitted, otherwise this will override `KTReactive` with only setter. And getter will return undefined.\n  get value() {\n    return this._value;\n  }\n\n  set value(newValue: T) {\n    if ($is(newValue, this._value)) {\n      return;\n    }\n    const oldValue = this._value;\n    this._value = newValue;\n    this._emit(newValue, oldValue);\n  }\n\n  /**\n   * Used to mutate the value in-place.\n   * - internal value is changed instantly, but the change listeners will be called in the next microtask.\n   */\n  get draft() {\n    _markMutation(this);\n    return this._value;\n  }\n\n  notify(): this {\n    return this._emit(this._value, this._value);\n  }\n\n  /**\n   * Derive a lighter sub-ref from this ref, using keys to access nested properties.\n   * - `ref.subref('a', 'b')` means a sub-ref to `this.value.a.b`. Change it will also change `this.value` and trigger the listeners.\n   * - `KTSubRef` is lighter than `KTRef`.\n   */\n  subref<K0 extends keyof T, K1 extends keyof T[K0], K2 extends keyof T[K0][K1]>(\n    this: KTRef<T>,\n    key0: K0,\n    key1: K1,\n    key2: K2,\n  ): KTSubRef<T[K0][K1][K2]>;\n  /**\n   * Derive a lighter sub-ref from this ref, using keys to access nested properties.\n   * - `ref.subref('a', 'b')` means a sub-ref to `this.value.a.b`. Change it will also change `this.value` and trigger the listeners.\n   * - `KTSubRef` is lighter than `KTRef`.\n   */\n  subref<K0 extends keyof T, K1 extends keyof T[K0]>(this: KTRef<T>, key0: K0, key1: K1): KTSubRef<T[K0][K1]>;\n  /**\n   * Derive a lighter sub-ref from this ref, using keys to access nested properties.\n   * - `ref.subref('a', 'b')` means a sub-ref to `this.value.a.b`. Change it will also change `this.value` and trigger the listeners.\n   * - `KTSubRef` is lighter than `KTRef`.\n   */\n  subref<K0 extends keyof T>(this: KTRef<T>, key0: K0): KTSubRef<T[K0]>;\n  /**\n   * Derive a lighter sub-ref from this ref, using keys to access nested properties.\n   * - `ref.subref('a', 'b')` means a sub-ref to `this.value.a.b`. Change it will also change `this.value` and trigger the listeners.\n   * - `KTSubRef` is lighter than `KTRef`.\n   */\n  subref(...keys: Array<string | number>): KTSubRef<any> {\n    if (keys.length === 0) {\n      $throw('At least one key is required to get a sub-ref.');\n    }\n    if (this._value === null || (typeof this._value !== 'object' && typeof this._value !== 'function')) {\n      $throw('Sub-ref only supports object-like ref values.');\n    }\n    return new KTSubRef(this, $createSubGetter(keys), $createSubSetter(keys));\n  }\n\n  dispose(): void {\n    this._listeners.clear();\n  }\n}\n\n/**\n * Create a reactive reference to a value. The returned object has a single property `value` that holds the internal value.\n * @param value listened value\n */\nexport const ref = <T>(value?: T): KTRef<T> => new KTRef(value as any);\n\n/**\n * @returns the pointed node itself\n */\nexport const $refToSelf = <T>(props: { ref?: KTRef<any> }, node: T): T => {\n  if (!('ref' in props)) {\n    return node;\n  }\n\n  if (isRef(props.ref)) {\n    return (props.ref.value = node);\n  }\n\n  $throw('props.ref must be a KTRef');\n};\n\n// # SubRef\n\nexport class KTSubRef<T> extends KTRef<T> {\n  readonly kid = nextKid();\n  readonly ktype: KType = KType.SubRef;\n  readonly source: KTRef<any>;\n\n  protected readonly _getter: (sv: KTReactive<any>['value']) => T;\n  protected readonly _setter: (s: object, newValue: T) => void;\n  protected readonly _listener: ChangeListener<any>;\n  protected readonly _listenerMap = new Map<ChangeListener<T>, ChangeListener<any>>();\n\n  constructor(\n    source: KTRef<any>,\n    getter: (sv: KTReactive<any>['value']) => T,\n    setter: (s: object, newValue: T) => void,\n  ) {\n    super(getter(source.value));\n    this.source = source;\n    this._getter = getter;\n    this._setter = setter;\n    this._listener = () => (this._value = getter(source.value));\n    source.listen(this._listener);\n  }\n\n  get value() {\n    return this._value;\n  }\n\n  set value(newValue: T) {\n    if (\n      this.source.value === null ||\n      (typeof this.source.value !== 'object' && typeof this.source.value !== 'function')\n    ) {\n      $throw('Sub-ref only supports object-like ref values.');\n    }\n    this._value = newValue;\n    this._setter(this.source._value, newValue);\n    this.source.notify();\n  }\n\n  listen(listener: ChangeListener<T>, options?: KTListenOptions | Node): this {\n    const sourceListener = (newValue: any, oldValue: any) => listener(this._getter(newValue), this._getter(oldValue));\n    this._listenerMap.set(listener, sourceListener);\n    this.source.listen(sourceListener, options);\n    return this;\n  }\n\n  unlisten(listener: ChangeListener<T>): this {\n    const sourceListener = this._listenerMap.get(listener);\n    if (sourceListener) {\n      this.source.unlisten(sourceListener);\n      this._listenerMap.delete(listener);\n    }\n    return this;\n  }\n\n  dispose(): void {\n    this.source.unlisten(this._listener);\n  }\n\n  get(...args: any[]): KTComputed<any> {\n    args.length > 0; // avoid lint error, and not let _args appear in index.d.ts\n    $throw('Sub-ref does not support get() method.');\n  }\n\n  /**\n   * Only use it for object's nested properties.\n   */\n  get draft() {\n    // Same implementation as `draft` in `KTRef`\n    _markMutation(this.source);\n    return this._value;\n  }\n}\n","import type { JSX } from '../types/jsx.js';\nimport type { SingleContent } from '../types/h.js';\nimport type { KTRef } from '../reactable/ref.js';\nimport type { Satisfied } from '../types/type-utils.js';\n\nimport { $refToSelf } from '../reactable/ref.js';\nimport { AType, KTAnchor } from '../common/anchor.js';\nimport { _toAppendable, append } from '../h/content.js';\nimport { disposeOwnedSubtree, markOwnerMounted } from '../common/owner.js';\n\nexport class KTFragmentAnchor extends KTAnchor {\n  _current: SingleContent[] = [];\n\n  constructor(children: SingleContent[]) {\n    super(AType.Fragment);\n    this._current = children.map(_toAppendable);\n  }\n\n  _appendTo(parent: Element): this {\n    append(parent, this._current);\n    markOwnerMounted(this);\n    return this;\n  }\n\n  _remove(): void {\n    for (let i = 0; i < this._current.length; i++) {\n      disposeOwnedSubtree(this._current[i] as Node);\n      (this._current[i] as ChildNode).remove();\n    }\n  }\n}\n\nexport interface FragmentProps {\n  ref?: KTRef<JSX.Element>;\n  children: SingleContent[];\n}\n\n/**\n * Fragment - Container component for managing arrays of child elements\n *\n * Features:\n * 1. Returns a comment anchor node, child elements are inserted after the anchor\n * 2. Supports reactive arrays, automatically updates DOM when array changes\n * 3. Basic version uses simple replacement algorithm (remove all old elements, insert all new elements)\n * 4. Future enhancement: key-based optimization\n *\n * Usage example:\n * ```tsx\n * const children = ref([<div>A</div>, <div>B</div>]);\n * const fragment = <Fragment children={children} />;\n * document.body.appendChild(fragment);\n *\n * // Automatic update\n * children.value = [<div>C</div>, <div>D</div>];\n * ```\n */\nexport function createFragment(props: FragmentProps): JSX.Element & KTFragmentAnchor {\n  return $refToSelf(props, new KTFragmentAnchor(props.children) as Satisfied);\n}\n","import type { JSXTag } from '@ktjs/shared';\nimport type { KTAttribute } from '../types/h.js';\nimport type { JSX } from '../types/jsx.js';\nimport { h } from '../h/index.js';\n\nexport const jsxh = (tag: JSXTag, props: KTAttribute): JSX.Element =>\n  (typeof tag === 'function' ? tag(props) : h(tag, props, props.children)) as JSX.Element;\n","import type { JSXCreator, MathMLCreator, SVGCreator } from '../types/jsx.js';\n\nimport { h, mathml as _mathml, svg as _svg } from '../h/index.js';\nimport { $refToSelf } from '../reactable/ref.js';\n\nimport { createFragment } from './fragment.js';\nimport { jsxh } from './common.js';\n\nexport const jsx: JSXCreator = (tag, props) => $refToSelf(props, jsxh(tag, props));\nexport const svg: SVGCreator = (tag, props) => $refToSelf(props, _svg(tag, props, props.children));\nexport const mathml: MathMLCreator = (tag, props) => $refToSelf(props, _mathml(tag, props, props.children));\n\nexport { svg as svgRuntime, mathml as mathmlRuntime };\n\n/**\n * Fragment support - returns an array of children\n * Enhanced Fragment component that manages arrays of elements\n */\nexport const Fragment = createFragment;\n\n/**\n * JSX Development runtime - same as jsx but with additional dev checks\n */\nexport const jsxDEV: typeof jsx = (...args) => {\n  // console.log('JSX DEV called:', args[0], Array.isArray(args[1]?.children));\n  // console.log('children', (args[1] as any)?.children);\n  return jsx(...args);\n};\n\n/**\n * JSX runtime for React 17+ automatic runtime\n * This is called when using jsx: \"react-jsx\" or \"react-jsxdev\"\n */\n// export const jsxs: typeof jsx = (...args) => {\n//   console.log('JSXS:', args[1]?.children?.length);\n//   return jsx(...args);\n// };\nexport const jsxs = jsx;\n\n// Export h as the classic JSX factory for backward compatibility\nexport { h, h as createElement };\n","import { $deepMatch, $is } from '@ktjs/shared';\nimport { KTReactive, KType } from './reactive.js';\nimport type { ChangeListener } from './types.js';\nimport { $createSubGetter, isReactive } from './common.js';\n\nexport class KTComputed<T> extends KTReactive<T> {\n  readonly ktype = KType.Computed;\n  private readonly _calculator: () => T;\n  private readonly _dependencies: Array<KTReactive<any>>;\n  private readonly _listener: () => void;\n  private _disposed = false;\n\n  private _recalculate(forced: boolean = false): this {\n    const newValue = this._calculator();\n    const oldValue = this._value;\n    if (!$is(oldValue, newValue) || forced) {\n      this._value = newValue;\n      this._emit(newValue, oldValue);\n    }\n    return this;\n  }\n\n  constructor(calculator: () => T, dependencies: Array<KTReactive<any>>) {\n    super(calculator());\n    this._calculator = calculator;\n    this._dependencies = dependencies;\n    this._listener = () => this._recalculate();\n\n    for (let i = 0; i < dependencies.length; i++) {\n      dependencies[i].listen(this._listener);\n    }\n  }\n\n  notify(): this {\n    return this._recalculate(true);\n  }\n\n  unlisten(listener: ChangeListener<T>): this {\n    super.unlisten(listener);\n    if (this._listeners.size === 0) {\n      this.dispose();\n    }\n    return this;\n  }\n\n  dispose(): void {\n    if (this._disposed) {\n      return;\n    }\n\n    this._disposed = true;\n    for (let i = 0; i < this._dependencies.length; i++) {\n      this._dependencies[i].unlisten(this._listener);\n    }\n\n    this._dependencies.length = 0;\n    this._listeners.clear();\n  }\n}\n\nconst C = KTComputed;\n\nKTReactive.prototype.map = function <U>(\n  this: KTReactive<unknown>,\n  getter: (value: unknown) => U,\n  dep?: Array<KTReactive<any>>,\n) {\n  return new C(() => getter(this._value), dep ? [this, ...dep] : [this]);\n};\n\nKTReactive.prototype.is = function (this: KTReactive<unknown>, o: unknown) {\n  return isReactive(o) ? new C(() => $is(this._value, o.value), [this, o]) : new C(() => $is(this._value, o), [this]);\n};\n\nKTReactive.prototype.match = function (this: KTReactive<object>, o: object) {\n  return isReactive(o)\n    ? new C(() => $deepMatch(this._value, o.value), [this, o])\n    : new C(() => $deepMatch(this._value, o), [this]);\n};\n\nKTReactive.prototype.get = function <T>(this: KTReactive<T>, ...keys: Array<string | number>) {\n  if (keys.length === 0) {\n    $throw('At least one key is required to get a sub-computed.');\n  }\n  const getter = $createSubGetter(keys);\n  return new C(() => getter(this._value), [this]);\n};\n\n/**\n * Create a computed value that automatically updates when its dependencies change.\n * @param calculator synchronous function that calculates the value of the computed. It should not have side effects.\n * @param dependencies an array of reactive dependencies that the computed value depends on. The computed value will automatically update when any of these dependencies change.\n */\nexport const computed = <T>(calculator: () => T, dependencies: Array<KTReactive<any>>): KTComputed<T> =>\n  new C(calculator, dependencies);\n","import type { KTReactive } from './reactive.js';\nimport { $emptyFn } from '@ktjs/shared';\nimport { isOwnerDead, own } from '../common/owner.js';\n\ninterface KTEffectOptions {\n  lazy: boolean;\n  onCleanup: () => void;\n  debugName: string;\n  owner: Node;\n}\n\n/**\n * Register a reactive effect with options.\n * @param effectFn The effect function to run when dependencies change\n * @param reactives The reactive dependencies\n * @param options Effect options: lazy, onCleanup, debugName\n * @returns stop function to remove all listeners\n */\nexport function effect(effectFn: () => void, reactives: Array<KTReactive<any>>, options?: Partial<KTEffectOptions>) {\n  const { lazy = false, onCleanup = $emptyFn, debugName = '', owner } = Object(options);\n\n  let active = true;\n\n  const run = () => {\n    if (!active || (owner && isOwnerDead(owner))) {\n      return;\n    }\n\n    // cleanup before rerun\n    onCleanup();\n\n    try {\n      effectFn();\n    } catch (err) {\n      $debug('effect error:', debugName, err);\n    }\n  };\n\n  // subscribe to dependencies\n  for (let i = 0; i < reactives.length; i++) {\n    reactives[i].listen(run, owner ? { owner } : undefined);\n  }\n\n  // auto run unless lazy\n  if (!lazy) {\n    run();\n  }\n\n  // stop function\n  const stop = () => {\n    if (!active) {\n      return;\n    }\n    active = false;\n\n    for (let i = 0; i < reactives.length; i++) {\n      reactives[i].unlisten(run);\n    }\n\n    // final cleanup\n    onCleanup();\n  };\n\n  if (owner) {\n    own(owner, stop);\n  }\n\n  return stop;\n}\n","import type { KTReactive } from './reactive.js';\nimport { isKT } from './common.js';\nimport { KTRef } from './ref.js';\n\n/**\n * @returns it as is when it's already `isKT`. Otherwise wraps it with `ref`.\n */\nexport const toKT = <T>(o: T | KTReactive<T>): KTReactive<T> => (isKT<T>(o) ? o : new KTRef(o as T));\n\nexport { KTRef, KTSubRef } from './ref.js';\nexport { ref } from './ref.js';\n\nexport { KTComputed } from './computed.js';\nexport { computed } from './computed.js';\n\nexport { KType } from './reactive.js';\nexport { KTReactive } from './reactive.js';\n\nexport { isKT, isRef, isSubRef, isRefExact, isComputed } from './common.js';\n\nexport { effect } from './effect.js';\nexport type * from './types.js';\n","import type { JSX } from '../types/jsx.js';\nimport type { Satisfied, Thenable } from '../types/type-utils.js';\nimport type { KTRef } from '../reactable/ref.js';\n\nimport { $refToSelf } from '../reactable/ref.js';\nimport { AType, KTAnchor } from '../common/anchor.js';\n\ninterface KTAsyncProps<P> {\n  /**\n   * Will be assigned as this Anchor\n   */\n  ref?: KTRef<JSX.Element>;\n\n  /**\n   * Display this when loading the async component.\n   */\n  skeleton?: JSX.Element;\n\n  /**\n   * Async Component(a promise holds an component)\n   */\n  component: (props: P) => Thenable<JSX.Element>;\n\n  props?: P;\n}\n\nclass KTAsyncAnchor<P> extends KTAnchor {\n  _skeleton: JSX.Element | this;\n  _promise: Thenable<JSX.Element>;\n  _version: number = NaN;\n  _current: Node;\n\n  constructor(props: KTAsyncProps<P>) {\n    super(AType.Async);\n    this._skeleton = props.skeleton ?? this;\n    this._promise = props.component(props.props ?? ({} as P));\n\n    // first render, the current node is the skeleton\n    this._current = this._skeleton;\n\n    this._promise.then((v) => {\n      this._skeleton.replaceWith(v);\n      this._current = v;\n    });\n  }\n\n  _remove(): void {\n    if (this._current !== this) {\n      (this._current as ChildNode).remove();\n    }\n  }\n\n  _appendTo(parent: Element): this {\n    parent.append(this, this._skeleton);\n    return this;\n  }\n}\n\nexport function KTAsync<P>(props: KTAsyncProps<P>): JSX.Element {\n  return $refToSelf(props, new KTAsyncAnchor<P>(props)) as Satisfied;\n}\n","import type { JSX } from '../types/jsx.js';\nimport type { KTReactive } from '../reactable/reactive.js';\nimport type { SingleContent } from '../types/h.js';\nimport type { Satisfied } from '../types/type-utils.js';\n\nimport { $identity, $isNull } from '@ktjs/shared';\nimport { AType, KTAnchor } from '../common/anchor.js';\nimport { _toAppendable } from '../h/content.js';\nimport { isKT } from '../reactable/common.js';\nimport { disposeOwnedSubtree, markOwnerMounted } from '../common/owner.js';\n\ntype KTForList<TList extends readonly unknown[]> = TList | KTReactive<TList>;\n\nexport class KTForAnchor<TList extends readonly unknown[]> extends KTAnchor {\n  _current!: Node[];\n  // EPIC key用于未来的优化\n  private _load(list: TList, key: Required<KTForProps<TList>>['key'], map: Required<KTForProps<TList>>['map']) {\n    const result: Node[] = [];\n    for (let i = 0; i < list.length; i++) {\n      if (!$isNull(list[i])) {\n        result.push(_toAppendable(map(list[i], i, list)));\n      }\n    }\n    this._current = result;\n  }\n\n  constructor(\n    list: KTForList<TList>,\n    key: Required<KTForProps<TList>>['key'],\n    map: Required<KTForProps<TList>>['map'],\n  ) {\n    super(AType.For);\n    if (isKT(list)) {\n      this._load(list.value, key, map);\n      list.listen((v) => {\n        this._remove();\n        this._load(v, key, map);\n        if (this.parentNode) {\n          this._insertTo(this.parentNode as Element);\n        }\n      }, { owner: this });\n    } else {\n      this._load(list, key, map);\n    }\n  }\n\n  _insertTo(parent: Element): void {\n    for (let i = 0; i < this._current.length; i++) {\n      this._current[i]._appendTo(parent);\n      markOwnerMounted(this._current[i]);\n    }\n  }\n\n  _appendTo(parent: Element): this {\n    this._insertTo(parent);\n    const result = parent.appendChild(this);\n    markOwnerMounted(this);\n    return result;\n  }\n\n  _remove(): void {\n    for (let i = 0; i < this._current.length; i++) {\n      disposeOwnedSubtree(this._current[i]);\n      (this._current[i] as ChildNode).remove();\n    }\n  }\n}\n\nexport interface KTForProps<TList extends readonly unknown[]> {\n  list: KTForList<TList>;\n  key?: (item: TList[number], index: number, array: TList) => any;\n  map?: (item: TList[number], index: number, array: TList) => SingleContent;\n}\n\nexport type KTForElement<TList extends readonly unknown[] = readonly unknown[]> = JSX.Element & KTForAnchor<TList>;\n\n/**\n * KTFor - List rendering component with key-based optimization\n * Returns a Comment anchor node with rendered elements in anchor.list\n */\nexport function KTFor<TList extends readonly unknown[] = readonly unknown[]>(\n  props: KTForProps<TList>,\n): KTForElement<TList> {\n  return new KTForAnchor(props.list, props.key ?? $identity, props.map ?? ($identity as Satisfied)) as Satisfied;\n}\n","import type { JSXTag } from '@ktjs/shared';\nimport type { JSX } from '../types/jsx.js';\nimport type { KTAttribute } from '../types/h.js';\nimport type { Satisfied } from '../types/type-utils.js';\n\nimport { h } from '../h/index.js';\nimport { isKT, type KTReactive } from '../reactable/index.js';\nimport { jsxh } from './common.js';\nimport { AType, KTAnchor } from '../common/anchor.js';\nimport { disposeOwnedSubtree, markOwnerMounted } from '../common/owner.js';\n\ntype PropGetter = () => KTAttribute;\n\nexport class KTIfAnchor extends KTAnchor {\n  private _condition: KTReactive<any>;\n  private _current: Node | this;\n  private _if: () => Node;\n  private _else: () => Node;\n\n  private _createRenderer(tag: JSXTag, props: PropGetter): () => Node {\n    if (typeof tag === 'function') {\n      return () => tag(props());\n    } else {\n      return () => {\n        const p = props();\n        return h(tag, p, p.children);\n      };\n    }\n  }\n\n  constructor(cond: KTReactive<any>, a: JSXTag, pa: PropGetter, b?: JSXTag, pb?: PropGetter) {\n    super(AType.If);\n    this._condition = cond;\n    this._current = this;\n    this._if = this._createRenderer(a, pa);\n    this._else = b === undefined ? () => this : this._createRenderer(b, pb!);\n\n    cond.listen((v) => {\n      const old = this._current;\n      this._current = v ? this._if() : this._else();\n      if (old !== this) {\n        disposeOwnedSubtree(old);\n      }\n      (old as ChildNode).replaceWith(this._current);\n      markOwnerMounted(this._current);\n    }, { owner: this });\n  }\n\n  _appendTo(parent: Element): this {\n    this._current = this._condition.value ? this._if() : this._else();\n    if (this._current !== this) {\n      this._current._appendTo(parent);\n      markOwnerMounted(this._current);\n    }\n    const result = parent.appendChild(this);\n    markOwnerMounted(this);\n    return result;\n  }\n\n  _remove(): void {\n    if (this._current !== this) {\n      disposeOwnedSubtree(this._current);\n      (this._current as ChildNode).remove();\n    }\n  }\n}\n\n/**\n * @param cond Can be reactive or static.\n */\nexport function KTIf(cond: any, tagIf: JSXTag, pIf: PropGetter, tagElse?: JSXTag, pElse?: PropGetter): JSX.Element {\n  if (isKT(cond)) {\n    return new KTIfAnchor(cond, tagIf, pIf, tagElse, pElse) as JSX.Element & KTIfAnchor;\n  } else if (cond) {\n    return jsxh(tagIf, pIf());\n  } else {\n    return tagElse === undefined ? (null as Satisfied) : jsxh(tagElse, pElse!());\n  }\n}\n"],"x_google_ignoreList":[2],"mappings":"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"}